TITLE LPTDRV - FORTRAN LINE PRINTER DRIVER .8080 ENTRY LPTDRV,$OPNFL EXTRN $IOERR,$BF,$BL,$CLSFL DSEG $OPNFL: DB 0 CLSADR: DS 2 CSEG LPTDRV: DW $IOERR DW LPTFWR DW $IOERR DW LPTBWR DW $IOERR DW $IOERR DW LPTCLS LPTCLS: LDA $OPNFL ;MAKE SURE ALREADY 'OPEN' ORA A JZ $IOERR XRA A ;'CLOSE' BY SENDING STA $OPNFL ; FORM FEED OUTFF: MVI A,12 JMP LPTOUT CLSLPT: LDA $OPNFL ORA A LHLD CLSADR PUSH H RZ CALL OUTCR ;CR OUTLF: MVI A,10 ;LF JMP LPTOUT MAKOPN: LXI H,$OPNFL MOV A,M ORA A RZ INR M SETCLS: LHLD $CLSFL LXI D,CLSLPT MOV A,L SUB E MOV A,H SBB D RZ STORAD: SHLD CLSADR XCHG SHLD $CLSFL RET LPTFWR: CALL MAKOPN LDA $BL ORA A RZ ;NUTHIN HERE LHLD $BF DCR A MOV E,A ;INTO [E] FOR LPTLOP MOV A,M CPI '*' ;DO NOTHING? JZ LPTNLF CALL OUTCR ;OUTPUT CR MOV A,M CPI "+" JZ LPTNLF CPI "1" JNZ LPTLF CALL OUTFF ;FORM FEED JMP LPTNLF LPTLF: CALL OUTLF MOV A,M CPI "0" CZ OUTLF LPTNLF: INX H MVI D,0 LPTLOP: MOV A,E ORA D RZ MOV A,M CALL LPTOUT INX H DCX D JMP LPTLOP LPTBWR: CALL MAKOPN LHLD $BL XCHG LHLD $BF JMP LPTLOP OUTCR: MVI A,13 LPTOUT: PUSH H PUSH D MVI C,5 ;CP/M LPT OUT FUNCTION MOV E,A CALL 0005 POP D POP H RET END