Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste ÜberarbeitungBeide Seiten der Revision | ||
z9001:software:os:geraetetreiber [2015/04/28 12:54] – [ASGN-Kommando] volkerp | z9001:software:os:geraetetreiber [2015/04/30 10:29] – [Gerätetreiber] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Gerätetreiber ====== | ====== Gerätetreiber ====== | ||
- | |||
- | FIXME | ||
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- / | ||
Zeile 10: | Zeile 8: | ||
* " | * " | ||
* und weitere Quellen | * und weitere Quellen | ||
+ | |||
+ | **Kritik** (vp) Leider ist das I/O-Konzept nicht bis zum Ende durchdacht und implementiert: | ||
+ | * Das I/O-Byte liegt auf einer anderen Adresse als in CP/M üblich | ||
+ | * Es gibt keine Systemaufrufe (über CALL 5), um die Treiber direkt anzusprechen. Die Systemaufrufe nutzen nur die Treiberfunktionen Zeichenein- und -ausgabe | ||
+ | * Die Einbindung der Treiber ins I/O-Byte und Übergabe der Zeichenkettenadressen erfolgt nur beim Laden des Treibers, nicht über einen späteren Funktionsaufruf des Treibers | ||
+ | * Die Zuweisung des Treibers auf eine physische Gerätenummer kann nicht frei gewählt werden. Das macht der Treiber intern, das ist aber nirgends ersichtlich. Auch bei ASGN wird das nicht angezeigt. | ||
+ | * Die Adresse des aktiven Treibers ist nur über die interne Systemfunktion EXIO ermittelbar. | ||
+ | * Beim Warmstart (nach STOP) wird das I/O-Byte auf den Standardwert 01h zurückgesetzt. | ||
+ | * Im OS 1.1 ist BAT nicht nutzbar. | ||
+ | * Die Zeichenketten der nicht initialisierten phys. Treiber zeigen auf Adresse LOGDV (0FC24h). Dort steht 01 00, das ist zufälligerweise ein gültiger String, aber eigentlich müsste nur auf ein Nullbyte (leerer String) verwiesen werden. | ||
+ | * Obwohl als Zusatz zum Monitor mitgeliefert, | ||
+ | * So wie ASGN arbeitet und zu nutzen ist, hätte auf das Konzept des I/O-Byte und der 4 verschiedenen physischen Treiber verzichtet werden können. Mit jedem Aufruf von ASGN wird einfach der übergebene Treiber aktiv, egal, welche physische Nummer er tatsächlich hat. | ||
+ | |||
===== logische und physische Geräte ===== | ===== logische und physische Geräte ===== | ||
Zeile 66: | Zeile 77: | ||
< | < | ||
- | log. Gerät | + | log. Gerät |
- | CONST: 1 - CRT, 2 - BAT | + | CONST: 1 - CRT |
+ | | ||
LIST: 1 - CRT | LIST: 1 - CRT | ||
</ | </ | ||
Zeile 151: | Zeile 163: | ||
* Welchem log. Gerät darf die Treiberroutine zugeordnet werden? | * Welchem log. Gerät darf die Treiberroutine zugeordnet werden? | ||
* Die Startadresse des Treiberteils | * Die Startadresse des Treiberteils | ||
- | * Auf welchem Platz der Zuordnungstabelle (Tafel 5) soll der Eintrag erfolgen (physisches Gerät 0...3)? | + | * Auf welchem Platz der Zuordnungstabelle (s.u.) soll der Eintrag erfolgen (physisches Gerät 0...3)? |
* Die Adresse des symbolischen Gerätenamens (8-Byte-String). | * Die Adresse des symbolischen Gerätenamens (8-Byte-String). | ||
Zeile 157: | Zeile 169: | ||
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). | ||
- | |||
- | Die Parameterübergabe erfolgt über die folgenden Register: | ||
- | |||
- | H: log. Gerätenr. kennzeichnet den log. Kanal, dem die Treiberroutine zugeordnet werden kann. \\ | ||
- | 0 - CONST: 2 - READER: 4 - PUNCH: 6 - LIST: \\ | ||
- | L: phys. Gerät (0,...,3) \\ | ||
- | BC: Adresse der Treiberroutine \\ | ||
- | DE: Adresse der Zeichenkette (symbolischer Gerätename) | ||
Beispielsweise wird ein Druckertreiber mit der Bezeichnung " | Beispielsweise wird ein Druckertreiber mit der Bezeichnung " | ||
Zeile 179: | Zeile 183: | ||
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 ===== | + | Die meisten Treiber umgehen den Aufruf über ASGN. Statt |
- | Was erwartet das Betriebssystem? | + | ASGN LIST:=LX86 |
- | Das OS des Z9001 ist basierend auf CP/M entwickelt worden und hat dessen | + | wird der Druckertreiber dann mit |
- | Treiberkonzept übernommen. So gibt es 4 logische Geräte, die von den | + | |
- | Anwendungsprogrammen genutzt werden können: CONST, READER, PUNCH, LIST. Diesen | + | |
- | logischen Geräten werden nun physische Gerätetreiber zugeordnet. Das erfolgt | + | |
- | mittels Kommando ASGN. Üblicherweise | + | |
- | zugeordnet und LIST dem Drucker. | + | |
- | Damit ein physischer Gerätetreiber so zugeordnet werden kann, muss er einige | + | LX86 |
- | Eigenschaften erfüllen: | + | |
- | 1. Treiberadresse muss in der Adresstabelle für Gerätetreiber eingetragen sein | + | geladen. |
- | (0EFC9H-0EFE8H) | + | |
- | 2. der Treiber muss eine 8 Byte lange Bezeichnung bereitstellen | + | |
- | 3. der Treiber muss die Systemkommandos für Gerätetreiber umsetzen. | + | |
- | Für einen Druckertreiber reichen folgende Systemkommandos aus: | + | Ein guter Treiber sollte beide Varianten ermöglichen! |
- | 1. Initialisieren/ | ||
- | 2. Abfrage Status (A=0) | ||
- | 3. Ausgabe Zeichen (A=0, Zeichen in C) | ||
- | Das Ganze ist in der Betriebssystembeschreibung ausführlicher erklärt. Ebenfalls | + | ===== Aufbau ===== |
- | gibt es in mp 10/87 S. 311 ff. Erläuterungen zum Gerätetreiber-Handling des | + | |
- | Z9001. | + | |
- | Hinweis: Die Robotron-Treiber | + | Ein Treiber-Programm besteht aus mehreren Teilen |
- | selbst in die internen Gerätetreiberlisten ein; ein Robotron-Druckertreiber wird | + | |
- | also ganz normal im OS geladen; NICHT mit ASGN. | + | |
- | + | * OS-Kommandorahmen (enthält | |
- | ===== CRT-Teiber ===== | + | |
- | + | | |
- | für KRT wurden von mir CRT-Treiber entwickelt. Es gab keine Vorbilder wie bei den Druckertreibern. | + | |
- | + | | |
- | + | ||
- | ===== ZM ===== | + | |
- | + | ||
- | :!: Schlechtes Vorbild!!! | + | |
- | + | ||
- | Es wird nicht alles umgesetzt, so fehlt die Initialisierung und die Anzeige der Treibernamen etc. | + | |
- | + | ||
- | Im Zusatzmonitor sind verschiedene Gerätetreiber enthalten. s. auch Artikel über | + | |
- | mp 10/87 S. 311 ff.. Den logischen Geräten Console, Reader, Punch, List können | + | |
- | verschiedene physische Treiber zugeordnet werden. Im ZM sind physische Treiber | + | |
- | für Tastatur mit Beep, SIF-1000 Lochbandleser und -stanzer, V24-Drucker und | + | |
- | Kassettenzugriff enthalten. | + | |
- | + | ||
- | Das Kommando A< | + | |
- | vorhandenen Gerätes zu einem logischen Gerät. Folgende Zuordnungen sind | + | |
- | angebbar: | + | |
- | + | ||
- | + | ||
- | + | ||
- | CONSOLE | + | |
- | + | ||
- | READER | + | |
- | + | ||
- | PUNCH | + | |
- | + | ||
- | LIST | + | |
- | + | ||
- | + | ||
- | AC=C für Konsole (mit Tastatur-Beep) AR=C für Konsole | + | |
- | AC=V für Konsole (ohne Tastatur-Beep) | + | |
- | AC=B für BATCH AR=T für Kassette (Tape) | + | |
- | AC=U für User-Konsole | + | |
- | + | ||
- | Nach Anlauf des Monitors gilt die Zuordnung AC=V, AR=C, AP=C und AL=C (alles auf Konsole). | + | |
- | + | ||
- | | + | |
- | | + | |
- | | + | |
- | + | ||
- | Für den BATCH-Modus muss ein SIF-1000-Lesegerät an den PIO-Port angeschlossen | + | |
- | werden. Ferner sind die Zuweisungen AR=P und AL=C (oder V) vorher unbedingt | + | |
- | erforderlich! Nach AC=B werden jetzt alle Eingaben nicht mehr von der Tastatur, | + | |
- | sondern vom angeschlossenen Lesegerät angefordert. Protokolliert wird infolge | + | |
- | der Zuweisung AL=C nach wie vor auf dem Bildschirm. Eine Zuweisung AL=L oder U | + | |
- | ist in diesem Fall nicht möglich, da an den PIO-Port zusätzlich zum Lesegerät | + | |
- | kein LIST-Gerät anschließbar ist. Sollte der Druckermodul gesteckt sein, so wird | + | |
- | bei AC=C auf dem Drucker protokolliert, | + | |
- | + | ||
- | + | ||
- | + | ||
- | ====== OS ====== | + | |
- | + | ||
- | < | + | |
- | ;der folgende Speicherbereich ist durch den Nutzer für eigene | + | |
- | 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 | + | |
- | ; | + | |
- | 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 | + | |
- | Möglichkeit, | + | |
- | Treiberroutinen zuzuweisen. Um die Zusammenarbeit mit allen anderen | + | |
- | Systemkomponenten zu gewährleisten, | + | |
- | beachten. | + | |
Treibereingangsparameter: | Treibereingangsparameter: | ||
- | * A Kommando (siehe | + | * A Kommando (siehe |
* C Zeichen (bei Kommando AUSGABE) | * C Zeichen (bei Kommando AUSGABE) | ||
* DE Adresse bei Cursorkommandos | * DE Adresse bei Cursorkommandos | ||
Zeile 335: | Zeile 217: | ||
Hinweis: Vordergrundregister müssen bei Eintritt in das Treiberprogramm nicht gerettet werden (erfolgt bereits im BOS) | Hinweis: Vordergrundregister müssen bei Eintritt in das Treiberprogramm nicht gerettet werden (erfolgt bereits im BOS) | ||
+ | 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.1. Treiberinitialisierung | + | **Treiber-Kommandos** |
+ | |||
+ | ^ 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 | ||
+ | |||
+ | |||
+ | **Treiberinitialisierung** | ||
+ | |||
+ | Dem OS (bzw. dem ASGN-Kommando) müssen einige Informationen übermittelt werden: | ||
+ | |||
+ | * Welchem log. Gerät darf die Treiberroutine zugeordnet werden? | ||
+ | * Die Startadresse des Treiberteils | ||
+ | * Auf welchem Platz der Zuordnungstabelle soll der Eintrag erfolgen (physisches Gerät 0...3)? | ||
+ | * Die Adresse des symbolischen Gerätenamens (8-Byte-String). | ||
Die Initialisierung sollte grundsätzlich über das ASGN-Kommando erfolgen. Eine | Die Initialisierung sollte grundsätzlich über das ASGN-Kommando erfolgen. Eine | ||
- | automatische Initialisierung über die Nutzung des Kommandos | + | automatische Initialisierung über die Nutzung des Kommandos und |
Direktzugriff auf entsprechende Systemzellen ist zu vermeiden. | Direktzugriff auf entsprechende Systemzellen ist zu vermeiden. | ||
Zeile 353: | Zeile 265: | ||
Treiberroutine eines physischen Gerätes stehen im System-RAM (ab 280H) 4 Bytes | Treiberroutine eines physischen Gerätes stehen im System-RAM (ab 280H) 4 Bytes | ||
Speicher zur Verfügung. | Speicher zur Verfügung. | ||
+ | |||
Die Treiberinitialisierung muß der ASGN-Routine folgende Parameter übergeben: | Die Treiberinitialisierung muß der ASGN-Routine folgende Parameter übergeben: | ||
Zeile 363: | Zeile 276: | ||
6 LIST | 6 LIST | ||
- L physische Gerätenummer (0, 1 .... 3) | - L physische Gerätenummer (0, 1 .... 3) | ||
- | - BC Adresse der E/A-Routine | + | - BC Adresse der Treiberroutine |
- | - DE Adresse einer Zeichenkette (wird nach der Zuweisung durch ASGN angezeigt) | + | - DE Adresse einer Zeichenkette (symbolischer Gerätename, |
</ | </ | ||
+ | |||
+ | :!: sollen Gerätetreiber auch für OS 1.1 nutzbar sein, muss man auf einen Bug des Systems Rücksicht nehmen! | ||
+ | |||
Beispiel: | Beispiel: | ||
+ | |||
< | < | ||
; | ; | ||
Zeile 384: | Zeile 301: | ||
LD BC, | LD BC, | ||
LD DE, | LD DE, | ||
- | OR A ;kein Fehler | + | or a ; CY=0, kein Fehler |
- | RET | + | ; |
+ | 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 | ||
; | ; | ||
FEHL: | FEHL: | ||
Zeile 399: | Zeile 322: | ||
</ | </ | ||
- | Hinweis: | + | Beim eigenständigen Eintragen der Treiber unter Umgehung des ASGN-Kommandos gilt: |
- | * TTY-Treiber | + | |
- | * CRT-Treiber (L=1) können CONST und LIST zugewiesen werden | + | |
- | * alle anderen nur dem im H-Register angegebenen logischen Gerät | + | - der Treiber |
+ | - der Treiber muss die Systemkommandos für Gerätetreiber umsetzen. | ||
+ | |||
+ | **Treiber für LIST (Druckertreiber)** | ||
+ | |||
+ | Für einen Druckertreiber reichen folgende Treiber-Kommandos aus: | ||
+ | |||
+ | * Initialisieren/ | ||
+ | * Abfrage Status | ||
+ | * Ausgabe Zeichen (A=2, Zeichen in C) | ||
+ | |||
+ | **Treiber für READER** | ||
+ | |||
+ | Für einen Treiber für READER reichen folgende Treiber-Kommandos aus: | ||
+ | * Initialisieren/ | ||
+ | * Abfrage Status (A=0, Rückgabe 0, wenn kein Zeichen einzulesen ist, sonst <> 0) | ||
+ | * Eingabe Zeichen (A=1, Rückgabe Zeichen in A) | ||
- | 3.2. Besonderheiten der Treiber für CONST | + | **Treiber für CONST** |
An die Treiber der für CONST möglichen Geräte (TTY, CRT, BAT, UC) werden | An die Treiber der für CONST möglichen Geräte (TTY, CRT, BAT, UC) werden | ||
Zeile 412: | Zeile 351: | ||
erfüllende Aufgabe durch spezielle Kommandocodes im A - Register übergeben. | erfüllende Aufgabe durch spezielle Kommandocodes im A - Register übergeben. | ||
- | Kommandocodetabelle: | + | **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: | Beispiel: | ||
Zeile 457: | Zeile 380: | ||
</ | </ | ||
- | 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. | ||
+ | ===== Speicherzellen ===== | ||
- | ====== Hinweise ====== | + | Im Betriebssystem sind einige Speicherzellen für Treiber freigehalten. |
+ | Anwenderprogramme dürfen daher den Bereich 280h..2BFh auch nicht nutzen, sondern erst ab 300h! | ||
+ | < | ||
- | :!: sollen Gerätetreiber auch für OS 1.1 nutzbar sein, muss man auf einen Bug des Systems Rücksicht nehmen! | + | 0004 IOBYT: DB 1 ;I/O-Byte zur Zuweisung log.Gerät phys. Gerät |
- | < | + | ;der folgende Speicherbereich ist durch den Nutzer für eigene Treiber verwendbar |
- | ;Ende der Initialisierung. Bei OS 1.1. muss eine Return-Adresskorrektur erfolgen! | + | 0280 RTTYC BER 4 ;RAM TTY-Treiber für CONST |
- | ;Übergabe an ASGN: | + | 0284 RCRTC: BER 4 ;RAM CRT-Treiber für CONST |
- | ;H = logische Gerätenummer | + | 0288 RBATC: BER 4 ;RAM BAT-Treiber für CONST |
- | ;L = physische Gerätenummer | + | 028C RUC: BER 4 ;RAM UC-Treiber für CONST |
- | ;BC = Treiberadresse | + | 0290 PTTYR: BER 4 ;RAM TTY-Treiber für READER |
- | ;DE = Adr. des symb. Namens | + | 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 | ||
- | or a ; CY=0, kein Fehler | + | |
- | ex (sp), hl ; dieser Teil | + | ; |
- | inc hl ; ist nur bei OS Version | + | EFC9 ATTYC: |
- | inc hl ; noetig (wegen eines Fehlers | + | EFCB ACRTC: DA CRT ;Adresse CRT-Treiber für CONST |
- | ex (sp), hl ; in der ASGN-Routine) | + | EFCD ABATC: DA BAT ;Adresse BAT-Treiber für CONST |
- | ret | + | 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, | ||
+ | ;Zeichenkette wird im ASGN-Kommando ausgegeben | ||
+ | EFEB TXRDR: DA PHYDV ; | ||
+ | EFED TXPUN: DA PHYDV ; | ||
+ | EFEF TXLST: DA PHYDV ; | ||
</ | </ | ||
+ | |||
+ | |||
+ | ====== CRT-Teiber ====== | ||
+ | |||
+ | für KRT wurden von mir CRT-Treiber entwickelt. Es gab keine Vorbilder wie bei den Druckertreibern. | ||
+ | |||
+ | |||
+ | ======= ZM ======= | ||
+ | |||
+ | :!: der ZM ist ein schlechtes Vorbild in Sachen Gerätetreiber! | ||
+ | |||
+ | * Der ZM enthält ein eigenes ASGN-Kommando ' | ||
+ | * Die Gerätenamen beim Kommando A entsprechen nicht denen des OS | ||
+ | * Der ZM überschreibt die komplette Adresstabelle der Gerätetreiber (ab 0EFC9h). Eigene vorher eingetragene Treiber werden damit aus dem System geworfen! | ||
+ | * Die Treiber unterstützen keine Treiber-Kommandos (Initialisierung, | ||
+ | * Die Zuweisungsbeschränkung des CRT-Treibers wird nicht beachtet | ||
+ | * Die Treiber für TAPE sind keine zeichenorientierten Treiber und manipulieren gehörig das System (s. Sourcecode) | ||
+ | * Positiv, aber eben nicht zum OS-Konzept passend, ist, dass die Benutzung des I/O-Bytes logischer und mehr an CP/M angelehnt ist | ||
+ | |||
+ | Im [[z9001: | ||
+ | Den logischen Geräten Console, Reader, Punch, List können | ||
+ | verschiedene physische Treiber zugeordnet werden. Im ZM sind physische Treiber | ||
+ | für Tastatur mit Beep, SIF-1000 Lochbandleser und -stanzer, V24-Drucker und | ||
+ | Kassettenzugriff enthalten. | ||
+ | |||
+ | Das Kommando A< | ||
+ | vorhandenen Gerätes zu einem logischen Gerät. Folgende Zuordnungen sind | ||
+ | angebbar: | ||
+ | |||
+ | ^ CONSOLE ^ READER ^ PUNCH ^ LIST ^ | ||
+ | | AC=C für Konsole (mit Tastatur-Beep) | AR=C für Konsole | AP=C für Konsole | AL=C für Konsole | | ||
+ | | AC=V für Konsole (ohne Tastatur-Beep) | AR=P für LB-Leser (SIF-1000) | AP=P für LB-Stanzer (SIF-1000) | AL=V für Konsole | | ||
+ | | AC=B für BATCH | AR=T für Kassette (Tape) | AP=T für Kassette | AL=L für V24-Drucker (TD40) | | ||
+ | | AC=U für User-Konsole | AR=U für User-Read-Gerät | AP=U für V24-Ausgabegerät (TD40) | AL=U für SIF-1000-Ausgabegerät | | ||