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:literatur:treiber [2010/07/23 12:24] – Page moved from z9001:treiber to z9001:literatur:treiber volkerpz9001:literatur:treiber [2020/03/31 14:50] (aktuell) – [3.2. ASGN-Kommando] volkerp
Zeile 1: Zeile 1:
 ====== mp 10/87 S. 311 ff. ======  ====== mp 10/87 S. 311 ff. ====== 
  
-Für den Z9001 gibt es ein CP/M-ähnliches Verfahren für Gerätetreiber. Darüber gab es einen umfassenden Artikel, den ich hier (nebst reassemblierter Software) bereitstelle. Mir ist nur das hier vorgestellte Treiberpaket bekannt, welches den offiziellen Weg über das ASGN-Kommando (s.u.) zur Treibereinbindung nutzt. Andere Treiber, wie auch die Druckertreiber von Robotron, umgehen diesen Mechanismus und verankern sich direkt in den Systemzellen.+Für den Z9001 gibt es ein CP/M-ähnliches Verfahren für Gerätetreiber. Darüber gab es einen umfassenden Artikel, den ich hier (nebst reassemblierter Software) bereitstelle. Mir ist nur das hier vorgestellte Treiberpaket bekannt, welches den offiziellen Weg über das ASGN-Kommando (s.u.) zur Treibereinbindung nutzt. Andere Treiber, wie auch die Druckertreiber von Robotron, umgehen diesen Mechanismus und verankern sich direkt in den Systemzellen. (vp) 
 + 
 +Im [[z9001:module_sonstige:megamodul|]] und in der [[z9001:software:mega|]] ist das hier beschriebene Paket als **TR_SAMML** (Treiber-Sammlung) enthalten.
  
 ===== Standard-Interfaces über den User-Port des KC 85/1 ===== ===== Standard-Interfaces über den User-Port des KC 85/1 =====
Zeile 12: Zeile 14:
 ==== 1. User-Port des KC85/1 ==== ==== 1. User-Port des KC85/1 ====
  
-{{z9001-interfaces_bild1.gif?200|}}+{{z9001:z9001-interfaces_bild1.gif?300|}}
  
 Bild 1 zeigt den für den Anwender frei verfügbaren User-Port des KC 85/1. Er ist über eine 15polige EFS-Buchse an der rechten Seite des Gerätes dem Nutzer zugänglich und besteht aus einem PIO-Port und einem CTC-Kanal. Diese Peripherieschaltkreise sind über folgende E/A-Adressen ansprechbar: Bild 1 zeigt den für den Anwender frei verfügbaren User-Port des KC 85/1. Er ist über eine 15polige EFS-Buchse an der rechten Seite des Gerätes dem Nutzer zugänglich und besteht aus einem PIO-Port und einem CTC-Kanal. Diese Peripherieschaltkreise sind über folgende E/A-Adressen ansprechbar:
Zeile 20: Zeile 22:
 CTC1: 81H CTC1: 81H
  
-Bei der Nutzung dieser Schnittstelle müssen unbedingt die zulässigen Pegel und Lastbedingungen von PIO und CTC beachtet werden, da diese Anschlüsse im KC 85/1 *nicht* gegen Überlastung bzw. Zerstörung geschützt sind.+Bei der Nutzung dieser Schnittstelle müssen unbedingt die zulässigen Pegel und Lastbedingungen von PIO und CTC beachtet werden, da diese Anschlüsse im KC 85/1 **nicht** gegen Überlastung bzw. Zerstörung geschützt sind.
  
 ==== 2. Software-Realisierung von Standard-Interfaces ==== ==== 2. Software-Realisierung von Standard-Interfaces ====
  
-Aus Bild 1 geht hervor, daß dem Anwender am User-Port 8 freiprogrammierbare Leitungen und jeweils zwei Ein- und Ausgabeleitungen mit speziellem Verhalten zur Verfügung stehen. Diese Belegung erlaubt bei konsequenter Ausnutzung die Realisierung so gängiger Standard-Interfaces wie SIF-1000, V24(RS 232C) und CENTRONICS derart, daß viele Geräte mit diesen Schnittstellen direkt an den User-Port angeschlossen werden können. Die notwendigen Hardware-Arbeiten beschränken sich - wie die folgenden Beispiele zeigen - auf das Anfertigen eines Kabels und evtl. erforderliche Pegelanpassungen (V24). Es sei darauf hingewiesen, daß die Beschreibung der Standard-Interfaces nur soweit erfolgt, wie das für den konkreten Geräteanschluß notwendig ist, und somit keinen allgemeingültigen Charakter besitzt.+Aus Bild 1 geht hervor, daß dem Anwender am User-Port 8 freiprogrammierbare Leitungen und jeweils zwei Ein- und Ausgabeleitungen mit speziellem Verhalten zur Verfügung stehen. Diese Belegung erlaubt bei konsequenter Ausnutzung die Realisierung so gängiger Standard-Interfaces wie SIF-1000, V24(RS 232C) und CENTRONICS derart, daß viele Geräte mit diesen Schnittstellen **direkt** an den User-Port angeschlossen werden können. Die notwendigen Hardware-Arbeiten beschränken sich - wie die folgenden Beispiele zeigen - auf das Anfertigen eines Kabels und evtl. erforderliche Pegelanpassungen (V24). Es sei darauf hingewiesen, daß die Beschreibung der Standard-Interfaces nur soweit erfolgt, wie das für den konkreten Geräteanschluß notwendig ist, und somit keinen allgemeingültigen Charakter besitzt.
  
 ==== 2.1. SIF-1000 ==== ==== 2.1. SIF-1000 ====
