Odczyt Winchestera

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Jednym z nośników danych zapisanych na MERZE-400, które przetrwały do dziś, jest dysk Winchester zamontowany w minikomputerze znajdującym się w Muzeum Techniki w Warszawie. Minikomputer ten wypożyczony został Muzeum przez Politechnikę Gdańską, gdzie działał w Instytucie Okrętowym jako maszyna, na której m.in. zespół rozwijający CROOK-a pracował nad swoim systemem. Sam fakt, że dysk zawiera dane zapisane na MERZE-400 czyni go interesującym, a źródło pochodzenia wartość nośnika tylko podnosi, dając nadzieję na pozyskanie niezwykle cennych danych.

Winchester w zewnętrznej obudowie

Muzeum umożliwiło dostęp do dysku i przeprowadzenie prób odczytu jego zawartości, za co autor składa podziękowania. Cieszy fakt, że rola Muzeum nie ogranicza się jedynie do gromadzenia zbiorów, a częścią misji jest również ich udostępnianie do prac, które mają na celu choć częściowe przywrócenie eksponatów do życia.

Nośnik danych

 
NEC D5126

Nośnik danych to dysk NEC D5126 z interfejsem ST-506. Jego podstawowe parametry to:

  • 20 MB pojemności po sformatowaniu
  • 2 talerze
  • 4 głowice w zespole poruszanym za pomocą silnika krokowego
  • 615 cylindrów
  • 17 sektorów/ścieżkę
  • brak autoparkowania (ścieżka parkingowa: 664)
  • transfer: 5Mbit/s

Dysk znajduje się w zewnętrznej 19" obudowie, która oprócz niego zawiera również napęd dysków elastycznych 5,25". Elementy te podłączone są osobnymi kablami sygnałowymi do odpowiednich kontrolerów procesora peryferyjnego MULTIX. Poza nimi, w obudowie zamontowany jest jedynie zasilacz +5/+12V oraz duży wentylator z tyłu obudowy.

Kontroler dysku zbudowany przez Amepol opiera się na układzie Intel C82062 zaprojektowanym dla rodziny komputerów z procesorami 80186. Realizuje on zapis i odczyt danych w standardzie MFM, używanym na początku istnienia interfejsu ST-506, zastąpionym później przez RLL.

Pierwsze próby odczytu

 
Kontroler MFM WD1006V-MM1

Amepol używał w swoich konstrukcjach standardowych komponentów, używanych również w początkach ery komputerów PC. Pierwszym nasuwającym się sposobem odczytu zawartości dysku było więc użycie odpowiedniego kontrolera dla PC/XT lub AT. Takie komponenty są wciąż dostępne, wymagają jedynie komputera wyposażonego w szynę ISA (8 lub 16-bit, w zależności od typu kontrolera). Złącza ISA obecne są jeszcze w stosunkowo nowych płytach głównych, co pozwala na użycie w miarę współczesnego komputera PC. Zarówno kontrolery MFM jak i dyski tego typu są wciąż obsługiwane przez system operacyjny GNU/Linux, tak więc zbudowanie kompletnego środowiska uruchomieniowego było jak najbardziej możliwe.

Próba odczytu dysku przy użyciu takiego właśnie zestawu z kontrolerem MFM Western Digital WD1006V-MM1 zakończyła się niepowodzeniem. Dysk okazał się być sprawny mechanicznie i elektrycznie, ale kontroler raportował jedynie błędy odczytu.

Początkowo nie był znany układ, którego użył Amepol do konstrukcji interfejsu dla Winchestera, istniało więc prawdopodobieństwo, że układ ten realizował zapis w standardzie RLL. Przeprowadzone zostały więc próby odczytu z dwoma różnymi kontrolerami RLL: Western Digital WD1002A-27X oraz WD1003-RA2, zakończone również niepowodzeniem.

Uniwersalny czytnik dysków Winchester

