System Sterowania radioteleskopu RT15

System sterowania radioteleskopu RT15
na początku lat 1980-tych

W pierwszych latach użytkowania 15-metrowego radioteleskopu (RT15 zwanego też RT3) do jego sterowania był wykorzystywany polskiej produkcji minikomputer Mera 302. Urządzenie to służyło także (zamiennie, jako maszyna licząca w tzw. Systemie Biurowym oferującym symboliczny język programowania) do rozmaitych innych zadań, m.in. do opracowywania codziennych obserwacji Słońca na częstości 127 MHz.

System sterowania RT15 został napisany w języku maszynowym (wewnętrznym) minikomputera składającym się z około 30 elementarnych poleceń 8-bitowego procesora. Z czasem obsługa sterowania ruchem teleskopu została poszerzona o obsługę innych urządzeń zewnętrznych (w tym pamięci taśmowej i plottera XY) i do synchronicznego z okresem pulsara zbierania i wyświetlania danych z takich radioźródeł. Szybkość tej maszyny była taka, że wykonanie najprostszych poleceń (np. wyzerowanie akumulatora) zajmowało 2 mikrosekundy (zatem, porównując do dzisiejszych gigahercowych PC, miał on szybkość rzędu 1 MHz).


Fot. 1: System sterowania RT15 na dziurkowanej taśmie. Początkowa część taśmy zawiera tzw. bootstrap (na zdjęciu widać jego pełny kod stanowiący pętlę inicjującą automatyczne wczytywanie: 616 400 000 711 103 702 400 000), który wprowadzało się z czytnika ręcznie, za pomocą kluczy na pulpicie minikomputera, na początek strony 000 pamięci operacyjnej (PAO). Po uruchomieniu, programik ten już sam 'wciągał' (stąd nazwa bootstrap) dalsze słowa (bajty) z taśmy, gdzie znajdowały się modyfikacje bootstrapu oraz właściwy program wczytujący (zapisywany na końcowych stronach PAO), który to dopiero wczytywał sam system sterowania. Tak przemyślny sposób wczytywania podyktowany był potrzebą możliwie maksymalnego ułatwienia życia użytkownikowi – by wczytać system, musiał ręcznie wprowadzić na początek PAO jedynie 8 pierwszych bajtów z taśmy (mógł 'z rozpędu' wprowadzić nawet do 5 słow więcej, gdyż 5 poleceń po bootstrapie to 703, czyli "nie rób nic").

Poniżej pokazano wybrane fragmenty oryginalnych roboczych wydruków kodów źródłowych minimalnego systemu z tamtego okresu. Całość kodu maszynowego w końcowej wersji systemu pełnego zajmowała około 3/4 pamięci operacyjnej, PAO, czyli około 190 z 256 32-bajtowych stron. Dość wyczerpująca dokumentacja jednej z wcześniejszych wersji tego pełnego systemu została udostępniona gdzie indziej w postaci schematów blokowych i prawie całego kodu maszynowego.


Skan 1: Kod maszynowy w obszarze pamięci operacyjnej zawierającej początek (miejsce startowe) jednej z prostszych wersji systemu sterowania oraz blokowy schemat operacji. W tabelce kolejne miejsca pamięci operacyjnej (PAO) występują w wierszach (na stronach) od lewej do prawej – w tej też kolejności procesor wykonywał podane tu polecenia (ich spis zawiera Tabela 1). Cały taki kod za pierwszym razem był wprowadzany do PAO ręcznie, bajt po bajcie (zachowała się też inna wersja tego kodu z wydrukiem w postaci tabel ze stronami PAO w kolumnach). Na powyższym schemacie blokowym adresy PAO sa zapisane w postaci dwucyfrowego miejsca na stronie i trzycyfrowego numeru strony w kodzie 8b (ósemkowobinarnym). Np. 26-405 oznacza miejsce 22 (= 2*8 + 6*1) i stronę 133 (= 4*32 + 0*8 + 5*1), czyli 4278 (= 133*32 + 22) bajt PAO (która miała całkowitą pojemność 8192 bajty).



Skan 2 i 3: Elementarne procedury systemu sterowania (działania arytmetyczne, konwersja kodowania między systemami: binarnym i dziesiętnym, czytanie i przepisywanie współrzędnych). W tych tabelkach kolejne miejsca PAO występują w kolumnach (na stranach) od góry do dołu.

Tabela 1: Wykaz poleceń procesora minikomputera Mera 302. Zapis Ao oznacza zerowy bit 8-bitowego akumulatora (to najbardziej znaczący bit). Wskaźniki to: CI – skoku warunkowego, P – przelania akumulatora (po operacji przesuwania A), Z – strony zerowej oraz S – aktualnej strony (dla rozkazów od 0## do 3## i 5##).

Razkaz  Znaczenie
0##     Dodaj do akumulatora (A) zawartość miejsca ## PAO;
           jeśli wystąpił nadmiar, CI = 0; przelanie, P = 1
1##     Zapisz A w miejscu ## i zeruj A,
2##     Mnóż logicznie A przez zawartość miejsca ##
3##     Dodaj 1 do miejsca ##; jeśli ## = 0, ustaw CI = 1 
4## STR Jeśli CI = O, skocz do miejsca ## na stronie STR
5##     Wykonaj rozkaz w miejscu ##
6##     Zainicjuj operację wejścia/wyjścia jednostki steru-
           jącej numer ##
700     Przerwanie programowe 
701     Zeruj akumulator (A = 0)
702     Zgaś wskaźnik CI (CI = 0)
703     Nic nie rób
704     Powróć z przerwania
705     Pamiętaj ślad
706     Powróć według śladu
710     Zgaś wskaźnik Z (Z = 0)
711     Zapal wskaźnik Z (Z = 1)
712     Prześlij A do S (S — rejestr strony)
713       "      S do A
714     Czytaj klucze (KL) z pulpitu minikomputera
715     Jeśli P = 1, ustaw CI = 0, inaczej CI = 1
716     Czekaj na przerwanie
717     S = S + 1
720     Neguj akumulator
721     Dodaj 1 do A i ustaw CI i P jak w poleceniu 0##
722     A = A + P
725     Przesuń A cyklicznie w lewo
724       "     A w lewo (A = 2A), P = Ao
725       "     A w prawo (A = A/2), Ao = P, P = 0
726     Jeśli A = 0, ustaw CI = 0, inaczej CI = 1
727       "   Ao = 0, ustaw CI = 0, inaczej CI = 1
730 OBE S = OBE
731     Ustaw maski przerwań według miejsca 04 na str. 000
732 MSK Testuj A z MSK; jeśli A = 0, CI = 0, inaczej CI = 1
734     Stop




Strona utworzona dn. 6 września 2011 r.