Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste ÜberarbeitungBeide Seiten der Revision | ||
z9001:software:os:geraetetreiber [2015/04/27 13:29] – angelegt volkerp | z9001:software:os:geraetetreiber [2015/04/28 12:54] – [ASGN-Kommando] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Gerätetreiber ====== | ====== Gerätetreiber ====== | ||
- | [[z9001: | + | FIXME |
- | ==== Einbinden von Gerätetreibern in das Betriebssystem (OS) des KC 85/1 ==== | + | Das OS des KC85/1 unterstützt leistungsfähig das Einbinden neuer Gerätetreiberroutinen für die sog. zeichenorientierten logischen Ein- / |
- | Das OS des KC85/1 unterstützt leistungsfähig das Einbinden neuer Gerätetreiberroutinen für die sog. zeichenorientierten logischen Ein- / | + | Literatur: |
- | :!: sollen Gerätetreiber auch für OS 1.1 nutzbar sein, muss man auf einen Bug des Systems Rücksicht nehmen! | + | * [[z9001:literatur:treiber]] |
+ | * " | ||
+ | * und weitere Quellen | ||
+ | |||
+ | ===== logische und physische Geräte ===== | ||
+ | |||
+ | Das OS verwaltet logische und physische Geräte. Logische Geräte sind z.B. die Zeichenausgabe auf Drucker (LIST:). | ||
+ | Welcher Drucker angeschlossen ist, spielt auf Anwenderprogrammebene keine Rolle, die zu druckenden Zeichen werden immer an " | ||
+ | |||
+ | Das OS kann bis zu 4 physische Druckertreiber verwalten, von denen genau einer aktiv ist. Welcher Drucker bzw. physischer Treiber das ist, wird mit dem Kommando ASGN festgelegt (s.u.). | ||
+ | |||
+ | Analog zum logischen Gerät " | ||
+ | |||
+ | Zur Kommunikation mit diesen Geräten gibt es Systemfunktionen über CALL 5: | ||
+ | |||
+ | CALL 5, C = Rufnmmer | ||
+ | |||
+ | ^Rufnr. ^ Name ^ Funktion ^ | ||
+ | | 01 | CONSI | Eingabe eines Zeichens von CONST | | ||
+ | | 02 | CONSO | Ausgabe eines Zeichens zu CONST | | ||
+ | | 03 | READI | Eingabe eines Zeichens von READ | | ||
+ | | 04 | PUNO | Ausgabe eines Zeichens zu PUNCH | | ||
+ | | 05 | LISTO | Ausgabe eines Zeichens zu LIST | | ||
+ | | 09 | PRNST | Ausgabe einer Zeichenkette zu CONST | | ||
+ | | 10 | RCONB | Eingabe einer Zeichenkette von CONST | | ||
+ | | 11 | CSTS | Abfrage Status CONST | | ||
+ | |||
+ | In BASIC können diese Geräte über Kanäle #1..#4 angesprochen werden (allg. geht das nur mit verändertem Lutz-Elßner-Basic)! | ||
+ | |||
+ | ===== Das I/O-Byte ===== | ||
+ | |||
+ | Das I/O-Byte dient zur Verbindung von logischen und physischen Geräten. Für | ||
+ | jedes der 4 logischen Geräte sind 4 physische Geräte wählbar. Die Zuschaltung | ||
+ | eines dieser Geräte erfolgt über Änderung des I/O-Bytes. Zuvor müssen alle zu | ||
+ | verwendenden Treiber zugewiesen und initialisiert werden. Das I/O-Byte ist in 4 | ||
+ | Bereiche zu je 2 Bits unterteilt. Jeder Bereich, der einem logischen Gerät | ||
+ | zugeordnet ist, kann einen Wert von 0 bis 3 beinhalten und damit logisches und | ||
+ | physisches Gerät verbinden. | ||
+ | |||
+ | |||
+ | |||
+ | Aufbau des I/O-Bytes (HS-Adr. 0004, im CP/M üblicherweise Adr. 0003): | ||
+ | Bit 7 6 5 4 3 2 1 0 | ||
+ | Log. Gerät LIST PUNCH READER CONST | ||
+ | |||
+ | Das OS selbst beinhaltet zwei residente Treiberroutinen: | ||
+ | |||
+ | * CRT Consoltreiber | ||
+ | * BAT Batch-Treiber | ||
+ | |||
+ | CRT ist der Treiber für die Standard-Console, d. h. für das Fernsehgerät als Sichtgerät und die eingebaute Tastatur. | ||
+ | |||
+ | BAT ist ein Treiber, der das log. Gerät Console (CONST: | ||
+ | |||
+ | Alle anderen Plätze der Tabelle sind nach einem Kaltstart des OS (RESET oder POWER ON) mit dem Wert 0FFFFH belegt und zeigen dem OS damit einen nicht existenten Treiber an. Sollen eigene Treiberroutinen eingebracht werden, so kann das durch direktes Eintragen der Treiberadresse in den entsprechenden Tabellenplatz und zugehöriges Stellen | ||
+ | |||
+ | Vom Monitor werden folgende physische Geräte realisiert: | ||
+ | |||
+ | < | ||
+ | log. Gerät | ||
+ | CONST: 1 - CRT, 2 - BAT | ||
+ | LIST: 1 - CRT | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | System-Treiber, | ||
+ | ; physische Gerätenummer | ||
+ | ; log. Gerät 0 1 2 3 | ||
+ | ; -------------------------------------------- | ||
+ | ; CONST: | ||
+ | ; READER: (2) * | ||
+ | ; PUNCH: | ||
+ | ; LIST: | ||
+ | </ | ||
+ | |||
+ | nach Reset ist IOByte = 01h, d.h. | ||
+ | < | ||
+ | CONST: = CRT | ||
+ | READER: = | ||
+ | PUNCH: = | ||
+ | LIST: = | ||
+ | </ | ||
- | ==== I/ | + | Es sind jetzt folgende Zuweisungen möglich: |
- | Das OS-KC85/1 verwaltet eine Tabelle mit 4 mal 4 Plätzen für Adressen von Gerätetreiberroutinen (Tafel 5). Jeweils eine Zeile dieser Tabelle wird dabei einem der 4 logischen E/A-Kanäle | + | LIST: = CRT - Druckausgaben erfolgen auf den Bildschirm parallel zur normalen Ausgabe |
- | CONST: (Console) \\ | + | Wenn Treiber für Reader und Punch installiert sind, ist noch erlaubt: |
- | READER: (zusätzlicher Eingabekanal) \\ | + | |
- | PUNCH: (zusätzlicher Ausgabekanal) \\ | + | |
- | List: (log. Kanal für Drucker) | + | |
- | zugeordnet, d. h. für jeden log. E/A-Kanal können 4 Treiberroutinen gleichzeitig resident sein. Welche dabei im gegebenen Moment ausgewählt wird, bestimmt die Belegung des I/O-Bytes (HS-Adr. 0004, im CP/M üblicherweise Adr. 0003). | + | CONST: = BAT - Consoleneingabe vom Reader-Gerat, Konsolenausgabe erfolgt auf das Punch-Gerät |
- | Das OS selbst beinhaltet zwei residente Treiberroutinen: | ||
- | CRT Consoltreiber \\ | + | Die Treiberadressen der jeweiligen physischen Geräte liegen auf den Adressen |
- | BAT Batch-Treiber | + | EFC9H bis EFE8H. s.u. Adreßtabelle der Gerätetreiber. |
- | CRT ist der Treiber für die Standard-Console, | ||
- | BAT ist ein Treiber, der das log. Gerät Console | + | Hinweis: Es gibt symbolische Namen für die physischen Geräte, diese spielen i.allg. keine Rolle, |
+ | werden aber in der Literatur | ||
- | Alle anderen Plätze der Tabelle sind nach einem Kaltstart des OS (RESET oder POWER ON) mit dem Wert 0FFFFH belegt und zeigen dem OS damit einen nicht existenten Treiber an. Sollen eigene Treiberroutinen - wie z. B. die in Tafel 1 bis 4 - eingebracht werden, so kann das durch direktes Eintragen der Treiberadresse in den entsprechenden Tabellenplatz und zugehöriges Stellen des I/O-Bytes erfolgen. Aber auch hierfür bietet das OS ein leistungsfähiges Hilfsmittel | + | < |
+ | ; physische Gerätenummer | ||
+ | ; log. Gerät 0 1 2 3 | ||
+ | ; -------------------------------------------- | ||
+ | ; CONST: | ||
+ | ; READER: | ||
+ | ; PUNCH: | ||
+ | ; LIST: | ||
+ | </ | ||
- | ==== ASGN-Kommando ==== | + | ===== ASGN-Kommando |
**ASGN** ist ein residentes Kommando des OS (von insgesamt 3). Die Aufrufform ist | **ASGN** ist ein residentes Kommando des OS (von insgesamt 3). Die Aufrufform ist | ||
Zeile 52: | Zeile 137: | ||
Wird eine solche Anweisung gegeben, so vollzieht sich im OS ein umfangreicher Mechanismus: | Wird eine solche Anweisung gegeben, so vollzieht sich im OS ein umfangreicher Mechanismus: | ||
- | Zuerst wird eine Treiberroutine namens " | + | Zuerst wird eine Treiberroutine namens " |
- | + | ||
- | - Suche auf allen Adressen mit Low-Byte = 0 nach einer Bytefolge der Form: C3 ll hh (= JP hhllH) - Die folgenden 8 Bytes werden mit der angegebenen Zeichenkette (hier " | + | Suche auf allen Adressen mit Low-Byte = 0 nach einer Bytefolge der Form: C3 ll hh (= JP hhllH) - Die folgenden 8 Bytes werden mit der angegebenen Zeichenkette (hier " |
Diese Tabelle wird mit einem Nullbyte abgeschlossen und kann mit weiteren Strukturen dieser Form fortgesetzt werden. Zwei aufeinander folgende Nullbytes beenden diese Sprungtabelle (vgl. Beispiel Tafel 6). | Diese Tabelle wird mit einem Nullbyte abgeschlossen und kann mit weiteren Strukturen dieser Form fortgesetzt werden. Zwei aufeinander folgende Nullbytes beenden diese Sprungtabelle (vgl. Beispiel Tafel 6). | ||
Zeile 60: | Zeile 145: | ||
Ist die Suche erfolgreich, | Ist die Suche erfolgreich, | ||
- | start tape. | + | |
Nach dem Einlesen wird die Routine an der im FCB (1. Block) spezifizierten Startadresse gestartet. Im allgemeinen sollte die Treiberroutine an das aktuelle Speicherende (RAM) plaziert werden (über Zelle 36H zu ermitteln). Dem OS müssen nun noch einige Informationen übermittelt werden: | Nach dem Einlesen wird die Routine an der im FCB (1. Block) spezifizierten Startadresse gestartet. Im allgemeinen sollte die Treiberroutine an das aktuelle Speicherende (RAM) plaziert werden (über Zelle 36H zu ermitteln). Dem OS müssen nun noch einige Informationen übermittelt werden: | ||
- | - Welchem log. Gerät darf die Treiberroutine zugeordnet werden? | + | * Welchem log. Gerät darf die Treiberroutine zugeordnet werden? |
- | - Die Startadresse des Treiberteils | + | |
- | - Auf welchem Platz der Zuordnungstabelle (Tafel 5) soll der Eintrag erfolgen (physisches Gerät 0...3)? | + | |
- | - Die Adresse des symbolischen Gerätenamens (8-Byte-String). | + | |
- | Zu beachten ist, daß physische Geräte mit der Nr. 0 jedem log. E/A-Kanal zugeordnet werden können (also auch der Console) und entsprechend aufgebaut sein müssen. | + | Zu beachten ist, dass physische Geräte mit der Nr. 0 jedem log. E/A-Kanal zugeordnet werden können (also auch der Console) und entsprechend aufgebaut sein müssen. |
Ein physisches Gerät mit der Nr. 1 kann auch immer dem LIST-Kanal zugeordnet werden (Beispiel: residenter CRT-Treiber). | Ein physisches Gerät mit der Nr. 1 kann auch immer dem LIST-Kanal zugeordnet werden (Beispiel: residenter CRT-Treiber). | ||
Zeile 81: | Zeile 166: | ||
DE: Adresse der Zeichenkette (symbolischer Gerätename) | DE: Adresse der Zeichenkette (symbolischer Gerätename) | ||
- | Tafel 6 gibt ein Beispiel an, wie die Treiberroutine nach Tafel 4 (V24/DTR) als Druckertreiber mit der Bezeichnung " | + | Beispielsweise wird ein Druckertreiber mit der Bezeichnung " |
ASGN LIST:=LX86 | ASGN LIST:=LX86 | ||
- | wird die Routine | + | wird die Treiber-Routine |
CONST: | CONST: | ||
Zeile 93: | Zeile 178: | ||
Der Drucker kann jetzt mit CTRL/P zum Bildschirm parallel geschaltet werden (auch im BASIC) oder über den LIST-Kanal (Ruf-Nr. 5) direkt angesprochen werden. | Der Drucker kann jetzt mit CTRL/P zum Bildschirm parallel geschaltet werden (auch im BASIC) oder über den LIST-Kanal (Ruf-Nr. 5) direkt angesprochen werden. | ||
- | |||
===== Druckertreiber ===== | ===== Druckertreiber ===== | ||
Zeile 183: | Zeile 267: | ||
+ | ====== OS ====== | ||
+ | |||
+ | < | ||
+ | ;der folgende Speicherbereich ist durch den Nutzer für eigene Treiber verwendbar | ||
+ | 0280 RTTYC BER 4 ;RAM TTY-Treiber für CONST | ||
+ | 0284 RCRTC: BER 4 ;RAM CRT-Treiber für CONST | ||
+ | 0288 RBATC: BER 4 ;RAM BAT-Treiber für CONST | ||
+ | 028C RUC: BER 4 ;RAM UC-Treiber für CONST | ||
+ | 0290 PTTYR: BER 4 ;RAM TTY-Treiber für READER | ||
+ | 0294 RRDR: BER 4 ;RAM RDR-Treiber für READER | ||
+ | 0298 RUR1: BER 4 ;RAM UR1-Treiber für READER | ||
+ | 029C RUR2: BER 4 ;RAM UR2-Treiber für READER | ||
+ | 02A0 RTTYP: BER 4 ;RAM TTY-Treiber für PUNCH | ||
+ | 02A4 RPUN: BER 4 ;RAM PUN-Treiber für PUNCH | ||
+ | 02A8 RUP1: BER 4 ;RAM UP1-Treiber für PUNCH | ||
+ | 02AC RUP2: BER 4 ;RAM UP2-Treiber für PUNCH | ||
+ | 02B0 RTTYL: BER 4 ;RAM TTY-Treiber für LIST | ||
+ | 02B4 RCRTL: BER 4 ;RAM CRT-Treiber für LIST | ||
+ | 02B8 RLST: BER 4 ;RAM LST-Treiber für LIST | ||
+ | 02BC RUL: BER 4 ;RAM UL-Treiber für LIST | ||
+ | 02C0 SYSR: BER 40H ; | ||
+ | |||
+ | ; | ||
+ | EFC9 ATTYC: DA -1 ;Adresse TTY-Treiber für CONST | ||
+ | EFCB ACRTC: DA CRT ;Adresse CRT-Treiber für CONST | ||
+ | EFCD ABATC: DA BAT ;Adresse BAT-Treiber für CONST | ||
+ | EFCF AUC: DA -1 ;Adresse UC-Treiber für CONST | ||
+ | EFD1 ATTYR: DA -1 ;Adresse TTY-Treiber für READER | ||
+ | EFD3 ARDR: DA -1 ;Adresse RDR-Treiber für READER | ||
+ | EFD5 AUR1: DA -1 ;Adresse UR1-Treiber für READER | ||
+ | EFD7 AUR2: DA -1 ;Adresse UR2-Treiber für READER | ||
+ | EFD9 ATTYP: DA -1 ;Adresse TTY-Treiber für PUNCH | ||
+ | EFDB APUN: DA -1 ;Adresse PUN-Treiber für PUNCH | ||
+ | EFDD AUP1: DA -1 ;Adresse UP1-Treiber für PUNCH | ||
+ | EFDF AUP2: DA -1 ;Adresse UP2-Treiber für PUNCH | ||
+ | EFE1 ATTYL: DA -1 ;Adresse TTY-Treiber für LIST | ||
+ | EFE3 ACRTL: DA CRT ;Adresse CRT-Treiber für LIST | ||
+ | EFE5 ALST: DA -1 ;Adresse LST-Treiber für LIST | ||
+ | EFE7 AUL: DA -1 ;Adresse UL-Treiber für LIST | ||
+ | ; | ||
+ | EFE9 TXCON: DA PHYDV+2 ;Adresse einer Zeichenkette des aktuellen CONST-Gerätes, | ||
+ | ; | ||
+ | EFEB TXRDR: DA PHYDV ; | ||
+ | EFED TXPUN: DA PHYDV ; | ||
+ | EFEF TXLST: DA PHYDV ; | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | 3. Zusätzliche Treiber | ||
+ | |||
+ | Der Monitor des Z 9001 bietet dem Anwender über das ASGN-Kommando die | ||
+ | Möglichkeit, | ||
+ | Treiberroutinen zuzuweisen. Um die Zusammenarbeit mit allen anderen | ||
+ | Systemkomponenten zu gewährleisten, | ||
+ | beachten. | ||
+ | |||
+ | Treibereingangsparameter: | ||
+ | * A Kommando (siehe 3.2.) (für CONST, READER, LIST) | ||
+ | * C Zeichen (bei Kommando AUSGABE) | ||
+ | * DE Adresse bei Cursorkommandos | ||
+ | Treiberausgangsparameter: | ||
+ | * A Zeichen (bei Kommando EINGABE) | ||
+ | * CY Fehlerstatus | ||
+ | * HL,DE Adresse bei Cursorkommandos | ||
+ | |||
+ | Hinweis: Vordergrundregister müssen bei Eintritt in das Treiberprogramm nicht gerettet werden (erfolgt bereits im BOS) | ||
+ | |||
+ | |||
+ | 3.1. Treiberinitialisierung | ||
+ | |||
+ | Die Initialisierung sollte grundsätzlich über das ASGN-Kommando erfolgen. Eine | ||
+ | automatische Initialisierung über die Nutzung des Kommandos (siehe 2.1.2.) und | ||
+ | Direktzugriff auf entsprechende Systemzellen ist zu vermeiden. | ||
+ | |||
+ | Der Aufruf der Initialisierung im ASGN-Kommando erfolgt in der gleichen Weise | ||
+ | wie der Start eines Anwenderprogrammes. Dabei kann es sich sowohl um ein | ||
+ | transientes Kommando, als auch um ein Programm auf Kassette handeln. Ladbare | ||
+ | Treiberprogramme auf Kassette werden durch das ASGNKommando selbständig | ||
+ | eingelesen und zur Initialisierung gestartet. Derartige Programme sind in der | ||
+ | Initialisierung mittels geeigneter RELOCATING-Routinen an das Ende des logischen | ||
+ | RAM-Bereiches zu verschieben. Notwendiger Arbeitsspeicher ist gleichfalls dort | ||
+ | einzurichten. Nach dem Verschieben ist der Zeiger des logischen RAM-Endes EOR | ||
+ | (36H) auf eine Adresse vor dem Treiberprogramm zu stellen. Für jede | ||
+ | Treiberroutine eines physischen Gerätes stehen im System-RAM (ab 280H) 4 Bytes | ||
+ | Speicher zur Verfügung. | ||
+ | |||
+ | Die Treiberinitialisierung muß der ASGN-Routine folgende Parameter übergeben: | ||
+ | < | ||
+ | - CY Fehlerstatus nach Initialisierung | ||
+ | - H logische Gerätenummer | ||
+ | 0 CONST | ||
+ | 2 READER | ||
+ | 4 PUNCH | ||
+ | 6 LIST | ||
+ | - L physische Gerätenummer (0, 1 .... 3) | ||
+ | - BC Adresse der E/A-Routine | ||
+ | - DE Adresse einer Zeichenkette (wird nach der Zuweisung durch ASGN angezeigt) | ||
+ | </ | ||
+ | Beispiel: | ||
+ | < | ||
+ | ; | ||
+ | JMP INIT | ||
+ | DB " | ||
+ | DA 0 | ||
+ | INIT: | ||
+ | LD DE, | ||
+ | SBC HL,DE | ||
+ | LD (EOR), | ||
+ | INC HL | ||
+ | LD (RTTYL), | ||
+ | ; | ||
+ | .... | ||
+ | LD H, | ||
+ | LD L, | ||
+ | LD BC, | ||
+ | LD DE, | ||
+ | OR A ; | ||
+ | RET | ||
+ | ; | ||
+ | FEHL: | ||
+ | RET | ||
+ | ; | ||
+ | ; | ||
+ | OUTZ: .... | ||
+ | ; | ||
+ | ; | ||
+ | RAMA: .... | ||
+ | .... | ||
+ | RAME: EQU # | ||
+ | </ | ||
+ | |||
+ | Hinweis: | ||
+ | * TTY-Treiber (L=0) können beliebigen logischen Geräten zugewiesen werden | ||
+ | * CRT-Treiber (L=1) können CONST und LIST zugewiesen werden | ||
+ | * alle anderen nur dem im H-Register angegebenen logischen Gerät (sonst Fehlermeldung im ASGN-Kommando) | ||
+ | |||
+ | |||
+ | 3.2. Besonderheiten der Treiber für CONST | ||
+ | |||
+ | An die Treiber der für CONST möglichen Geräte (TTY, CRT, BAT, UC) werden | ||
+ | besondere Anforderungen gestellt, da sie Routinen zur Eingabe, Ausgabe, | ||
+ | Statusabfrage und Cursorsteuerung beinhalten müssen. Dem Treiber wird die zu | ||
+ | erfüllende Aufgabe durch spezielle Kommandocodes im A - Register übergeben. | ||
+ | |||
+ | Kommandocodetabelle: | ||
+ | |||
+ | ^ Code ^ Funktion ^ Eingang ^ Return ^ | ||
+ | | 00 | Abfrage Status | | A Status\\ 0 kein Zeichen bei Eingabegerät, | ||
+ | | 01 | Eingabe Zeichen | | A Zeichen | | ||
+ | | 02 | Ausgabe Zeichen | C Zeichen | | | ||
+ | | 03 | Cursor löschen | | | | ||
+ | | 04 | Cursor anzeigen | | HL physische Cursoradresse | | ||
+ | | 05 | Abfrage logische und physische Cursoradresse | | HL physische Cursoradresse\\ DE logische Cursoradresse | | ||
+ | | 06 | Setzen Cursor auf logische Adresse | DE logische Cursoradresse | | | ||
+ | | 07 | Abfrage physische Cursoradresse | | HL physische Cursoradresse | | ||
+ | | 08 | Setzen Cursor auf physische Adresse | DE physische Cursoradresse | | | ||
+ | | FF | Initialisieren/ | ||
+ | |||
+ | Hinweis: | ||
+ | * werden verschiedene Kommandos durch den Anwender nicht benötigt, kann dafür ein Sprung zum Fehlerausgang des Treibers programmiert werden | ||
+ | * korrespondierende System- und Direktrufe sind dann nicht mehr verwendbar | ||
+ | |||
+ | Beispiel: | ||
+ | < | ||
+ | ; | ||
+ | INC A | ||
+ | JPZ RESET ; | ||
+ | DEC A | ||
+ | JPZ STAT ; | ||
+ | DEC A | ||
+ | JPZ EING ; | ||
+ | DEC A | ||
+ | JPZ AUSG ; | ||
+ | DEC A | ||
+ | JPZ LCUR ; | ||
+ | DEC A | ||
+ | JPZ ACUR ; | ||
+ | DEC A | ||
+ | JPZ ADRLC ; | ||
+ | DEC A | ||
+ | JPZ SLOGC ; | ||
+ | DEC A | ||
+ | JPZ ADRPC ; | ||
+ | DEC A | ||
+ | JPZ SPHYC ; | ||
+ | FEHL: | ||
+ | RET ; | ||
+ | </ | ||
+ | |||
+ | 3.3. Besonderheiten der Treiber für READER und LIST | ||
+ | |||
+ | Soll ein READER-Gerät Im Zusammenhang mit dem BATCH-Mode von CONST betrieben | ||
+ | werden, so müssen im Treiber für das READER-Gerät (RDR, UR1, UR2) die Kommandos | ||
+ | Eingabe, Statusabfrage und Initialisierung programmiert sein. Bei Treibern für | ||
+ | das LIST-Gerät müssen die Kommandos Ausgabe, Statusabfrage und Initialisierung | ||
+ | in jedem Falle programmiert werden. | ||
+ | |||
+ | |||
+ | ====== Hinweise ====== | ||
+ | |||
+ | |||
+ | :!: sollen Gerätetreiber auch für OS 1.1 nutzbar sein, muss man auf einen Bug des Systems Rücksicht nehmen! | ||
+ | |||
+ | < | ||
+ | ;Ende der Initialisierung. Bei OS 1.1. muss eine Return-Adresskorrektur erfolgen! | ||
+ | ;Übergabe an ASGN: | ||
+ | ;H = logische Gerätenummer | ||
+ | ;L = physische Gerätenummer | ||
+ | ;BC = Treiberadresse | ||
+ | ;DE = Adr. des symb. Namens | ||
+ | |||
+ | or a ; CY=0, kein Fehler | ||
+ | ex (sp), hl ; dieser Teil | ||
+ | inc hl ; ist nur bei OS Version 1.1 | ||
+ | inc hl ; noetig (wegen eines Fehlers | ||
+ | ex (sp), hl ; in der ASGN-Routine) | ||
+ | ret | ||
+ | </ | ||