Ponieważ próby odczytu za pomocą kontrolera MFM WD1006V-MM1 nie przyniosły pozytywnego rezultatu, należało założyć, że format zapisu danych jest inny od standardu MFM dla dysków ST-506 obsługiwanych przez użyty kontroler. Jest to prawdopodobne, ponieważ na początku ery tego interfejsu kontrolery różnych producentów nie zawsze były ze sobą w pełni kompatybilne. Poszukiwanie odpowiedniego, kompatybilnego kontrolera mogłoby okazać się zadaniem trwającym wieczność, potrzebne więc było alternatywne rozwiązanie, które pozwoliłoby odczytać dane niezależnie od:

  • użytej metody zapisu,
  • formatu ścieżki i sektora,
  • stanu danych (ewentualne uszkodzenia sektorów).

Takie rozwiązanie istnieje dzięki temu, że interfejs ST-506 pozwala na dostęp do danych zapisanych na powierzchni nośnika na bardzo niskim poziomie. Sygnał danych wyprowadzony z dysku jest niemalże wprost sygnałem pochodzącym z głowic, bez żadnej obróbki logicznej. Można więc przeprowadzić procedurę, która polegałaby na:

  1. Zarejestrowaniu na nośniku zewnętrznym sygnału z głowic dysku (kolejno dla każdej ścieżki i głowicy).
  2. Analizie zapisu i odczytaniu z niego właściwych danych bajtowych.

Praktyczna realizacja zadania polega na:

  1. Zbudowaniu urządzenia, które będzie potrafiło:
    • zgodnie ze specyfikacją ST-506 sterować dyskiem (pozycjonować i wybierać głowice, odczytywać stan dysku)
    • próbkować sygnał danych z odpowiednio wysoką częstotliwością
    • komunikować się z komputerem PC (otrzymywać polecenia, raportować stan dysku, przesyłać próbkowane dane)
  2. Napisaniu oprogramowania (firmware) takiego urządzenia
  3. Napisaniu oprogramowania realizującego proces obrazowania całego dysku
  4. Przeanalizowaniu otrzymanego zapisu w poszukiwaniu sposobu i formatu zapisu danych
  5. Napisaniu oprogramowania analizującego fizyczny obraz dysku i przygotowującego bajtowy obraz wynikowy

Realizacja

 
"Czytnik" dysków Winchester

Dyski z interfejsem ST-506 wyposażone są w dwa złącze krawędziowe: jedno służy do przesyłania sygnałów sterujących, drugie do przesyłania danych. Wszystkie sygnały sterujące zrealizowane są w standardzie TTL z logiką ujemną (aktywne 0). Sygnały na liniach danych, zarówno odczytu jak i zapisu, to różnicowonapięciowy RS-422.

Urządzenie zostało zaimplementowane w oparciu o cztery główne elementy:

  • AVR/Atmega162 z zewnętrznym oscylatorem 16MHz w roli kontrolera dysku
  • Texas Instruments SN75176BP użyty do konwersji sygnału RS-422 do poziomów TTL
  • Programowalny analizator stanów logicznych użyty jako sampler sygnału danych pracujący z częstotliwością 100MHz
  • FTDI FT232RL jako interfejs USB dla kontrolera, do komunikacji z PC
 
Schemat blokowy "czytnika" dysków Winchester

Zarówno kontroler jak i sampler podłączone są do komputera PC za pomocą złącz USB. Kontroler widziany jest jako urządzenie za portem szeregowym, sampler używa własnego protokołu transmisji i jest dostępny dzięki bibliotece dostarczonej przez producenta. W całym systemie są trzy elementy programowe:

  1. WDC (Winchester Disk Controller, C) - oprogramowanie mikrokontrolera AVR, tłumaczące komendy odbierane z portu szeregowego na sekwencje sygnałów sterujących dyskiem i zapewniające jego obsługę zgodnie z wymaganiami standardu
  2. WDS (Winchester Data Sampler, C++) - oprogramowanie automatyzujące proces obrazowania dysku, realizuje dwie funkcje:
    • komunikuje się kontrolerem w celu wybrania dysku, ustalenia pozycji głowic, wybrania głowicy i odczytu stanu napędu
    • komunikuje się z samplerem inicjalizując proces obrazowania ścieżki i zapisuje obrazy kolejnych ścieżek na dysk komputera
  3. WDA (Winchester Data Analyzer, Python) - umożliwia przeprowadzenie analizy fizycznego obrazu dysku i zapisuje bajtowy obraz danych

