mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
1.4 KiB
112 lines
1.4 KiB
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
|
|
|