A2osX/SYS/KERNEL.S.STDIO2.S.txt
2020-01-22 22:52:00 +01:00

367 lines
6.8 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
*--------------------------------------
K.PrintF2 >LDYAI K.IOBuf
>STYA pIOBuf
ldy #S.PS.hStdOut
lda (pPs),y
sta PrintF.hFILE
lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
bra K.PrintF2.1
K.FPrintf2 >LDYAI K.IOBuf
>STYA pIOBuf
lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
iny
lda (pStack),y hFILE
sta PrintF.hFILE
bra K.PrintF2.1
K.SPrintf2 stz PrintF.hFILE
lda (pStack) Bytecount
inc
tay
lda (pStack),y format LO
sta ZPPtr2
iny
lda (pStack),y format HI
sta ZPPtr2+1
iny
lda (pStack),y str LO
sta pIOBuf
iny
lda (pStack),y str HI
sta pIOBuf+1
*--------------------------------------
K.PrintF2.1 sty PrintF2.Exit.Cnt+1 Total bytes to POP
stz PrintF.Cnt
stz PrintF.Cnt+1
.1 jsr SHARED.GetCharPtr2
bne .22
jmp .8 end of format..
.22 cmp #'%'
bne .10
stz K.PrintF.PadL
stz K.PrintF.PadC
lda (ZPPtr2)
beq .7 end of format... print % and exit
jsr ZP.IsDigit
bcs .6 no digit....go check specifier
cmp #'0' ...a 0...mmm... padding char?
bne .4
sta K.PrintF.PadC
jsr SHARED.NextCharPtr2 skip 0 ...
lda (ZPPtr2)
beq .7
jsr ZP.IsDigit
bcs .6 %0x ??????
.4 jsr MATH.Dec2ACC32
bcs .99
lda ACC32
sta K.PrintF.PadL
lda K.PrintF.PadC
bne .5
lda #C.SPACE
sta K.PrintF.PadC
.5 jsr SHARED.AddYToPtr2 skip all processed chars
lda (ZPPtr2)
beq .7
.6 ldx #PrintFTBL1.Cnt-1 do we have a %x command?
.61 cmp PrintFTBL1,x
beq .62
dex
bpl .61
bra .20 unknown ...
.62 jsr SHARED.NextCharPtr2
txa yes, jmp to it!
asl
tax
jsr PrintF2.ESC
.11 bcc .1
bra .99
.7 lda #'%'
bra .20
*--------------------------------------
.10 cmp #'\'
bne .20
jsr SHARED.GetCharPtr2
beq .99
ldx #PrintFTBL2.Cnt-1
.12 cmp PrintFTBL2,x
beq .19
dex
bpl .12
cmp #'x' \xHH
bne .1
jsr MATH.Hex2ACC32
bcs .99
jsr SHARED.AddYToPtr2
.14 lda ACC32
bra .20
.19 lda PrintFTBL2.OUT,x
.20 jsr PrintF.COut
bcc .11
*--------------------------------------
.99 bra PrintF2.Exit
*--------------------------------------
.8 ldx PrintF.hFILE
beq .80 Writing to buffer, append \0
>PUSHW PrintF.Cnt Writing to File/dev...
>PUSHWI K.IOBuf
txa
jsr K.FWrite
bcc .81
tay
bne .99
>RET 4 0=BLOCKING
.80 ldy PrintF.Cnt A=0, Writing to buffer, append \0
sta (pIOBuf),y
.81 >LDYA PrintF.Cnt
* clc
*--------------------------------------
PrintF2.Exit php
pha
lda pStack
sec +Bytecount byte
PrintF2.Exit.Cnt
adc #$ff SELF MODIFIED
sta pStack
pla
plp
PrintF2.Exit.RTS
rts
*--------------------------------------
PrintF2.LocalGetByte
lda (pStack)
beq .9
phy
tay
dec
sta (pStack)
lda (pStack),y
ply
clc
rts
.9 lda #E.STACK
sec
rts
*--------------------------------------
PrintF2.ESC jmp (.1,x)
.1 .DA PrintF2.B
.DA PrintF2.D,PrintF2.DD,PrintF2.U
.DA PrintF2.E,PrintF2.F
.DA PrintF2.H,PrintF2.HH
.DA PrintF2.I,PrintF2.II,PrintF2.L
.DA PrintF2.S,PrintF2.SS
*--------------------------------------
PrintF2.B jsr PrintF2.LocalGetByte
bcs PrintF2.B.RTS
ldy #8
.1 asl
pha
lda #'0'/2
rol
jsr PrintF.COut
bcs .9
pla
dey
bne .1
rts
.9 ply
PrintF2.B.RTS
rts
*--------------------------------------
PrintF2.I sec signed short
.HS 90 BCC
PrintF2.D clc unsigned short (BYTE)
ldy #1
bra PrintF2.NUM
PrintF2.II sec signed int
.HS 90 BCC
PrintF2.DD clc unsigned int (WORD)
ldy #2
bra PrintF2.NUM
PrintF2.L sec signed long
.HS 90 BCC
PrintF2.U clc unsigned long (DWORD)
ldy #4
PrintF2.NUM ror ACC32.Sign
jsr MATH.ACC32ZERO
.1 jsr PrintF2.LocalGetByte
bcs PrintF2.B.RTS
sta ACC32-1,y
dey
bne .1
ldx K.PrintF.PadL
ldy K.PrintF.PadC
rol ACC32.Sign
jsr MATH.ACC322STR10
bra PrintF2.StrNum
*--------------------------------------
* EXP(8) 1(s) 1significants(31)
* http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/GS.TECH.INFO/AppleSoft/
*--------------------------------------
PrintF2.E sec Force "E+12"
.HS 90 BCC
PrintF2.F clc
lda (pStack) get current stack Ptr
sec at least 5 bytes remaining ?
sbc #5
bcc PrintF2.StrNum.Err
sta (pStack)
* sec
adc pStack
ldy pStack+1 A,Y = float
ldx #FPU.SETFAC
jsr GP.ROMCALL
ldy #A2osX.NumStrBuf+1 FOUT.1 will do a DEY
ldx #FPU.FOUT
jsr GP.ROMCALL
PrintF2.StrNum ldy #0
.2 lda A2osX.NumStrBuf,y
beq .8
iny
jsr PrintF.COut
bcc .2
.9 rts
.8 clc
rts
PrintF2.StrNum.Err
lda #E.STACK
sec
rts
*--------------------------------------
PrintF2.S ldy #$ff CSTR
.HS 2C bit abs
PrintF2.SS ldy #$00 PSTR
sty .1+1
jsr PrintF2.LocalGetByte
bcs .9
sta ZPPtr1+1
jsr PrintF2.LocalGetByte
bcs .9
sta ZPPtr1
lda (ZPPtr1) if CSTR:last char=0, if PSTR:len=0
beq .8
ldy .1+1
.1 lda #$ff Self Modified
bne .11 CSTR
tya PSTR
cmp (ZPPtr1) len check
beq .2
.11 iny
lda (ZPPtr1),y
beq .2
jsr PrintF.COut
bcs .9
lda K.PrintF.PadL
beq .1
cpy K.PrintF.PadL
bne .1
.8 clc
rts
.2 lda K.PrintF.PadL
beq .8
.3 cpy K.PrintF.PadL
beq .8
lda K.PrintF.PadC
jsr PrintF.COut
bcs .9
iny
bne .3
* clc
.9 rts
*--------------------------------------
PrintF2.HH jsr PrintF2.LocalGetByte
bcs PrintF2.COut.RTS
pha LO byte
jsr PrintF2.LocalGetByte
plx
bcs PrintF2.COut.RTS
pha
txa
jsr PrintF2.H.1
plx
bcs PrintF2.COut.RTS
txa
bra PrintF2.H.1
*--------------------------------------
PrintF2.H jsr PrintF2.LocalGetByte
bcs PrintF2.COut.RTS
PrintF2.H.1 jsr MATH.AToHexAX
jsr PrintF.COut
bcs PrintF2.COut.RTS
txa
jmp PrintF.COut
PrintF2.COut.RTS
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.STDIO2
LOAD USR/SRC/SYS/KERNEL.S
ASM