Odczyt dysku

Proces obrazowania dysku odbył się w Muzeum Techniki i tym razem zakończył powodzeniem. Wykonanie pełnego obrazu dysku trwało około 10 minut i dawało w wyniku około 500MB danych z zapisem sygnału na wszystkich ścieżkach dysku. Tak duży rozmiar (w porównaniu do 20 MB pojemności dysku) wynika z trzech faktów:

  • 20 MB to powierzchnia dysku po jego sformatowaniu. Rzeczywista ilość danych na ścieżce jest powiększona o nagłówki sektorów i inne struktury organizujące zapis
  • Jeden bit danych zapisywany jest za pomocą dwóch bitów zapisu MFM (zegar i dane)
  • Sygnał próbkowany był z częstotliwością dziesięciokrotnie wyższą, niż zegar użyty do zapisu MFM

Operacja obrazowania została powtórzona kilkunastokrotnie, dając w sumie prawie 7 GB danych do późniejszej analizy. Podczas kolejnych powtórzeń zmieniały się warunki odczytu, co zwiększało prawdopodobieństwo uzyskania poprawnego obrazu:

  • pierwszy odczyt robiony był na "zimnym" dysku, kolejne na coraz bardziej "rozgrzanym" (zmiany temperatury mogą mieć wpływ zarówno na mechanikę jak i elektronikę napędu),
  • następujące po sobie sesje były przeprowadzane przy ruchu głowic naprzemiennie do wewnątrz i na zewnątrz powierzchni dysku (nieprecyzyjności pozycjonowania głowicy mogły dać lepsze rezultaty w jednym bądź drugim przypadku),
  • część odczytów została wykonana po serii gwałtownych zmian pozycjonowania głowicy (pozycja zmieniana o kilkaset cylindrów w przód i w tył, powody jak wyżej).

Następnym krokiem było poznanie sposobu zapisu oraz formatu ścieżki i sektora, użytych przez Amepol. Krok ten ułatwił graficzny analizator zapisu, pokazujący spróbkowany sygnał z nałożonymi na niego wynikami działania algorytmów analizujących jego przebieg.

 
Graficzny interfejs analizatora zapisu MFM


Z jego pomocą możliwe było dobranie optymalnych parametrów pracy algorytmów (dających później poprawne wyniki analizy dla wszystkich ścieżek). Analiza pokazała, że na dysku użyty został zapis MFM zgodny ze standardem używanym w napędach ST-506. Powody, dla których nie udała się pierwsza próba odczytu były dwa, z których pierwszy był pewną przyczyną niepowodzenia:

  1. Amepol sformatował dysk używając 16 sektorów na ścieżkę, a nie 17, jak mówi specyfikacja dysku.
  2. Układ Intel C82062 użyty przez Amepol korzysta z 16-bit CRC do liczenia zarówno sum kontrolnych nagłówków sektorów, jak i danych w sektorze. Kontroler WD1006V-MM1 używał 16-bit CRC dla nagłówków, ale dane były już zabezpieczane 32-bit CRC.

Po skonfigurowaniu analizatora (WDA), przeprowadzona została kompletna analiza obrazu, której kroki obejmowały (w nawiasie podane odpowiednie elementy widoczne na powyższym rysunku):

  • odtworzenie zegara, który został użyty przy zapisie (jasnoniebieskie znaczniki pod przebiegiem),
  • odnalezienie znaczników MFM (fragment sygnału oznaczony fioletowym tłem),
  • określenie położenia nagłówka sektora i danych zapisanych w sektorze (rysunek przedstawia kompletny nagłówek sektora)
  • pogrupowanie bitów sygnału MFM w pary [zegar, dane] (jasno- i ciemnoszare tło pod przebiegiem)
  • rozkodowanie sygnału MFM do bitów i bajtów stanowiących treść struktury sektora ("0" i "1" małą czcionką oznaczają kolejne bity zegara i danych MFM, "0" i "1" dużą czcionką bity danych, złożone niżej w bajty o podanej dużą czcionką wartości i odpowiadających im znakach ASCII)
  • odczytanie nagłówków sektorów, zweryfikowanie sum kontrolnych nagłówków, określenie ich adresów (dwie pionowe zielone linie oznaczają zgodną 16-bit sumę CRC)
  • odczytanie danych zapisanych w sektorach, zweryfikowanie sum kontrolnych
  • złożenie zawartości sektorów w bajtowy obraz ścieżki
  • złożenie bajtowych obrazów ścieżek w kompletny obraz dysku

