Styk programowy MERA-MULTIX: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
(Utworzono nową stronę "Wersja: '''J'''<br/> Data: '''19.02.87''' = Wstęp = Styk software'owy MERA-MULTIX składa się z następujących elementów: * rozkazy IN, OU wysyłane do procesora...")
 
 
(Nie pokazano 25 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
Wersja: '''J'''<br/>
Data:  '''19.02.87'''
= Wstęp =
= Wstęp =


Linia 17: Linia 14:


Linie logiczne wyróżnione są identyfikatorami od 0 do 255. Identyfikatory przydzielane są przez komputer MERA poleceniem "ustaw konfigurację". Zbiór identyfikatorów powinien być ciągły i zaczynać się od 0. Niespełnienie tych warunków spowoduje dodatkowe zapotrzebowanie na pamięć MULTIX-a.
Linie logiczne wyróżnione są identyfikatorami od 0 do 255. Identyfikatory przydzielane są przez komputer MERA poleceniem "ustaw konfigurację". Zbiór identyfikatorów powinien być ciągły i zaczynać się od 0. Niespełnienie tych warunków spowoduje dodatkowe zapotrzebowanie na pamięć MULTIX-a.


= Rozkazy =
= Rozkazy =
Linia 24: Linia 20:


* Q = 0
* Q = 0
* N/15/ = 0
* N<sub>15</sub> = 0
* N/11-14/ = nr kanału
* N<sub>11-14</sub> = nr kanału


Rozkazy te dzielą się na trzy grupy:
Rozkazy te dzielą się na trzy grupy:
Linia 35: Linia 31:
== Rozkazy kanałowe ==
== Rozkazy kanałowe ==


* Typ: '''IN'''
* Typ: IN
* N/0-2/ = '''0'''
* N<sub>0-2</sub> = 0
* N/5-10/ = '''0'''
* N<sub>5-10</sub> = 0
* Odpowiedź I/F: '''OK'''
* Odpowiedź I/F: OK
   
   
=== Zeruj moduł ===
=== Zeruj moduł ===


N/3-4/ = '''00'''
N<sub>3-4</sub> = 00


Inicjuje zerowanie procesora MULTIX. Po zakończeniu zgłaszane jest przerwanie:
Inicjuje zerowanie procesora MULTIX. Po zakończeniu zgłaszane jest przerwanie:


* '''INSKA''' - procesor MULTIX jest niesprawny
* INSKA - procesor MULTIX jest niesprawny
* '''IWYZE''' - procesor został wyzerowany.
* IWYZE - procesor został wyzerowany.


Uwaga: każdy sygnał zerowania systemu (CLEAR, MCL, włączenie zasilania) działa identycznie jak rozkaz zeruj moduł.
Uwaga: każdy sygnał zerowania systemu (CLEAR, MCL, włączenie zasilania) działa identycznie jak rozkaz zeruj moduł.
Linia 53: Linia 49:
=== Sprawdź istnienie modułu ===
=== Sprawdź istnienie modułu ===


N/3-4/ = '''10'''
N<sub>3-4</sub> = 10
   
   
=== Podaj specyfikację przerwania ===
=== Podaj specyfikację przerwania ===


N/3-4/ = '''01'''
N<sub>3-4</sub> = 01


Rozkaz ten jest wysyłany sprzętowo przy obsłudze przerwania. Specyfikacja składa się z numeru przerwania (bity 0-7) i identyfikatora linii (bity 8-15).
Rozkaz ten jest wysyłany sprzętowo przy obsłudze przerwania. Specyfikacja składa się z numeru przerwania (bity 0-7) i identyfikatora linii (bity 8-15).
Linia 63: Linia 59:
== Polecenia sterujące ogólne ==
== Polecenia sterujące ogólne ==


Odpowiedź I/F: '''OK''' lub '''EN'''.
Odpowiedź I/F: OK lub EN. Po EN należny powtórzyć polecenie.
 
Po '''EN''' należny powtórzyć polecenie.


=== Cofnij przerwanie niepokwitowane do kolejki ===
=== Cofnij przerwanie niepokwitowane do kolejki ===


* Typ: IN
* Typ: IN
* N/0-2/ = 001
* N<sub>0-2</sub> = 001
* N/3-10/ = 0
* N<sub>3-10</sub> = 0


Jeżeli jest zgłoszone przerwanie, którego specyfikacja nie została jeszcze pobrana, to zostaje ono ponownie umieszczone w kolejce przerwań.
Jeżeli jest zgłoszone przerwanie, którego specyfikacja nie została jeszcze pobrana, to zostaje ono ponownie umieszczone w kolejce przerwań.
 
=== Testuj ===
=== Testuj ===


* Typ: OU
* Typ: OU
* N/0-2/ = 001
* N<sub>0-2</sub> = 001
* N/3-10/ = parametr testu
* N<sub>3-10</sub> = parametr testu
* Informacja: adres pola testu
* Informacja: adres pola testu


Program testujący zostaje przepisany do pamięci MULTIX i wykonany. Po poprawnym zakończeniu zgłaszane jest przerwanie IWYTE.
Program testujący zostaje przepisany do pamięci MULTIX i wykonany. Po poprawnym zakończeniu zgłaszane jest przerwanie IWYTE.
 
=== Ustaw konfigurację ===
=== Ustaw konfigurację ===


* Typ: OU
* Typ: OU
* N/0-2/ = 101
* N<sub>0-2</sub> = 101
* Informacja: adres pola sterującego.
* Informacja: adres pola sterującego.


Linia 99: Linia 93:


==  Polecenia sterujące liniowe ==
==  Polecenia sterujące liniowe ==
* Odpowiedz I/F: '''OK''' lub '''EN'''. Po '''EN''' należny powtórzyć polecenie.
 
* N/3-10/ = identyfikator linii logicznej.
* Odpowiedz I/F: OK lub EN. Po EN należny powtórzyć polecenie.
* N<sub>3-10</sub> = identyfikator linii logicznej.


Każde polecenie potwierdzone przez OK kwitowane jest zgłoszeniem przerwania.
Każde polecenie potwierdzone przez OK kwitowane jest zgłoszeniem przerwania.


=== Dołącz linię ===
=== Dołącz linię ===
* Typ: OU
* Typ: OU
* N/0-2/ = 010
* N<sub>0-2</sub> = 010
* Informacja: adres pola sterującego.
* Informacja: adres pola sterującego.


Linia 112: Linia 108:


Pokwitowanie:
Pokwitowanie:
* IDOLI - dołączono linię
* IDOLI - dołączono linię
* INDOL - nie doliczono bo blednę parametry lub linia już była dołączona
* INDOL - nie dołączono bo błędne parametry lub linia już była dołączona
* INKDO - brak linii w konfiguracji
* INKDO - brak linii w konfiguracji
 
=== Odłącz linię ===
=== Odłącz linię ===
* Typ: IN
* Typ: IN
* N/0-2/ = 010
* N<sub>0-2</sub> = 010


Linia logiczna zostaje usunięta z programu. Linia fizyczna zostaje wyzerowana.
Linia logiczna zostaje usunięta z programu. Linia fizyczna zostaje wyzerowana.


Pokwitowanie:
Pokwitowanie:
* IODLI - odłączono linię
* IODLI - odłączono linię
* INODL - linia nie zakończyła transmisji, nie odłączono
* INODL - linia nie zakończyła transmisji, nie odłączono
Linia 128: Linia 127:
   
   
=== Podaj status linii ===
=== Podaj status linii ===
* Typ: OU
* Typ: OU
* N/0-2/ = 011
* N<sub>0-2</sub> = 011
* Informacja: adres statusu
* Informacja: adres statusu


Linia 135: Linia 135:


Pokwitowanie:
Pokwitowanie:
* ISTRE - podano status
* ISTRE - podano status
* INSTR - odrzucono polecenie (poprzednie polecenie "podaj status" jest w toku)
* INSTR - odrzucono polecenie (poprzednie polecenie "podaj status" jest w toku)
Linia 140: Linia 141:
   
   
=== Przesyłaj ===
=== Przesyłaj ===
*Typ: OU
 
* N/0-2/ = 100
* Typ: OU
* N<sub>0-2</sub> = 100
* Informacja: adres pola sterującego.
* Informacja: adres pola sterującego.


Linia 147: Linia 149:


Pokwitowanie:
Pokwitowanie:
* IETRA - zakończono przesyłanie poprawnie
* IETRA - zakończono przesyłanie poprawnie
* ITRER - zakończono przesyłanie z błędami
* ITRER - zakończono przesyłanie z błędami
Linia 154: Linia 157:
   
   
=== Zerwij przesyłanie ===
=== Zerwij przesyłanie ===
* Typ: IN
* Typ: IN
* N/0-2/ = 011
* N<sub>0-2</sub> = 011


Przesyłanie zostaje zerwane.
Przesyłanie zostaje zerwane.


Pokwitowanie:
Pokwitowanie:
* IABTR - wykonano zerwanie
* IABTR - wykonano zerwanie
* INABT - nie ma transmisji w tej linii
* INABT - nie ma transmisji w tej linii
Linia 246: Linia 251:
|-
|-
|}
|}
= Pola sterujące =
Pole sterujące jest to obszar pamięci umieszczony w bloku nr 0 MERA, którego adres jest przekazywany po liniach danych podczas wykonywania rozkazu OU, będącego poleceniem sterującym. W polu sterującym wyróżniamy:
* pole parametrów przekazywanych do MULTIX-a
* pole parametrów zwracanych z MULTIX-a
Wykorzystanie tych pól jest następujące:
{| class="wikitable" style="text-align:center;"
! Polecenie<br/>sterujące !! Pole parametrów<br/>przekazywanych !! Pole parametrów<br/>zwracanych
|-
| align="left" | Testuj || tak || tak
|-
| align="left" | Ustaw konfig. || tak || tak
|-
| align="left" | Dołącz linię || tak || nie
|-
| align="left" | Podaj status linii || nie || tak
|-
| align="left" | Przesyłaj || tak || tak
|-
|}
W dalszym ciągu zostaną omówione pola poszczególnych poleceń oprócz polecenia "testuj", które jest przedmiotem osobnego opisu. Zawartość pól poleceń "dołącz linię" i "przesyłaj" zależna jest od urządzenia dołączonego do linii, wyróżnionego przez nr protokołu. Opisano pola dla protokołów podstawowych:
* 0 - czytnik taśmy (podstawowe wejście)
* 1 - perforator taśmy (podstawowe wyjście)
* 2 - monitor (podstawowe we-wy)
W miarę dołączania dalszych protokołów opis będzie uzupełniany. Poniżej omówione zostaną pewne właściwości protokołów podstawowych.
Długość pisania (ilość wysyłanych znaków) wyznaczona jest przez parametry pol sterujących:
Parametr:
* 1 - nadawaj wg ilości
* 2 - nadawaj do znaku kończącego wyłącznie
* 3 - nadawaj do znaku kończącego włącznie
* 4 - ilość znaków do nadania
{| class="wikitable" style="text-align:center;"
! Przypadek
! width="40" | 1
! width="40" | 2
! width="40" | 3
! width="40" | 4
|-
| P1 || 0 || 0 || 0 || x
|-
| P2 || x || x || x || 0
|-
| rowspan="3" | P3 || 0 || 1 || 1 || >0
|-
| 0 || 0 || 1 || >0
|-
| 0 || 1 || 0 || >0
|-
| P4 || 1 || 0 || 0 || >0
|-
| rowspan="3" | P5 || 1 || 1 || 1 || >0
|-
| 1 || 0 || 1 || >0
|-
| 1 || 1 || 0 || >0
|-
|}
* P1 i P2 - długość jest zerowa, nic nie zostanie wysłane.
* P1 - dla protokołu jednokierunkowego jest błędem - przerwanie INTRA.
* P3 - jeżeli wysłane zostaną wszystkie znaki określone przez ilość ..., a znak kończący nie zostanie wykryty, to nadawanie zostaje zakończone jako błędne - przerwanie ITRER.
* P5 - jeżeli w podanej ilości znaków do nadania znajduje się znak kończący to jego położenie wyznacza długość.
Długość czytania (ilość odebranych znaków) wyznaczona jest przez parametry pól sterujących:
Parametr:
* 1 - odbieraj wg bufora odbiorczego MERA
* 2 - odbieraj do znaku kończącego wyłącznie
* 3 - odbieraj do znaku kończącego włącznie
* 4 - długość bufora odbiorczego MERA
{| class="wikitable" style="text-align:center;"
! Przypadek
! width="40" | 1
! width="40" | 2
! width="40" | 3
! width="40" | 4
|-
| C1 || 0 || 0 || 0 || x
|-
| C2 || x || x || x || 0
|-
| rowspan="3" | C3 || 0 || 1 || 1 || >0
|-
| 0 || 0 || 1 || >0
|-
| 0 || 1 || 0 || >0
|-
| C4 || 1 || 0 || 0 || >0
|-
| rowspan="3" | C5 || 1 || 1 || 1 || >0
|-
| 1 || 0 || 1 || >0
|-
| 1 || 1 || 0 || >0
|-
|}
* C1, C2 - długość jest zerowa, nic nie zostanie odebrane
* C1 - dla protokołu jednokierunkowego jest błędem - przerwanie INTRA.
* C3 - jeżeli został zapełniony bufor MERA, a znak kończący nie został wykryty, to odbiór zostaje zakończony jako błędny - przerwanie ITRER.
* C5 - odbiór zostaje zakończony po wykryciu znaku kończącego lub po zapełnieniu bufora.
Działanie protokołu nr 2 zależy od długości pisania i długości czytania określonych przez pole sterujące:
{| class="wikitable" style="text-align:center;"
! Długość pisania !! Długość czytania !! Działanie
|-
| zerowa || zerowa || żadne   
|-
| zerowa || niezerowa || tylko odbieranie
|-
| niezerowa || zerowa || tylko nadawanie
|-
| niezerowa || niezerowa || nadawanie, potem odbieranie
|-
|}
Obserwacja zgłoszenia operatora prowadzona jest w protokołach nr 0 i 2 jeżeli bit "obserwuj zgłoszenie operatora" w polu sterującym został ustawiony na 1. Sposób tej obserwacji zależny od protokołu, rodzaju linii transmisyjnej i aktualnych procesów w linii. Wyróżniamy trzy sposoby obserwacji:
* S0 - zgłoszenie nie jest obserwowane.
* S1 - czytane są znaki i porównywane z kodem zgłoszenia. Znalezienie znaku zgodnego powoduje wysłanie przerwania IOPRU. Pozostałe znaki są ignorowane (gubione).
* S2 - w odbieranych znakach poszukiwany jest znak zgodny z kodem zgłoszenia. Znalezienie takiego znaku powoduje wysłanie przerwania IOPRU oraz natychmiastowe zakończenie odbioru z wysłaniem przerwania ITRER (błąd).
Powyższe sposoby występują w przypadkach:
{| class="wikitable" style="text-align:center;"
! Protokół !! Linia !! Nadawanie w toku !! Odbiór w toku !! Sposób
|-
| rowspan="2" | 0 || rowspan="2" | simplex || - || nie || S1
|-
| - || tak || S2
|-
| rowspan="3" | 2 || rowspan="3" | półduplex || nie || nie || S1
|-
| tak || nie || S0
|-
| nie || tak || S2
|-
| rowspan="3" | 2 || rowspan="3" | pełny duplex || nie || nie || S1
|-
| tak || nie || S1
|-
| nie || tak || S2
|-
|}
Znacznik końca wejścia odczytany przy bicie "obserwuj znacznik końca wejścia" (w polu sterującym) ustawionym na 1 powoduje zakończenie czytania z wysłaniem przerwania ITRER (błąd).
<div>
'''Uwaga:''' Jeżeli w polu sterującym ustawiony jest bit "wykonaj XON/XOFF" i linia jest typu pelny-duplex, to otrzymanie sygnału XOFF (#13) podczas nadawania zatrzymuje nadawanie do czasu otrzymania sygnału XON (#11).
</div>
== Pole sterujące "ustaw konfigurację" ==
Pole składa się z:
* nagłówka (1 słowo)
* pola parametrów zwracanych (1 słowo)
* pól opisu linii fizycznych
* pól opisu linii logicznej (4 słowa na linię logiczną)
Nagłówek:
{| class="wikitable"
! width="60" | Bity !! Znaczenie
|-
| align="center" | 0-7 || ilość słów opisu linii fizycznych
|-
| align="center" | 8-15 || ilość linii logicznych
|-
|}
Pole parametrów zwracanych:
{| class="wikitable"
! width="60" | Bity !! Znaczenie
|-
| align="center" | 0-7
| Nr błędu:
* 0 - konfiguracja już ustawiona
* 1 - błędna liczba linii fizycznych lub logicznych
* 2 - błędny typ urządzenia w opisie linii fizycznej
* 3 - niedozwolony kierunek transmisji
* 4 - niekompletny opis linii fizycznej
* 5 - brak protokołu
* 6 - linia fizyczna nie użyta
* 7 - niezgodność kierunku transmisji urządzenia i protokołu
* 8 - linia fizyczna zajęta
* 9 - brak pamięci na tablice
* 10 - niezgodność typu protokołu i typu linii fizycznej
* 11 - błędne parametry protokołu
|-
| align="center" | 8-15
|
* nr linii fiz dla błędu 2, 3, 4
* nr linii log dla błędów 5, 6, 7, 8, 10, 11
|-
|}
Pole opisu linii fizycznych:
{| class="wikitable"
! Słowo !! Bity !! Znaczenie
|-
| rowspan="4" align="center" | 0 || align="center" | 0-2 || Kierunek:
* 100 = output
* 010 = input
* 110 = half-duplex
* 111 = full-duplex
|-
| align="center" | 3 || linia użyta
|-
| align="center" | 4-7 || Typ urządzenia:
* 0 = USART
* 1 = 8255
* 2 = USART synch,
* 3 = winchester, ...
* 4 = taśma magnetyczna, ...
|-
| align="center" | 11-15 || Liczba linii fizycznych opisanych w powyższy sposób pomniejszona o 1
|-
|}
Pole opisu linii logicznej:
{| class="wikitable" cellpadding="10" cellspacing="10"
! Słowo !! Bity !! Znaczenie
|-
| rowspan="2" align="center" | 0 || align="center" | 0-7 || nr protokołu
|-
| align="center" | 8-15 || nr linii fizycznej
|-
| align="center" | 1-3 || align="center" | 0-15 || parametry protokołu
|-
|}
Dla protkolu 6 (Winchester) słowo 1 zawiera:
{| class="wikitable"
! Słowo !! Bity !! Znaczenie
|-
| rowspan="2" align="center" | 1 || align="center" | 0-7 || Typ Winchestera:
* 0 - BASF
* 1 - NEC
|-
| align="center" | 8-15 || protekcja formatowania:
* 0 - formatowanie dozwolone
* inaczek - formatowanie nie wykonywane
|-
|}
Długość całego pola sterującego wynosi:
1 + 1 + <liczba slow opisu l. fiz.> + 4 * <liczba linii logicznych>
== Pole sterujące "dołącz linię" ==
Pole zawiera tylko parametry przekazywane.
=== Protokół nr 0 - czytnik taśmy ===
{| class="wikitable"
! Słowo !! Bity !! Znaczenie
|-
| rowspan="7" align="center" | 0 || align="center" | 0 || obserwuj znacznik końca wejścia (taśmy)
|-
| align="center" | 1 || nie sprawdzaj parzystości
|-
| align="center" | 2 || odd parity
|-
| align="center" | 3 || przekazuj 8 bitów
|-
| align="center" | 5 || obsługuj BS oraz CAN
|-
| align="center" | 7 || obserwuj "zgłoszenie operatora"
|-
| align="center" | 8-15 || kod znacznika końca wejścia (taśmy)
|-
| rowspan="2" align="center" | 1 || align="center" | 0-7 || kod zgłoszenia operatora
|-
| align="center" | 8-15 || nr procedury obsługi tekstu:
* 0 = nic,
* ...
|-
|}
=== Protokół nr 1 - perforator taśmy ===
{| class="wikitable"
! Słowo !! Bity !! Znaczenie
|-
| rowspan="4" align="center" | 0 || align="center" | 2 || odd parity
|-
| align="center" | 3 || przesyłaj 8 bitów (= bez parzystości)
|-
| align="center" | 6 || zamień małe litery na duże
|-
| align="center" | 8-15 || nr procedury obsługi tekstu:
* 0 = nic,
* ...
|-
|}
=== Protokół nr 2 - monitor ===
{| class="wikitable"
! Słowo !! Bity !! Znaczenie
|-
| rowspan="9" align="center" | 0 || align="center" | 0 || obserwuj znacznik końca wejścia
|-
| align="center" | 1 || nie sprawdzaj i nie generuj parzystości
|-
| align="center" | 2 || odd parity
|-
| align="center" | 3 || przekazuj 8 bitów do MERA
|-
| align="center" | 4 || wykonaj XON/XOFF
|-
| align="center" | 5 || obsługuj BS oraz CAN
|-
| align="center" | 6 || zamień małe litery na duże dla nadawania
|-
| align="center" | 7 || obserwuj "zgłoszenie operatora"
|-
| align="center" | 8-15 || kod znacznika końca wejścia
|-
| rowspan="2" align="center" | 1 || align="center" | 0-7 || kod zgłoszenia operatora
|-
| align="center" | 8-15 || nr procedury obsługi tekstu:
* 0 = nic,
* 2 = edytor,
* ...
|-
| align="center" | 2 || align="center" | 0-15 || parametry procedury obróbki tekstu
|-
|}
== Pole sterujące "podaj status linii" ==
Pole zawiera tylko parametry zwracane.
{| class="wikitable"
! Słowo !! Bity !! Znaczenie
|-
| rowspan="8" align="center" | 0 || align="center" | 7 || linia jest dołączona
|-
| align="center" | 8 || było zgłoszenie operatora
|-
| align="center" | 9 || błąd parzystości
|-
| align="center" | 10 || odebrano znak kończący
|-
| align="center" | 12 || odbiór jest w toku
|-
| align="center" | 13 || odbiór był rozpoczęty
|-
| align="center" | 14 || nadawanie jest w toku
|-
| align="center" | 15 || nadawanie było rozpoczęte
|-
|}
== Pole sterujące "przesyłaj" ==
Pole zawiera w pierwszej części parametry przekazywane, a w drugiej, oznaczonej kolorem - parametry zwracane. W parametrach zwracanych występuje słowo „sposób zakończenia” o strukturze identycznej dla wszystkich protokołów podstawowych. Struktura tego słowa i zastosowanie poszczególnych bitów w konkretnych protokołach pokazane jest w poniższej tabeli.
Sposób zakończenia:
{| class="wikitable" style="text-align:center;"
! rowspan="2" | Bit !! rowspan="2" | Znaczenie !! colspan="3" | Stosuje się do protokołu nr
|-
! 0 !! 1 !! 2
|-
| | 0 || align="left" | timeout || tak || tak || tak
|-
| 1 || align="left" | zgłoszenie operatora || tak || nie || tak
|-
| 2 || align="left" | awaria urządzenia || tak || tak || tak
|-
| 3 || align="left" | koniec znaków przed znakiem kończącym nadawanie || nie || tak || tak
|-
| 4 || align="left" | błąd parzystości || tak || nie || tak
|-
| 5 || align="left" | inny błąd transmisji || tak || nie || tak
|-
| 7 || align="left" | znak końca wejścia || tak || nie || tak
|-
|}
Jeżeli przesyłanie kończy się prawidłowo to sposób zakończenia /0-7/ = 0.
=== Protokół nr 0 - czytnik taśmy ===
{| class="wikitable"
! Słowo || Bity || Znaczenie
|-
| rowspan="6" align="center" | 0 || align="center" | 0-1 || procedura obróbki: 0=norm., 1=bin
|-
| align="center" | 2 || ignoruj początkowe nule
|-
| align="center" | 3 || odbieraj wg długości bufora MERA
|-
| align="center" | 4 || odbieraj do znaku kończącego wyłącznie
|-
| align="center" | 5 || odbieraj do znaku kończącego włącznie
|-
| align="center" | 8-15 || timeout [sek]. 1-127 lub 0.
|-
| align="center" | 1 || align="center" | 0-15 || długość bufora odbiorczego MERA [bajty]
|-
| align="center" | 2 || align="center" | 0-15 || adres bufora odbiorczego MERA [słowowy]
|-
| rowspan="2" align="center" | 3 || align="center" | 9 || nr bajtu początkowego bufora odbiorczego
|-
| align="center" | 12-15 || nr bloku bufora odbiorczego
|-
| rowspan="2" align="center" | 4 || align="center" | 0-7 || znak kończący odbiór
|-
| align="center" | 8-15 || 0 lub dodatkowy znak kończący odbiór
|- style="background-color:#ffffe5;"
| align="center" | 5 || align="center" | 0-15 || ilość bajtów odebranych i nieprzekazanych do MERA
|- style="background-color:#ffffe5;"
| align="center" | 6 || align="center" | 0-15 || ilość bajtów przekazanych ostatnim poleceniem sterującym
|- style="background-color:#ffffe5;"
| align="center" | 7 || align="center" | 0-15 || sposób zakończenia
|-
|}
=== Protokół nr 1 - perforator taśmy ===
{| class="wikitable"
! Słowo || Bity || Znaczenie
|-
| rowspan="5" align="center" | 0 || align="center" | 0 || nadawaj wg ilości
|-
| align="center" | 1 || nadawaj do znaku kończącego wyłącznie
|-
| align="center" | 2 || nadawaj do znaku kończącego włącznie
|-
| align="center" | 6-7 || procedura obróbki: 0=norm., 1=bin
|-
| align="center" | 8-15 || timeout [sek]. 1-127 lub 0.
|-
| align="center" | 1 || align="center" | 0-15 || ilość znaków do nadania
|-
| align="center" | 2 || align="center" | 0-15 || adres bufora nadawczego MERA [słowowy]
|-
| rowspan="3" align="center" | 3 || align="center" | 0-7 || znak kończący nadawanie
|-
| align="center" | 9 || nr bajtu początkowego w buforze nadawczym
|-
| align="center" | 12-15 || nr bloku bufora nadawczego
|- style="background-color:#ffffe5;"
| align="center" | 4 || align="center" | 0-15 || ilość bajtów nadanych
|- style="background-color:#ffffe5;"
| align="center" | 5 || align="center" | 0-15 || sposób zakończenia
|-
|}
=== Protokół nr 2 - monitor ===
{| class="wikitable"
! Słowo || Bity || Znaczenie
|-
| rowspan="9" align="center" | 0 || align="center" | 0 || nadawaj wg ilości
|-
| align="center" | 1 || nadawaj  do znaku kończącego wyłącznie
|-
| align="center" | 2 || nadawaj  do znaku kończącego włącznie
|-
| align="center" | 3 || odbieraj wg długości bufora MERA
|-
| align="center" | 4 || odbieraj do znaku kończącego wyłącznie
|-
| align="center" | 5 || odbieraj do znaku kończącego włącznie
|-
| align="center" | 6 ||  generuj echo
|-
| align="center" | 7 ||  wysyłaj tekst zachęty przed odbiorem
|-
| align="center" | 8-15 || timeout [sek]. 1-127 lub 0.
|-
| align="center" | 1 || align="center" | 0-15 || ilość znaków do nadania
|-
| align="center" | 2 || align="center" | 0-15 || adres bufora nadawczego MERA [słowowy]
|-
| rowspan="3" align="center" | 3 || align="center" | 0-7 || znak kończący nadawanie
|-
| align="center" | 9 || nr bajtu początkowego w buforze nadawczym
|-
| align="center" | 12-15 || nr bloku bufora nadawczego
|-
| align="center" | 4 || align="center" | 0-15 || długość bufora odbiorczego MERA [bajty]
|-
| align="center" | 5 || align="center" | 0-15 || adres bufora odbiorczego MERA [słowowy]
|-
| rowspan="2" align="center" | 6 || align="center" | 9 || nr bajtu początkowego bufora odbiorczego
|-
| align="center" | 12-15 || nr bloku bufora odbiorczego
|-
| rowspan="2" align="center" | 7 || align="center" | 0-7 || znak kończący odbiór
|-
| align="center" | 8-15 || 0 lub dodatkowy znak kończący odbiór
|-
| align="center" | 8-9 || align="center" | 0-15 || tekst zachęty uzupełniony zerami
|- style="background-color:#ffffe5;"
| align="center" | 10 || align="center" | 0-15 || ilość bajtów nadanych
|- style="background-color:#ffffe5;"
| align="center" | 11 || align="center" | 0-15 || ilość bajtów odebranych i nieprzekazanych do MERA
|- style="background-color:#ffffe5;"
| align="center" | 12 || align="center" | 0-15 || ilość bajtów odebranych/przekazanych ostatnim poleceniem sterującym
|- style="background-color:#ffffe5;"
| align="center" | 13 || align="center" | 0-15 || sposób zakończenia
|-
|}
= Protokoły dla SOM-3 =
Dla systemu SOM-3 przewiduje się 3 protokoły:
* nr 3  czytnik SOM
* nr 4  perforator SOM
* nr 5  monitor SOM
'''Uwaga:''' Zasady podane w części podstawowej niniejszego opisu dla protokołów 0, 1, 2 stosują się odpowiednio do protokołów 3, 4, 5, jeżeli poniżej nie podano inaczej.
== Pole sterujące "dołącz linię" ==
{| class="wikitable"
! Słowo !! Bity !! Znaczenie
|-
| align="center" | 0 || align="center" | 4 || wykonaj 'xon/xoff' (dla protokołu 5)
|-
| align="center" | 0 || align="center" | 7 || obserwuj zgłoszenie operatora
|-
| align="center" | 0 || align="center" | 8-15 || kod zgłoszenia operatora
|-
|}
Pole to występuje dla protokołów nr 3 i 5. Dla protokołu nr 4 polecenie dołącz linię nie korzysta z pola sterującego.
== Pole  sterujące "przesyłaj" ==
Pole zawiera w pierwszej części parametry przekazywane a w drugiej, oznaczonej kolorem - parametry zwracane. W polu tym występuje słowo "sposób zakończenia" o strukturze następującej:
{| class="wikitable" style="text-align:center;"
! rowspan="2" | Bit !! rowspan="2" | Znaczenie !! colspan="3" | Stosuje się do protokołu
|-
! 3 !! 4 !! 5
|-
| 0 || align="left" | timeout || tak || tak || tak
|-
| 1 || align="left" | zgłoszenie operatora || tak || nie || tak
|-
| 2 || align="left" | awaria urządzenia || tak || tak || tak
|-
| 3 || align="left" | koniec znaków przed znakiem końca nad. || nie || tak || tak
|-
| 4 || align="left" | błąd parzystości || tak || nie || tak
|-
| 5 || align="left" | inny błąd transmisji || tak || nie || tak
|-
| 6 || align="left" | wystąpił CAN || nie || nie || tak
|-
| 7 || align="left" | wystąpił znak końca wejścia || tak || nie || tak
|-
| 8-15 || align="left" | znak, który zakończył odbiór lub 255 || tak || nie || tak
|-
|}
=== Protokół nr 3 - czytnik SOM ===
{| class="wikitable"
! Słowo !! Bity || Znaczenie
|-
| rowspan="7" align="center" | 0 || align="center" | 0 || nie sprawdzaj parzystości
|-
| align="center" | 1 || odd - parity
|-
| align="center" | 2 || przekazuj 8 bitów do MERA
|-
| align="center" | 4 || LF (#0a) jest znakiem  nagłówka
|-
| align="center" | 5 || DEL (#7f) jest znakiem nagłówka
|-
| align="center" | 6 || ignoruj spacje poprzedzające znak kończący
|-
| align="center" | 8-15 || timeout [sek]. 1-127 lub 0.
|-
| rowspan="7" align="center" | 1 || align="center" | 0-1 || nr procedury obróbki tekstu: 0=normalnie,1=bin
|-
| align="center" | 3 || usuwaj LF (#0a) z tekstu odebranego
|-
| align="center" | 4 || usuwaj DEL (#7f) z tekstu odebranego
|-
| align="center" | 5 || odbieraj wg długości bufora MERA
|-
| align="center" | 6 || BS (#08) jest znakiem nagłówka
|-
| align="center" | 7 || cofnij wskaźnik bufora gdy BS
|-
| align="center" | 8-15 || kod znacznika końca wejścia
|-
| align="center" | 2 || align="center" | 0-15 || długość bufora odbiorczego MERA [bajty]
|-
| align="center" | 3 || align="center" | 0-15 || adres bufora odbiorczego MERA [słowowy]
|-
| rowspan="12" align="center" | 4 || align="center" | 0 || ESC (#1b) jest znakiem nagłówka
|-
| align="center" | 1 || kończ odbiór gdy ESC
|-
| align="center" | 2 || NUL (#00) jest znakiem nagłówka
|-
| align="center" | 3 || kończ odbiór gdy NUL
|-
| align="center" | 4 || CR (#0d) jest znakiem nagłówka
|-
| align="center" | 5 || kończ odbiór gdy CR
|-
| align="center" | 6 || CAN (#18) jest znakiem nagłówka
|-
| align="center" | 7 || zeruj bufor gdy CAN
|-
| align="center" | 9 || nr bajtu początkowego w buforze odbiorczym
|-
| align="center" | 10 || obserwuj znacznik końca wejścia
|-
| align="center" | 11 || zamię małe litery na duże
|-
| align="center" | 12-15 || nr bloku bufora odbiorczego
|- style="background-color:#ffffe5;"
| align="center" | 5 || align="center" | 0-15 || ilość bajtów odebranych i nieprzekazanych do MERA
|- style="background-color:#ffffe5;"
| align="center" | 6 || align="center" | 0-15 || ilość bajtów przekazanych do MERA ostatnim poleceniem ster.
|- style="background-color:#ffffe5;"
| align="center" | 7 || align="center" | 0-15 || sposób zakończenia
|-
|}
=== Protokół nr 4 - perforator SOM ===
{| class="wikitable"
! Słowo !! Bity || Znaczenie
|-
| rowspan="4" align="center" | 0 || align="center" | 0 || nie  generuj bitu parzystości
|-
| align="center" | 1 || odd - parity
|-
| align="center" | 6-7 || nr procedury obróbki tekstu: 0=normalnie, 1=bin
|-
| align="center" | 8-15 || timeout [sek]. 1-127 lub 0.
|-
| rowspan="7" align="center" | 1 || align="center" | 0 || nadawaj wg ilości
|-
| align="center" | 1 || nadawaj do znaku kończącego wyłącznie
|-
| align="center" | 2 || nadawaj do znaku kończącego włącznie
|-
| align="center" | 3 || pierwszy znak w buforze jest sterujący
|-
| align="center" | 4 || poprzedź nadawanie znakami CR, LF (#0d, #0a)
|-
| align="center" | 5 || poprzedź nadawanie seria nul (rozbiegówka)
|-
| align="center" | 6-15 || długość rozbiegówki
|-
| align="center" | 2 || align="center" | 0-15 || ilość znaków do nadania
|-
| align="center" | 3 || align="center" | 0-15 || adres bufora nadawczego MERA [słowowy]
|-
| rowspan="3" align="center" | 4 || align="center" | 0-7 || znak kończący nadawanie
|-
| align="center" | 9 || nr bajtu początkowego w buforze nadawczym
|-
| align="center" | 12-15 || nr bloku bufora nadawczego
|- style="background-color:#ffffe5;"
| align="center" | 5 || align="center" | 0-15 || ilość bajtów nadanych
|- style="background-color:#ffffe5;"
| align="center" | 6 || align="center" | 0-15 || sposób zakończenia
|-
|}
=== Protokół nr 5 - monitor SOM ===
{| class="wikitable"
! Słowo !! Bity || Znaczenie
|-
| rowspan="9" align="center" | 0 || align="center" | 0 || nie sprawdzaj i nie generuj parzystości
|-
| align="center" | 1 || odd - parity
|-
| align="center" | 2 || przekazuj 8 bitów do MERA
|-
| align="center" | 3 || generuj echo
|-
| align="center" | 4 || LF (#0a) jest znakiem  nagłówka
|-
| align="center" | 5 || DEL (#7f) jest znakiem nagłówka
|-
| align="center" | 6 || ignoruj spacje poprzedzające znak kończący
|-
| align="center" | 7 || wysyłaj tekst zachęty przed odbiorem
|-
| align="center" | 8-15 || timeout [sek]. 1-127 lub 0.
|-
| rowspan="9" align="center" | 1 || align="center" | 0 || nadawaj wg ilości
|-
| align="center" | 1 || nadawaj do znaku kończącego wyłącznie
|-
| align="center" | 2 || nadawaj do znaku kończącego włącznie
|-
| align="center" | 3 || pierwszy znak w buforze jest sterujący
|-
| align="center" | 4 || poprzedź nadawanie znakami CR,LF (#0d,#0a)
|-
| align="center" | 5 || odbieraj wg długości bufora MERA
|-
| align="center" | 6 || BS (#08) jest znakiem nagłówka
|-
| align="center" | 7 || cofnij wskaźnik bufora gdy BS
|-
| align="center" | 8-15 || kod znacznika końca wejścia
|-
| align="center" | 2-3 || align="center" | 0-15 || tekst zachęty uzupełniony  nul-ami
|-
| align="center" | 4 || align="center" | 0-15 || ilość znaków do nadania
|-
| align="center" | 5 || align="center" | 0-15 || adres bufora nadawczego MERA [słowowy]
|-
| rowspan="5" align="center" | 6 || align="center" | 0-7 || znak kończący nadawanie
|-
| align="center" | 9 || nr bajtu początkowego w buforze nadawczym
|-
| align="center" | 10 || usuwaj LF (#0a) z tekstu odebranego
|-
| align="center" | 11 || usuwaj DEL (#7f) z tekstu odebranego
|-
| align="center" | 12-15 || nr bloku bufora nadawczego
|-
| align="center" | 7 || align="center" | 0-15 || długość bufora odbiorczego MERA [bajty]
|-
| align="center" | 8 || align="center" | 0-15 || adres bufora odbiorczego MERA [słowowy]
|-
| rowspan="12" align="center" | 9 || align="center" | 0 || ESC (#1b) jest znakiem nagłówka
|-
| align="center" | 1 || kończ odbiór gdy ESC
|-
| align="center" | 2 || NUL (#00) jest znakiem nagłówka
|-
| align="center" | 3 || kończ odbiór gdy NUL
|-
| align="center" | 4 || CR (#0d) jest znakiem nagłówka
|-
| align="center" | 5 || kończ odbiór gdy CR
|-
| align="center" | 6 || CAN (#18) jest znakiem nagłówka
|-
| align="center" | 7 || zeruj bufor gdy CAN
|-
| align="center" | 9 || nr bajtu początkowego w buforze odbiorczym
|-
| align="center" | 10 || obserwuj znacznik końca wejścia
|-
| align="center" | 11 || zamię małe litery odebrane na duże
|-
| align="center" | 12-15 || nr bloku bufora odbiorczego
|- style="background-color:#ffffe5;"
| align="center" | 10 || align="center" | 0-15 || ilość bajtów nadanych
|- style="background-color:#ffffe5;"
| align="center" | 11 || align="center" | 0-15 || ilość bajtów odebranych i nieprzekazanych do MERA
|- style="background-color:#ffffe5;"
| align="center" | 12 || align="center" | 0-15 || ilość bajtów przekazanych do MERA ostatnim poleceniem ster.
|- style="background-color:#ffffe5;"
| align="center" | 13 || align="center" | 0-15 || sposób zakończenia
|-
|}
== Obróbka sekwencji odbieranej ==
Sekwencja odbierana składa się z:
* nagłówka
* tekstu
Nagłówek jest usuwany z bufora odbiorczego. Nagłówek zostaje zakończony przez dowolny znak,który nie jest zadeklarowany jako znak nagłówka. Na znakach należących do tekstu mogą być - o ile są ustawione odpowiednie bity w polu sterującym - wykonywane operacje:
* zamiana małych liter na duże
* usuwanie znaków LF, DEL
* usuwanie wszystkich odebranych znaków przed znakiem can; Ponadto dla protokołu nr 5: znak CAN nie generuje echa oraz powoduje zakończenie transmisji z przerwaniem "ITRER"
* usuwanie ostatniego znaku przed znakiem BS
* kończenie odbioru po znakach ESC, NUL, CR.
== Znaki sterujące dla nadawania ==
* + - tekst zostaje poprzedzony znakiem CR (#0d)
* 0 - tekst zostaje poprzedzony znakami CR, LF, LF (#0d, #0a, #0a)
* 1 - tekst zostaje poprzedzony znakami CR,FF (#0d, #0c)
* $ - tekst zostaje wyprowadzony bez poprzedzania dodatkowymi znakami
* Kaidy inny - tekst zostaje poprzedzony  znakami CR, LF (#0d, #0a)
Jeżeli po znaku sterującym występuje znak STX (#02) to zostaje on usunięty.
{{source|title=Styk MERA-MULTIX, wersja J|author=Amepol|date=1987-02-19}}

Aktualna wersja na dzień 12:15, 7 mar 2014

Wstęp

Styk software'owy MERA-MULTIX składa się z następujących elementów:

  • rozkazy IN, OU wysyłane do procesora MULTIX,
  • przerwania zgłaszane do komputera MERA-400,
  • pole sterujące umieszczone w bloku nr 0 MERA,
  • bufory danych umieszczone w dowolnych blokach MERA.

Procesor komunikacyjny MULTIX przedstawia dla komputera MERA zbiór obiektów składający się z:

  • kanału MULTIX,
  • zbioru linii logicznych.

Linie logiczne wyróżnione są identyfikatorami od 0 do 255. Identyfikatory przydzielane są przez komputer MERA poleceniem "ustaw konfigurację". Zbiór identyfikatorów powinien być ciągły i zaczynać się od 0. Niespełnienie tych warunków spowoduje dodatkowe zapotrzebowanie na pamięć MULTIX-a.

Rozkazy

Rozkazy IN, OU wysyłane do procesora MULTIX mają wspólne cechy:

  • Q = 0
  • N15 = 0
  • N11-14 = nr kanału

Rozkazy te dzielą się na trzy grupy:

  • rozkazy kanałowe,
  • polecenia sterujące ogólne (dla kanału MULTIX),
  • polecenia sterujące liniowe (dla linii logicznej).

Rozkazy kanałowe

  • Typ: IN
  • N0-2 = 0
  • N5-10 = 0
  • Odpowiedź I/F: OK

Zeruj moduł

N3-4 = 00

Inicjuje zerowanie procesora MULTIX. Po zakończeniu zgłaszane jest przerwanie:

  • INSKA - procesor MULTIX jest niesprawny
  • IWYZE - procesor został wyzerowany.

Uwaga: każdy sygnał zerowania systemu (CLEAR, MCL, włączenie zasilania) działa identycznie jak rozkaz zeruj moduł.

Sprawdź istnienie modułu

N3-4 = 10

Podaj specyfikację przerwania

N3-4 = 01

Rozkaz ten jest wysyłany sprzętowo przy obsłudze przerwania. Specyfikacja składa się z numeru przerwania (bity 0-7) i identyfikatora linii (bity 8-15).

Polecenia sterujące ogólne

Odpowiedź I/F: OK lub EN. Po EN należny powtórzyć polecenie.

Cofnij przerwanie niepokwitowane do kolejki

  • Typ: IN
  • N0-2 = 001
  • N3-10 = 0

Jeżeli jest zgłoszone przerwanie, którego specyfikacja nie została jeszcze pobrana, to zostaje ono ponownie umieszczone w kolejce przerwań.

Testuj

  • Typ: OU
  • N0-2 = 001
  • N3-10 = parametr testu
  • Informacja: adres pola testu

Program testujący zostaje przepisany do pamięci MULTIX i wykonany. Po poprawnym zakończeniu zgłaszane jest przerwanie IWYTE.

Ustaw konfigurację

  • Typ: OU
  • N0-2 = 101
  • Informacja: adres pola sterującego.

Przyporządkowane zostają linie logiczne do urządzeń dołączonych do MULTIX-a (linii fizycznych). Ustalone zostają podstawowe parametry linii. Po zakończeniu ustawiania konfiguracji zgłaszane jest przerwanie:

  • INKON - nie wykonano polecenia, bo były błędy w polu sterującym lub konfiguracja była już wcześniej ustawiona.
  • IUKON - ustawiono konfigurację
  • INKOT - nie wykonano polecenia, bo wystąpiły błędy transmisji MERA-MULTIX.

Uwaga: Ustawiona konfiguracja nie może być zmieniona aż do wyzerowania modułu.

Polecenia sterujące liniowe

  • Odpowiedz I/F: OK lub EN. Po EN należny powtórzyć polecenie.
  • N3-10 = identyfikator linii logicznej.

Każde polecenie potwierdzone przez OK kwitowane jest zgłoszeniem przerwania.

Dołącz linię

  • Typ: OU
  • N0-2 = 010
  • Informacja: adres pola sterującego.

Linia logiczna zostaje dołączona do programu. Polecenie "dołącz linię" musi poprzedzać polecenie/a transmisyjne.

Pokwitowanie:

  • IDOLI - dołączono linię
  • INDOL - nie dołączono bo błędne parametry lub linia już była dołączona
  • INKDO - brak linii w konfiguracji

Odłącz linię

  • Typ: IN
  • N0-2 = 010

Linia logiczna zostaje usunięta z programu. Linia fizyczna zostaje wyzerowana.

Pokwitowanie:

  • IODLI - odłączono linię
  • INODL - linia nie zakończyła transmisji, nie odłączono
  • INKOD - brak linii w konfiguracji

Podaj status linii

  • Typ: OU
  • N0-2 = 011
  • Informacja: adres statusu

Status zostaje umieszczony pod wskazanym adresem.

Pokwitowanie:

  • ISTRE - podano status
  • INSTR - odrzucono polecenie (poprzednie polecenie "podaj status" jest w toku)
  • INKST - brak linii w konfiguracji

Przesyłaj

  • Typ: OU
  • N0-2 = 100
  • Informacja: adres pola sterującego.

Rozpoczynana jest transmisja w linii.

Pokwitowanie:

  • IETRA - zakończono przesyłanie poprawnie
  • ITRER - zakończono przesyłanie z błędami
  • INTRA - odrzucono polecenie (błędne parametry)
  • INKTR - brak linii w konfiguracji
  • ITRAB - zerwano transmisje poleceniem "zerwij"

Zerwij przesyłanie

  • Typ: IN
  • N0-2 = 011

Przesyłanie zostaje zerwane.

Pokwitowanie:

  • IABTR - wykonano zerwanie
  • INABT - nie ma transmisji w tej linii
  • INKAB - brak linii w konfiguracji

Przerwania

Przerwania zgłaszane przez MULTIX dzielą się na 3 grupy:

  • przerwania specjalne
  • przerwania ogólne
  • przerwania liniowe

Specyfikacja przerwania, pobierana rozkazem "podaj specyfikację przerwania", składa się z numeru przerwania (bity 0-7) oraz identyfikatora linii (bity 8-15). Identyfikator linii ma znaczenie tylko dla przerwań liniowych. Przerwanie specjalne kierowane jest do obu procesorów MERA natychmiast (bez kolejkowania) i bez sprawdzania odpowiedzi I/F. Przerwania ogólne i liniowe umieszczane są w kolejce przerwań. Przerwanie ogólne kierowane jest do tego procesora, który przysłał polecenie będące przyczyna przerwania. Powyższa zasada dotyczy także przerwań "brak linii w konfiguracji". Przerwanie liniowe (prócz "brak linii w konfiguracji") kierowane jest do tego procesora, który przysłał ostatnie polecenie dla danej linii. Przerwania z kolejki zgłaszane są od najstarszego (najdłużej oczekującego), z tym ze przerwania do procesorów zablokowanych są omijane (ale nie usuwane z kolejki). Zablokowanie procesora dla przerwań następuje po braku jego odpowiedzi na zgłoszenie przerwania. Odblokowanie procesora następuje po otrzymaniu od niego dowolnego polecenia sterującego. Zgłoszenie następnego przerwania odbywa się po pobraniu specyfikacji poprzedniego przerwania (rozkaz "podaj specyfikacje") lub po poleceniu "cofnij przerwanie niepokwitowane do kolejki".

Przerwania specjalne

Oznaczenie Nr Opis Proponowane działanie
INSKA 1 niesprawny kanał powtórzyć zerowanie, gdy to nie pomoże - testować i naprawić moduł
IWYZE 2 wykonano zerowanie podjąć prace zaczynając od polecenia "ustaw konfiguracje"
IWYTE 3 wykonano test podjąć pracę zaczynając od rozkazu "zeruj moduł"

Przerwania ogólne

Oznaczenie Nr Opis Zgłaszane po poleceniu Uwagi o przyczynach
INKON 4 odrzucono "ustaw konfigurację" ustaw konfigurację błędy w polu sterującym, za mała pamięć, konfiguracja już ustawiona
IUKON 5 ustawiono konfigurację ustaw konfigurację
INKOT 6 nie wykonano "ustaw konfigurację" ustaw konfigurację błędy transmisji MERA-MULTIX

Przerwania liniowe

Oznaczenie Nr Opis Zgłaszane po poleceniu Uwagi o przyczynach
ISTRE 7 podano status podaj status
INSTR 8 odrzucono "podaj st." podaj status poprzednie "podaj status" jest w toku wykonywania
INKST 9 brak linii w konfig. podaj status
IDOLI 10 dołączono linię dołącz linię
INDOL 11 odrzucono "dołącz linię" dołącz linię błędy w polu, linia dołączona, poprzednie "dołącz" jest w toku
INKDO 12 brak linii w konfig. dołącz linię
IETRA 13 zakończono transmisję poprawnie przesyłaj
INTRA 14 odrzucono "przesyłaj" przesyłaj błędy w polu, linia nie dołączona, poprzednie przesyłanie w toku
INKTR 15 brak linii w konfig. przesyłaj
ITRER 16 zakończono transmisję z błędem przesyłaj wykryto błąd parzystości lub inny
ITRAB 19 zerwano przesyłanie przesyłaj zgodnie z poleceniem "zerwij"
IABTR 20 wykonano zerwij zerwij przesyłanie
INABT 21 nie wykonano zerwij zerwij brak transmisji w linii
INKAB 22 brak linii w konfig. zerwij przesyłanie
IODLI 23 odłączono linię odłącz linię
INODL 24 nie odłączono linii odłącz linię transmisja w linii
INKOD 25 brak linii w konfig. odłącz linię
INPAO 32 brak trans. MERA-MULTIX dowolne polecenie liniowe uszkodzenie sprzętu
IPARE 33 błąd parzystości MERA-MULTIX dowolne polecenie liniowe uszkodzenie sprzętu
IOPRU 34 zgłoszenia operatora urządzenia dowolne polecenie liniowe

Pola sterujące

Pole sterujące jest to obszar pamięci umieszczony w bloku nr 0 MERA, którego adres jest przekazywany po liniach danych podczas wykonywania rozkazu OU, będącego poleceniem sterującym. W polu sterującym wyróżniamy:

  • pole parametrów przekazywanych do MULTIX-a
  • pole parametrów zwracanych z MULTIX-a

Wykorzystanie tych pól jest następujące:

Polecenie
sterujące
Pole parametrów
przekazywanych
Pole parametrów
zwracanych
Testuj tak tak
Ustaw konfig. tak tak
Dołącz linię tak nie
Podaj status linii nie tak
Przesyłaj tak tak

W dalszym ciągu zostaną omówione pola poszczególnych poleceń oprócz polecenia "testuj", które jest przedmiotem osobnego opisu. Zawartość pól poleceń "dołącz linię" i "przesyłaj" zależna jest od urządzenia dołączonego do linii, wyróżnionego przez nr protokołu. Opisano pola dla protokołów podstawowych:

  • 0 - czytnik taśmy (podstawowe wejście)
  • 1 - perforator taśmy (podstawowe wyjście)
  • 2 - monitor (podstawowe we-wy)

W miarę dołączania dalszych protokołów opis będzie uzupełniany. Poniżej omówione zostaną pewne właściwości protokołów podstawowych.

Długość pisania (ilość wysyłanych znaków) wyznaczona jest przez parametry pol sterujących:

Parametr:

  • 1 - nadawaj wg ilości
  • 2 - nadawaj do znaku kończącego wyłącznie
  • 3 - nadawaj do znaku kończącego włącznie
  • 4 - ilość znaków do nadania
Przypadek 1 2 3 4
P1 0 0 0 x
P2 x x x 0
P3 0 1 1 >0
0 0 1 >0
0 1 0 >0
P4 1 0 0 >0
P5 1 1 1 >0
1 0 1 >0
1 1 0 >0
  • P1 i P2 - długość jest zerowa, nic nie zostanie wysłane.
  • P1 - dla protokołu jednokierunkowego jest błędem - przerwanie INTRA.
  • P3 - jeżeli wysłane zostaną wszystkie znaki określone przez ilość ..., a znak kończący nie zostanie wykryty, to nadawanie zostaje zakończone jako błędne - przerwanie ITRER.
  • P5 - jeżeli w podanej ilości znaków do nadania znajduje się znak kończący to jego położenie wyznacza długość.

Długość czytania (ilość odebranych znaków) wyznaczona jest przez parametry pól sterujących:

Parametr:

  • 1 - odbieraj wg bufora odbiorczego MERA
  • 2 - odbieraj do znaku kończącego wyłącznie
  • 3 - odbieraj do znaku kończącego włącznie
  • 4 - długość bufora odbiorczego MERA
Przypadek 1 2 3 4
C1 0 0 0 x
C2 x x x 0
C3 0 1 1 >0
0 0 1 >0
0 1 0 >0
C4 1 0 0 >0
C5 1 1 1 >0
1 0 1 >0
1 1 0 >0
  • C1, C2 - długość jest zerowa, nic nie zostanie odebrane
  • C1 - dla protokołu jednokierunkowego jest błędem - przerwanie INTRA.
  • C3 - jeżeli został zapełniony bufor MERA, a znak kończący nie został wykryty, to odbiór zostaje zakończony jako błędny - przerwanie ITRER.
  • C5 - odbiór zostaje zakończony po wykryciu znaku kończącego lub po zapełnieniu bufora.

Działanie protokołu nr 2 zależy od długości pisania i długości czytania określonych przez pole sterujące:

Długość pisania Długość czytania Działanie
zerowa zerowa żadne
zerowa niezerowa tylko odbieranie
niezerowa zerowa tylko nadawanie
niezerowa niezerowa nadawanie, potem odbieranie

Obserwacja zgłoszenia operatora prowadzona jest w protokołach nr 0 i 2 jeżeli bit "obserwuj zgłoszenie operatora" w polu sterującym został ustawiony na 1. Sposób tej obserwacji zależny od protokołu, rodzaju linii transmisyjnej i aktualnych procesów w linii. Wyróżniamy trzy sposoby obserwacji:

  • S0 - zgłoszenie nie jest obserwowane.
  • S1 - czytane są znaki i porównywane z kodem zgłoszenia. Znalezienie znaku zgodnego powoduje wysłanie przerwania IOPRU. Pozostałe znaki są ignorowane (gubione).
  • S2 - w odbieranych znakach poszukiwany jest znak zgodny z kodem zgłoszenia. Znalezienie takiego znaku powoduje wysłanie przerwania IOPRU oraz natychmiastowe zakończenie odbioru z wysłaniem przerwania ITRER (błąd).

Powyższe sposoby występują w przypadkach:

Protokół Linia Nadawanie w toku Odbiór w toku Sposób
0 simplex - nie S1
- tak S2
2 półduplex nie nie S1
tak nie S0
nie tak S2
2 pełny duplex nie nie S1
tak nie S1
nie tak S2

Znacznik końca wejścia odczytany przy bicie "obserwuj znacznik końca wejścia" (w polu sterującym) ustawionym na 1 powoduje zakończenie czytania z wysłaniem przerwania ITRER (błąd).

Uwaga: Jeżeli w polu sterującym ustawiony jest bit "wykonaj XON/XOFF" i linia jest typu pelny-duplex, to otrzymanie sygnału XOFF (#13) podczas nadawania zatrzymuje nadawanie do czasu otrzymania sygnału XON (#11).

Pole sterujące "ustaw konfigurację"

Pole składa się z:

  • nagłówka (1 słowo)
  • pola parametrów zwracanych (1 słowo)
  • pól opisu linii fizycznych
  • pól opisu linii logicznej (4 słowa na linię logiczną)

Nagłówek:

Bity Znaczenie
0-7 ilość słów opisu linii fizycznych
8-15 ilość linii logicznych

Pole parametrów zwracanych:

Bity Znaczenie
0-7 Nr błędu:
  • 0 - konfiguracja już ustawiona
  • 1 - błędna liczba linii fizycznych lub logicznych
  • 2 - błędny typ urządzenia w opisie linii fizycznej
  • 3 - niedozwolony kierunek transmisji
  • 4 - niekompletny opis linii fizycznej
  • 5 - brak protokołu
  • 6 - linia fizyczna nie użyta
  • 7 - niezgodność kierunku transmisji urządzenia i protokołu
  • 8 - linia fizyczna zajęta
  • 9 - brak pamięci na tablice
  • 10 - niezgodność typu protokołu i typu linii fizycznej
  • 11 - błędne parametry protokołu
8-15
  • nr linii fiz dla błędu 2, 3, 4
  • nr linii log dla błędów 5, 6, 7, 8, 10, 11

Pole opisu linii fizycznych:

Słowo Bity Znaczenie
0 0-2 Kierunek:
  • 100 = output
  • 010 = input
  • 110 = half-duplex
  • 111 = full-duplex
3 linia użyta
4-7 Typ urządzenia:
  • 0 = USART
  • 1 = 8255
  • 2 = USART synch,
  • 3 = winchester, ...
  • 4 = taśma magnetyczna, ...
11-15 Liczba linii fizycznych opisanych w powyższy sposób pomniejszona o 1

Pole opisu linii logicznej:

Słowo Bity Znaczenie
0 0-7 nr protokołu
8-15 nr linii fizycznej
1-3 0-15 parametry protokołu

Dla protkolu 6 (Winchester) słowo 1 zawiera:

Słowo Bity Znaczenie
1 0-7 Typ Winchestera:
  • 0 - BASF
  • 1 - NEC
8-15 protekcja formatowania:
  • 0 - formatowanie dozwolone
  • inaczek - formatowanie nie wykonywane

Długość całego pola sterującego wynosi: 1 + 1 + <liczba slow opisu l. fiz.> + 4 * <liczba linii logicznych>

Pole sterujące "dołącz linię"

Pole zawiera tylko parametry przekazywane.

Protokół nr 0 - czytnik taśmy

Słowo Bity Znaczenie
0 0 obserwuj znacznik końca wejścia (taśmy)
1 nie sprawdzaj parzystości
2 odd parity
3 przekazuj 8 bitów
5 obsługuj BS oraz CAN
7 obserwuj "zgłoszenie operatora"
8-15 kod znacznika końca wejścia (taśmy)
1 0-7 kod zgłoszenia operatora
8-15 nr procedury obsługi tekstu:
  • 0 = nic,
  • ...

Protokół nr 1 - perforator taśmy

Słowo Bity Znaczenie
0 2 odd parity
3 przesyłaj 8 bitów (= bez parzystości)
6 zamień małe litery na duże
8-15 nr procedury obsługi tekstu:
  • 0 = nic,
  • ...

Protokół nr 2 - monitor

Słowo Bity Znaczenie
0 0 obserwuj znacznik końca wejścia
1 nie sprawdzaj i nie generuj parzystości
2 odd parity
3 przekazuj 8 bitów do MERA
4 wykonaj XON/XOFF
5 obsługuj BS oraz CAN
6 zamień małe litery na duże dla nadawania
7 obserwuj "zgłoszenie operatora"
8-15 kod znacznika końca wejścia
1 0-7 kod zgłoszenia operatora
8-15 nr procedury obsługi tekstu:
  • 0 = nic,
  • 2 = edytor,
  • ...
2 0-15 parametry procedury obróbki tekstu

Pole sterujące "podaj status linii"

Pole zawiera tylko parametry zwracane.

Słowo Bity Znaczenie
0 7 linia jest dołączona
8 było zgłoszenie operatora
9 błąd parzystości
10 odebrano znak kończący
12 odbiór jest w toku
13 odbiór był rozpoczęty
14 nadawanie jest w toku
15 nadawanie było rozpoczęte

Pole sterujące "przesyłaj"

Pole zawiera w pierwszej części parametry przekazywane, a w drugiej, oznaczonej kolorem - parametry zwracane. W parametrach zwracanych występuje słowo „sposób zakończenia” o strukturze identycznej dla wszystkich protokołów podstawowych. Struktura tego słowa i zastosowanie poszczególnych bitów w konkretnych protokołach pokazane jest w poniższej tabeli.

Sposób zakończenia:

Bit Znaczenie Stosuje się do protokołu nr
0 1 2
0 timeout tak tak tak
1 zgłoszenie operatora tak nie tak
2 awaria urządzenia tak tak tak
3 koniec znaków przed znakiem kończącym nadawanie nie tak tak
4 błąd parzystości tak nie tak
5 inny błąd transmisji tak nie tak
7 znak końca wejścia tak nie tak

Jeżeli przesyłanie kończy się prawidłowo to sposób zakończenia /0-7/ = 0.

Protokół nr 0 - czytnik taśmy

Słowo Bity Znaczenie
0 0-1 procedura obróbki: 0=norm., 1=bin
2 ignoruj początkowe nule
3 odbieraj wg długości bufora MERA
4 odbieraj do znaku kończącego wyłącznie
5 odbieraj do znaku kończącego włącznie
8-15 timeout [sek]. 1-127 lub 0.
1 0-15 długość bufora odbiorczego MERA [bajty]
2 0-15 adres bufora odbiorczego MERA [słowowy]
3 9 nr bajtu początkowego bufora odbiorczego
12-15 nr bloku bufora odbiorczego
4 0-7 znak kończący odbiór
8-15 0 lub dodatkowy znak kończący odbiór
5 0-15 ilość bajtów odebranych i nieprzekazanych do MERA
6 0-15 ilość bajtów przekazanych ostatnim poleceniem sterującym
7 0-15 sposób zakończenia

Protokół nr 1 - perforator taśmy

Słowo Bity Znaczenie
0 0 nadawaj wg ilości
1 nadawaj do znaku kończącego wyłącznie
2 nadawaj do znaku kończącego włącznie
6-7 procedura obróbki: 0=norm., 1=bin
8-15 timeout [sek]. 1-127 lub 0.
1 0-15 ilość znaków do nadania
2 0-15 adres bufora nadawczego MERA [słowowy]
3 0-7 znak kończący nadawanie
9 nr bajtu początkowego w buforze nadawczym
12-15 nr bloku bufora nadawczego
4 0-15 ilość bajtów nadanych
5 0-15 sposób zakończenia

Protokół nr 2 - monitor

Słowo Bity Znaczenie
0 0 nadawaj wg ilości
1 nadawaj do znaku kończącego wyłącznie
2 nadawaj do znaku kończącego włącznie
3 odbieraj wg długości bufora MERA
4 odbieraj do znaku kończącego wyłącznie
5 odbieraj do znaku kończącego włącznie
6 generuj echo
7 wysyłaj tekst zachęty przed odbiorem
8-15 timeout [sek]. 1-127 lub 0.
1 0-15 ilość znaków do nadania
2 0-15 adres bufora nadawczego MERA [słowowy]
3 0-7 znak kończący nadawanie
9 nr bajtu początkowego w buforze nadawczym
12-15 nr bloku bufora nadawczego
4 0-15 długość bufora odbiorczego MERA [bajty]
5 0-15 adres bufora odbiorczego MERA [słowowy]
6 9 nr bajtu początkowego bufora odbiorczego
12-15 nr bloku bufora odbiorczego
7 0-7 znak kończący odbiór
8-15 0 lub dodatkowy znak kończący odbiór
8-9 0-15 tekst zachęty uzupełniony zerami
10 0-15 ilość bajtów nadanych
11 0-15 ilość bajtów odebranych i nieprzekazanych do MERA
12 0-15 ilość bajtów odebranych/przekazanych ostatnim poleceniem sterującym
13 0-15 sposób zakończenia

Protokoły dla SOM-3

Dla systemu SOM-3 przewiduje się 3 protokoły:

  • nr 3 czytnik SOM
  • nr 4 perforator SOM
  • nr 5 monitor SOM

Uwaga: Zasady podane w części podstawowej niniejszego opisu dla protokołów 0, 1, 2 stosują się odpowiednio do protokołów 3, 4, 5, jeżeli poniżej nie podano inaczej.

Pole sterujące "dołącz linię"

Słowo Bity Znaczenie
0 4 wykonaj 'xon/xoff' (dla protokołu 5)
0 7 obserwuj zgłoszenie operatora
0 8-15 kod zgłoszenia operatora

Pole to występuje dla protokołów nr 3 i 5. Dla protokołu nr 4 polecenie dołącz linię nie korzysta z pola sterującego.

Pole sterujące "przesyłaj"

Pole zawiera w pierwszej części parametry przekazywane a w drugiej, oznaczonej kolorem - parametry zwracane. W polu tym występuje słowo "sposób zakończenia" o strukturze następującej:

Bit Znaczenie Stosuje się do protokołu
3 4 5
0 timeout tak tak tak
1 zgłoszenie operatora tak nie tak
2 awaria urządzenia tak tak tak
3 koniec znaków przed znakiem końca nad. nie tak tak
4 błąd parzystości tak nie tak
5 inny błąd transmisji tak nie tak
6 wystąpił CAN nie nie tak
7 wystąpił znak końca wejścia tak nie tak
8-15 znak, który zakończył odbiór lub 255 tak nie tak

Protokół nr 3 - czytnik SOM

Słowo Bity Znaczenie
0 0 nie sprawdzaj parzystości
1 odd - parity
2 przekazuj 8 bitów do MERA
4 LF (#0a) jest znakiem nagłówka
5 DEL (#7f) jest znakiem nagłówka
6 ignoruj spacje poprzedzające znak kończący
8-15 timeout [sek]. 1-127 lub 0.
1 0-1 nr procedury obróbki tekstu: 0=normalnie,1=bin
3 usuwaj LF (#0a) z tekstu odebranego
4 usuwaj DEL (#7f) z tekstu odebranego
5 odbieraj wg długości bufora MERA
6 BS (#08) jest znakiem nagłówka
7 cofnij wskaźnik bufora gdy BS
8-15 kod znacznika końca wejścia
2 0-15 długość bufora odbiorczego MERA [bajty]
3 0-15 adres bufora odbiorczego MERA [słowowy]
4 0 ESC (#1b) jest znakiem nagłówka
1 kończ odbiór gdy ESC
2 NUL (#00) jest znakiem nagłówka
3 kończ odbiór gdy NUL
4 CR (#0d) jest znakiem nagłówka
5 kończ odbiór gdy CR
6 CAN (#18) jest znakiem nagłówka
7 zeruj bufor gdy CAN
9 nr bajtu początkowego w buforze odbiorczym
10 obserwuj znacznik końca wejścia
11 zamię małe litery na duże
12-15 nr bloku bufora odbiorczego
5 0-15 ilość bajtów odebranych i nieprzekazanych do MERA
6 0-15 ilość bajtów przekazanych do MERA ostatnim poleceniem ster.
7 0-15 sposób zakończenia

Protokół nr 4 - perforator SOM

Słowo Bity Znaczenie
0 0 nie generuj bitu parzystości
1 odd - parity
6-7 nr procedury obróbki tekstu: 0=normalnie, 1=bin
8-15 timeout [sek]. 1-127 lub 0.
1 0 nadawaj wg ilości
1 nadawaj do znaku kończącego wyłącznie
2 nadawaj do znaku kończącego włącznie
3 pierwszy znak w buforze jest sterujący
4 poprzedź nadawanie znakami CR, LF (#0d, #0a)
5 poprzedź nadawanie seria nul (rozbiegówka)
6-15 długość rozbiegówki
2 0-15 ilość znaków do nadania
3 0-15 adres bufora nadawczego MERA [słowowy]
4 0-7 znak kończący nadawanie
9 nr bajtu początkowego w buforze nadawczym
12-15 nr bloku bufora nadawczego
5 0-15 ilość bajtów nadanych
6 0-15 sposób zakończenia

Protokół nr 5 - monitor SOM

Słowo Bity Znaczenie
0 0 nie sprawdzaj i nie generuj parzystości
1 odd - parity
2 przekazuj 8 bitów do MERA
3 generuj echo
4 LF (#0a) jest znakiem nagłówka
5 DEL (#7f) jest znakiem nagłówka
6 ignoruj spacje poprzedzające znak kończący
7 wysyłaj tekst zachęty przed odbiorem
8-15 timeout [sek]. 1-127 lub 0.
1 0 nadawaj wg ilości
1 nadawaj do znaku kończącego wyłącznie
2 nadawaj do znaku kończącego włącznie
3 pierwszy znak w buforze jest sterujący
4 poprzedź nadawanie znakami CR,LF (#0d,#0a)
5 odbieraj wg długości bufora MERA
6 BS (#08) jest znakiem nagłówka
7 cofnij wskaźnik bufora gdy BS
8-15 kod znacznika końca wejścia
2-3 0-15 tekst zachęty uzupełniony nul-ami
4 0-15 ilość znaków do nadania
5 0-15 adres bufora nadawczego MERA [słowowy]
6 0-7 znak kończący nadawanie
9 nr bajtu początkowego w buforze nadawczym
10 usuwaj LF (#0a) z tekstu odebranego
11 usuwaj DEL (#7f) z tekstu odebranego
12-15 nr bloku bufora nadawczego
7 0-15 długość bufora odbiorczego MERA [bajty]
8 0-15 adres bufora odbiorczego MERA [słowowy]
9 0 ESC (#1b) jest znakiem nagłówka
1 kończ odbiór gdy ESC
2 NUL (#00) jest znakiem nagłówka
3 kończ odbiór gdy NUL
4 CR (#0d) jest znakiem nagłówka
5 kończ odbiór gdy CR
6 CAN (#18) jest znakiem nagłówka
7 zeruj bufor gdy CAN
9 nr bajtu początkowego w buforze odbiorczym
10 obserwuj znacznik końca wejścia
11 zamię małe litery odebrane na duże
12-15 nr bloku bufora odbiorczego
10 0-15 ilość bajtów nadanych
11 0-15 ilość bajtów odebranych i nieprzekazanych do MERA
12 0-15 ilość bajtów przekazanych do MERA ostatnim poleceniem ster.
13 0-15 sposób zakończenia

Obróbka sekwencji odbieranej

Sekwencja odbierana składa się z:

  • nagłówka
  • tekstu

Nagłówek jest usuwany z bufora odbiorczego. Nagłówek zostaje zakończony przez dowolny znak,który nie jest zadeklarowany jako znak nagłówka. Na znakach należących do tekstu mogą być - o ile są ustawione odpowiednie bity w polu sterującym - wykonywane operacje:

  • zamiana małych liter na duże
  • usuwanie znaków LF, DEL
  • usuwanie wszystkich odebranych znaków przed znakiem can; Ponadto dla protokołu nr 5: znak CAN nie generuje echa oraz powoduje zakończenie transmisji z przerwaniem "ITRER"
  • usuwanie ostatniego znaku przed znakiem BS
  • kończenie odbioru po znakach ESC, NUL, CR.

Znaki sterujące dla nadawania

  • + - tekst zostaje poprzedzony znakiem CR (#0d)
  • 0 - tekst zostaje poprzedzony znakami CR, LF, LF (#0d, #0a, #0a)
  • 1 - tekst zostaje poprzedzony znakami CR,FF (#0d, #0c)
  • $ - tekst zostaje wyprowadzony bez poprzedzania dodatkowymi znakami
  • Kaidy inny - tekst zostaje poprzedzony znakami CR, LF (#0d, #0a)

Jeżeli po znaku sterującym występuje znak STX (#02) to zostaje on usunięty.

Źródło: Styk MERA-MULTIX, wersja J, Amepol, 1987-02-19