A2osX/SHARED/X.PRINTF.S.txt

270 lines
4.0 KiB
Plaintext
Raw Normal View History

2016-06-07 08:10:18 +02:00
NEW
2019-04-10 08:45:09 +01:00
AUTO 3,1
2016-06-07 08:10:18 +02:00
.LIST OFF
*--------------------------------------
2025-01-19 17:12:51 +01:00
X.PrintF sty X.PrintF.Next+1
sta X.PrintF.Next+2
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
pla
sta X.PrintF.99+1
pla
sta X.PrintF.98+1
2021-05-22 23:05:12 +02:00
lda $C011 RDLCBNK2
2025-01-19 17:12:51 +01:00
sta X.PrintF.91+1
2021-05-22 23:05:12 +02:00
lda $C012 RDLCRAM
2025-01-19 17:12:51 +01:00
sta X.PrintF.90+1
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
lda $C089 RROMWRAMBNK1, make sure $D000-$FFFF ROM selected
lda $CFFF get access to $C800-$CFFF internal ROM
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
* .DO pRWReg
*
* lda pRWReg
* sta X.PrintF.COUT1+1
* sta X.PrintF.COUT3+1
* lda MEM.BnkID
* sta X.PrintF.COUT2+1
*
* .FIN
X.PrintF.1 stz X.b0Flag
2016-06-07 08:10:18 +02:00
stz X.DigitCount
2025-01-19 17:12:51 +01:00
jsr X.PrintF.Next
beq X.PrintF.90
2016-06-07 08:10:18 +02:00
cmp #'%'
bne .7
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
.2 jsr X.PrintF.Next
beq X.PrintF.90
2016-06-07 08:10:18 +02:00
cmp #'0'
bne .3
2021-05-22 23:05:12 +02:00
ror X.b0Flag beq -> CS
bra .2
2021-05-22 23:05:12 +02:00
.3 bcc .4
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
cmp #'9'+1
bcs .4
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
and #$0f
sta X.DigitCount
bra .2
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
.4 ldx #X.PrintF.Tbl-X.PrintF.Esc-1
2025-01-19 17:12:51 +01:00
.5 cmp X.PrintF.Esc,x
beq .6
2021-05-22 23:05:12 +02:00
dex
bpl .5
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
bra X.PrintF.1
2021-05-22 23:05:12 +02:00
.6 txa
asl
tax
2025-01-19 17:12:51 +01:00
jmp (X.PrintF.Tbl,x)
2021-05-22 23:05:12 +02:00
.7 ora #$80
2025-01-19 17:12:51 +01:00
jsr X.PrintF.COUT
bra X.PrintF.1
X.PrintF.90 lda #$ff
bpl X.PrintF.98 ROM was selected, nothing to do
X.PrintF.91 lda #$ff
bmi .1 RAM bank 2 was selected
ldx #$8B RRAMWRAMBNK1
2025-01-19 17:12:51 +01:00
.HS 2C BIT ABS
.1 ldx #$83 RRAMWRAMBNK2
2016-06-07 08:10:18 +02:00
lda $C000,x
lda $C000,x
2025-01-19 17:12:51 +01:00
X.PrintF.98 lda #$ff Self modified RTS HI
pha
X.PrintF.99 lda #$ff Self modified RTS LOPrintFYAPrintFYA
2016-06-07 08:10:18 +02:00
pha
2025-01-19 17:12:51 +01:00
2019-10-03 08:25:27 +02:00
rts
2016-06-07 08:10:18 +02:00
*--------------------------------------
2025-01-19 17:12:51 +01:00
X.PrintF.Next lda $ffff
beq .8
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
inc X.PrintF.Next+1
bne .8
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
inc X.PrintF.Next+2 Always !=0
2021-05-22 23:05:12 +02:00
2019-10-03 08:25:27 +02:00
.8 rts
*--------------------------------------
2025-01-19 17:12:51 +01:00
X.PrintF.Esc .AS "dDhHS"
X.PrintF.Tbl .DA X.PrintF.D
.DA X.PrintF.DD
.DA X.PrintF.H
.DA X.PrintF.HH
.DA X.PrintF.S
*--------------------------------------
X.PrintF.D ldx #0
.HS D0 BNE
X.PrintF.DD plx
pla
sta X.HexBuffer
stx X.HexBuffer+1
2025-01-19 17:12:51 +01:00
2016-06-07 08:10:18 +02:00
stz X.BCDBuffer
stz X.BCDBuffer+1
stz X.BCDBuffer+2
2025-01-19 17:12:51 +01:00
ldx #16 let's roll 16 bits
2016-06-07 08:10:18 +02:00
sed
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
.2 asl X.HexBuffer
rol X.HexBuffer+1
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
ldy #2
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
.3 lda X.BCDBuffer,y
2016-06-07 08:10:18 +02:00
adc X.BCDBuffer,y
sta X.BCDBuffer,y
2025-01-19 17:12:51 +01:00
dey
bpl .3
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
dex
bne .2
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
cld
2025-01-19 17:12:51 +01:00
ldx #2
2016-06-07 08:10:18 +02:00
ldy #5
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
.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
dey
2025-01-19 17:12:51 +01:00
dex
2016-06-07 08:10:18 +02:00
bpl .4
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
lda X.DigitCount
beq .5
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
lda #6
sec
sbc X.DigitCount
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
.5 tay
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
.6 lda X.DigitBuffer,y
cmp #"0"
beq .7
sec
ror X.b0Flag
bra .8
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
.7 cpy #5
beq .8
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
lda #" "
bit X.b0Flag
bpl .81
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
lda #"0"
2021-05-22 23:05:12 +02:00
.8 phy
2025-01-19 17:12:51 +01:00
jsr X.PrintF.COUT
ply
2021-05-22 23:05:12 +02:00
2016-06-07 08:10:18 +02:00
.81 iny
cpy #6
bne .6
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
.9 jmp X.PrintF.1
*--------------------------------------
2025-01-19 17:12:51 +01:00
X.PrintF.HH pla
jsr X.PrintF.PRBYTE
X.PrintF.H pla
jsr X.PrintF.PRBYTE
jmp X.PrintF.1
*--------------------------------------
2025-01-19 17:12:51 +01:00
X.PrintF.S pla
sta .1+2
sta .2+2
pla
sta .1+1
sta .2+1
2021-05-22 23:05:12 +02:00
.1 lda $ffff
beq .9
2021-05-22 23:05:12 +02:00
tax
ldy #1
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
.2 lda $ffff,y
ora #$80
2025-01-19 17:12:51 +01:00
jsr X.PrintF.COUT
iny
dex
bne .2
2021-05-22 23:05:12 +02:00
2025-01-19 17:12:51 +01:00
.9 jmp X.PrintF.1
*--------------------------------------
X.PrintF.PRBYTE pha
lsr
lsr
lsr
lsr
jsr .1
pla
and #$0F
.1 ora #$B0
cmp #$BA
bcc X.PrintF.COUT
adc #$6
X.PrintF.COUT
* .DO pRWReg
*
*X.PrintF.COUT1 stz $C073 SELF MODIFIED
*
* jsr $FDED COUT
*
*X.PrintF.COUT2 lda #$FF
*X.PrintF.COUT3 sta $C073 SELF MODIFIED
*
* rts
*
* .ELSE
jmp ($36)
* .FIN
*--------------------------------------
2016-06-07 08:10:18 +02:00
X.HexBuffer .BS 2
X.BCDBuffer .BS 3
X.b0Flag .BS 1
X.DigitCount .BS 1
X.DigitBuffer .BS 6
*--------------------------------------
MAN
SAVE usr/src/shared/x.printf.s