mirror of https://github.com/callapple/LLUCE.git
126 lines
3.0 KiB
ArmAsm
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
|
|
|