A2osX/X.PRINTF.S.txt

230 lines
3.8 KiB
Plaintext
Raw Normal View History

2016-06-07 06:10:18 +00:00
PR#3
PREFIX /A2OSX.BUILD
2016-06-07 06:10:18 +00:00
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
PrintFAX sta PrintFAX.Next+1
stx PrintFAX.Next+2
2016-06-07 06:10:18 +00:00
pla
sta PrintFAX.99+1
2016-06-07 06:10:18 +00:00
pla
sta PrintFAX.98+1
lda $C011 RDLCBNK2
sta PrintFAX.91+1
lda $C012 RDLCRAM
sta PrintFAX.90+1
lda $C08A RROMBNK1, make sure $D000-$FFFF ROM selected
lda $CFFF get access to $C800-$CFFF internal ROM
2016-06-07 06:10:18 +00:00
PrintFAX.1 stz X.b0Flag
2016-06-07 06:10:18 +00:00
stz X.DigitCount
jsr PrintFAX.Next
beq PrintFAX.90
2016-06-07 06:10:18 +00:00
cmp #'%'
bne .7
2016-06-07 06:10:18 +00:00
.2 jsr PrintFAX.Next
beq PrintFAX.90
2016-06-07 06:10:18 +00:00
cmp #'0'
bne .3
ror X.b0Flag beq -> CS
bra .2
2016-06-07 06:10:18 +00:00
.3 bcc .4
2016-06-07 06:10:18 +00:00
cmp #'9'+1
bcs .4
2016-06-07 06:10:18 +00:00
and #$0f
sta X.DigitCount
bra .2
2016-06-07 06:10:18 +00:00
.4 ldx #PrintFAX.Tbl-PrintFAX.Esc-1
.5 cmp PrintFAX.Esc,x
beq .6
dex
bpl .5
bra PrintFAX.1
2016-06-07 06:10:18 +00:00
.6 txa
asl
tax
jmp (PrintFAX.Tbl,x)
.7 cmp #'\'
bne .8
jsr PrintFAX.Next
beq PrintFAX.90
2016-06-07 06:10:18 +00:00
cmp #'n'
bne .8
2016-06-07 06:10:18 +00:00
lda #$0D
.8 ora #$80
2016-06-07 06:10:18 +00:00
jsr $FDED COUT
bra PrintFAX.1
PrintFAX.90 lda #$ff
bpl PrintFAX.98 ROM was selected, nothing to do
PrintFAX.91 lda #$ff
bmi PrintFAX.92 RAM bank 2 was selected
ldx #$8B RRAMWRAMBNK1
.HS 2C bit abs
PrintFAX.92 ldx #$83 RRAMWRAMBNK2
2016-06-07 06:10:18 +00:00
lda $C000,x
lda $C000,x
PrintFAX.98 lda #$ff Self modified RTS HI
2016-06-07 06:10:18 +00:00
pha
PrintFAX.99 lda #$ff Self modified RTS LOPrintFAXPrintFAX
2016-06-07 06:10:18 +00:00
pha
2016-06-07 06:10:18 +00:00
rts
*--------------------------------------
PrintFAX.Next lda $ffff
beq .8
inc PrintFAX.Next+1
bne .8
inc PrintFAX.Next+2 Always !=0
.8 rts
*--------------------------------------
PrintFAX.Esc .AS "dDhHS"
PrintFAX.Tbl .DA PrintFAX.D
.DA PrintFAX.DD
.DA PrintFAX.H
.DA PrintFAX.HH
.DA PrintFAX.S
*--------------------------------------
PrintFAX.D ldx #0
.HS D0 bne
PrintFAX.DD plx
pla
sta X.HexBuffer
stx X.HexBuffer+1
2016-06-07 06:10:18 +00:00
stz X.BCDBuffer
stz X.BCDBuffer+1
stz X.BCDBuffer+2
ldx #16 let's roll 16 bits
sed
2016-06-07 06:10:18 +00:00
.2 asl X.HexBuffer
rol X.HexBuffer+1
php cpy will disturb carry while BCD adc
ldy #0
2016-06-07 06:10:18 +00:00
.3 plp
lda X.BCDBuffer,y
adc X.BCDBuffer,y
sta X.BCDBuffer,y
php
iny
cpy #3 Last byte of X.BCDBufferBUF?
bne .3
plp
dex
bne .2
cld
ldx #0
ldy #5
.4 lda X.BCDBuffer,x
pha
and #$0F
ora #$B0
sta X.DigitBuffer,y
dey
pla
lsr
lsr
lsr
lsr
ora #$B0
sta X.DigitBuffer,y
inx
dey
bpl .4
lda X.DigitCount
beq .5
lda #6
sec
sbc X.DigitCount
.5 tay
.6 lda X.DigitBuffer,y
cmp #"0"
beq .7
sec
ror X.b0Flag
bra .8
.7 cpy #5
beq .8
lda #" "
bit X.b0Flag
bpl .81
lda #"0"
.8 phy
jsr $FDED COUT
ply
2016-06-07 06:10:18 +00:00
.81 iny
cpy #6
bne .6
.9 jmp PrintFAX.1
*--------------------------------------
PrintFAX.HH pla
jsr $FDDA PRBYTE
PrintFAX.H pla
jsr $FDDA PRBYTE
jmp PrintFAX.1
*--------------------------------------
PrintFAX.S pla
sta .1+2
sta .2+2
pla
sta .1+1
sta .2+1
.1 lda $ffff
beq .9
tax
ldy #1
.2 lda $ffff,y
ora #$80
jsr $FDED COUT
iny
dex
bne .2
.9 jmp PrintFAX.1
*--------------------------------------
2016-06-07 06:10:18 +00:00
X.HexBuffer .BS 2
X.BCDBuffer .BS 3
X.b0Flag .BS 1
X.DigitCount .BS 1
X.DigitBuffer .BS 6
*--------------------------------------
MAN
SAVE /A2OSX.SRC/X.PRINTF.S