Úplný popis služeb linkového modulu - jen pro naši soukromou potřebu ! Publikační verze je v souboru INTER.FRM 1. Typy zpráv Služby vysílání a příjmu zpráv jsou dostupné prostřednictvím programového přerušení 48H. Tyto funkce využívají registry AX,BX,EX,CY. Zbývající registry jsou nezměněny. Seznam služeb: * 00H Vyšli bez nastavení příznaku 01H Vyšli zprávu a pak nastav příznak 02H Dodej vlastní adresu a jméno 04H Vypůjčení bufferu od linkového modulu 05H Vrácení bufferu vypůjčeného službou 04H 09H Přijmi zprávu, předej ji v bufferu linkového modulu 0BH Vrať bufferu vypůjčeného službou 09H 0DH Zakaž vysílání 0EH Povol vysílání 0FH V AX vrátí adresu EXTRA segmentu linkového modulu * 10H Žádost o trvalý příjem zpráv * 11H Přijmi zprávu bez nastavení příznaku * 12H Zruš trvalý příjem zpráv Pouze funkce označené hvězdičkou jsou zveřejňovány běžným uživatelům, mezi které řadím i VUIS. 2. Vysílání zpráv Požadavek na vysílání je předán jádru sítě. Po zkontrolování formální správnosti požadavku je zařazen do vysílací fronty a řízení je předáno zpět uživatelskému programu. Vstup: AH 0 nebo 1 ES:BX Adresa SCB - Send Control Block SCB obsahuje informace nutné k vyslání zprávy Výstup: AL Odpověď CY Nastaven při chybě Send Control Block obsahuje tyto informace: +0 S_REPLY Byte odpovědi. První odpověď je nastavena po vznesení požadavku na vysílání (chyba nebo "dosud se vysílá"). Tato hodnota je k dispozici i v AL. Po ukončení vysílání je zde druhá odpověď informující o úspěšnosti vysílání. V tomto bytu tedy uživatelský program sleduje průběh vysílání. +1 S_RESERVE Rezervováno pro potřebu jádra FELANu. Ve funkci 01H je zde uvedeno číslo příznaku, který se nastaví po úplném dokončení služby. +2 S_RQACK Má-li tento byte nenulovou hodnotu, adresát potvrzuje přijetí zprávy. V takovém případě příkaz "vyšli zprávu" končí přijetím potvrzení nebo vyčerpáním časového limitu, ve kterém měl potvrzení obdržet. Časový limit začíná okamžikem fyzického vyslání zprávy, uživatel jeho velikost nemůže ovlivnit. +3 S_TMOUT Time-out pro vysílání. Požadavky na vysílání jsou odebírány z vysílací fronty a zprávy vysílány. Je-li síť přetížena a zprávu se nedaří vyslat, je po zvolené době (time-out) hlášena chyba. Velikost time-outu se udává v násobcích 55 ms. 0 - jádro použije standardní hodnotu, která bude upřesněna dle zkušeností >0 - toto je time-out <0 - vysílání bez časového omezení +4 S_FUTURE Plánováno pro adresaci jiných sítí. Je zde uvedeno číslo sítě, nula znamená, že adresát pracuje ve stejné síti jako odesilatel zprávy. Zatím je hodnota tohoto bytu ignorována. +5 S_ADRTO Adresát +6 S_LEN Délka vysílané zprávy je uložena ve slově. Vysílaná zpráva je dlouhá max. 591 bytů. +8 S_BUF Dvouslovo obsahující adresu bufferu s textem zprávy. Text zprávy začíná bytem s typem (druhem) zprávy. 3. Příjem zpráv Komunikace mezi uživatelským programem a jádrem probíhá prostřednictvím datové struktury Receive Control Block - RCB. Ve funkcích vlastního přijetí zprávy a zrušení trvalého příjmu zpráv je nutno uvádět tu adresu RCB, která byla použita pro funkci 10H. Upozornění: Funkce pracující přímo s buffery linkového modulu je nutno používat zvláště obezřetně, neboť linkový modul nekontroluje správnost zadaných parametrů! Přepsání okolí bufferu může mít tragické následky! V RCB jsou obsaženy položky: +0 R_REPLY Byte odpovědi na prováděné příkazy +1 R_RESERVE Vyhrazeno pro nás. Je zde uveden příznak (nebo 0), který se nastaví vždy, je-li pro uživatele přijata zpráva. Funkce 10H tento byte vynuluje, proto se musí nastavit později. +2 R_MIN +3 R_MAX Byty R_MIN a R_MAX udávají rozsah typů (čísel) přijímaných zpráv. +4 R_RCVD Hodnota položky udává počet zpráv, které byly přijaty a čekají v prijímací frontě na předání uživateli. +5 R_TMOUT Time-out pro příjem. Pokud po vydání příkazu "přijmi zprávu" není zpráva v přijímací frontě a ani není přijata v zadaném časovém limitu, je to považováno za chybu. R_TMOUT se udává v násobcích 55 ms: 0 - jádro použije standardní hodnotu, která bude upřesněna na základě zkušeností >0 - toto je time-out <0 - příjem zprávy bez časového omezení +6 R_FUTURE Plánováno pro adresaci jiných sítí. Je zde uvedeno číslo sítě odesilatele zprávy. Nula znamená, že odesilatel pracuje ve stejné síti jako příjemce. Zatím zde jádro nastavuje nulu. +7 R_ADRFROM Adresa odesilatele zprávy +8 R_LEN Slovo obsahující délku bufferu pro uložení zprávy. Lze přijmout zprávu dlouhou nejvýšee 591 bytů. +10 R_BUF Dvouslovo udávající adresu bufferu s přijatou zprávou. Prvním bytem ve zprávě jej její typ. Funkce 10H - požadavek na příjem zpráv Vstup: AH 10H ES:BX Adresa RCB V RCB jsou nastaveny položky R_MIN a R_MAX Výstup AL Byte odpovědi CY Nastaven při chybě Touto funkcí uživatelský program sděluje jádru, že chce trvale přijímat zprávy, jejichž typ je z intervalu R_MIN až R_MAX. Byte R_RESERVE je touto funkcí vynulován. Uvede-li zde později uživatel číslo příznaku jiného než nula, je tento příznak nastaven vždy, když se přijme zpráva a uloží se do přijímací fronty. Z přijímací fronty si ji uživatel vyzvedne funkcí 11H nebo 09H. Pokud první zpráva přijímací fronty není uživatelem odebránaP do časového limitu (momentálně 30 sekund), je zapomenuta. Funkce 11H - přijmi zprávu Vstup AH 11H ES:BX Adresa RCB V RCB musí být nastaveny položky R_TMOUT, R_LEN, R_BUF Výstup AL Byte odpovědi CY Nastaven při chybě R_LEN Udává skutečnou délku přijaté zprávy Uživatelskému programu je z přijímací fronty předána přijatá zpráva. Není-li ve frontě vhodná zpráva, jádro sítě po dobu R_TMOUT čeká na její přijetí. Po tuto dobu je uživatelský program zastaven. Před provedením služby je v R_LEN nastavena max. délka zprávy, při předání zprávy uživatelskému programu je do R_LEN zapsána skutečná délka přijaté zprávy. Funkce 09H - přijmi zprávu do bufferu linkového modulu Vstup AH 09H ES:BX Adresa RCB V RCB musí být nastaveny položky R_TMOUT a případně R_RESERVE Výstup AL Byte odpovědi CY Nastaven při chybě R_LEN Udává skutečnou délku přijaté zprávy R_BUF Udává adresu bufferu s přijatou zprávou Uživatelskému programu je z přijímací fronty předán buffer s přijatou zprávou. Není-li ve frontě vhodná zpráva, jádro sítě po dobu R_TMOUT čeká na její přijetí. Po tuto dobu je uživatelský program zastaven. Při předání bufferu uživatelskému programu je do R_LEN zapsána skutečná délka přijaté zprávy a do R_BUF adresa bufferu. Po zpracování zprávy musí uživatel buffer vrátit linkovému modulu funkcí 0BH. Funkce 12H - zruš příjem zpráv Vstup AH 12H ES:BX Adresa RCB Výstup AL Byte odpovědi CY Nastaven při chybě Tuto funkci musí program použít, jestliže již nechce dále přijímat žádné zprávy nebo se chystá ukončit svoji činnost. Funkce 0BH - vrácení bufferu linkovému modulu Vstup AH 0BH ES:BX Adresa RCB V RCB je nastavena položka R_BUF 4. Jiné služby Funkce 02H - Dodej vlastní adresu a jméno Vstup AH 02H Výstup ES:BX Adresa řetězce jména (9 byte) CX Vlastní adresa (CH uzel, CL fragment-větev) Funkce 05H - Vrácení bufferu vypůjčeného službou 04H Vstup AH 05H BX Offset-adresa vypůjčeného bufferu CY Nastaven, není-li žádný buffer volný Funkce 04H - Vypůjčení bufferu od linkového modulu Vstup AH 04H Výstup ES:BX Adresa bufferu o velikosti 600 bytů Funkce 05H - Vrácení bufferu vypůjčeného službou 04H Vstup AH 05H BX Offset-adresa vypůjčeného bufferu CY Nastaven, není-li žádný buffer volný Pozor ! ## Uvedení nesprávnného offsetu může mít tragické následky pro další činnost linkového modulu ! Funkce 0DH - Zastav vysílání Vstup AH 0DH Po vydání příkazu se přestanou zprávy vysílat a začnou se hromadit ve vysílací frontě. Funkce 0EH - Povol vysílání Vstup AH 0EH Touto funkcí lze znovu povolit dříve zastavené vysílání. Funkce 0FH - Dodej adresu EXTRA segmentu Vstup AH 0EH Výstup AX Adresa EXTRA segmentu. V tomto segmentu jsou uložena data a buffery linkového modulu. 5. Seznam chyb K chybám dochází vlivem vznesení chybných požadavků na přenos zpráv, vlastnostmi použitého protokolu CSMA/CD nebo dosažením maxima možností FELANu. -1 Příkaz se provádí 0 Příkaz se úspěšně provedl 1 Formální chyba požadavku 2 Požadovaný typ zpráv již někdo přijímá 3 Příliš mnoho požadavků na trvalý příjem 4 Adresa RCB nebyla použita ve funkci 11 5 V SCB je uvedena chybná délka zprávy 6 Příliš mnoho požadavků na příjem 7 Vyžádané potvrzení nepřišlo v časovém limitu 8 Přijatá zpráva je delší než buffer, byla oříznuta 9 Time-out