A2osX/SHARED/X.PRINTF.S.txt
2025-01-19 17:12:51 +01:00

270 lines
4.0 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
X.PrintF sty X.PrintF.Next+1
sta X.PrintF.Next+2
pla
sta X.PrintF.99+1
pla
sta X.PrintF.98+1
lda $C011 RDLCBNK2
sta X.PrintF.91+1
lda $C012 RDLCRAM
sta X.PrintF.90+1
lda $C089 RROMWRAMBNK1, make sure $D000-$FFFF ROM selected
lda $CFFF get access to $C800-$CFFF internal ROM
* .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
stz X.DigitCount
jsr X.PrintF.Next
beq X.PrintF.90
cmp #'%'
bne .7
.2 jsr X.PrintF.Next
beq X.PrintF.90
cmp #'0'
bne .3
ror X.b0Flag beq -> CS
bra .2
.3 bcc .4
cmp #'9'+1
bcs .4
and #$0f
sta X.DigitCount
bra .2
.4 ldx #X.PrintF.Tbl-X.PrintF.Esc-1
.5 cmp X.PrintF.Esc,x
beq .6
dex
bpl .5
bra X.PrintF.1
.6 txa
asl
tax
jmp (X.PrintF.Tbl,x)
.7 ora #$80
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
.HS 2C BIT ABS
.1 ldx #$83 RRAMWRAMBNK2
lda $C000,x
lda $C000,x
X.PrintF.98 lda #$ff Self modified RTS HI
pha
X.PrintF.99 lda #$ff Self modified RTS LOPrintFYAPrintFYA
pha
rts
*--------------------------------------
X.PrintF.Next lda $ffff
beq .8
inc X.PrintF.Next+1
bne .8
inc X.PrintF.Next+2 Always !=0
.8 rts
*--------------------------------------
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
stz X.BCDBuffer
stz X.BCDBuffer+1
stz X.BCDBuffer+2
ldx #16 let's roll 16 bits
sed
.2 asl X.HexBuffer
rol X.HexBuffer+1
ldy #2
.3 lda X.BCDBuffer,y
adc X.BCDBuffer,y
sta X.BCDBuffer,y
dey
bpl .3
dex
bne .2
cld
ldx #2
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
dey
dex
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 X.PrintF.COUT
ply
.81 iny
cpy #6
bne .6
.9 jmp X.PrintF.1
*--------------------------------------
X.PrintF.HH pla
jsr X.PrintF.PRBYTE
X.PrintF.H pla
jsr X.PrintF.PRBYTE
jmp X.PrintF.1
*--------------------------------------
X.PrintF.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 X.PrintF.COUT
iny
dex
bne .2
.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
*--------------------------------------
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