MULTIX od środka: Różnice pomiędzy wersjami
(→I/O) |
(→I/O) |
||
Linia 77: | Linia 77: | ||
| 13 || W || CZYTP || Rozkaz "czytaj z MERA-400" | | 13 || W || CZYTP || Rozkaz "czytaj z MERA-400" | ||
|- | |- | ||
| 14 || W || INTR0 || Rozkaz "zgłoś przerwanie do MERA-400 (procesor 0) | | 14 || W || INTR0 || Rozkaz "zgłoś przerwanie do MERA-400" (procesor 0) | ||
|- | |- | ||
| 15 || W || INTR1 || Rozkaz "zgłoś przerwanie do MERA-400 (procesor 1) | | 15 || W || INTR1 || Rozkaz "zgłoś przerwanie do MERA-400" (procesor 1) | ||
|- | |- | ||
| 0x38 || W || KOPRQ || pokwitowanie OPRQ | | 0x38 || W || KOPRQ || pokwitowanie OPRQ |
Wersja z 13:04, 12 mar 2014
Dokumentacja techniczna MULTIX-a prawdopodobnie dziś już nie istnieje. Niniejsza strona jest próbą odtworzenia tego, jak MULTIX działał i jaka była jego architektura.
Sprzęt
MULTIX to komputer zbudowany w oparciu o procesor Intel 8085, z programem sterującym (firmware) zapisanym w pamięci ROM. Z punktu widzenia MULTIX-a, MERA-400 jest jednym z jego urządzeń zewnętrznych. Komunikacja z nią odbywa się przy użyciu przerwania (zgłoszenie polecenia wysyłane przez MERĘ-400) i DMA (wymiana danych między MERĄ-400 a MULTIX-em).
- CPU: Intel 8085
- Timer: Intel 8253
- I/O równoległe: Intel 8255
- I/O szeregowe: Intel 8251
- I/O floppy:
- kontroler Zilog Z0765A08PSC + Intel 8257
- pamięć Hitachi HM6264LP 8KB static RAM (150ns)
- I/O winchester:
- kontroler Intel C82062
- pamięć: Hitachi HM6264LP 8KB static RAM (150ns)
- DMA: Intel 8257
- kanał 1: MERA-400
- kanał 2: taśma
- kanał 3: autoload
- ROM (firmware) 24KB?
- RAM 16KB? + 8KB (floppy) + 8KB (winchester)
Mapa pamięci
Adres | Nazwa | Zawartość |
---|---|---|
0x0000-0x5fff | ROM? (24KB) | |
0x6000 | RAM | RAM (16KB?) |
0x6000+154 | STACK | koniec stosu, początek dostępnej RAM |
0xa000-0xbfff | RAMW8 | RAM floppy dysku (8KB) |
0xc000-0xdfff | RAMW6 | RAM winchestera (8KB) |
0xff00-0xffff | AD | we/wy widziane jako pamięć |
I/O
Adres | R/W | Nazwa | Znaczenie |
---|---|---|---|
MERA-400 | |||
0-1 | R | DANEI | dane odczytane z MERA-400 (MSB, LSB) |
0-1 | W | DANEO | dane do przesłania rozkazem "pisz do PAO" (MSB, LSB) |
2-3 | R | PSARG | argument polecenia sterującego (MSB, LSB) |
2-3 | W | ADRES | adres w PAO MERA-400 (MSB, LSB) |
4 | R | POLST | specyfikacja polecenia sterującego |
4 | W | NBPN | nr bloku PAO, nr procesora |
5 | R | POLST+1 | ID linii |
5 | W | KWINT | pokwitowanie przerwań |
6 | W | SPECI | specyfikacja przerwania do MERA-400 |
7 | W | SPECI+1 | specyfikacja przerwania: numer linii |
8 | W | KOTRA | Rozkaz "koniec transmisji" |
10 | W | PISZB | Rozkaz "pisz blok przez DMA do MERA-400" |
11 | W | CZYTB | Rozkaz "czytaj blok przez DMA z MERA-400" |
12 | W | PISZP | Rozkaz "pisz do MERA-400" |
13 | W | CZYTP | Rozkaz "czytaj z MERA-400" |
14 | W | INTR0 | Rozkaz "zgłoś przerwanie do MERA-400" (procesor 0) |
15 | W | INTR1 | Rozkaz "zgłoś przerwanie do MERA-400" (procesor 1) |
0x38 | W | KOPRQ | pokwitowanie OPRQ |
0x4e | W | WUUPG | ustawienie maski przerwań 'INTR' |
Timer | |||
0x50 | RW | CLOCK | zegar |
0x51 | RW | CLDZI | dzielnik zegara (we=1536kHz) |
0x52 | RW | CLUSA | dzielnik dla USART (we=1536kHz, wy=153,6kHz) |
DMA | |||
0x64-0x65 | RW | DMAD1 | kanał 1: rejestr adresu |
0x66-0x67 | RW | DMCO1 | kanał 1: licznik, typ pracy |
0x68-0x69 | RW | DMAD2 | kanał 2: rejestr adresu |
0x6a-0x6b | RW | DMCO2 | kanał 2: licznik, typ pracy |
0x6c-0x6d | RW | DMAD3 | kanał 3: rejestr adresu |
0x6e-0x6f | RW | DMCO3 | kanał 3: licznik, typ pracy |
0x70 | RW | DMAST | sterowanie |
Linie szeregowe i równoległe | |||
0x80 | RW | INFTR | informacja do/z linii szeregowej |
0x81 | RW | INFST | status i sterowanie linii szeregowej |
0x80 | RW | PARIO | PORT A = parzysty nr. linii |
0x81 | RW | PARIO+1 | PORT B = nieparzysty nr. linii |
0x82 | RW | PARIO+2 | port C = sygnały handshake i gotowości |
0x83 | R | PARIO+3 | sterowanie |
... | ... | ... | kolejne linie szeregowe/równoległe |
Przerwania wewnętrzne
Nr | Oznaczenie | Opis | Pokwitowanie |
---|---|---|---|
1 | IKWIT | MERA-400 przyjęła przerwanie | zapis 1 DO "KWINT" |
2 | IZEGA | zegar | zapis "MODE" do "CLCON" |
3 | IOPRQ | zgłoszenie OPRQ | zapis "KOPRQ" |
4.5 | ITRAP | dla testowania | odczyt "PTRAP" |
5.5 | IPOST | polecenie sterujące | odczyt "POLST+1" |
6 | ITAP | taśma magnetyczna | odczyt specyfikacji |
6.5 | IKASE | kaskada serial | odczyt/zapis informacji |
7 | IKAPA | kaskada parallel | odczyt/zapis informacji |
7.5 | IDMA | DMA | odczyt DMAST |
Przerwania do MERA-400
Przerwania wysyłane do MERY-400 opisane są tutaj. Rzeczy, o których wspomniana dokumentacja nie mówi:
Kolejka przerwań wysyłanych z MULTIX-a do MERY-400 ma długość 32 pozycje.
ID linii dla przerwania "niesprawny kanał" zawiera informację o przyczynie niesprawności:
- 1 - błąd sumy kontrolnej ROM
- 3 - za mała pamięć RAM
- 5 - przesunięcie SP
- 11 - RST 4
- 13 - RST 5 gdy WIN=0
- 15 - RST 6 gdy TAP=0
- 17 - niekompletny program: brak 5 (koniec RAM), SETKO, TESTU
- 19 - błąd transmisji przy POST-MORT po ITRAP
- 2*N dla N=0-32 - niedozwolona specyfikacja przerwania linii fizycznej nr N, gdzie:
- (STBOT) - adres ostatniej pozycji stosu
- ostatnia pozycja - 2*N, specyfikacja
Przerwania, o których nie wspomina dokumentacja:
Oznaczenie | Nr | Opis |
---|---|---|
IEPS0 | 35 | nieznane polecenie sterujące, KOD=0 |
IEPS6 | 36 | nieznane polecenie sterujące, KOD=6 |
IEPS7 | 37 | nieznane polecenie sterujące, KOD=7 |
IEPS8 | 38 | nieznane polecenie sterujące, KOD=8 |
IEPSC | 39 | nieznane polecenie sterujące, KOD=C |
IEPSD | 40 | nieznane polecenie sterujące, KOD=D |
IEPSE | 41 | nieznane polecenie sterujące, KOD=E |
IEPSF | 42 | nieznane polecenie sterujące, KOD=F |
Przetwarzanie poleceń
W zależności od typu polecenia, jest ono przetwarzane na różnych etapach pracy MULTIX-a.
Polecenia kanałowe
Polecenia kanałowe wymagają natychmiastowej odpowiedzi, niezależnie od tego, czym aktualnie zajęty jest procesor MULTIX-a. Dlatego realizowane są sprzętowo, na styku MULTIX-interfejs MERY-400. Należą do nich:
- Zerowanie - realizowane sprzętowo przez reset procesora MULTIX-a i wszystkich układów podległych. MULTIX w ten sam sposób musi reagować na zerowanie komendą IN/OU, programowe (MCL) i sprzętowe (CLEAR). To znaczy, że polecenie zerowania musi być dekodowane sprzętowo "na interfejsie" i skutkować sprzętowym resetem.
- Sprawdź istnienie kanału - rezultatem tego polecenia jest wysterowanie odpowiedniej szyny magistrali (OK lub NO), więc również musi być realizowane sprzętowo.
- Podaj specyfikację przerwania - rezultatu tego polecenia oczekuje się natychmiast po jego wykonaniu (w procedurze obsługi przerwania), więc ponownie - musi być realizowane sprzętowo.
Polecenia ogólne
Polecenia ogólne dotyczą pracy MULTIX-a (a nie poszczególnych linii MULTIX-a) i realizowane są w ramach obsługi przerwania IPOST (5.5). W trakcie obsługi przerwania IPOST kolejne jego przyjęcia mogą być zablokowane, co skutkować będzie odpowiedzią EN do procesora. Do poleceń ogólnych należą:
- Ustaw konfigurację - jest to pierwsze polecenie, jakie MULTIX może przyjąć. Zanim nie zostanie poprawnie zakończone, żadne polecenie liniowe nie może zostać wykonane. W trakcie jego realizacji przerwania są zablokowane, więc każde kolejne polecenie "ustaw konfiguracje" wydane przed zakończeniem bieżącego zakończy się sygnałem EN.
- Testuj - jest to polecenie specjalne, które skutkuje uruchomieniem na procesorze MULTIX-a programu innego niż zapisany w firmware. Pozwala na przeprowadzenie dowolnego testu komputera.
- Cofnij przerwanie niepokwitowane do kolejki - dotyczy wyłącznie kolejki przerwań do MERY-400 i musi zostać wykonane podczas gdy kolejka nie zmienia swojego stanu.
Polecenia kanałowe
Polecenia kanałowe są przyjmowane w procedurze obsługi przerwania IPOST. Wynikiem przyjęcia polecenia może być zgłoszenie zadania odpowiadającego poleceniu, bądź jego odrzucenie (bo linia nie istnieje, polecenie jest już wykonywane, ...). Po zgłoszeniu zadania obsługa przerwania się kończy, a zadanie podjąć może manager zadań (główny program MULTIX-a).
Manager zadań
Manager zadań przegląda cyklicznie tablicę zadań wybierając zadanie do wykonania według priorytetu (od najwyższego):
- Podaj status
- Odłącz linię
- Zgłość OPRQ
- Przesyłaj
- Zerwij transmisję
- Dołącz linię
Manager zadań budzony jest dowolnym innym przerwaniem, a więc również przerwaniami od urządzeń zewnętrznych (innych niż MERA-400). Dzięki temu możliwa jest reakcja na sytuację, kiedy nastąpiła transmisja do/z urządzenia zewnętrznego.