[ Pobierz całość w formacie PDF ]
ICHID 0 Wpisuje OS. Indeks w HATABS nazwy urządze-
nia dla pliku bieżąco otwartego
ICDNO 1 Wpisuje OS. Nr urządzenia, np. 1 dla D1:
ICCOM 2 Komenda określająca rodzaj czynności
ICSTA 3 Wpisuje OS. Status urządzenia. 1 gdy ope-
racja przebiegła pomyślnie, numer błędu w
przeciwnym wypadku
ICBAL/H 4 i 5 Dwubajtowy adres buforu dla przesyłu da-
nych lub adres nazwy pliku
ICPTL/H 6 i 7 Wpisuje OS. Adres minus 1 programu przes-
łania bajtu do danego urządzenia
ICBLL/H 8 i 9 Długość buforu wskazanego w ICBA (4-5).
OS zmniejsza ją o 1 po każdym przesłanym
bajcie
ICAX1 A Bajt pomocniczy 1. Używany w OPEN do ok-
reślania rodzaju dostępu
ICAX2-ICAX6 B-F Bajty pomocnicze. ICAX3-ICAX5 wykorzysty-
wane są w operacjach NOTE i POINT. Poza
tym mają niejednolite przeznaczenie.
Jak może wykorzystać programujący podane tu informacje?
Przede wszystkim powinien pamiętać, że nigdy nie należy inge-
191
rować w bajty 0, 1, 3, 6 i 7 zarezerwowane dla OS, który wyko-
rzystuje je przy przesyle danych. Spośród pozostałych bajtów
największe znaczenie ma ICCOM. Komenda tu wpisana określa spo-
sób wykorzystania innych komórek IOCB.
Korzystanie z IOCB należy rozpocząć od jego otwarcia ko-
mendą OPEN o kodzie w ICCOM 03. Równocześnie w ICAX1 podaje
się rodzaj zadania, któremu ma służyć IOCB. Oto znaczenia po-
szczególnych wpisów:
ICCOM ICAX1
3 4 Read. Urządzenie lub plik otwarte dla czytania
3 8 Write. Otwarte dla zapisu
3 12 Update. Otwarte dla czytania i zapisu. W edy-
torze ekranu oznacza to wprowadzenie z kla-
wiatury i wyprowadzenie na ekran
3 6 Czytanie tylko katalogu dyskietki
3 9 Write-append. Dołączenie danych do zbioru na
dyskietce
Przy komendzie OPEN w ICBAL/H musi znajdować się adres,
pod którym znajduje się nazwa pliku.
Po dokonaniu wszystkich niezbędnych wpisów w celu wykona-
nia komendy wywołujemy CIO. Wykonuje się w tym celu skok JSR
CIOV do wektora CIO pod adresem E456, przy czym w rejestrze
X musi znajdować się numer IOCB pomnożony przez 16 czyli 10 hex.
Sekwencja rozkazów jest zwykle następująca:
LDX #IOCBNUM Numer pomnożony przez 16!
JSR CIOV Skok do podprogramu pod E456
BMI ERROR Jeżeli wynik ujemny, powstał błąd.
Skok do sekwencji obsługi błędów z pomocą BMI wynika z te-
go, że w przypadku błędu CIO umieszcza w rejestrze Y jego nu-
mer, większy lub równy 80 hex czyli 128 dec. Jeżeli operacja
przebiegła pomyślnie, CIO przesyła 1. Sprawdzenie tego jest
praktycznie konieczne dla zapobieżenia zawieszeniu się progra-
mu.
Inne komendy w ICCOM odpowiadają przede wszystkim funk-
cjom, jakie wykonuje CIO. Przy każdej z nich ICBA powinien
192
znajdować się adres buforu dla wprowadzania lub wyprowadzania
danych. Buforem może być w zasadzie dowolne miejsce w RAM. W
ICBL powinna znajdować się długość buforu. Oto funkcje i ich
kody w ICCOM:
ICCOM
3 OPEN.
C CLOSE. Zamknięcie pliku lub urządzenia
5 GET RECORD. Komenda ta zapewnia odczytanie z otwarte-
go urządzenia rekordu czyli ciągu bajtów o wskazanej
długości. Taką formę ma np. czytanie sektorów dyskie-
tki. Przy czytaniu w edytorze kończy się ono po napot-
kaniu znaku RETURN: kod 9B-155
7 GET BYTES. Czytanie N bajtów, tzw. rekordu binarnego
9 PUT RECORD. Zapis rekordu. Czynność odwrotna do GET
RECORD
B PUT BYTES. Zapis N bajtów
Inne funkcje:
D STATUS. Komenda ta podaje stan wskazanego urządzenia,
którego adres zawiera ICBA
różne SPECIAL. Są to wywołania manipulatorów specyficznych
dla niektórych urządzeń. W szczególności w przypadku
stacji dyskietek możliwe są poniższe komendy, których
kody odpowiadają numerom funkcji XIO w Basicu.
ICCOM
hex dec
20 32 Rename. Zmiana nazwy pliku
21 33 Erase. Skasowanie pliku
23 35 Protect (lock). Ochrona przed zapisem
24 36 Unprotect (unlock). Zniesienie ochrony
25 37 Point. Odpowiada analogicznej funkcji w Basicu
26 38 Note. Jak wyżej
FE 254 Format. Formatowanie całej dyskietki.
By wykonać którąkolwiek z tych komend, należy wywołać
CIO we wskazany wcześniej sposób. W następnym punkcie rozdzia-
193
łu znajduje się przykład programu dość przejrzyście wyjaśnia-
jącego ten mechanizm.
Elementem podsystemu wejścia-wyjścia jest blok kontroli
urządzenia DCB i SIO. Kolejne bajty w DCB mają następujące
funkcje:
Etykieta Bajt Opis
DDEVIC 0 Wpisuje OS. Identyfikator urządzenia
DUNIT 1 Numer urządzenia bieżąco używanego. Określa
użytkownik
DCOMND 2 Komenda ustalana przez użytkownika lub mani-
pulator przed wywołaniem SIO
DSTATS 3 Stan operacji
DBUFL/H 4-5 Adres buforu zródłowego lub docelowego. Wpi-
suje użytkownik
DTIMLO 6 Timeout w sekundach czyli czas oczekiwania
na pomyślne połączenie się z urządzeniem
DUNUSE 7 Bajt nie używany
DBYTL/H 8-9 Wpisuje manipulator. Liczba przesłanych bajtów
tów
DAUX1/2 A-B Bajty pomocnicze. W większości operacji nu-
mery sektorów dyskietki
Kody komend w DCOMND są m.in. następujące w hex:
"!" 21 formatowanie całej dyskietki
"P" 50 wpisanie sektora bez weryfikacji
"R" 52 czytanie sektora
"S" 53 żądanie statusu
"W" 57 wpisanie sektora z weryfikacją.
Do wywołania SIO po wpisaniu danych do DCB służy wektor
SIOV - E459. Może go wykorzystać programujący.
Należy jednak przypomnieć, że niezależny od urządzeń
podsystem CIO pozwala komunikować się ze wszystkimi podstawo-
wymi urządzeniami i w razie potrzeby wywołuje SIO.
Przy wykonywaniu operacji wejścia-wyjścia częste są przy-
padki, gdy urządzenia zewnętrzne i komputer mają rozmaitą szy-
bkość pracy. W takim wypadku istotną rolę odgrywa mechanizm
buforów. Jest on szeroko stosowany w systemie operacyjnym Ata-
194
ri. Przesyłane lub odbierane dane są przejściowo gromadzone w
buforze. Czasem bufor jest po prostu miejscem ostatecznego
przeznaczenia danych. Elementem buforowania jest l i c z n i k
przesyłanych bajtów oraz bajt lub bit s t a n u wejścia-wy-
jścia, dostarczający informacji czy kolejny bajt w buforze
jest gotów do przesłania lub czy został odebrany.
Mechanizmy wejścia-wyjścia dostępne w asemblerze i JM
są bogatsze niż w Basicu, który np. nie rozporządza możliwoś-
cią przesyłu bloków bajtów. Przemawia to za przyswajaniem i
doskonaleniem umiejętności programowania We-Wy w asemblerze.
Można w ten sposób również zwiększać efektywność programów w
Basicu.
9.9 Arytmetyka zmiennopozycyjna
Stosowanie arytmetyki zmiennopozycyjnej ułatwia operowa-
nie liczbami rzeczywistymi, a ściślej ich przybliżeniami w
postaci skończonych ułamków dziesiętnych. W systemiem opera-
cyjnym Atari znajduje się pakiet programów, umożliwiających pos
posługiwanie się taką arytmetyką. Z pakietu tego korzysta A-
tari Basic. Możliwość posługiwania się ułamkami w sposób wz
względnie prosty stanowi udogodnienie. Płaci się za nie cenę
w postaci wydatnego zmniejszenia szybkości obliczeń w stosun-
ku do tej, jaką osiągamy w arytmetyce całkowitoliczbowej.
W Atari zastosowano odmienną niż w wielu innych kompute-
rach reprezentację liczb zmiennopozycyjnych. Każda zajmuje 6
bajtów. W pierwszym znajduje się wykładnik, którego najstar-
szy bit jest bitem znaku (0 dla liczb dodatnich). Pozostałe
bity pierwszego bajtu stanowią wykładnik potęgi liczby 100
(a nie 10) zwiększony o 64. Zwiększenie to pozwala na uzyska-
nie szerokiej skali dodatnich i ujemnych wykładników bez ko-
rzystania z bitu znaku. Zakres dopuszczalnych liczb sięga od
10-98 do 10+98.
Mantysa zajmuje pozostałych pięć bajtów liczby i zapisa-
na jest w nich w kodzie BCD, co się nieczęsto zdarza. Wybór
takiej reprezentacji pozwolił zmniejszyć błędy zaokrągleń.
Mantysa jest zawsze znormalizowana w taki sposób, że jej
pierwszy bajt nie równa się zeru. Za bajtem tym implikuje się
195
istnienie kropki dziesiętnej. Toteż gdy wykładnik jest mniej-
[ Pobierz całość w formacie PDF ]