Zawartość dysku

Dysk zawiera trzy obszary danych:

  1. Pierwszy cylinder (4*16 sektorów) jest niedostępny dla systemu MERA-400. Używa go wyłącznie procesor peryferyjny jako obszar do relokacji danych z uszkodzonych sektorów.
  2. Pozostała przestrzeń dostępna jest dla minikomuptera i zawiera dwa obszary dyskowe zorganizowane przez system operacyjny CROOK-5:
    • Etykieta "A" (5 MB) - obszar systemowy
    • Etykieta "C" (15 MB) - obszar roboczy dla użytkowników systemu

Obszar "A"

Obszar zawiera 332 zbiory, przede wszystkim binaria dla MERY-400:

  • zbiory BOOT i BOOTL - dwa podstawowe elementy procesu ładowania systemu operacyjnego
  • jądra systemu operacyjnego CROOK-5 w kilku wersjach: 62F, N8D, P8E, P8F
  • kilkadziesiąt narzędzi dla systemu CROOK
  • assemblery: ASSK, ASSM, GASS
  • interpreter BASIC-a
  • kompilator C
  • FORTRAN
  • PASCAL
  • Modula-2
  • translator CEMMA
  • symulator systemu operacyjnego SOM-3

Obszar "C"

Obszar zawiera 1243 zbiory użytkowników, które można podzielić na kilka grup. Poniższa lista nie jest kompletna, pokazuje tylko zakres danych, które dzięki odczytaniu dysku stały się dostępne:

  1. Binaria
    • system testowy AMETEX Amepolu
    • konfigurator CROOK-5 - ostatni program napisany przez zespół rozwijający CROOK-a
    • niektóre narzędzia systemu UNIX w wersji dla MERY-400
  2. Dokumentacja
    • opisy systemu operacyjnego CROOK
    • opisy narzędzi systemowych
    • podręczniki programowania w językach LISP, ALGOL, C, ASSM, FORTRAN, ModRAL, PASCAL
    • opis dBASE III PLUS
    • opis procesorów MULTIX i PLIX: instrukcje instalacji, styk z MERĄ-400, opisy protokołów komunikacji
  3. Teksty różnych autorów traktujące o rozwoju CROOK-a i MERY-400, m.in.:
    • "Kierunki rozwoju systemu operacyjnego CROOK dla minikomputera MERA-400" – Z. Czerniak, W.J. Martin, M. Nikodemski
    • "Szybkie łącze dla lokalnej sieci minikomputerów MERA-400" – K. Anzelewicz, W. Bojarski, Z. Czerniak
    • "Systemy operacyjne CROOK-4 i CROOK-5 dla minikomputera MERA-400" – Z. Czerniak
    • "Łącze międzykomputerowe oparte na interface V24 dla minikomputera MX-16 (MERA-400)" – Z. Czerniak, M. Nikodemski
    • "Urządzenie sprzęgające minikomputery MERA-400" – Z. Czerniak
    • "System operacyjny sterujący lokalną siecią minikomputerów MERA-400" – W. Bojarski, Z. Czerniak
  4. Źródła
    • biblioteki fortranowe
    • biblioteki C
    • źródła narzędzi UNIX-a (C)
    • źródła narzędzi systemowych CROOK-5 (assembler)
    • źródła oprogramowania procesorów MULTIX i PLIX (firmware) (assembler 8085)
    • źródła systemu CROOK-5 w wersjach N76 i N8F oraz zbiory poprawek do wersji P76 i P8F (assembler)

Źródło: Opracowanie własne