Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | Nächste ÜberarbeitungBeide Seiten der Revision | ||
z9001:software:os:geraetetreiber [2015/04/27 15:19] – [Gerätetreiber] volkerp | z9001:software:os:geraetetreiber [2015/04/28 12:54] – [ASGN-Kommando] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Gerätetreiber ====== | ====== Gerätetreiber ====== | ||
- | FIXME Wüste Baustelle !!! | + | FIXME |
+ | Das OS des KC85/1 unterstützt leistungsfähig das Einbinden neuer Gerätetreiberroutinen für die sog. zeichenorientierten logischen Ein- / | ||
- | [[z9001:literatur: | + | Literatur: |
- | und weitere Quellen | + | * [[z9001: |
- | + | * " | |
- | ... | + | * und weitere Quellen |
===== 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. 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 " | + | 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.). | 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.). | ||
Zeile 19: | Zeile 20: | ||
Analog zum logischen Gerät " | Analog zum logischen Gerät " | ||
- | 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 34: | ||
| 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)! | ||
===== Das I/O-Byte ===== | ===== Das I/O-Byte ===== | ||
Zeile 45: | Zeile 46: | ||
physisches Gerät verbinden. | physisches Gerät verbinden. | ||
- | Aufbau des I/O-Bytes: | + | |
+ | |||
+ | Aufbau des I/ | ||
Bit 7 6 5 4 3 2 1 0 | Bit 7 6 5 4 3 2 1 0 | ||
Log. Gerät LIST PUNCH READER CONST | Log. Gerät LIST PUNCH READER CONST | ||
- | Vom Monitor werden folgende Belegungen realisiert | + | Das OS selbst beinhaltet zwei residente Treiberroutinen: |
- | < | + | * CRT Consoltreiber |
+ | * BAT Batch-Treiber | ||
- | CONST: 1 CRT ist aktiviert | + | CRT ist der Treiber für die Standard-Console, |
- | 2 BAT ist aktiviert | + | |
- | LIST: 1 CRT ist aktiviert | + | |
- | nach Reset ist IOByte = 01h, d.h. | + | 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. |
- | CONST: = CRT | + | 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. |
- | READER: = | + | |
- | PUNCH: = | + | |
- | LIST: = | + | |
+ | Vom Monitor werden folgende physische Geräte realisiert: | ||
+ | |||
+ | < | ||
+ | log. Gerät | ||
+ | CONST: 1 - CRT, 2 - BAT | ||
+ | LIST: 1 - CRT | ||
+ | </ | ||
+ | |||
+ | < | ||
System-Treiber, | System-Treiber, | ||
; physische Gerätenummer | ; physische Gerätenummer | ||
Zeile 74: | Zeile 82: | ||
</ | </ | ||
+ | nach Reset ist IOByte = 01h, d.h. | ||
+ | |||
+ | < | ||
+ | CONST: = CRT | ||
+ | READER: = | ||
+ | PUNCH: = | ||
+ | LIST: = | ||
+ | </ | ||
Es sind jetzt folgende Zuweisungen möglich: | Es sind jetzt folgende Zuweisungen möglich: | ||
Zeile 85: | Zeile 101: | ||
Die Treiberadressen der jeweiligen physischen Geräte liegen auf den Adressen | Die Treiberadressen der jeweiligen physischen Geräte liegen auf den Adressen | ||
- | EFC9H bis EFE8H. | + | EFC9H bis EFE8H. s.u. Adreßtabelle der Gerätetreiber. |
- | + | Hinweis: Es gibt symbolische Namen für die physischen Geräte, diese spielen i.allg. keine Rolle, | |
- | + | werden aber in der Literatur (und im Zusatzmonitor ZM) genutzt: | |
- | Hinweis: Es gibt symbolische Namen für die physischen Geräte, diese spielen i.allg. keine Rolle! | + | |
< | < | ||
Zeile 96: | Zeile 111: | ||
; log. Gerät 0 1 2 3 | ; log. Gerät 0 1 2 3 | ||
; -------------------------------------------- | ; -------------------------------------------- | ||
- | ; CONST: | + | ; CONST: |
- | ; READER: (2) TTYR RDR UR1 UR2 | + | ; READER: (2) TTY[R] RDR UR1 UR2 |
- | ; PUNCH: | + | ; PUNCH: |
- | ; LIST: | + | ; LIST: |
</ | </ | ||
- | + | ===== ASGN-Kommando ===== | |
- | ==== 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- / | + | |
- | + | ||
- | :!: sollen Gerätetreiber auch für OS 1.1 nutzbar sein, muss man auf einen Bug des Systems Rücksicht nehmen! | + | |
- | + | ||
- | + | ||
- | ==== I/ | + | |
- | + | ||
- | 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/ | + | |
- | + | ||
- | CONST: (Console) \\ | + | |
- | 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). | + | |
- | + | ||
- | Das OS selbst beinhaltet zwei residente Treiberroutinen: | + | |
- | + | ||
- | CRT Consoltreiber \\ | + | |
- | BAT Batch-Treiber | + | |
- | + | ||
- | CRT ist der Treiber für die Standard-Console, | + | |
- | + | ||
- | 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 | + | |
- | + | ||
- | + | ||
- | ==== 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 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 161: | 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 182: | 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 194: | 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. | ||
- | |||
- | :!: Achtung: | ||
- | |||
- | < | ||
- | ;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 | ||
- | </ | ||
- | |||
===== Druckertreiber ===== | ===== Druckertreiber ===== | ||
Zeile 499: | Zeile 464: | ||
das LIST-Gerät müssen die Kommandos Ausgabe, Statusabfrage und Initialisierung | das LIST-Gerät müssen die Kommandos Ausgabe, Statusabfrage und Initialisierung | ||
in jedem Falle programmiert werden. | 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 | ||
+ | </ | ||