3012
edycji
(Nie pokazano 17 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 3: | Linia 3: | ||
= Sprzęt = | = 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 | 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, widzianym przez pryzmat sprzęgu znajdującego się pomiędzy magistralami MERY-400 a MULTIX-a. | ||
Komunikacja MERY-400 z MULTIX-em odbywa się przy użyciu: | |||
* jednego z przerwań procesora 8085, które informuje o nadejściu polecenia wysłanego rozkazami IN/OU z MERY-400 | |||
* rejestrów sprzętowych sprzęgu przechowujących odczytane z magistrali MERY-400 argumenty polecenia IN/OU | |||
Komunikacja MULTIX-a z MERĄ-400 odbywa się przy użyciu: | |||
* odczytu/zapisu pamięci MERY-400 (przy użyciu kontrolera DMA) | |||
* zgłoszenia przerwania kanałowego do MERY-400 | |||
Poniższy schemat blokowy przedstawia budowę MULTIX-a (wraz z podziałem na pakiety) i sprzęg z MERĄ-400. | |||
[[File:multix-internals.png|700px|center|Schemat blokowy MULTIX-a]] | [[File:multix-internals.png|700px|center|Schemat blokowy MULTIX-a]] | ||
== Pakiety == | |||
Bloki funkcjonalne MULTIX-a i kontrolery urządzeń wejścia/wyjścia rozlokowane są na "wąskich" pakietach MERY-400. | |||
=== ME-MIK-400 === | |||
ME-MIK-400 to pakiet mikrokomputera zawierający: | |||
* CPU: 8085 3MHz (NEC D8085AC) | * CPU: 8085 3MHz (NEC D8085AC) | ||
Linia 15: | Linia 33: | ||
** kanał 2: taśma | ** kanał 2: taśma | ||
** kanał 3: autoload | ** kanał 3: autoload | ||
* I/O równoległe | |||
=== ME-BI-400 i ME-BM-400 === | |||
ME-BI-400 i ME-BM-400 to pakiety sprzęgu zapewniające komunikację między MULTIX-em a MERĄ-400. Realizują one m.in. następujące funkcje: | |||
* Od strony interfejsu MERY-400: | |||
** dekodowanie i realizację krytycznych rozkazów I/O | |||
** zgłaszanie przerwania kanałowego | |||
** transmisję danych do/z PAO | |||
* Od strony MULTIX-a: | |||
** sprzętowe rejestry I/O | |||
** reset MULTIX-a i urządzeń podległych | |||
** zarządzanie przerwaniem "polecenie sterujące" | |||
=== ME-UTR-400 === | |||
Cztery porty równoległe zrealizowane na dwóch układach 8255 (NEC D8255AC-2). Pakiet występuje w wersjach ME-UTR-1, ME-UTR-2 i ME-UTR-3, pozwalających na podłączenie różnego rodzaju urządzeń równoległych | |||
=== ME-UTS-400 === | |||
Cztery porty szeregowe zrealizowane na czterech układach 8251 (NEC M5L8251AP-5). Pakiet występuje w wersjach ME-UTS-1, ME-UTS-2 i ME-UTS-3, pozwalających na podłączenie urządzeń różnymi interfejsami (V24 lub prądowym z optoizolacją) i dających różne dodatkowe możliwości ich konfiguracji. | |||
=== ME-FDC === | |||
Kontroler czterech stacji dyskietek zrealizowany w oparciu o: | |||
* kontroler Zilog Z0765A08PSC | |||
* DMA 8257 (NEC M5L8257P-5) | |||
* pamięć RAM 8KB Hitachi HM6264LP-15 | |||
=== ME-WDC-506 === | |||
Kontroler czterech dysków ST-506 (winchester) zrealizowany w oparciu o: | |||
* kontroler Intel C82062-00 | |||
* pamięć RAM 8KB Hitachi HM6264LP-15 | |||
= Mapa pamięci = | = Mapa pamięci = | ||
Linia 272: | Linia 317: | ||
Maksymalna długość transmisji wynosi 16 sektorów (z punktu widzenia MERY? czy z punktu widzenia zadania mx?). Linie z Winchesterem nie obsługują polecenia "przerwij transmisję". | Maksymalna długość transmisji wynosi 16 sektorów (z punktu widzenia MERY? czy z punktu widzenia zadania mx?). Linie z Winchesterem nie obsługują polecenia "przerwij transmisję". | ||
=== Sektory zapasowe === | |||
Producenci dysków winchester dopuszczali zazwyczaj występowanie na powierzchni dysku | |||
kilkudziesięciu uszkodzonych sektorów. Wyjątkiem był pierwszy cylinder, który | |||
musiał być wolny od błędów. Fakt ten został przez Amepol wykorzystany do | |||
podniesienia niezawodności dysków winchester pracujących w MULTX-ie. | |||
Cały pierwszy cylinder zarezerwowany jest na kopie uszkodzonych sektorów | |||
i jest dla użytkownika niedostępny. Dwa pierwsze sektory zajęte są przez | |||
tablicę numerów uszkodzonych sektorów (pierwszy sektor) i jej wierną kopię (drugi | |||
sektor). Przy czterech głowicach i 16 sektorach na ścieżkę daje to możliwość zrelokowania do 62 sektorów. | |||
Tablica numerów sektorów ma również 62 pozycje. W zależności od wersji MULTIX-a mają one długość 2 lub 3 bajtów. Każda z nich wskazuje, jaki | |||
sektor (o jakim numerze logicznym) został przeniesiony na daną pozycję obszaru | |||
zapasowego. | |||
Jeśli podczas operacji czytania sektora z dysku wystąpił jeden z warunków: | |||
* pole adresowe sektora nie zostało odnalezione | |||
* sektor oznaczony jest jako uszkodzony | |||
to następuje próba odnalezienia danego sektora w obszarze zapasowym. | |||
Jeśli sektor zostanie znaleziony, to jest stamtąd odczytywany i błąd odczytu nie występuje. | |||
Jeśli sektor nie zostanie odnaleziony, to sygnalizowany jest błąd. | |||
Przenoszenie uszkodzonych sektorów do obszaru zapasowego nie jest wykonywane | |||
automatycznie przez MULTIX-a. Odbywa się za | |||
pomocą polecenia formatowania ścieżki z przeniesieniem uszkodzonych sektorów. | |||
== Floppy == | |||
Użyty kontroler napędów Zilog Z0765A08PSC pozwala na podłączenie do czterech napędów dyskietek. MULTIX rozróżnia trzy typy napędów o następujących parametrach zapisanych w tablicy TATYF (TAblica TYpów Flopów): | |||
{| class="wikitable" style="text-align: center;" | |||
! Typ !! Nazwa !! L. głowic !! L. cylindrów !! SRT !! HLT | |||
|- | |||
| 0 || SD || 1 || 40 || 0xCF || 9<<1 | |||
|- | |||
| 1 || DD || 1 || 80 || 0xCF || 9<<1 | |||
|- | |||
| 2 || DD/HD || 1 || 80 || 0x8F || 18<<1 | |||
|} | |||
Gdzie SRT i HLT to następujące parametry kontrolera: | |||
* HLT - Head Load Time (2-254ms co 2ms) | |||
* SRT - Step Rate Time (1-16ms co 1ms) | |||
Niezależnie od typu napędu, rozróżniane są jeszcze (i weryfikowane z typem napędu) typy dyskietek. Ich parametry podawane są podczas operacji "dołącz". | |||
= Inicjalizacja = | = Inicjalizacja = | ||
Linia 431: | Linia 524: | ||
* czy pierwszy numer linii w pakiecie jest wielokrotnością 4 | * czy pierwszy numer linii w pakiecie jest wielokrotnością 4 | ||
* czy liczba linii danego typu jest wielokrotnością 4 | * czy liczba linii danego typu jest wielokrotnością 4 | ||
* czy liczba pakietów kontrolera pamięci taśmowych nie przekracza 1 (maks. 4 napędy taśmowe) | * czy liczba pakietów kontrolera pamięci taśmowych nie przekracza 1 (maks. 4 napędy taśmowe, choć dokumentacja wspomina o 8 (po cztery przewijaki na dwa obsługiwane formatery). | ||
Jeśli jakieś linie nie są używane, konfiguracja dla nich musi również zostać przygotowana, przy czym bit 3 pola konfiguracji linii fizycznej ("linia użyta") powinien mieć wtedy wartość 0. W przypadku niespełnienia warunków sygnalizowany jest błąd "niekompletny opis linii fizycznej". | Jeśli jakieś linie nie są używane, konfiguracja dla nich musi również zostać przygotowana, przy czym bit 3 pola konfiguracji linii fizycznej ("linia użyta") powinien mieć wtedy wartość 0. W przypadku niespełnienia warunków sygnalizowany jest błąd "niekompletny opis linii fizycznej". | ||
==== Linie logiczne ==== | ==== Linie logiczne ==== | ||
Mimo, że numer linii fizycznej w polu opisu linii logicznej jest 8-bit, to tylko najmłodsze 5 bitów brane jest pod uwagę. Daje to maksymalną liczbę 32 obsługiwanych linii. Starsze bity (bit 8) wykorzystywane są jedynie dla protokołu taśmy. | |||
Dozwolone typy linii fizycznych dla protokołów linii logicznej: | Dozwolone typy linii fizycznych dla protokołów linii logicznej: | ||
Linia 535: | Linia 630: | ||
Po otrzymaniu polecenia od MERY-400 MULTIX sprawdza, czy może przyjąć polecenie i reaguje odpowiednio do warunków, wysyłając przerwanie odpowiednie dla danego polecenia: | Po otrzymaniu polecenia od MERY-400 MULTIX sprawdza, czy może przyjąć polecenie i reaguje odpowiednio do warunków, wysyłając przerwanie odpowiednie dla danego polecenia: | ||
* jeśli linii nie ma w konf - | * jeśli konfiguracja MULTIX-a nie jest ustawiona -> '''brak linii''' | ||
* jeśli | * jeśli linii nie ma w konf (nr. linii > MAXLL) - '''brak linii''' | ||
* jeśli zadanie | * jeśli konfiguracja MULTIX-a nie jest ustawiona (ponowne sprawdzenie) '''odrzucenie polecenia''' | ||
* jeśli zadanie | * jeśli ((b.war & 1) | (b.zaw) != 0) -> '''odrzucenie polecenia'''. Warunek tłumaczy się na: | ||
** jeśli jest już polecenie bezwarunkowego startu zadania (czyli takie polecenie zostało już wydane ???ale jeszcze nie wystartowane???) | |||
** jeśli zadanie jest aktywne | |||
** jeśli zadanie czeka na warunek | |||
* jeśli żadna z powyższych sytuacji nie wystąpiła, zadanie jest zgłaszane: | * jeśli żadna z powyższych sytuacji nie wystąpiła, zadanie jest zgłaszane: | ||
** | ** opcjonalnie pobierany jest argument zadania (dla zadań, które mają argumenty) | ||
** PZGLI | ** PZGLI[zadanie] = 1 | ||
** ADPZL[zadanie, linia] |= 1 (zgłoszenie zadania od początku) | ** ADPZL[zadanie, linia] |= 1 (zgłoszenie zadania od początku) | ||
Linia 568: | Linia 666: | ||
Druga tablica (adres w ADPZL) przechowuje opis stanów wszystkich zadań dla każdej z linii. Stan opisują dwa bajty: | Druga tablica (adres w ADPZL) przechowuje opis stanów wszystkich zadań dla każdej z linii. Stan opisują dwa bajty: | ||
* '''bajt zawieszenia''' - ustawiany przez zadanie, | * '''bajt zawieszenia''' - ustawiany przez zadanie, opisuje jego stan: | ||
** ustawiony bit 0 mówi, że zadanie jest aktualnie wykonywane | ** ustawiony bit 0 mówi, że zadanie jest aktualnie wykonywane | ||
** nie ustawiony bit 0 mówi, że zadanie jest zawieszone, wtedy bity 7-1 określają przyczynę | ** nie ustawiony bit 0 mówi, że zadanie jest zawieszone (oczekuje na zdarzenie), wtedy bity 7-1 określają przyczynę zawieszenia | ||
* '''bajt warunków''' - ustawiany | * '''bajt warunków''' - ustawiany "z zewnątrz" zadania, opisuje warunki, jakie dla zadania wystąpiły: | ||
** ustawiony bit 0 mówi, że zadanie należy wystartować (rozpocząć) | |||
** bity 7-1 opisują warunki, jakie wystąpiły dla zadania | |||
Jeśli okaże się, że żadna linia nie wymaga obsługi, zgłoszenie zadania jest kasowane. | Jeśli okaże się, że żadna linia nie wymaga obsługi, zgłoszenie zadania jest kasowane. | ||
Linia 594: | Linia 694: | ||
| WATIM || 10000000 || przesyłaj - timeout (timer) | | WATIM || 10000000 || przesyłaj - timeout (timer) | ||
|} | |} | ||
Warunek WAFWI dla winchesterów oznacza zwolnienie kontrolera. Kontroler może w danej chwili obsługiwać tylko jeden dysk. Jeśli inna linia (inny winchester) chce transmitować dane, musi poczekać, aż obecnie transmitująca linia zwolni kontroler. | |||
== Odebranie zadania == | == Odebranie zadania == | ||
* poszukaj zgłoszonego zadania o najwyższym priorytecie | * poszukaj w PZGLI zgłoszonego zadania o najwyższym priorytecie | ||
* wpisz nr.zad do IDZAD | * wpisz nr.zad do IDZAD | ||
* wybierz linię, od której zaczniesz szukać (następna, bądź 0 jeśli pracowała ostatnia) i iteruj po wszystkich liniach | * wybierz linię, od której zaczniesz szukać (następna, bądź 0 jeśli pracowała ostatnia) i iteruj po wszystkich liniach | ||
Linia 604: | Linia 706: | ||
** wyślij przerwanie liniowe | ** wyślij przerwanie liniowe | ||
** ponownie uruchom manager zadań | ** ponownie uruchom manager zadań | ||
== Status linii == | |||
Polecenie liniowe "podaj status" zwraca status linii opisany strukturą STATL. Dokumentacja opisuje znaczenie tylko niektórych jej bitów, poniżej kompletny opis dwóch bajtów składających się na status. Numeracja bitów MERY-400 (0=MSB, 15=LSB). W słowie statusu jest jeszcze trzeci bajt, niedostępny dla programisty, opisujący status USART-a. | |||
{| class="wikitable" | |||
! Bit !! Opis | |||
|- | |||
| 0 || 0 | |||
|- | |||
| 1 || Nadawanie ostatniego fragmentu | |||
|- | |||
| 2 || Nadawanie zawieszone przez XOFF | |||
|- | |||
| 3 || Zadanie zawieszone przez XOFF | |||
|- | |||
| 4 || - | |||
|- | |||
| 5 || - | |||
|- | |||
| 6 || Aktywna transmisja | |||
|- | |||
| 7 || Linia dołączona | |||
|- | |||
| 8 || OPRQ | |||
|- | |||
| 9 || Błąd parzystości | |||
|- | |||
| 10 || Odebrano znak kończący | |||
|- | |||
| 11 || Stop po CAN (protokół 5) | |||
|- | |||
| 12 || Odbiór w toku | |||
|- | |||
| 13 || Odbiór rozpoczęty | |||
|- | |||
| 14 || Nadawanie w toku | |||
|- | |||
| 15 || Nadawanie rozpoczęte | |||
|} |