mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 05:32:20 +00:00
34f9969c0c
BASIC.FX: bugfix in PATH, relocation code, Added Toolbox function "printf"
224 lines
3.5 KiB
Plaintext
224 lines
3.5 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
PrintFYA sty PrintFYA.Next+1
|
||
sta PrintFYA.Next+2
|
||
|
||
pla
|
||
sta PrintFYA.99+1
|
||
pla
|
||
sta PrintFYA.98+1
|
||
|
||
lda $C011 RDLCBNK2
|
||
sta PrintFYA.91+1
|
||
|
||
lda $C012 RDLCRAM
|
||
sta PrintFYA.90+1
|
||
|
||
lda $C08A RROMBNK1, make sure $D000-$FFFF ROM selected
|
||
lda $CFFF get access to $C800-$CFFF internal ROM
|
||
|
||
PrintFYA.1 stz X.b0Flag
|
||
stz X.DigitCount
|
||
jsr PrintFYA.Next
|
||
beq PrintFYA.90
|
||
cmp #'%'
|
||
bne .7
|
||
|
||
.2 jsr PrintFYA.Next
|
||
beq PrintFYA.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 #PrintFYA.Tbl-PrintFYA.Esc-1
|
||
|
||
.5 cmp PrintFYA.Esc,x
|
||
beq .6
|
||
|
||
dex
|
||
bpl .5
|
||
|
||
bra PrintFYA.1
|
||
|
||
.6 txa
|
||
asl
|
||
tax
|
||
jmp (PrintFYA.Tbl,x)
|
||
|
||
.7 ora #$80
|
||
jsr $FDED COUT
|
||
bra PrintFYA.1
|
||
|
||
PrintFYA.90 lda #$ff
|
||
bpl PrintFYA.98 ROM was selected, nothing to do
|
||
PrintFYA.91 lda #$ff
|
||
bmi PrintFYA.92 RAM bank 2 was selected
|
||
ldx #$8B RRAMWRAMBNK1
|
||
.HS 2C bit abs
|
||
PrintFYA.92 ldx #$83 RRAMWRAMBNK2
|
||
|
||
lda $C000,x
|
||
lda $C000,x
|
||
PrintFYA.98 lda #$ff Self modified RTS HI
|
||
pha
|
||
PrintFYA.99 lda #$ff Self modified RTS LO
|
||
pha
|
||
|
||
rts
|
||
*--------------------------------------
|
||
PrintFYA.Next lda $ffff
|
||
beq .8
|
||
|
||
inc PrintFYA.Next+1
|
||
bne .8
|
||
|
||
inc PrintFYA.Next+2 Always !=0
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
PrintFYA.Esc .AS "dDhHS"
|
||
PrintFYA.Tbl .DA PrintFYA.D
|
||
.DA PrintFYA.DD
|
||
.DA PrintFYA.H
|
||
.DA PrintFYA.HH
|
||
.DA PrintFYA.S
|
||
*--------------------------------------
|
||
PrintFYA.D ldx #0
|
||
.HS D0 bne
|
||
PrintFYA.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
|
||
php cpy will disturb carry while BCD adc
|
||
ldy #0
|
||
|
||
.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
|
||
|
||
.81 iny
|
||
cpy #6
|
||
bne .6
|
||
|
||
.9 jmp PrintFYA.1
|
||
*--------------------------------------
|
||
PrintFYA.HH pla
|
||
jsr $FDDA PRBYTE
|
||
PrintFYA.H pla
|
||
jsr $FDDA PRBYTE
|
||
jmp PrintFYA.1
|
||
*--------------------------------------
|
||
PrintFYA.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 PrintFYA.1
|
||
*--------------------------------------
|
||
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
|