Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
z9001:software:os:geraetetreiber [2015/04/27 15:19] – [Gerätetreiber] volkerpz9001:software:os:geraetetreiber [2023/06/13 14:47] (aktuell) – [ZM] volkerp
Zeile 1: Zeile 1:
 ====== Gerätetreiber ====== ====== Gerätetreiber ======
  
-FIXME Wüste Baustelle !!!+Das OS des KC85/1 unterstützt leistungsfähig das Einbinden neuer Gerätetreiberroutinen für die sog. zeichenorientierten logischen Ein- /Ausgabekanäle. Vorbild für das im folgenden erläuterte Konzept ist das Betriebssystem CP/M. 
  
 +Literatur:
  
-[[z9001:literatur:treiber]]+  * [[z9001:literatur:treiber]] 
 +  * "Betriebssystem Z9001" Beschreibung + Quelltext des OS 
 +  * 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, missachtet der ZM das Assign-Konzept des OS fast vollständig (s.u.) 
 +  * 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 =====
  
-Das OS verwaltet logische und physische Geräte. Logische Geräte sind z.B. die Zeichenausgabe auf Drucker (LIST).  +Das OS verwaltet logische und physische Geräte. 
-Welcher Drucker angeschlossen ist, spielt auf Anwenderprogrammebene keine Rolle, die zu druckenden Zeichen werden immer an "LIST" ausgegeben+
  
-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.).+Logische Geräte sind z.Bdie Zeichenausgabe auf Drucker.  
 +Welcher Drucker angeschlossen ist, spielt auf Anwenderprogrammebene keine Rolle, die zu druckenden Zeichen werden immer an das logische Geräte LIST: ausgegeben
  
-Analog zum logischen Gerät "Drucker" gibt es 3 weitere logische Geräte: die Konsole (CON, Tastatur + Bildschirm, d.h. Zeichenein- und -ausgabe)), Punch (nur Zeichenausgabe, ursprünglich auf Lochband), Reader (nur Zeicheneingabe, ursprünglich von Lochband). +Es gibt folgende vier logische Geräte:  
 +  * CONST: Konsole (Tastatur + Bildschirm, d.h. Zeichenein- und -ausgabe),  
 +  * READER: (nur Zeicheneingabe, ursprünglich von Lochband), 
 +  * PUNCH: (nur Zeichenausgabe, ursprünglich auf Lochband),  
 +  * LIST: Drucker (nur Zeichenausgabe).
  
-Zur Kommunikation mit diesen Geräten gibt es Systemfunktionen über CALL 5, in BASIC können diese Geräte über Kanäle #1..#4 angespochen werden (allg. geht das nur mit verändertem Lutz-Elßner-Basic)!+Zur Kommunikation mit diesen Geräten gibt es Systemfunktionen über CALL 5:
  
 CALL 5, C = Rufnmmer CALL 5, C = Rufnmmer
