CIO

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 01:28, 12 gru 2004
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 01:28, 12 gru 2004
KMK (Dyskusja | wkład)
(Struktura IOCB)
Next diff →
Linia 15: Linia 15:
====Struktura IOCB==== ====Struktura IOCB====
-<table broder=1><cellpadding=5>+<table broder=1 cellpadding=5>
<tr><td>Bajt</td><td>Etykieta</td><td>Opis</td></tr> <tr><td>Bajt</td><td>Etykieta</td><td>Opis</td></tr>

Wersja z dnia 01:28, 12 gru 2004

CIO - Central Input/Output - rezydujący w pamięci ROM komputera podsystem XL OS-u odpowiedzialny za obsługę plików.

Sposób użycia

Żądaną operację definiuje się ustawiwszy przedtem odpowiednie zmienne w wybranym bloku IOCB (Input/Output Control Block, $0340-$03BF), a nastepnie wywołuje skokiem JSR pod JCIOMAIN $E456, co jest punktem wejściowym podsystemu zarządznia plikami. Przy powrocie rejestr Y zawiera wartość 1 w przypadku powodzenia, bądź ujemny kod błędu.

Bloki kontroli wejścia/wyjścia

Pod adresem $0340 znajduje się zajmujący 128 bajtów pamięci obszar bloków kontroli wejścia/wyjścia (IOCB). Bloków tych jest osiem, każdy z nich definiuje jeden niezależny "kanał" transmisji danych z wybranym urządzeniem. Blok numer 0 jest zajęty przez standardowy edytor ekranowy (urządzenie "E:", konsola systemowa). Reszta jest do wykorzystania przez programy, np. BASIC używa kanału nr 7 do wysyłania danych na drukarkę instrukcją LPRINT, a kanału nr 6 jako ekranu graficznego (otwieranego instrukcją GRAPHICS).

Użycie interfejsu CIO polega na wypełnieniu wybranego IOCB odpowiednimi wartościami, załadowaniu do rejestru X pomnożonego przez 16 numeru kanału, oraz - przy zapisie bajt po bajcie - ewentualnej danej do akumulatora, a następnie wywołaniu procedury CIOMAIN przez skok JSR pod adres $E456. Przy powrocie rejestr Y zawiera wartość 1 w przypadku powodzenia lub ujemny kod błędu, akumulator zaś - przy odczycie bajt po bajcie - ewentualną daną.

Struktura IOCB

BajtEtykietaOpis
0ICCHID Tzw. numer identyfikacyjny. Tak naprawdę jest to indeks wpisu w tablicy handlerów wskazującego dane urządzenie. Ustawiany jest automatycznie przez system. Wartość $FF oznacza, że kanał jest zamknięty, każda inna - że jest w użyciu.
1ICDNO Numer urządzenia podanego przez użytkownika (np. 3 dla "D3:NAZWA") albo 1, gdy numer nie został podany. Ustawiane automatycznie przez system.
2ICCMD Kod żądanej operacji (rozkaz); ustawiany przez program. Dozwolone kody:
  • $03 - OPEN - otwarcie pliku
  • $05 - GET RECORD - odczyt danych w trybie tekstowym
  • $07 - GET BYTES - odczyt danych w trybie binarnym
  • $09 - PUT RECORD - zapis danych w trybie tekstowym
  • $0B - PUT BYTES - zapis danych w trybie binarnym
  • $0C - CLOSE - zamknięcie pliku
  • $0D - STATUS - odczyt statusu handlera

Wszystkie pozostałe kody o wartościach powyżej 13 ($0D) są traktowane jako kody operacji specjalnych i przekazywane bezpośrednio do handlera urządzenia, bez interpretacji przez system.

3ICSTAT Status operacji ustawiany automatycznie po jej wykonaniu, czyli wartość 1 gdy sukces lub ujemny kod błędu. Czyli to samo, co jest przekazywane w rejestrze Y przy powrocie z CIO.
4-5ICBUFA Adres bufora dla operacji, ustawiany przez użytkownika. Dla OPEN, STATUS i operacji specjalnych powinien wskazywać nazwę pliku.
6-7ICPUTB Zmniejszony o 1 adres procedury wysyłania 1 bajtu do urządzenia. Ustawiany automatycznie przez system w czasie otwierania pliku.
8-9ICBUFL Wielkość bufora dla danej operacji, ustawiany przez program użytkownika. Jeśli wynosi 0, to bajt przekazywany jest w akumulatorze.
10ICAX1 Pierwszy bajt pomocniczy, przy otwieraniu pliku oznacza rodzaj dostępu ($04 - odczyt, $08 - zapis, $0C - zapis i odczyt). W BASIC-u jest to drugi parametr instrukcji OPEN.
11ICAX2 Drugi bajt pomocniczy. Jego znaczenie jest zależne od handlera, np. przy otwieraniu ekranu w trybie graficznym będzie to numer trybu graficznego.
12ICAX3 Trzeci bajt pomocniczy. Jego znaczenie jest zależne od handlera.
13ICAX4 Trzeci bajt pomocniczy. Jego znaczenie jest zależne od handlera.
14ICAX5 Czwarty bajt pomocniczy. Jego znaczenie jest zależne od handlera.
15ICAX6 Piąty bajt pomocniczy. Jego znaczenie jest zależne od handlera.
Personal tools