Centronics-Schnittstelle
;===================================================
;---- Experiment: Centronics-Schnittstelle ---------
;===================================================
;
.GLOBAL CENTRX
CENTRX: LD A,0CFH ;Port A - Modus 3
OUT (PIOAC),A
LD A,11111110B ;Bit 0 = /STB
OUT (PIOAC),A ;Bit 1 = BUSY
LD A,00000111B ;keine Interrupts
OUT (PIOAC),A
;
LD A,0CFH ;Port B - Modus 3
OUT (PIOBC),A
LD A,00000000B ;alle Bits Ausgang
OUT (PIOBC),A
LD A,00000111B ;keine Interrupts
OUT (PIOBC),A
LD A,1 ;/STB auf HIGH legen
OUT (PIOAD),A
;
LD HL,CENS1 ;Startmeldung
CALL PRTSTR
$1: LD HL,DSIMG ;DIPSW geändert ?
IN A,(DIPSW)
CP (HL)
LD (HL),A
CALL NZ,SETDSW ;neues Protokoll
CALL RDV24A ;Zeichen eingelangt ?
JR C,$1
CALL OUTCEN ;ja ---> drucken
JR $1
;
CENS1: DEFB 'Serielle Druckerschnittstelle bereit'
DEFB 0DH,0AH,0
;
;===================================================
;---- String auf Centronics-Schnittstelle drucken --
;===================================================
;
PRTSTR: LD A,(HL) ;Zeichen holen
CP 0 ;Ende des Strings ?
RET Z
CALL OUTCEN ;drucken
INC HL ;nächstes Zeichen
JR PRTSTR
;
;===================================================
;--- Zeichen auf Centronics-Schnittstelle drucken --
;===================================================
;
;ENTRY: Zeichen in A
;EXIT: Zeichen wird auf Centronics-Schnittstelle
; ausgegeben
;
OUTCEN: PUSH AF
$1: IN A,(PIOAD) ;warten bis BUSY ok
AND 02H
JR NZ,$1
POP AF
PUSH AF
OUT (PIOBD),A ;Zeichen ausgeben
LD A,1
OUT (PIOAD),A ;/STB-Impuls
LD A,0
OUT (PIOAD),A
LD A,1
OUT (PIOAD),A
POP AF
RET
|