Zeile 33: Zeile 49:
 | 11 | CSTS       | Abfrage Status 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, s. [[z9001:basic#die_erweiterung_von_lutz_elssner|]])!
  
 +Für jedes logische Gerät können bis zu 4 physische Gerätetreiber geladen und im Speicher vorgehalten werden.
 +Mit dem Systemkommando ASGN (s.u.) oder durch Setzen des I/O-Bytes (s.u.) erfolgt die Zuweisung, welcher physische Gerätetreiber aktuell einem logischen Gerät zugeordnet ist.
  
-===== Das I/O-Byte ===== +Mit 
- +  ASGN LIST:=LX86 
-Das I/O-Byte dient zur Verbindung von logischen und physischen Geräten. Für +wird beispielsweise der physische Druckertreiber "LX86" aktiv dem logischen Gerät LIST: zugeordnet. Alle Druck-Ausgaben werden ab jetzt an den Druckertreiber "LX86" weitergereicht.
-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: +
- Bit         7 6  5 4    3 2   1 0 +
- Log. Gerät LIST PUNCH READER CONST +
- +
-Vom Monitor werden folgende Belegungen realisiert +
- +
-<code> +
- +
-CONST 1 CRT ist aktiviert +
- 2 BAT ist aktiviert +
-LIST: 1 CRT ist aktiviert +
- +
-nach Reset ist IOByte 01h, d.h.  +
- +
-CONST: = CRT +
-READER: =  +
-PUNCH: =  +
-LIST: = +
- +
-System-Treiber, * ist aktiv, fehlende Treiber sind mit RET kurzgeschlosssen +
-; physische Gerätenummer  +
-; log. Gerät 0 1 2 3 +
-; -------------------------------------------- +
-; CONST:  (0) CRT* BAT +
-; READER: (2) * +
-; PUNCH:  (4) * +
-; LIST:   (6) * CRT +
-</code> +
- +
- +
-Es sind jetzt folgende Zuweisungen möglich: +
- +
-LIST: = CRT - Druckausgaben erfolgen auf den Bildschirm parallel zur normalen Ausgabe +
- +
-Wenn Treiber für Reader und Punch installiert sind, ist noch erlaubt: +
- +
-CONST: = BAT - Consoleneingabe vom Reader-Gerat, Konsolenausgabe erfolgt auf das Punch-Gerät +
- +
- +
-Die Treiberadressen der jeweiligen physischen Geräte liegen auf den Adressen +
-EFC9H bis EFE8H. +
- +
- +
- +
- +
-Hinweis: Es gibt symbolische Namen für die physischen Geräte, diese spielen i.allg. keine Rolle! +
- +
-<code> +
-; physische Gerätenummer  +
-; log. Gerät 0 1 2 3 +
-; -------------------------------------------- +
-; CONST:  (0) TTYC CRTC BATC AUC +
-; READER: (2) TTYR RDR UR1 UR2 +
-; PUNCH:  (4) TTYP PUN UP1 UP2 +
-LIST:   (6) TTYL CRT LST UL +
-</code> +
- +
- +
- +
-==== 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- /Ausgabekanäle. Vorbild für das im folgenden kurz erläuterte Konzept ist das Betriebssystem CP/M. +
- +
-:!: sollen Gerätetreiber auch für OS 1.1 nutzbar sein, muss man auf einen Bug des Systems Rücksicht nehmen! +
- +
- +
-==== I/O-Byte-Konzept ==== +
- +
-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 +
- +
-CONST: (Console) \\   +
-READER: (zusätzlicher Eingabekanal) \\   +
-PUNCH: (zusätzlicher Ausgabekanal) \\   +
-List: (log. Kanal für Drucker) +
- +
-zugeordnet, dh. 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). +
- +
-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:) auf die Kanäle READER: (Eingabe) und LIST: (Ausgabe) aufteilt, also nur verwendbar ist, falls auch für READER: und LIST: entsprechende Treiber eingebunden wurden. +
- +
-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 - das ASGN (Assign)-Kommando - an. Diese Form des Einbindens von E/A-Treibern sollte i. a. bevorzugt werden, da die konkreten Anordnungen von Zuordnungstabelle (Tafel 5) und I/O-Byte im Speicher damit für den Nutzer transparent bleiben (d. h., evtl. Veränderungen wirken sich nicht auf das Anwenderprogramm aus).+
  
  
-==== 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 153: Zeile 78:
 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 "LX86" im Speicher (von oben nach unten) entsprechend den Aufrufregeln für transiente Kommandos gesucht:+Zuerst wird eine Treiberroutine namens "LX86" im Speicher (von oben nach unten) entsprechend den  Aufrufregeln für transiente Kommandos gesucht. Ist die Suche erfolgreich, so wird die Steuerung zum Treiber übergeben (Initialisierungsroutine des Treibers), andernfalls wird angenommen, dass eine Treiberroutine vom Band nachgeladen werden soll, und es erfolgt die Ausschrift
  
-- 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 "LX86") verglichen.+  start tape.
  
-Diese Tabelle wird mit einem Nullbyte abgeschlossen und kann mit weiteren Strukturen dieser Form fortgesetzt werdenZwei aufeinander folgende Nullbytes beenden diese Sprungtabelle (vgl. Beispiel Tafel 6).+Nach dem Einlesen wird der Treiber an der im FCB spezifizierten Startadresse gestartetIm allgemeinen sollte die Treiberroutine an das aktuelle Speicherende (RAM) platziert werden (über Zelle 36H zu ermitteln). 
  
-Ist die Suche erfolgreich, so wird die Steuerung zur Adresse hhllH übergeben (Initialisierungsroutine des Treibers), andernfalls wird angenommen, daß eine Treiberroutine vom Band nachgeladen werden soll, und es erfolgt die Ausschrift+Dem OS müssen bei der Initialisierung einige Informationen übermittelt werden:
  