Zeile 61: Zeile 63:
 Für die Auswertung des END-Signals wurde der Zähler-Eingang des CTC-Kanales benutzt. Damit sind die in Tafel 1 und 2 angeführten Routinen zur softwaremäßigen Realisierung des Geräteanschlusses ohne Interruptbetrieb ausführbar. Für die Auswertung des END-Signals wurde der Zähler-Eingang des CTC-Kanales benutzt. Damit sind die in Tafel 1 und 2 angeführten Routinen zur softwaremäßigen Realisierung des Geräteanschlusses ohne Interruptbetrieb ausführbar.
  
-{{z9001-interfaces_bild2.gif?200|}}+{{z9001:z9001-interfaces_bild2.gif?300|}}
  
 Die angegebenen Treiber bilden das in Bild 2 dargestellte Signalverhalten für die Signale /DAT-1 bis /DAT-7, /RUF und /END nach. Um ein "Klemmen" des Systems bei nicht angeschlossenem Gerät oder anderen Fehlern zu verhindern, wurde eine Abfrage der STOP-Taste mit integriert, wodurch ein Zwangsaustritt aus den Routinen jederzeit möglich ist. Die angegebenen Treiber bilden das in Bild 2 dargestellte Signalverhalten für die Signale /DAT-1 bis /DAT-7, /RUF und /END nach. Um ein "Klemmen" des Systems bei nicht angeschlossenem Gerät oder anderen Fehlern zu verhindern, wurde eine Abfrage der STOP-Taste mit integriert, wodurch ein Zwangsaustritt aus den Routinen jederzeit möglich ist.
  
 Die SIF-E-Routine wurde insofern verkürzt, als auf die Rückflanke des END-E- Signals nicht mehr gewartet wird. Das hat sich als vorteilhaft bei der Nutzung des Handlesers ZfK 4944-170/03 herausgestellt. Die SIF-E-Routine wurde insofern verkürzt, als auf die Rückflanke des END-E- Signals nicht mehr gewartet wird. Das hat sich als vorteilhaft bei der Nutzung des Handlesers ZfK 4944-170/03 herausgestellt.
 +
 +<file z80>
 +Tafel 1 Treiberroutine für SIF-1000-Ausgabe
 +-------------------------------------------
 +
 +
 +;==========================================================
 +;                                                         |
 +;  SIF-1000 Ein-/Ausgabe ueber User-Port                  |
 +;  -------------------------------------                  |
 +;  Voraussetzungen                                        |
 +;- RUF wird ueber PIO-Bit 7 gebildet ==> nur 7 Datenbits  |
 +;  und keine Paritaet moeglich!                           |
 +;- Die Flanken von END-A werden mit dem CTC-KANAL erfasst |
 +;- keine KOM-Ausgabe                                      |
 +;- keine STAT-Auswertung                                  |
 +;                                                         |
 +;==========================================================
 +;                                                         |
 +;  Ausgabe eines Zeichens an SIF-A                        |
 +;  -------------------------------                        |
 +;- Zeichen im C-Register                                  |
 +;- Return: Carry=1 ==> Stop-Taste                   |
 +;                                                         |
 +;==========================================================
 +;
 +SIFA: LD A,47H ;DI,Zaehler,neg.Flanke,TC,RESET
 + OUT (81H),A ;INIT CTC-1
 + OUT (81H),A ;TC=47H (willkuerlich)
 + LD A,0FH ;PIO1/B-BYTEAUSGABE
 + OUT (8BH),A
 + LD A,C
 + CPL ;Bei SIF-1000 Daten low active
 + SET 7,A ;ohne RUF-A
 + OUT (89H),A ;Zeichen ausgeben
 + NOP
 + NOP ;Einschwingen lassen
 + RES 7,A ;RUF-A
 + OUT (89H),A ;Zeichen gueltig
 +C01: CALL STPRQ ;STOP-Taste?
 + JP NC,C03 ;nein
 +C04: CPL a
 + OUT (89H),A ;RUF-A zuruecknehmen
 + RET
 +C03: IN A,(81H)
 + CP 47H ;END-A?
 + JR Z,C01 ;nein,warten
 + LD A,57H ;s.o.,aber pos. Flanke
 + OUT (81H),A
 + OUT (81H),A ;TC=57H
 + LD A,0FFH ;/RUF-A
 + OUT (89H),A
 +C02: CALL STPRQ ;STOP-Taste?
 + JR C,C04 ;ja
 + IN A,(81H)
 + CP 57H ;/END-A?
 + JR Z,C02 ;nein, warten
 + OR A
 + RET
 +</file>
 +
 +<file z80>
 +Tafel 2 Treiberroutine für SIF-1000-Eingabe
 +-------------------------------------------
 +
 +
 +;==========================================================
 +;                                                         |
 +;  Eingabe eines Zeichens von SIF-E                       |
 +;  --------------------------------                       |
 +;- Return: Zeichen in A                                   |
 +;- Carry=1 ==> STOP-Taste                           |
 +;                                                         |
 +;==========================================================
 +;
 +SIFE: LD A,47H ;Zaehler, neg.Flanke
 + OUT (81H),A
 + OUT (81H),A ;TC
 + LD A,0CFH ;BIT-E/A
 + OUT (80H),A
 + LD A,7FH ;nur Bit7 Ausgabe (RUF-E)
 + OUT (8BH),A
 + OUT (89H),A ;RUF-E ausgeben
 +CI1: CALL STPRQ ;STOP-Taste?
 + JR C,C04 ;ja, s.Tafel 1
 + IN A,(81H)
 + CP 47H ;END-E?
 + JR Z,CI1 ;NEIN
 + IN A,(89H) ;DATEN
 + CPL
 + OUT (89H),A ;/RUF-E
 + AND 7FH
 + RET
 +;
 +STPRQ: CALL 0FD33H
 + EI
 + SUB 03 ;STOP-Taste?
 + OR A ;wegen CY
 + RET NZ ;nein
 + LD (25H),A ;loeschen
 + SCF ;STOP-Taste anzeigen 
 + RET
 +;
 +;User-Port-Belegung fuer SIF-1000-Anschluss
 +;
 +; A B C
 +; ---------------------------
 +; 1 0 0 /END
 +; 2 /DAT1 /DAT2 /DAT3
 +; 3 /DAT4 /DAT5 /DATE
 +; 4 /DAT7 /RUF -
 +; 5 (+5V)--> +5V -
 +;
 +</file>
  
 ==== 2.2. V24 (RS 232 C) ==== ==== 2.2. V24 (RS 232 C) ====
