LLUCE/Config/PRINTERS/SERIAL.S

126 lines
3.0 KiB
ArmAsm

LST OFF
TR
TR ADR
********************************
* *
* Serial Printer Driver *
* *
********************************
*-------------------------------
* Date: 12/07/86
*-------------------------------
REL
DSK PRINTERS/REL/SERIAL
cr = $D
lf = $A
serial ENT
ORG $900
*-------------------------------
; jump table
slot DB $10
JMP init
JMP print
JMP clear
*-------------------------------
* flag init status for output
init PHA
LDA #0 ; signal that printer not init'ed
STA initflg
PLA
RTS
*-------------------------------
* print character: A = character
print PHP ; disable int's
SEI
PHA ; save all reg's
STX save_x
STY save_y
LDA $C082 ; enable roms
LDX #$13
print1 LDA $24,X ; save zero page stuff
STA zero,X
DEX
BPL print1
BIT initflg ; has printer been used?
BMI print3 ; yep
LDA slot
STA $26 ; save slot for card
LUP 4
LSR ; move down slot
--^
CLC
ADC #$C0
STA print2+2
STA $36+1 ; point ($0036) at $c100
LDA #0 ; init printer card
TAX
TAY
STA $24 ; zero horiz offset
STA $27 ; zero character buffer
STA $36
print2 JSR $C100
LDA $36 ; point to output routine
STA jprint+1
LDA $36+1
STA jprint+2
DEC initflg ; show we have done init
LDA #'I'-$40 ; send ctrl-I 80 n
JSR doprint
LDA #'8'
JSR doprint
LDA #'0'
JSR doprint
LDA #'N'
JSR doprint
LDA #cr
JSR doprint
print3 LDA #0 ; set ch over to border
STA $24
PLA ; get byte to print
PHA
JSR doprint
LDX #$13
print4 LDA zero,X ; restore zero page
STA $24,X
DEX
BPL print4
LDA $C083 ; enable ram card
LDA $C083
LDX save_x ; restore reg's
LDY save_y
PLA
PLP ; restore int status
RTS
doprint ORA #$80 ; print with high-bit set
jprint JMP $C000 ; do output routine
; clear print buffer (not available)
clear RTS
save_x DB 0
save_y DB 0
initflg DB 0
zero DS $14