;************************************ ;*Centronics Installationsroutine * ;*Port B ist Data 0..7 * ;*Port A bit 7 = -strobe * ;*Port A bit 6 = busy * ;*Rolf-Dieter Klein 1982 821218 * ;************************************ ;************************************ ;*Portdefinitionen, PIO * ;************************************ .Z80 PIOA EQU 0F4H PIOASTS EQU PIOA+1 PIOB EQU PIOA+2 PIOBSTS EQU PIOA+3 START: LD A,0CFH ;Bit Mode OUT (PIOASTS),A LD A,01111111B ;Bit 7 ist Output OUT (PIOASTS),A ;BIT 0,1 Ready LD A,0CFH OUT (PIOBSTS),A ;als Output LD A,0 ;definieren OUT (PIOBSTS),A LD A,80H ;Strobe = 1 OUT (PIOA),A ;init LD HL,LO ;Adresse Vektor umstellen LD (0F00FH+1),HL LD HL,LOREL LD DE,LO ;reale Adresse LD BC,LOEND-LO ;Laenge LDIR ;Transport LD HL,MSG CALL PRINT CALL 0 ;Warmboot MSG: DEFM 'Centronics Routine installiert' DEFB 0DH,0AH DEFM 'Vektor LO (LST:) ADR 0F9E0H ' DEFB 0DH,0AH DEFB 0 PRINT: LD A,(HL) OR A RET Z LD C,A CALL 0F009H ;Monoitor CO INC HL JR PRINT LOREL: ;Adresse im RAM ;Monitor wird dort ueberlagert .PHASE 0F9E0H LO: LD A,C ;je nach Druckertyp CP 0AH ;Linefeeds ueberlesen RET Z ;da sonst CR LF ;als nicht vorhanden gilt ;und vorschuebe verloren gehen LO1: IN A,(PIOA) ;Test Status AND 40H ;=1 dann busy JR NZ,LO1 ;warten dann LD A,C OUT (PIOB),A ;Daten definieren IN A,(PIOA) ;ggf. alter Wert RES 7,A ;Strobe auf 0 OUT (PIOA),A SET 7,A ;wieder auf 1 OUT (PIOA),A LD A,C ;konventionell Data nach A RET LOEND: END START