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 jego pochodzenia jego wartość tylko podnosi, dając nadzieję na pozyskanie niezwykle cennych danych.

Winchester w zewnętrznej obudowie

Nośnik danych

 
NEC D5126

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

  • 5.25"
  • pojemność: 20 MB
  • 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 PLIX. 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 komputerów z procesorami 80186. Realizuje on zapis i odczyt danych w standardzie MFM, który jako pierwszy używany był dla dysków z interfejsem ST-506.

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 idealnie 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 tym interfejsem jest niemalże wprost sygnałem pochodzącym z głowic dysku, 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, aby ustrzec się przed ewentualnymi błędami odczytu. Podczas kolejnych prób zmieniały się warunki odczytu, co zwiększało prawdopodobieństwo powodzenia:

  • 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),
  • dane były odczytywane 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łatwia 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 dalej w bajty o podanej dużą czcionką wartości)
  • 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 PLIX 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 pliki, 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-5
  • 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 pliki użytkowników, które można podzielić na kilka grup. Poniższa lista nie jest kompletna, pokazuje tylko zakres danych, który dzięki odczytaniu dysków stał się dostępny:

  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
    • opis systemu operacyjnego CROOK-5
    • 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 łatki do wersji P76 i P8F (assembler)