-start tape.+  * Welchem log. Gerät darf die Treiberroutine zugeordnet werden?  
 +  * Die Startadresse des Treiberteils  
 +  * 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).
  
-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: +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.
- +
-- 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.+
  
 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: +Beispielsweise wird ein Druckertreiber mit der Bezeichnung "LX86" wie folgt in das OS eingebundenMit der Anweisung
- +
-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) +
- +
-Tafel 6 gibt ein Beispiel an, wie die Treiberroutine nach Tafel 4 (V24/DTR) als Druckertreiber mit der Bezeichnung "LX86" in das OS eingebunden werden kann. Mit der Anweisung+
  
   ASGN LIST:=LX86   ASGN LIST:=LX86
  
-wird die Routine V24 (Tafel 4eingebunden und das I/O-Byte entsprechend gestellt. Es erfolgt die Ausschrift+wird die Treiber-Routine eingebunden (ggf. von Kassette geladen) und das I/O-Byte entsprechend gestellt. Es erfolgt die Ausschrift
  
   CONST:=CRT    CONST:=CRT 
Zeile 195: Zeile 108:
 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.
  
-:!: Achtung:+:!: Die meisten Treiber umgehen den Aufruf über ASGN. Statt 
 +  ASGN LIST:=LX86 
 +wird der Druckertreiber dann mit  
 +  LX86 
 +geladen.
  
-<code> +Ein guter Treiber (s.u.) sollte beide Varianten ermöglichen!
-;Ende der InitialisierungBei 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 
-</code> 
  
 +===== Das I/O-Byte =====
  
-===== Druckertreiber =====+Das I/O-Byte dient zur Verbindung der vier logischen mit physischen Geräten. Für 
 +jedes logische Gerät 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.
  
-Was erwartet das Betriebssystem? 
  
-Das OS des Z9001 ist basierend auf CP/M entwickelt worden und hat dessen 
-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 wird CONST der Tastatur und dem Bildschirm 
-zugeordnet und LIST dem Drucker. 
  
-Damit ein physischer Gerätetreiber so zugeordnet werden kannmuss er einige +Aufbau des I/O-Bytes (HS-Adr. 0004im CP/M üblicherweise Adr. 0003): 
-Eigenschaften erfüllen:+ Bit         7 6  5 4    3 2   1 0 
 + Log. Gerät LIST PUNCH READER CONST
  
-1. Treiberadresse muss in der Adresstabelle für Gerätetreiber eingetragen sein +Das OS selbst beinhaltet zwei residente physische Treiberroutinen: 
-(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:+  * CRT Consoltreiber  
 +  * BAT Batch-Treiber 
  
-1Initialisieren/Rücksetzen des Gerätes (A=0FFh) +CRT ist der Treiber für die Standard-Console, dhfür das Fernsehgerät als Sichtgerät und die eingebaute Tastatur
-2Abfrage Status (A=0) +
-3Ausgabe Zeichen (A=0, Zeichen in C)+
  
-Das Ganze ist in der Betriebssystembeschreibung ausführlicher erklärtEbenfalls +BAT ist ein Treiber, der das logGerät Console (CONST:) auf die Kanäle READER: (Eingabe) und LIST: (Ausgabe) aufteilt, also nur verwendbar ist, falls auch für READER: und LIST: entsprechende Treiber eingebunden wurden
-gibt es in mp 10/87 S. 311 ff. Erläuterungen zum Gerätetreiber-Handling des +
-Z9001.+
  
-Hinweis: Die Robotron-Treiber umgehen den Mechanismus von ASGN und tragen sich +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 des I/O-Bytes erfolgen
-selbst in die internen Gerätetreiberlisten ein; ein Robotron-Druckertreiber wird +
-also ganz normal im OS geladen; NICHT mit ASGN.+
  
 +Vom Monitor werden folgende physische Geräte realisiert:
  
-===== CRT-Teiber =====+<code> 
 +  log. Gerät    Gerätenummer - phys. Treiber 
 +  CONST: 1 - CRT 
 +                2 BAT 
 +  LIST: 1 - CRT 
 +</code>
  
-für KRT wurden von mir CRT-Treiber entwickelt. Es gab keine Vorbilder wie bei den Druckertreibern.+<code> 
 +System-Treiber, * ist aktiv, fehlende Treiber sind mit RET kurzgeschlossen 
 +; physische Gerätenummer  
 +; logGerät 0 1 2 3 
 +; -------------------------------------------- 
 +; CONST:  (0) CRT* BAT 
 +; READER: (2) * 
 +; PUNCH:  (4) * 
 +; LIST:   (6) * CRT 
 +</code>
  
 +nach Reset ist IOByte = 01h, d.h. 
  
-===== ZM =====+<code> 
 +CONST: CRT 
 +READER:  
 +PUNCH:  
 +LIST: = 
 +</code>
  
-:!: Schlechtes Vorbild!!!+Es sind jetzt folgende Zuweisungen möglich:
  
-Es wird nicht alles umgesetzt, so fehlt die Initialisierung und die Anzeige der Treibernamen etc.+LIST: = CRT - Druckausgaben erfolgen auf den Bildschirm parallel zur normalen Ausgabe
  
-Im Zusatzmonitor sind verschiedene Gerätetreiber enthalten. s. auch Artikel über +Wenn Treiber für Reader und Punch installiert sind, ist noch erlaubt:
-mp 10/87 S. 311 ff.. Den logischen Geräten Console, ReaderPunch, List können +
-verschiedene physische Treiber zugeordnet werden. Im ZM sind physische Treiber +
-für Tastatur mit BeepSIF-1000 Lochbandleser und -stanzer, V24-Drucker und +
-Kassettenzugriff enthalten.+
  
-Das Kommando A<logisches Gerät>=<physisches Gerät> dient der Zuweisung eines +CONST: BAT - Consoleneingabe vom Reader-Gerät, Konsolenausgabe erfolgt auf das Punch-Gerät
-vorhandenen Gerätes zu einem logischen Gerät. Folgende Zuordnungen sind +
-angebbar:+
  
  
 +Die Treiberadressen der jeweiligen physischen Geräte liegen auf den Adressen
 +EFC9H bis EFE8H. s.u. Adresstabelle der Gerätetreiber.
  
-CONSOLE  
  
-READER  +**Hinweis**: Es gibt symbolische Namen für die physischen Gerätediese spielen iAllgkeine Rolle
- +werden aber in der Literatur (und im Zusatzmonitor ZMgenutzt:
-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   +
- +
-Nach Anlauf des Monitors gilt die Zuordnung AC=VAR=C, AP=C und AL=C (alles auf Konsole). +
- +
- Soll z.B. ein über den freien PIO-Port angeschlossener V24-Drucker verwendet +
- werden, so muss vorher AL=L gegeben werden. AC=C bewirktdass jeder +
- Tastendruck mit einem Ton quittiert wird. +
- +
-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 Vvorher 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, bei AL=V auf dem Bildschirm. +
- +
- +
- +
-====== OS ======+
  
 <code> <code>
-;der folgende Speicherbereich ist durch den Nutzer für eigene Treiber verwendbar +; physische Gerätenummer  
-0280 RTTYC BER 4  ;RAM TTY-Treiber für CONST +log. Gerät 0 1 2 3 
-0284 RCRTC: BER 4 ;RAM CRT-Treiber für CONST +; -------------------------------------------- 
-0288 RBATC: BER 4 ;RAM BAT-Treiber für CONST +CONST:  (0) TTY[C] CRT[C] BAT[C] AUC 
-028C RUC: BER 4 ;RAM UC-Treiber für CONST +; READER(2 TTY[R] RDR UR1 UR2 
-0290 PTTYR: BER 4 ;RAM TTY-Treiber für READER +PUNCH (4) TTY[P] PUN UP1 UP2 
-0294 RRDR: BER 4 ;RAM RDR-Treiber für READER +LIST:   (6) TTY[L] CRT[L] LST UL
-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 ;reserviert für Systemerweiterung +
- +
-;Adreßtabelle der Gerätetreiber +
-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 +
-;Zeichenkettenadreßtabelle +
-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 ;entsprechend TXCON +
-EFEF TXLST DA PHYDV ;+
 </code> </code>
  
  
  
-3. Zusätzliche Treiber+===== Aufbau =====
  
-Der Monitor des Z 9001 bietet dem Anwender über das ASGN-Kommando die +Ein Treiber-Programm besteht aus mehreren Teilen 
-Möglichkeitden logischen Geräten jeweils 4 physische Geräte mit beliebigen + 
-Treiberroutinen zuzuweisen. Um die Zusammenarbeit mit allen anderen +  * OS-Kommandorahmen (enthält den Kommando-Namen, z.B. "LX86") 
-Systemkomponenten zu gewährleisten, sind dabei besondere Randbedingungen zu +  * Kommando-Verteiler für die Treiber-Kommandos wie EingabeStatusabfrage und Initialisierung  
-beachten.+  die interne Logik zur Umsetzung der Treiber-Kommandos (z.B. mit Sonderbehandlung von Steuerzeichen) 
 +  * die physischen Treiber zur Ansteuerung des Gerätes 
 +  * die Initialisierung der Systemzellen und die Parameterbereitstellung für ASGN
  
 Treibereingangsparameter: Treibereingangsparameter:
- * A Kommando (siehe 3.2.) (für CONST, READER, LIST)+ * A Kommando (siehe Tabelle) (für CONST, READER, LIST)
  * C Zeichen (bei Kommando AUSGABE)  * C Zeichen (bei Kommando AUSGABE)
  * DE Adresse bei Cursorkommandos  * DE Adresse bei Cursorkommandos
Zeile 370: Zeile 222:
 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.1Treiberinitialisierung+**Treiber-Kommandos** 
 + 
 +^ Code ^ Funktion ^ Eingang ^ Return ^ 
 +| 00 | Abfrage Status | | A Status\\ 0 kein Zeichen bei Eingabegerät,\\ nicht bereit bei Ausgabegerät\\ sonst Zeichen liegt an bei Eingabegerät,\\ (im installierten CRT-Treiber wird der Zeichencode übergeben) | 
 +| 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/Rücksetzen des Gerätes | | | 
 + 
 +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 (bzwdem 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 (siehe 2.1.2.) und+automatische Initialisierung über die Nutzung des Kommandos und
 Direktzugriff auf entsprechende Systemzellen ist zu vermeiden. Direktzugriff auf entsprechende Systemzellen ist zu vermeiden.
  
Zeile 388: Zeile 270:
 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 398: Zeile 281:
  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, wird nach der Zuweisung durch ASGN angezeigt)
 </code> </code>
 +
 +:!: sollen Gerätetreiber auch für OS 1.1 nutzbar sein, muss man auf einen Bug des Systems Rücksicht nehmen!
 +
 Beispiel: Beispiel:
 +
 <code> <code>
  ;PROM-Transientkommandoprogramm zur Initialisierung eines Druckers als TTY-Gerät  ;PROM-Transientkommandoprogramm zur Initialisierung eines Druckers als TTY-Gerät
Zeile 419: Zeile 306:
  LD BC,OUTZ ;Adresse der Zeichenausgabe  LD BC,OUTZ ;Adresse der Zeichenausgabe
  LD DE,TEXT  LD DE,TEXT
- 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: SCF ;Fehler  FEHL: SCF ;Fehler
Zeile 434: Zeile 327:
 </code> </code>
  
-Hinweis: +Beim eigenständigen Eintragen der Treiber unter Umgehung des ASGN-Kommandos gilt:
- * 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)+
  
 +  - Treiberadresse muss in der Adresstabelle für Gerätetreiber eingetragen sein (0EFC9H-0EFE8H)
 +  - der Treiber muss eine 8 Byte lange Bezeichnung bereitstellen
 +  - der Treiber muss die Systemkommandos für Gerätetreiber umsetzen.
  
-3.2. Besonderheiten der Treiber für CONST+**Treiber für LIST (Druckertreiber)** 
 + 
 +Für einen Druckertreiber reichen folgende Treiber-Kommandos aus: 
 + 
 +  * Initialisieren/Rücksetzen des Gerätes (A=0FFh) 
 +  * Abfrage Status (A=0, Rückgabe 0 bei nicht bereit, sonst <> 0) 
 +  * Ausgabe Zeichen (A=2, Zeichen in C) 
 + 
 +**Treiber für READER** 
 + 
 +Für einen Treiber für READER reichen folgende Treiber-Kommandos aus: 
 + 
 +  * Initialisieren/Rücksetzen des Gerätes (A=0FFh) 
 +  * Abfrage Status (A=0, Rückgabe 0, wenn kein Zeichen einzulesen ist, sonst <> 0) 
 +  * Eingabe Zeichen (A=1, Rückgabe Zeichen in A) 
 + 
 +**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 447: Zeile 356:
 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,\\ nicht bereit bei Ausgabegerät\\ sonst Zeichen liegt an bei Eingabegerät,\\ (im installierten CRT-Treiber wird der Zeichencode übergeben) | +
-| 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/Rücksetzen des Gerätes | | | +
- +
-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 492: Zeile 385:
 </code> </code>
  
-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 =====
 +
 +Im Betriebssystem sind einige Speicherzellen für Treiber freigehalten.
 +Anwenderprogramme dürfen daher den Bereich 280h..2BFh auch nicht nutzen, sondern erst ab 300h!
 +
 +<code>
 +
 +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
 +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
 +
 +
 +;Adreßtabelle der Gerätetreiber
 +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
 +
 +;Zeichenkettenadreßtabelle
 +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 ;entsprechend TXCON
 +EFEF TXLST: DA PHYDV ;
 +</code>
 +
 +====== DEVICE-Kommando ======
 +
 +2020 habe ich das Kommando DEVICE programmiert (im Mega-Flash-Paket enthalten), um die Beschränkungen von ASGN zu umgehen. Mit DEVICE erfolgt die Anzeige der Gerätetreiber-Tabelle und des I/O-Bytes. Geräte können aktiviert werden. Treiber können beliebig in der Gerätetreiber-Tabelle zugewiesen werden.
 +
 +<code>
 +device Anzeige Gerätetreiber-Tabelle
 +device log.gerät:=0..3 Zuweisen log. Gerät mit physischer Gerätenummer + Init.
 + error4 kein gültiger Treiber hinterlegt
 +device log.gerät:=treiber Zuweisen Treiber, ggf. Laden (analog ASGN)
 +device log.gerät:=treiber 0..3 Zuweisen Treiber, dabei physische Gerätenummer vorgeben
 + dabei ist Zuweisung an beliebiges logisches Gerät möglich
 +</code>
 +
 +**Beispiel**: Anzeige der Tabelle nach Aufruf des Zusatzmonitors ZM30. Dieser installiert Treiber in der Gerätetreiber-Tabelle. Über das ZM-eigene  A-Kommando oder über DEVICE gerät:=0..3 können diese aktiviert werden
 +
 +<code>
 +
 +>ZM30 Laden+Starten Zusatzmonitor ZM
 + Z9001 MONITOR V2.0 (ZM30)  1986 Programmeldung
 +=>AR=T Zuweisung Reader:=Tape
 +=>AP=T Zuweisung Punch:=Tape
 +=>B ZM Beenden
 +>ASGN System-Kommando Assign. Anzeige der Gerätezuweisungen
 +
 +CONST :CRT
 +READER:TAPER
 +PUNCH :TAPEP
 +LIST  :
 +>DEVICE Kommando DEVICE. Anzeige I/O-Tabelle
 +
 +IOBYTE:29 0             3
 +CONST :01 3CE1  F8F1* F7B4  F8F1
 +READER:02 F8F1  30A0  311C* F8F1
 +PUNCH :02 F8F1  3058  3128* 30C3
 +LIST  :00 F8F1* F8F1  30C3  3058
 +>DEVICE LIST:=1 Aktivierung List zugewiesenes Gerät Kanal 1
 +</code>
 +
 +
 +====== 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 'A'. Hier wird nicht alles wie im OS umgesetzt, so fehlen etwa Treibernamen. Obwohl nach Verlassen des ZM zugewiesene Treiber weiterhin aktiv sind, ist dies nicht bei ASGN erkennbar.
 +  * 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, Statusabfrage etc.)
 +  * 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
 +
 +Hinweis: Im Mega-Flash sind modifizierte Versionen enthalten, die sich an die Vorgaben halten und mit anderen Programmen zusammenarbeiten.
 +
 +Im [[z9001:software:zm]] sind verschiedene Gerätetreiber enthalten.
 +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<logisches Gerät>=<physisches Gerät> dient der Zuweisung eines
 +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 |
  
  • z9001/software/os/geraetetreiber.1430147976.txt.gz
  • Zuletzt geändert: 2015/04/27 15:19
  • von volkerp