SIO
From Atariki
Wersja z dnia 23:07, 8 gru 2004 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 23:14, 8 gru 2004 KMK (Dyskusja | wkład) (→Sposób użycia) Next diff → |
||
Linia 11: | Linia 11: | ||
<table border=1 cellpadding=5> | <table border=1 cellpadding=5> | ||
<tr><td>Adres</td><td>Etykieta</td><td>Wielkość</td><td>Znaczenie</td></tr> | <tr><td>Adres</td><td>Etykieta</td><td>Wielkość</td><td>Znaczenie</td></tr> | ||
- | <tr><td>$0300</td><td>DDEVIC</td><td>bajt</td><td>Identyfikator urządzenia. W przypadku stacji dysków trzeba podać identyfikator zwiększony o 1!</td></tr> | + | <tr><td>$0300</td><td>DDEVIC</td><td>Bajt</td><td>Identyfikator urządzenia. W przypadku stacji dysków trzeba podać identyfikator zwiększony o 1!</td></tr> |
- | <tr><td>$0301</td><td>DUNIT</td><td>bajt</td><td>Numer urządzenia; w przypadku stacji dysków numer napędu.</td></tr> | + | <tr><td>$0301</td><td>DUNIT</td><td>Bajt</td><td>Numer urządzenia; w przypadku stacji dysków numer napędu.</td></tr> |
- | <tr><td>$0302</td><td>DCMND</td><td>bajt</td><td>Komenda dla urządzenia.</td></tr> | + | <tr><td>$0302</td><td>DCMND</td><td>Bajt</td><td>Komenda dla urządzenia.</td></tr> |
- | <tr><td>$0303</td><td>DSTATS</td><td>bajt</td><td>Przed wywołaniem SIO należy ustawić tu rodzaj operacji ($40 odczyt, $80 zapis). Po powrocie z systemu znajduje się tu status operacji ([[kody błędów|kod błędu]]).</td></tr> | + | <tr><td>$0303</td><td>DSTATS</td><td>Bajt</td><td>Przed wywołaniem SIO należy ustawić tu rodzaj operacji ($40 odczyt, $80 zapis). Po powrocie z systemu znajduje się tu status operacji ([[kody błędów|kod błędu]]).</td></tr> |
<tr><td>$0304</td><td>DBUFA</td><td>Dwa bajty</td><td>Adres bufora.</td></tr> | <tr><td>$0304</td><td>DBUFA</td><td>Dwa bajty</td><td>Adres bufora.</td></tr> | ||
<tr><td>$0306</td><td>DTIMLO</td><td>Bajt</td><td>Czas oczekiwania na pozytywną odpowiedź urządzenia.</td></tr> | <tr><td>$0306</td><td>DTIMLO</td><td>Bajt</td><td>Czas oczekiwania na pozytywną odpowiedź urządzenia.</td></tr> | ||
Linia 32: | Linia 32: | ||
przy czym identyfikator urządzenia to górne 4 bity podanego kodu, dolne natomiast 4 bity stanowi indywidualny numer urządzenia (np. $31 - stacja dysków nr 1, $32 - stacja dysków nr 2 itd.). | przy czym identyfikator urządzenia to górne 4 bity podanego kodu, dolne natomiast 4 bity stanowi indywidualny numer urządzenia (np. $31 - stacja dysków nr 1, $32 - stacja dysków nr 2 itd.). | ||
+ | |||
+ | Wykaz typowych komend: | ||
+ | |||
+ | <table border=1 cellpadding=5> | ||
+ | <tr><td>Kod</td><td>Nazwa</td><td>Urządzenie</td><td>R/O</td><td>Ilość danych</td><td>Opis</td></tr> | ||
+ | <tr><td>$21 ("!")</td><td>FORMAT DISK</td><td>$31 (stacja dysków)</td><td>R</td><td>128 B</td><td>Formatuje dyskietkę w wybranej uprzednio (komendami PERCOM) gęstości, lub w [[Formaty dyskietek|pojedynczej gęstości]], jeśli stacja nie jest konfigurowalna</td></tr> | ||
+ | |||
+ | |||
+ | </table> |
Wersja z dnia 23:14, 8 gru 2004
SIO - Serial Input/Output. W założeniach jest to rezydujący w ROM-ie podsystem niskopoziomowych procedur blokowego dostępu do urządzeń szeregowych.
W serii XL do podsystemu SIO dodano także niskopoziomową (blokową) obsługę urządzeń podłączanych do szyny równoległej (PBI), czyli tak zwanych nowych urządzeń.
Sposób użycia
Żądaną operację definiuje się ustawiwszy przedtem odpowiednie zmienne w bloku DCB (Device Control Block, $0300), a nastepnie wywołuje skokiem JSR pod JSIOINT $E459, co jest punktem wejściowym interfejsu szeregowo-równoległego. Przy powrocie rejestr Y zawiera wartość 1 w przypadku powodzenia, bądź ujemny kod błędu.
Struktura DCB:
Adres | Etykieta | Wielkość | Znaczenie |
$0300 | DDEVIC | Bajt | Identyfikator urządzenia. W przypadku stacji dysków trzeba podać identyfikator zwiększony o 1! |
$0301 | DUNIT | Bajt | Numer urządzenia; w przypadku stacji dysków numer napędu. |
$0302 | DCMND | Bajt | Komenda dla urządzenia. |
$0303 | DSTATS | Bajt | Przed wywołaniem SIO należy ustawić tu rodzaj operacji ($40 odczyt, $80 zapis). Po powrocie z systemu znajduje się tu status operacji (kod błędu). |
$0304 | DBUFA | Dwa bajty | Adres bufora. |
$0306 | DTIMLO | Bajt | Czas oczekiwania na pozytywną odpowiedź urządzenia. |
$0307 | DUNUSE | Bajt | Bajt nieużywany, zarezerwowany do przyszłych zastosowań. |
$0308 | DBYT | Dwa bajty | Wielkość bufora; musi być zgodna z wielkością transmitowanego bloku danych. |
$030A | DAUX1 | Bajt | Pierwszy bajt pomocniczy. W operacjach dyskowych młodszy bajt numeru sektora. |
$030B | DAUX2 | Bajt | Drugi bajt pomocniczy. W operacjach dyskowych starszy bajt numeru sektora. |
Interfejs SIO znajdujący się w ROM-ie rozpoznaje cztery predefiniowane urządzenia:
- $30: dyskową pamięć masową (stację dysków, twardy dysk)
- $40: drukarkę
- $50: interfejs RS-232
- $60: magnetofon kasetowy
przy czym identyfikator urządzenia to górne 4 bity podanego kodu, dolne natomiast 4 bity stanowi indywidualny numer urządzenia (np. $31 - stacja dysków nr 1, $32 - stacja dysków nr 2 itd.).
Wykaz typowych komend:
Kod | Nazwa | Urządzenie | R/O | Ilość danych | Opis |
$21 ("!") | FORMAT DISK | $31 (stacja dysków) | R | 128 B | Formatuje dyskietkę w wybranej uprzednio (komendami PERCOM) gęstości, lub w pojedynczej gęstości, jeśli stacja nie jest konfigurowalna |