Zeile 71: Zeile 187:
 Es wird eine stark abgerüstete, aber weit verbreitete Form dieser weltweit wohl am meisten genutzten  Es wird eine stark abgerüstete, aber weit verbreitete Form dieser weltweit wohl am meisten genutzten 
  
-{{z9001-interfaces_bild3.gif?200}}+{{z9001:z9001-interfaces_bild3.gif?300}}
  
 Geräteschnittstelle betrachtet. Detailliertere Informationen zu dem Standard können u. a. /2/ entnommen werden. Computer- Peripheriegeräte mit dieser Schnittstelle arbeiten in der Regel mit einem asynchronen Übertragungsprotokoll nach Bild 3. Dieses Übertragungsprotokoll erlaubt eine große Flexibilität bzgl. bestimmter Parameter: Geräteschnittstelle betrachtet. Detailliertere Informationen zu dem Standard können u. a. /2/ entnommen werden. Computer- Peripheriegeräte mit dieser Schnittstelle arbeiten in der Regel mit einem asynchronen Übertragungsprotokoll nach Bild 3. Dieses Übertragungsprotokoll erlaubt eine große Flexibilität bzgl. bestimmter Parameter:
Zeile 116: Zeile 232:
 Man beachte, daß die gezeigte Routine das unterste (d. h. physikalische) Übertragungsprotokoll realisiert. Druckerspezifische Anpassungen (Sonderzeichen, Steuerzeichen o. a.) sollten an dieser Stelle nicht erfolgen, sondern - sofern überhaupt erforderlich - von einem übergeordneten Treiberprogramm ausgeführt werden. Die dargestellte Routine ist allerdings direkt für den Betrieb eines TD40 (K6303) oder auch des EPSON LX86 (PC-1715-Variante) am KC 85/1 geeignet. Man beachte, daß die gezeigte Routine das unterste (d. h. physikalische) Übertragungsprotokoll realisiert. Druckerspezifische Anpassungen (Sonderzeichen, Steuerzeichen o. a.) sollten an dieser Stelle nicht erfolgen, sondern - sofern überhaupt erforderlich - von einem übergeordneten Treiberprogramm ausgeführt werden. Die dargestellte Routine ist allerdings direkt für den Betrieb eines TD40 (K6303) oder auch des EPSON LX86 (PC-1715-Variante) am KC 85/1 geeignet.
  
