; CENTRONICS PRINTER DRIVER ; CODE BASED ON YOUR SPECTRUM ; SEP 1984 ISSUE 7 ; UPDATED AND IMPROVED ; J.G.HARSTON SEP 1985 ; 68 BYTES OF CODE TOTAL ; 50 BYTES AFTER INITIALISATION 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 #5BBC ; 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 HL,(RAWOUT); L=RAW FLAG INC L ; TEST RAWOUT FLAG DEC L JR NZ,PRTGO ; RAW, PRINT IT SET 1,(IY+1) ; SUPRESS SPACES SUB 165 ; TEST IF TOKEN JP NC,POTOKEN ; EXPAND TOKEN ADD 165 ; RESTORE CHARACTER CP 32 JR NC,PRTGO ; 32+, ALWAYS PRINT CP 14 RET NC ; 14-31, DON'T PRINT CP 8 ; 8-13, ALWAYS PRINT RET C ; 0-7, DON'T PRINT ; 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 ADD A,A ; MOVE BIT 7 TO CARRY JR NC,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