I/O-UNTERSYSTEM
Einführung
Das
I/O-Untersystem gestattet dem Programm den bequemen Zugriff auf die von PIA, ANTIC,
POKEY oder CTIA benutzten Hardwareregister. Die speziellen Chips kontrollieren die
I/O-Geräte, wie z.B. die Tastatur, den Drucker oder die Diskettenstation. Der
Benutzer übergibt einfach die Kontrolldaten an das I/O-Untersystem und dieses
führt dann die erforderliche I/O-Funktion für das entsprechende Gerät
durch.
Das
I/O-Untersystem besteht aus zwei Elementen: den I/O-System-Routinen und den I/O-Kontrollblöcken.
Die I/O-System-Routinen sind: die zentrale I/O-Routine (CIO), die Geräte-Handler
(E:, P:, K: usw.) und die serielle I/O-Routine (SIO). Die I/O-Kontrollblöcke
enthalten die Kontrolldaten, die an das I/O-Untersystem übergeben werden. Für
den Benutzer bedeutet dieses Untersystem jedesmal ein ähnliches Kommando. Soll
z.B. eine Zeile auf dem Drucker ausgegeben werden, so muß der Programmierer
die Zeichen "P:" eingeben; soll sie über den Display Editor ausgegeben
werden, dann sind es "E:".
Um
das I/O-Untersystem am effektivsten einsetzen zu können, muß man seine
Struktur kennen. Die vorangegangene Abbildung zeigt die Zusammenhänge zwischen
den I/O-System-Routinen und den I/O-Kontrollblöcken.
Kontrollblöcke
des I/O-Untersytems
Es gibt drei verschiedene
Arten von Kontrollblöcken:
Eingabe/Ausgabe-Kontrollblock
(IOCB)
Zero-Page
I/O-Kontrollblock (ZIOCB)
Geräte-Kontrollblock
(DCB=Device Control Block)
Die
Kontrollblöcke des I/O-Untersystems werden zum Austauschen von Information über
die auszuführende Information verwendet. Die Kontrollblöcke liefern den
I/O-System-Routinen die zur Ausführung einer I/O-Funktion erforderlichen Daten.
In Abschnitt 5 des OS-Manuals finden sich weitere detaillierte Information zur Struktur
dieser drei Kontrollblockarten.
Abbildung
8.2
Nl = Hier wird der
Status des I/O-Befehls gespeichert. Er befindet sich beim Rücksprung vom CIO
im Y-Register.
N2 = Die AUX-Bytes
der IOBs werden von einigen Handlern zum Anzeigen von speziellen Modi benutzt.
x = Wird nicht beachtet,
der augenblickliche Wert wird aber nicht geändert.
Anmerkung: Die obere
IOCB-Definition setzt folgendes voraus:
*=$600
IOBUFF .RES 80
I/O-Buffer des Benutzers.
FILE .BYTE "D:HPROG.BAS"
Filename vom Benutzer.
Abbildung
8.3
1* = Dieses Byte bestimmt den Druckermodus (siehe 820-Manual)
2* = DAUX1 & DAUX2 legen den Sektor für READ, WRITE (PUT oder überprüfung) fest.
B = Die Adresse wird vom Benutzer bestimmt.
- = Wird nicht beachtet.
Die 8 IOCBs des OS
werden zum Informationsaustausch zwischen dem Benutzerprogramm und dem CIO verwendet.
Abbildung 8.2 zeigt den Inhalt eines IOCBs bei einigen normalen I/O-Funktionen. Die
ICCBs sind:
Speicherstelle,
Name Länge
IOCB0 ƒ$340,16ü
IOCB1 ƒ$350,16ü
IOCB2 ƒ$360,16ü
IOCB3 ƒ$370,16ü
IOCB4 ƒ$380,16ü
IOCB5 ƒ$390,16ü
ICCN6 ƒ$3A0,16ü
IOCB7 ƒ$3B0,16ü
Die
zweite Art von Kontrollblöcken, der ZIOCB ƒ$0020,16ü, wird zum Austauschen
von Kontrolldaten zwischen den Geräte-Handlern und dem CIO benutzt. Bei Aufruf
benutzt die CIO den im X-Register enthaltenen Wert als Index, der auf die Startadresse
des IOCBs (einer von 8), welcher benutzt werden soll, zeigt. Die CIO übergibt
die Kontrolldaten vom gewählten IOCB an den ZIOCB ist von geringerem Interesse,
solange der Benutzer keinen neuen Geräte-Handler schreibt und einen alten durch
diesen ersetzt. Weitere Informationen über den ZIOCB siehe OS-Benutzer-Manual.
Die
Geräte-Handler laden die Kontrollinformation in den DCB ƒ$0300,16ü. Die
SIO holt die DCB-Information und die Statuswerte im DCB für anschließende
Verwendung durch den Geräte-Handler. Der DCB und die SIO werden nur von Geräte-Handlern
angesprochen, die den seriellen Bus benötigen. Abschnitt 9 des OS-Manuals enthält
eine detailierte Beschreibung des DCBs. Abbildung 8.3 listet einige normale Funktionen
(I/0) und die entsprechenden Inhalte des DCBs.
Der
residente Disk-Handler richtet sich nicht nach der regulären Aufrufsfolge (Benutzer-CIO-Handler-SIO).
Statt dessen wird der DCB von Benutzer verwendet, um direkt mit dem residenten Disk-Handler
zu kommunizieren. Kapitel 9 dieses Buches enthält nähere Informationen
zum residenten Disk-Handler.