-{{z9001-interfaces_bild4.gif?200|}}+{{z9001:z9001-interfaces_bild4.gif?300|}}
  
 Den notwendigen Pegelanpassungen muß hier besondere Aufmerksamkeit gewidmet werden. Standardmäßig finden beim RS232C die Treiberschaltkreise 75150, 75188 o. ä. und die Empfängerschaltkreise 75154, 75189 o. ä. Verwendung. Damit ist eine normgerechte Pegelanpassung durchführbar, allerdings werden für die Treiberschaltkreise +/-12 V bzw. +/-9 V benötigt, die am User-Port leider nicht zur Verfügung stehen. Hier sollte im konkreten Fall geprüft werden, wie die Empfängerschaltkreise im Gerät beschaltet sind. Die angegebenen Typen gestatten  Den notwendigen Pegelanpassungen muß hier besondere Aufmerksamkeit gewidmet werden. Standardmäßig finden beim RS232C die Treiberschaltkreise 75150, 75188 o. ä. und die Empfängerschaltkreise 75154, 75189 o. ä. Verwendung. Damit ist eine normgerechte Pegelanpassung durchführbar, allerdings werden für die Treiberschaltkreise +/-12 V bzw. +/-9 V benötigt, die am User-Port leider nicht zur Verfügung stehen. Hier sollte im konkreten Fall geprüft werden, wie die Empfängerschaltkreise im Gerät beschaltet sind. Die angegebenen Typen gestatten 
  
-{{z9001-interfaces_bild5.gif?200|}}+{{z9001:z9001-interfaces_bild5.gif?300|}}
  
 nämlich eine Verschiebung der Triggerschwelle. Bild 4 zeigt eine Beschaltung der Empfängerschaltkreise, die eine sichere Ansteuerung mit einem Signalpegel von 0 bzw. +5 V erlaubt (z. B. im LX86 und K6303 gegeben). Damit entfällt die Notwendigkeit einer negativen Spannung, und eine Pegelanpassung nach Bild 5 ist der gesamte Hardware-Aufwand für den Druckeranschluß. Die Kabellänge sollte dann allerdings 2 bis 3 m nicht überschreiten. nämlich eine Verschiebung der Triggerschwelle. Bild 4 zeigt eine Beschaltung der Empfängerschaltkreise, die eine sichere Ansteuerung mit einem Signalpegel von 0 bzw. +5 V erlaubt (z. B. im LX86 und K6303 gegeben). Damit entfällt die Notwendigkeit einer negativen Spannung, und eine Pegelanpassung nach Bild 5 ist der gesamte Hardware-Aufwand für den Druckeranschluß. Die Kabellänge sollte dann allerdings 2 bis 3 m nicht überschreiten.
 +
 +<file z80>
 +Tafel 4 Treiberroutine für V24/DTR
 +----------------------------------
 +
 +
 +;==========================================================
 +;                                                         |
 +; V24-Ausgabe ueber User-Port                             |
 +;                                                         |
 +;- DTR-Prozedur                                           |
 +;- Beispielprogremm fuer serielle Ausgabe ueber           |
 +;  einen PIO-Port                                         |
 +;- Einstellbare Parameter:                                |
 +;  . Anzahl der Datenbits: DN (max.8)                     |
 +;  . Baudrate: 19200,9600,4800,2400,1200,600              |
 +;    TC =          4   12   28   60  126 255              |
 +;                                                         |
 +;- Serielle Ausgabe ueber PIO-Bit 0                       |
 +;- Bereitschaftsabfrage (DTR) ueber PIO-Bit 7             |
 +;- Zeichen in C                                           |
 +;                                                         |
 +;==========================================================
 +;
 +DN EQU 8 ;z.B. 8 Datenbits
 +TC EQU 12 ;z.B. 9600 Baud
 +;
 +V24: LD A,0CFH ;BIT-E/A
 + OUT (8BH),A
 + LD A,80H ;nur Bit 7 Eing.
 + OUT (8BH),A
 +LO0: CALL STPRQ ;Stop-Taste
 + JR NC,LO1 ;nein
 + LD (15H),A ;LIST: abschalten
 + RET
 +LO1: IN A,(89H)
 + ADD A,A ;Drucker bereit?
 + JR C,LO0 ;nein, warten
 +LO3: LD A,C ;Zeichen nach A
 +;
 +;PARALLEL-SERIEN WANDLUNG UND AUSGABE
 +;
 +PSOUT: LD E,TC ;Zeitkonstante
 + LD B,DN+1 ;1 Startbit, DN-Datenbit
 + DI ;keine Unterbrechung zulassen
 + OR A ;CY=0
 + RLA ;Start-Bit
 +LO4: OUT (89H),A ;Bit ausgeben
 + CALL WAIT ;eine Bit-Zeit warten
 + RRA ;naechstes Bit
 + DJNZ LO4
 + OR 1 ;Stopbit
 + OUT (89H),A
 + EI ;Unterbrechung. wieder zulassen
 +WAIT: PUSH DE
 +WT1: DEC E
 + JR NZ,WT1
 + POP DE 
 + RET
 +
 +;
 +; User-Port-Belegung V24-Ausgabe
 +;
 +; A B C
 +; ---------------------------
 +; 1 0 0 -
 +; 2 TxD - -
 +; 3 - - -
 +; 4 - DTR* -
 +; 5 (+5V) - -
 +;
 +; * DTR-Signal des Druckers
 +</file>
  
 ==== 2.3. CENTRONICS ==== ==== 2.3. CENTRONICS ====
