; CENTRONICS PRINTER DRIVER ; CODE BASED ON YOUR SPECTRUM ; SEP 1984 ISSUE 7 ; UPDATED AND IMPROVED ; J.G.HARSTON SEP 1985 ERROR EQU #0008 ; GENERATE ERROR POTOKEN EQU #0C10 ; PRINT TOKEN REPORTJ EQU #15C4 ; INVALID DEVICE BREAK EQU #1F54 ; TEST BREAK KEY CHANS EQU #5C4F ; CHANNELS AREA ORG #5BB8 ; CONNECT TO PRINTER CHANNEL SETUP LD HL,(CHANS) LD DE,15 ADD HL,DE ; POINT TO 'P' CHANNEL LD DE,PRTOUT LD (HL),E ; SET OUTPUT ROUTINE INC HL LD (HL),D XOR A LD (RAWOUT),A ; NOT RAW OUTPUT RET ; PRINT CHARACTER TO CENTRONICS PORT PRTOUT LD BC,(RAWOUT); C=RAW FLAG CP 32 JR NC,PRTCHAR ; 32+, ALWAYS PRINT CP 14 JR NC,PRTLOW ; 14-31, TEST FLAG CP 8 JR NC,PRTCHAR ; 8-13, ALWAYS PRINT ; 0-7 AND 14-31, IGNORE IF NOT RAW PRINTING PRTLOW INC C ; TEST RAWOUT FLAG DEC C RET Z ; IGNORE IF NOT RAW PRTCHAR CP 165 JR C,PRTGO ; 32-164, PRINT IT INC C ; TEST RAWOUT FLAG DEC C JR NZ,PRTGO ; PRINT IF RAW SUB 165 JP POTOKEN ; EXPAND TOKEN ; PRINT CHARACTER TO PRINTER ; OUT 251: PULSE STROBE PIN 1 ; BYTE TO WRITE PIN 2-9 ; IN 251: BIT 7: BUSY PIN 10 ; BIT 6: ACK PIN 11 ; BIT 5: ERROR PIN 12 ; UNUSED PIN 13 PRTGO PUSH AF BUSY IN A,(251) BIT 5,A JR Z,PRTERR ; PRINTER ERROR BIT 7,A JR NZ,PRTIT ; PRINTER NOT BUSY CALL BREAK ; TEST BREAK KEY JR C,BUSY ; LOOP UNTIL NOT BUSY PRTERR RST ERROR DEFB 20 ; BREAK PRTIT POP AF OUT (251),A RET RAWOUT DEFB 0 ; 72 BYTES