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 [2013/05/30 17:12] – [Anhang] volkerpz9001:literatur:treiber [2020/03/31 14:50] (aktuell) – [3.2. ASGN-Kommando] volkerp
Zeile 2: Zeile 2:
  
 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) 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 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 66: Zeile 68:
  
 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 123: Zeile 239:
  
 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 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 ====
  • z9001/literatur/treiber.1369933935.txt.gz
  • Zuletzt geändert: 2013/05/30 17:12
  • von volkerp