Zeile 128: Zeile 317:
 Das CENTRONICS-Interface ist eine bitparallele bidirektionale Datenschnittstelle, die insbesondere als Druckerinterface z. Z. weltweit starke Verbreitung findet. Alle modernen Drucker für Heim- und Personalcomputer bieten in der Regel auch eine Ausrüstungsvariante für diese Schnittstelle. Das CENTRONICS-Interface ist eine bitparallele bidirektionale Datenschnittstelle, die insbesondere als Druckerinterface z. Z. weltweit starke Verbreitung findet. Alle modernen Drucker für Heim- und Personalcomputer bieten in der Regel auch eine Ausrüstungsvariante für diese Schnittstelle.
  
-{{z9001-interfaces_bild6.gif?200|}}+{{z9001:z9001-interfaces_bild6.gif?300|}}
  
 Bild 6 zeigt das Signalverhalten. Da die Pegel TTL-Pegel sind, eignet sich dieses Interface besonders gut für den Betrieb am User-Port des KC 85/1. Bestimmte Einschränkungen müssen allerdings wegen der begrenzten Zahl der Datenleitungen wieder getroffen werden. Will man gänzlich ohne Zusatzhardware auskommen, so bietet sich eine Zuordnung der Signale des User-Ports zu den CENTRONICS-Signalen in folgender Form an: Bild 6 zeigt das Signalverhalten. Da die Pegel TTL-Pegel sind, eignet sich dieses Interface besonders gut für den Betrieb am User-Port des KC 85/1. Bestimmte Einschränkungen müssen allerdings wegen der begrenzten Zahl der Datenleitungen wieder getroffen werden. Will man gänzlich ohne Zusatzhardware auskommen, so bietet sich eine Zuordnung der Signale des User-Ports zu den CENTRONICS-Signalen in folgender Form an:
Zeile 148: Zeile 337:
  
 Tafel 3 zeigt die entsprechende Treiberroutine für den Anschluß eines CENTRONICS-Druckers an den User-Port des KC 85/1. Tafel 3 zeigt die entsprechende Treiberroutine für den Anschluß eines CENTRONICS-Druckers an den User-Port des KC 85/1.
 +
 +<file z80>
 +Tafel 3 Treiberroutine für CENTRONICS-Drucker
 +---------------------------------------------
 +
 +
 +;==========================================================
 +;                                                         |
 +; CENTRONICS-Druckerschnittstelle ueber User-Port         |
 +;                                                         |
 +;- 7 Datenbits verfuegbar                                 |
 +;- PIO-Bit7 wird zur Bildung des CBNTRONICS-/STROBE-      |
 +;  Signals verwendet.                                     |
 +;- /ACKNLG vom Drucker wird ueber den CTC-Kanal erfasst.  |
 +;                                                         |
 +;- Zeichen in Reg. C                                      |
 +;- Return: Carry=1 bei Stop-Taste                         |
 +;                                                         |
 +;==========================================================
 +;
 +CENTR: LD A,0CFH
 + OUT (8BH),A ;Bit-Mode
 + OR A ;alles Ausgabe
 + OUT (8BH),A
 + LD A,57H ;Zaehler,pos. Planke
 + OUT (81H),A
 + OUT (81H),A ;INIT CTC-1
 + LD A,C
 + LD B,80H
 + OR B ;/STROBE=HIGH
 + OUT (89H),A ;Zeichen ohne Strobe
 + XOR B ;/STROBE=LOW
 + OUT (89H),A ;Daten gueltig
 + OR B ;/STROBE=HIGH
 + OUT (89H),A
 +CNTR1: CALL STPRQ ;STOP-Taste?
 + RET C
 + IN A,(81H)
 + CP 57H ;/ACKNLG?
 + JR Z,CNTR1 ;nein, warten
 + XOR A
 + RET
 +;
 +;
 +;
 +;
 +;
 +;User-Port-Belegung fuer CENTRONICS-Anschluss
 +;
 +; A B C
 +; ---------------------------
 +; 1 0 0 /ACC
 +; 2 DAT1 DAT2 DAT3
 +; 3 DAT4 DAT5 DAT6
 +; 4 DAT7 /STROBE -
 +; 5 (+5V)==> +5V -
 +</file>
  
 ==== 3. Einbinden von Gerätetreibern in das Betriebssystem (OS) des KC 85/1 ==== ==== 3. Einbinden von Gerätetreibern in das Betriebssystem (OS) des KC 85/1 ====
