Powrót do spisu treści |
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 - STATUSOpró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. |