SIO
From Atariki
Wersja z dnia 23:02, 8 gru 2004 KMK (Dyskusja | wkład) (małe uzupełnienie) ← Previous diff |
Wersja z dnia 23:05, 8 gru 2004 KMK (Dyskusja | wkład) Next diff → |
||
Linia 19: | Linia 19: | ||
<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> |
- | <tr><td>$0307</td><td>DUNUSE</td><td>Bajt</td><td>Bajt nieużywany, zarezerwowany do przyszłych zastosowań</td></tr> | + | <tr><td>$0307</td><td>DUNUSE</td><td>Bajt</td><td>Bajt nieużywany, zarezerwowany do przyszłych zastosowań.</td></tr> |
- | <tr><td>$0308</td><td>DBYT</td><td>Dwa bajty</td><td>Wielkość bufora; musi być zgodna z wielkością transmitowanego bloku danych</td></tr> | + | <tr><td>$0308</td><td>DBYT</td><td>Dwa bajty</td><td>Wielkość bufora; musi być zgodna z wielkością transmitowanego bloku danych.</td></tr> |
- | <tr><td>$030A</td><td>DAUX1</td><td>Bajt</td><td>Pierwszy bajt pomocniczy. W operacjach dyskowych młodszy bajt numeru sektora</td></tr> | + | <tr><td>$030A</td><td>DAUX1</td><td>Bajt</td><td>Pierwszy bajt pomocniczy. W operacjach dyskowych młodszy bajt numeru sektora.</td></tr> |
- | <tr><td>$030B</td><td>DAUX2</td><td>Bajt</td><td>Drugi bajt pomocniczy. W operacjach dyskowych starszy bajt numeru sektora</td></tr> | + | <tr><td>$030B</td><td>DAUX2</td><td>Bajt</td><td>Drugi bajt pomocniczy. W operacjach dyskowych starszy bajt numeru sektora.</td></tr> |
</table> | </table> |
Wersja z dnia 23:05, 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ń.
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.).
Żą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. |