Ein frei verschiebbarer Druckertreiber für den Zl0l3

Der in Erfurt angebotene E/AModul für den Z 1013 ist gut geeignet, einen Drucker mit seriellem Eingang anzusteuern. Dazu ist es aber erforderlich, die an den Drucker zu übergebenen Zeichen so auzubereiten, daß die in einem Byte vorliegende Information Bit für Bit nacheinander (seriell) an den Drucker ausgegeben wird. Außerdem muß der Computer bei der Ausgabe der Zeichen sich unaufhörlich mit dem  Computer  verständigen, wann das nächste Zeichen gesendet werden kann.
Diese und weitere Aufgaben erfüllt der hier vorgestellte Druckertreiber. Damit nun jeder Z 1013-Freak diesen Druckertreiber an seine eigene Hardwarekonfiguration anpassen kann, wird nicht ein fertiges Programm sondern eine ASSEMBLER-Quelle angegeben. Wer die Programme der Dresdener Softwarekassette besitzt, kann mit dem Texteditor die Quelle eintippen (z.B. ab Adresse 3000H) und anschließend mit dem ASSEMBLER in ein Maschinenprogramm übersetzen lassen.
Die Lage des Maschinenprogramms im RAM wird in der ORG-Anweisung festgelegt. Es muß nicht unbedingt auf der Adresse E800H beginnen.
Legt man das Programm auf eine andere Adresse, muß man aber in der aufrufenden Software die dort vielleicht schon vorgesehene Ansprungadresse ändern. Will man z. B. im KC-BASIC+ den Druckertreiber auf E400H festlegen, so wird ab Adresse 2FDH der Befehl C3 00 E4 eingetragen.
In der Zeile 3 wird durch PIOD die verwendete Kanaladresse für den E/A-Modul festgelegt. Soll statt seiner die interne PIO verwandet werden, so muß anstelle der 34H die Adresse 00H eingetragen werden.
Peter Berg/Uwe Rehn
practic 4/88
PN V24-INTERFACE
   ORG 0E800H
   PIOD: EQU 34K
   PIOC: EQU PIOD+1
   JMP  E82F
   JMP  E82B
   JMP  E827
   JMP  E84f
   JMB  E84B
   JMP  E847
   SLA  A
   JR   M21-#
INIT:
   PUSH AF ;PIO-Init
   LD   A,0CFH
   OUT  PIOC ;BIT-E/A
   LD   A,0FEH
   OUT  PIOC ;BIT 0->A
   LD   A,1
   OUT  PIOD ;Stop
   POP  AF
   RET
E827:
   CMP  1EH
   JRZ  M07-#
E82B:
   CMP  0DH
   JRZ  M08-#
E82F:
   SLA  A
   CALL M09
   RET
M07:
   LD   A,0DH
M08:
   CALL E82F
   LD   A,0AH
   JR   E82F-#
M12:
   LD   A,0DH
M13:
   CALL E84F
   LD   A,0AH
   JR   E84F-#
E847:
   CMP  1EH
   JRZ  M12-#
E84B:
   CMP  0DH
   JRZ  M13-#
E84F:
   SLA  A
   OR   A
   JPPO M09
   SCF
   JR   M21-#
M09:
   SCF
   CCF
M21:
   PUSH KL
   PUSH BC
   PUSK AF
   CALL M14
   POP  AF
   LD   B,9
M16:
   NOP
   NOP
   OUT  PIOD
   RRA
   CALL M15
   DJNZ M16-#
   INC  HL
   LD   A,1
   OUT  PIOD
   CALL M15
   POP  BC
   POP  HL
   RET
M15:
   PUSH BC
   LD   B,0AH
M17:
   DJNZ M17-#
   POP  BC
   RET
M14:
   IN   PIOD
   BIT  4,A
   RZ
   LD   C,0
M19:
   LD   HL,1000H
M18:
   DEC  HL
   BIT  7,H
   JRZ  M18-#
   IN   PIOD
   BIT  4,A
   RZ
   DEC  C
   JRNZ M19-#
   RST  20H
   DB   2
   DB   'TIME-OUT',8DH
M20:
   IN   PIOD
   BIT  4,A
   RZ
   JR   M20-#
END