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.