Rozdział 1BLOKI KONTROLI I/ODo przesyłania informacji pomiędzy programem użytkownika (lub językiem wyższego poziomu) a procedurą CIO służą bloki kontroli wejścia/wyjścia (IOCB - Input/Output Control Block), zwane także kanałami wejścia/wyjścia (Input/Output Channel), Są to szesnastobajtowe obszary pamięci RAM znajdujące się na stronie trzeciej: IOCB0 od adresu $340 (832), IOCB1 od $350 (848), IOCB2 od $360 (864), IOCB3 od $370 (880), IOCB4 od $380 (896), IOCB5 od $390 (912), IOCB6 od $3A0 (928) i IOCB7 od $3B0 (944). Te osiem bloków pozwala na jednoczesną współpracę komputera z ośmioma urządzeniami zewnętrznymi, przy czym IOCB0 jest standardowo wykorzystywany do obsługi edytora.Dodatkowy dziewiąty blok - ZIOCB (Zeropage IOCB) - znajduje się na stronie zerowej od adresu $20 (32). Jest on wykorzystywany do komunikacji pomiędzy CIO i procedurami obsługi poszczególnych urządzeń. Umieszczenie go na stronie zerowej przyspiesza komunikację z urządzeniami peryferyjnymi, dzięki zastosowaniu zerostronicowego trybu adresowania procesora 6502. Struktura wszystkich dziewięciu IOCB jest jednakowa. Znaczenie kolejnych rejestrów jest następujące (w nawiasie nazwa rejestru w ZIOCB): ICCHID (ICHIDZ) - numer identyfikacyjny urządzenia, wskazuje na wpis w tabeli HATABS określający dane urządzenie. Ustawiany przez CIO po odnalezieniu wpisu; gdy IOCB nie jest używany oraz po zamknięciu kanału IOCB, zawiera wartość $FF. ICDNO (ICDNOZ) - numer urządzenia ustawiany przez CIO według podanej nazwy (np. "D2:NAME.EXT") lub standardowo na 1, gdy dane urządzenie może być tylko jedno lub numer nie został podany. ICCMD (ICCOMZ) - kod rozkazu (operacji) do wykonania przez CIO, ustawiany przez program użytkownika. Dozwolone są następujące kody operacji:
$03 - OPEN
$05 - GET RECORD
$07 - GET BYTE(S)
$09 - PUT RECORD
$0B - PUT BYTE(S)
$0C - CLOSE
$0D - STATUS
Oprócz tego operacje o kodzie $0E (14) i większym są traktowane
jako operacje specjalne i wykonanie ich zależy od rodzaju
urządzenia.ICSTAT (ICSTZ) - status wykonanej operacji IO, ustawiany przez CIO po zakończeniu operacji. Wartość $01 oznacza poprawne wykonanie operacji, a wartość większa od $80 sygnalizuje błąd. Status operacji jest umieszczany również w rejestrze Y procesora przed zakończeniem procedury CIO. ICBUFA (ICBAZ) - adres bufora danych dla operacji CIO, ustawiany przez program użytkownika. Podczas operacji OPEN, STATUS itp. zawiera adres nazwy urządzenia. ICPUTB (ICPTZ) - zmniejszony o jeden adres procedury wykonującej żądaną operację, ustawiany przez CIO. Gdy kanał IOCB jest zamknięty, wskazuje procedurę CIONOPN ($E4DC). ICBUFL (ICBLZ) - długość bufora danych dla operacji CIO, ustawiana przez program użytkownika. Podczas operacji PUT BYTE i GET BYTE wartość $00 oznacza, że przesyłany bajt znajduje się w akumulatorze.
+------------+
+$00 | ICCHID |
+------------+
+$01 | ICDNO |
+------------+
+$02 | ICCMD |
+------------+
+$03 | ICSTAT |
+------------+
+$04 | |
+-- ICBUFA --+
+$05 | |
+------------+
+$06 | |
+-- ICPUTB --+
+$07 | |
+------------+
+$08 | |
+-- ICBUFL --+
+$09 | |
+------------+
+$0A | ICAX1 |
+------------+
+$0B | ICAX2 |
+------------+
+$0C | ICAX3 |
+------------+
+$0D | ICAX4 |
+------------+
+$0E | ICAX5 |
+------------+
+$0F | ICAX6 |
+------------+
Rys.2. Struktura IOCB.
ICAX1 (ICAX1Z) - rejestr pomocniczy numer 1. Podczas
operacji OPEN oznacza rodzaj dostępu do urządzenia (zapis,
odczyt i in.).ICAX2 (ICAX2Z) - rejestr pomocniczy numer 2. Zastosowanie tego i następnych rejestrów pomocniczych jest w przeważającej części zależne od rodzaju urządzenia zewnętrznego (a właściwie od jego procedury obsługi). ICAX3 (ICAX3Z) - rejestr pomocniczy numer 3. Wraz z rejestrem ICAX4 służy do przekazywania adresów podczas procedury CIO oraz do przekazywania numeru sektora dla instrukcji Basica NOTE i POINT. ICAX4 (ICAX4Z) - rejestr pomocniczy numer 4 (zob. wyżej). ICAX5 (ICAX5Z) - rejestr pomocniczy numer 5. Służy do przekazywania numeru bajtu w sektorze dla instrukcji Basica NOTE i POINT oraz do przechowywania numeru IOCB podczas procedury CIO. ICAX6 (ICAX6Z) - rejestr pomocniczy numer 6. Wykorzystywany przez CIO m. in. do przechowywania transmitowanego bajtu. Dokładne znaczenie poszczególnych rejestrów IOCB (przede wszystkim ICAX1-6) będzie wyjaśnione przy opisach działania procedur CIO. |