Zeile 175: Zeile 421:
 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). 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).
  
 +<code>
 +Tafel 5 I/O-Byte und Zuordnungstabelle im OS-KC85/1
 +
 +        \ phys.Ger.
 +log.Ger.|                               Bit
 +--------|-------|-------|-------|-------|       ------
 +        | EFC9  | EFCB  | EFCD  | EFCF  |          |  0
 +CONST:  |                         | <==   |0..3|
 +        | (TTY) | (CRT) | (BAT) | (UC)  |          |  1
 +--------|-------|-------|-------|-------|       |----|
 +        | EFD1  | EFD3  | EFD5  | EFD7  |          |  2
 +READER: |                         | <==   |0..3|
 +        | (TTY) | (RDR) | (UR1) | (UR2) |          |  3
 +--------|-------|-------|-------|-------|       |----|
 +        | EFD9  | EFDB  | EFDD  | BFDF  |          |  4
 +PUNCH:  |                         | <==   |0..3|
 +        | (TTY) | (PUN) | (UP1) | (UP2) |          |  5
 +--------|-------|-------|-------|-------|       |----|
 +        | EFE1  | EFE3  | EFE5  | EFE7  |          |  6
 +LIST:                           | <==   |0..3|
 +        | (TTY) | (CRT) | (LST) | (UL1) |          |  7
 +-----------------------------------------       ------
 +
 +Adresstabelle der physischen Treiberroutinen    I/O-Byte (HS-Adr.4)
 +</code>
 ==== 3.2. ASGN-Kommando ==== ==== 3.2. ASGN-Kommando ====
  
Zeile 232: Zeile 503:
   READER:   READER:
   PUNCH:   PUNCH:
-  LIST:=LX86.+  LIST:=LX86
  
 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.
 +
 +<file z80>
 +Tafel 6 Einbinden eines Druckertreibers in das OS-KC85/1
 +
 + Beispiel fuer das Einbinden einer Druckertreiberroutine
 + =======================================================
 +
 + ORG hh00H ;Low-Byte = 0!!
 + jp ILX86 ;Init-Routine
 +STR: defb 'LX86    ' ;Name=LX86
 + defw 0 ;Ende-Kennzeichen
 +ILX86: ld a,0cfh ;Port
 + out (8BH),a ;initialisieren
 + ld a,80H ;nur Bit 7 Eingabe
 + out (8BH),a
 + .
 + . ;hier evtl. 
 + . ;Druckerinitialisierung 
 + . ;etc. durchfuehren
 + ld hl,6*256+2 ;LIST:, phys.Ger.2
 +; phys.Ger. 0 nicht sinnvoll, 
 +; da ASGN CONST:=LX86 moeglich 
 +; waere!
 + ld bc,V24 ;Treiber nach Tafel 4
 + ld de,STR ;Adr. des symb. Namens
 +;
 +; 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)
 + or a ;CY=0, wenn kein Fehler 
 + ret
 +;
 +V24: inc a ;Drucker-Initialisierung?
 + ret z ;z.B. ignorieren
 + dec a ;Drucker-Status?
 + jr nz,lo0 ;nein
 + in A,(89H) ;Status
 + or 7FH ;z.B. so
 + cpl ;zurueckgeben 
 + ret
 +lo0: weiter s. Tafel 4
 + .
 + .
 + .
 +</file>
 +
  
 ==== Treiberpaket ==== ==== Treiberpaket ====
  
-(VP: hier nicht als Text, enthalten s. Datei {{:z9001:z9001_interfaces.zip|}}). Ein Anschauen des reassemblierten Quellcodes lohnt sich! Dr. Schwarzenberg hat - wie auch im ZM - außerordentlich intensiv das Z9001-OS einbezogen!+(VP: s. Datei {{:z9001:z9001_interfaces.zip|}}). Ein Anschauen des reassemblierten Quellcodes lohnt sich! Dr. Schwarzenberg hat - wie auch im ZM - außerordentlich intensiv das Z9001-OS einbezogen! 
 + 
 +Tafel 7 zeigt den HEX-Dump eines kompletten Treiberpakets, das u. a. die vorgestellten Treiber enthält. 
 + 
 +<code> 
 +Tafel 7 HEX-Dump des Treiberpakets 
 + 
 +0300h: C3 51 03 53 49 46 45 20 20 20 20 00 C3 5B 03 53 ; ÃQ.SIFE    .Ã[.S 
 +0310h: 49 46 41 20 20 20 20 00 C3 64 03 43 45 4E 54 52 ; IFA    .Ãd.CENTR 
 +0320h: 20 20 20 00 C3 6D 03 4C 58 38 36 20 20 20 20 00 ;    .Ãm.LX86    . 
 +0330h: C3 74 03 54 44 34 30 20 20 20 20 00 C3 49 03 42 ; Ãt.TD40    .ÃI.B 
 +0340h: 45 45 50 20 20 20 20 00 00 01 59 04 21 03 00 18 ; EEP    ...Y.!... 
 +0350h: 44 01 3E 04 21 02 02 16 7F 18 2E 01 06 04 2E 03 ; D.>.!.......... 
 +0360h: 16 00 18 1C 01 DC 03 2E 01 16 00 18 13 01 A8 03 ; .....Ü........¨. 
 +0370h: 3E 0C 18 05 01 A8 03 3E 7E 32 C3 03 2E 02 16 FE ; >....¨.>~2Ã....þ 
 +0380h: 3A 33 00 67 D6 04 3E 01 D8 3E CF D3 8B 7A D3 8B ; :3.gÖ.>.Ø>ÏÓ‹zÓ‹ 
 +0390h: 2F D3 89 16 03 B7 E3 23 23 E3 C9 CD 33 FD FB D6 ; /Ó‰..·ã##ãÉÍ3ýûÖ 
 +03a0h: 03 B7 C0 32 25 00 37 C9 3C C8 3D 20 06 DB 89 F6 ; .·À2%.7É<È= .Û‰ö 
 +03b0h: 7F 2F C9 CD 9B 03 30 04 32 15 00 C9 DB 89 87 38 ; /ÉÍ›.0.2..ÉÛ‰‡8 
 +03c0h: F2 79 1E 7E 06 09 F3 B7 17 D3 89 CD D6 03 1F 10 ; òy.~..ó·.Ó‰ÍÖ... 
 +03d0h: F8 F6 01 D3 89 FB D5 1D 20 FD D1 C9 3C C8 3D 2F ; øö.Ó‰ûÕ. ýÑÉ<È=/ 
 +03e0h: C8 3E 57 D3 81 D3 81 79 F6 80 FE FF 20 02 00 00 ; È>WӁӁyö€þÿ ... 
 +03f0h: D3 89 E6 7F D3 89 F6 80 D3 89 CD 9B 03 D8 DB 81 ; Ó‰æÓ‰ö€Ó‰Í›.Øہ 
 +0400h: FE 57 28 F6 AF C9 3E 47 D3 81 D3 81 79 2F CB FF ; þW(ö¯É>GӁӁy/Ëÿ 
 +0410h: D3 89 00 00 CB BF D3 89 CD 9B 03 30 04 2F D3 89 ; Ó‰..˿Ӊ͛.0./Ó‰ 
 +0420h: C9 DB 81 FE 47 28 F1 3E 57 D3 81 D3 81 3E FF D3 ; ÉہþG(ñ>WӁӁ>ÿÓ 
 +0430h: 89 CD 9B 03 38 E7 DB 81 FE 57 28 F5 B7 C9 3E 47 ; ‰Í›.8çہþW(õ·É>
 +0440h: D3 81 D3 81 D3 89 CD 9B 03 38 D2 DB 81 FE 47 28 ; ӁӁӉ͛.8ÒہþG( 
 +0450h: F5 DB 89 2F D3 89 E6 7F C9 CD F1 F8 F5 3A 2F 00 ; õÛ‰/Ó‰æÉÍñøõ:/
 +0460h: 3D CC 66 04 F1 C9 C5 06 00 0E 14 3E 07 D3 80 3E ; =Ìf.ñÉÅ....>.Ó€> 
 +0470h: 96 D3 80 DB 88 CB FF D3 88 10 FE 0D 20 FB CB BF ; –Ó€ÛˆËÿÓˆ.þ. ûË¿ 
 +0480h: D3 88 3E 03 D3 80 C1 C9 0E 09 11 03 05 CD 05 00 ; Óˆ>.Ó€ÁÉ.....Í.. 
 +0490h: 2A 36 00 01 88 01 B7 ED 42 2E 00 E5 2B 22 36 00 ; *6..ˆ.·íB..å+"6. 
 +04a0h: C5 E5 06 10 11 00 00 4B 29 7B 8B 27 5F 7A 8A 27 ; Åå.....K){‹'_zŠ' 
 +04b0h: 57 79 89 4F 10 F2 79 B7 EB 28 03 CD F0 04 CD EB ; Wy‰O.òy·ë(.Íð.Íë 
 +04c0h: 04 11 1D 05 0E 09 CD 05 00 E1 C1 23 EB 21 00 03 ; ......Í..áÁ#ë!.. 
 +04d0h: ED B0 E1 DD 21 20 05 16 03 5C 06 00 DD 4E 00 0C ; í°áÝ! ...\..ÝN.. 
 +04e0h: 0D C8 09 7E 92 83 77 DD 23 18 F1 7C CD F0 04 7D ; .È.~’ƒwÝ#.ñ|Íð.} 
 +04f0h: F5 0F 0F 0F 0F CD F9 04 F1 E6 0F C6 30 0E 02 5F ; õ....Íù.ñæ.Æ0.._ 
 +0500h: C3 05 00 0D 0A 54 6F 70 20 6F 66 20 52 41 4D 20 ; Ã....Top of RAM  
 +0510h: 6E 6F 77 20 28 64 65 63 2E 29 3A 20 00 0D 0A 00 ; now (dec.): .... 
 +0520h: 02 0C 0C 0C 0C 0C 0D 08 0A 09 09 07 05 19 21 18 ; ..............!. 
 +0530h: 2F 1E 19 15 1B 00 00 00                         ; /....... 
 +</code> 
 + 
 +Das Programm wird normal (nicht mit ASGN) geladen. Es enthält einen Mechanismus, der das eigentliche Treiberpaket an das aktuelle 
 +RAM-Ende verschiebt und eine entsprechende Adreßmodifikation vornimmt. Das Programm ist damit für jede RAM-Konfiguration 
 +geeignet und muß nicht speziell angepaßt werden. Die aktuelle obere Speichergrenze wird für BASIC-Anwender dezimal 
 +ausgegeben. Dieser Wert sollte nach Start des BASIC-Interpreters als obere Grenze eingegeben werden, um das Treiberpaket 
 +vor Überschreiben zu schützen.  
 + 
 +Die gewünschten Treiber müssen vorher mit **ASGN-Anweisung** aktiviert werden.  
 +Dabei sind die folgenden Zuordnungen möglich: 
 + 
 +<code>  
 +  physische Gerätenummer  
 + log. Gerät 0 1 2 3 
 + -------------------------------------------- 
 + CONST:  (0) - (CRT) (BAT) BEEP 
 + READER: (2) - - SIFE - 
 + PUNCH:  (4) - CENTR LX86 SIFA  
 +  TD40  
 + LIST:   (6) - CENTR LX86 SIFA  
 +  TD40  
 +</code> 
 + 
 + BEEP: Erzeugt einen "sauberen" (im Gegensatz zu CTRL/Q) Tastatur-Quittungston, der die Eingabesicherheit der Tastatur verbessert.\\ 
 + SIFE: SIF1000-Eingabe, 7 Datenbits parallel\\ 
 + SIFA: SIF1000-Ausgabe, 7 Datenbits parallel\\ 
 + CENTR: 7-Bit-CENTRONICS-Druckerinterface\\ 
 + TD40: V24/DTR, 8 Bit, keine Parität, 1200 Baud\\ 
 + LX86: V24/DTR, 8 Bit, keine Parität, 9600 Baud 
 + 
 +Das Programm kann z.B. mit dem von Robotron vertriebenen Zusatzmonitor ZM eingegeben werden (S-Kommando). Mit dem 
 +P(unch)-Kommando kann es dann (nach vorheriger Zuweisung AR=T) auf Band gebracht werden:\\ 
 +**P300,537,488**. 
 + 
 +Man beachte die Startadresse (488H). 
 + 
 +Der erwähnte Zusatzmonitor enthält bereits einige der hier vorgestellten Treiberroutinen 
 +(SIFA/E, TD40, BEEP). Zu beachten ist, daß es bei den Treibern SIFA und TD40 des ZM u.U. Probleme mit der CTRL/P-Funktion 
 +(Hardcopy) geben kann (1. Version des ZM und Version 1.2 d es OS-KC85/1). Deshalb sei an dieser Stelle auf die erforderlichen Korrekturen für eine saubere Arbeitsweise der ZM-Treiber hingewiesen: 
 + 
 +^ Treiber ^ relative Adresse ^ Befehl alt ^ HEX ^ -> ^ Befehl neu ^ HEX ^ 
 +| SIFA | 0062H | ld a,e | 7B |  | ld a,c | 79H | 
 +| TD40 | 00C3H | res 7,e | CB BB |  | res 7,c | CB B9 | 
 +|  | 00E0H | sub e | 93 |  | sub c | 91 | 
 +|  | 00E8H | cp e | BB |  | cp c | B9 | 
 +|  | 00FCH | ld a,e | 7B |  | ld a,c | 79 | 
 +|  | 0102H | ld c,154 | 0E 9A |  | ld e,154 | 1E 9A | 
 +|  | 0117H | ld b,c | 41 |  | ld b,e | 43 | 
 + 
 +Der ZM nutzt **nicht** die ASGN-Anweisung. Mit RESET oder POWER ON wird die Zuordnungstabelle (Tafel 5) mit den entsprechenden 
 +Adressen geladen, da alle Treiber resident sind. Die Auswahl der ZM-Treiber muß deshalb mit dem ZM-Kommando A(ssign) erfolgen 
 +(Stellen des I/O-Bytes).
  
 ==== Literatur ==== ==== Literatur ====
Zeile 266: Zeile 678:
   * Tafel 7 HEX-Dump des Treiberpakets   * Tafel 7 HEX-Dump des Treiberpakets
  
-Dr.-Ing. Frank Schwarzenberg studierte von 1970 bis 1974 an der TU Dresden in der Fachrichtung Informationstechnik. Von 1970 bis 1974 absolvierte er am VIK Dubne einen Arbeitsaufenthalt. 1980 erfolgte die Promotion zum Thema Rechnerkopplung zur Erfassung kernphysikalischer Experimentdaten. Seit 1982 ist unser Autor am ZfK Rossendorf tätig. Sein Arbeitsgebiet ist die Hard- und Softwareentwicklung für Klein- und Mikrorechentechnik (8-(18-Bit-Systeme).+Dr.-Ing. Frank Schwarzenberg studierte von 1970 bis 1974 an der TU Dresden in der Fachrichtung Informationstechnik. Von 1970 bis 1974 absolvierte er am VIK Dubne einen Arbeitsaufenthalt. 1980 erfolgte die Promotion zum Thema Rechnerkopplung zur Erfassung kernphysikalischer Experimentdaten. Seit 1982 ist unser Autor am ZfK Rossendorf tätig. Sein Arbeitsgebiet ist die Hard- und Softwareentwicklung für Klein- und Mikrorechentechnik (8-/16-Bit-Systeme).
  
  • z9001/literatur/treiber.1279887847.txt.gz
  • Zuletzt geändert: 2010/07/22 22:00
  • (Externe Bearbeitung)