mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-14 02:29:33 +00:00
Kernel 0.9.1 : STDLIB : AToF, StrToF (wip), MACROS CLeanup, code Reorg STDIO/STDLIB
This commit is contained in:
parent
3022b08c89
commit
e2f8f7cb0e
|
@ -568,12 +568,53 @@ FPrintF.YA :
|
||||||
+ %011s : 'ABCDEFGH000'
|
+ %011s : 'ABCDEFGH000'
|
||||||
+ %2f : '3.14'
|
+ %2f : '3.14'
|
||||||
|
|
||||||
|
# StrToF
|
||||||
|
Convert String to 40 bits Float
|
||||||
|
|
||||||
|
## In:
|
||||||
|
+ PUSHW PTR to EndPtr
|
||||||
|
+ PUSHW Source String (C-Sring)
|
||||||
|
+ PUSHW PTR to target buffer (5 bytes)
|
||||||
|
|
||||||
|
## Out:
|
||||||
|
|
||||||
# AToF
|
# AToF
|
||||||
Convert String to 40 bits Float
|
Convert String to 40 bits Float
|
||||||
|
|
||||||
## In:
|
## In:
|
||||||
+ PUSHW PTR to target buffer (5 Bytes)
|
|
||||||
+ PUSHW Source String (C-Sring)
|
+ PUSHW Source String (C-Sring)
|
||||||
|
+ PUSHW PTR to target buffer (5 Bytes)
|
||||||
|
|
||||||
|
## Out:
|
||||||
|
|
||||||
|
# StrToL
|
||||||
|
Convert String to 32 bits int
|
||||||
|
|
||||||
|
## In:
|
||||||
|
+ PUSHB Base
|
||||||
|
+ PUSHW PTR to EndPtr
|
||||||
|
+ PUSHW Source String (C-Sring)
|
||||||
|
+ PUSHW PTR to target buffer DWORD
|
||||||
|
|
||||||
|
## Out:
|
||||||
|
|
||||||
|
# StrToUL
|
||||||
|
Convert String to 32 bits unsigned int
|
||||||
|
|
||||||
|
## In:
|
||||||
|
+ PUSHB Base
|
||||||
|
+ PUSHW PTR to EndPtr
|
||||||
|
+ PUSHW Source String (C-Sring)
|
||||||
|
+ PUSHW PTR to target buffer DWORD
|
||||||
|
|
||||||
|
## Out:
|
||||||
|
|
||||||
|
# AToL
|
||||||
|
Convert String to 32 bits int
|
||||||
|
|
||||||
|
## In:
|
||||||
|
+ PUSHW Source String (C-Sring)
|
||||||
|
+ PUSHW PTR to target buffer DWORD
|
||||||
|
|
||||||
## Out:
|
## Out:
|
||||||
|
|
||||||
|
@ -586,47 +627,6 @@ Convert String to 16 bits int
|
||||||
## Out:
|
## Out:
|
||||||
+ Y,A = Int
|
+ Y,A = Int
|
||||||
|
|
||||||
# AToL
|
|
||||||
Convert String to 32 bits int
|
|
||||||
|
|
||||||
## In:
|
|
||||||
+ PUSHW PTR to target buffer DWORD
|
|
||||||
+ PUSHW Source String (C-Sring)
|
|
||||||
|
|
||||||
## Out:
|
|
||||||
|
|
||||||
# StrToF
|
|
||||||
Convert String to 40 bits Float
|
|
||||||
|
|
||||||
## In:
|
|
||||||
+ PUSHW PTR to target buffer FLOAT (5 bytes)
|
|
||||||
+ PUSHW PTR to EndPtr
|
|
||||||
+ PUSHW Source String (C-Sring)
|
|
||||||
|
|
||||||
## Out:
|
|
||||||
|
|
||||||
# StrToL
|
|
||||||
Convert String to 32 bits int
|
|
||||||
|
|
||||||
## In:
|
|
||||||
+ PUSHB Base
|
|
||||||
+ PUSHW PTR to target buffer DWORD
|
|
||||||
+ PUSHW PTR to EndPtr
|
|
||||||
+ PUSHW Source String (C-Sring)
|
|
||||||
|
|
||||||
## Out:
|
|
||||||
|
|
||||||
# StrToUL
|
|
||||||
Convert String to 32 bits unsigned int
|
|
||||||
|
|
||||||
## In:
|
|
||||||
+ PUSHB Base
|
|
||||||
+ PUSHW PTR to target buffer DWORD
|
|
||||||
+ PUSHW PTR to EndPtr
|
|
||||||
+ PUSHW Source String (C-Sring)
|
|
||||||
|
|
||||||
## Out:
|
|
||||||
|
|
||||||
# RealPath.YA
|
# RealPath.YA
|
||||||
Return the canonicalized absolute pathname
|
Return the canonicalized absolute pathname
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -127,7 +127,8 @@ A2osX.QC.KLoad >LDAXI MSG.KLOAD
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.QC.PrintAX
|
A2osX.QC.PrintAX
|
||||||
>STAX TmpPtr1
|
sta TmpPtr1
|
||||||
|
stx TmpPtr1+1
|
||||||
lda (TmpPtr1)
|
lda (TmpPtr1)
|
||||||
tax
|
tax
|
||||||
beq .9
|
beq .9
|
||||||
|
|
|
@ -366,7 +366,8 @@ BUF.GetLine ldy #FileY+1
|
||||||
dey
|
dey
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
|
|
||||||
BUF.GetLineAX >STAX BUF.TmpLine1
|
BUF.GetLineAX sta BUF.TmpLine1
|
||||||
|
stx BUF.TmpLine1+1
|
||||||
|
|
||||||
stz BUF.LOffset
|
stz BUF.LOffset
|
||||||
stz BUF.LOffset+1
|
stz BUF.LOffset+1
|
||||||
|
|
|
@ -76,7 +76,8 @@ SCRN.UpdateMain ldy #ScreenY
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
sta TmpCount
|
sta TmpCount
|
||||||
|
|
||||||
.1 >LDAX TmpIndex
|
.1 lda TmpIndex
|
||||||
|
ldx TmpIndex+1
|
||||||
jsr BUF.GetLineAX Y = line length
|
jsr BUF.GetLineAX Y = line length
|
||||||
bcs .5
|
bcs .5
|
||||||
|
|
||||||
|
|
|
@ -219,83 +219,61 @@ AUTO 6
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHYA
|
.MA PUSHYA
|
||||||
dec pStack
|
>PUSHA
|
||||||
sta (pStack)
|
|
||||||
tya
|
tya
|
||||||
dec pStack
|
>PUSHA
|
||||||
sta (pStack)
|
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PULLYA
|
.MA PULLYA
|
||||||
lda (pStack)
|
>PULLA
|
||||||
inc pStack
|
|
||||||
tay
|
tay
|
||||||
lda (pStack)
|
>PULLA
|
||||||
inc pStack
|
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHBI
|
.MA PUSHBI
|
||||||
dec pStack
|
|
||||||
lda #]1
|
lda #]1
|
||||||
sta (pStack)
|
>PUSHA
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHB
|
.MA PUSHB
|
||||||
.DO ]#=2
|
.DO ]#=2
|
||||||
dec pStack
|
|
||||||
lda ]1,]2
|
lda ]1,]2
|
||||||
sta (pStack)
|
>PUSHA
|
||||||
.ELSE
|
.ELSE
|
||||||
dec pStack
|
|
||||||
lda ]1
|
lda ]1
|
||||||
sta (pStack)
|
>PUSHA
|
||||||
.FIN
|
.FIN
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PULLB
|
.MA PULLB
|
||||||
.DO ]#=2
|
.DO ]#=2
|
||||||
lda (pStack)
|
>PULLA
|
||||||
sta ]1,]2
|
sta ]1,]2
|
||||||
inc pStack
|
|
||||||
.ELSE
|
.ELSE
|
||||||
lda (pStack)
|
>PULLA
|
||||||
sta ]1
|
sta ]1
|
||||||
inc pStack
|
|
||||||
.FIN
|
.FIN
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHWI
|
.MA PUSHWI
|
||||||
dec pStack
|
|
||||||
lda /]1
|
lda /]1
|
||||||
sta (pStack)
|
>PUSHA
|
||||||
dec pStack
|
|
||||||
lda #]1
|
lda #]1
|
||||||
sta (pStack)
|
>PUSHA
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHW
|
.MA PUSHW
|
||||||
dec pStack
|
|
||||||
lda ]1+1
|
lda ]1+1
|
||||||
sta (pStack)
|
>PUSHA
|
||||||
dec pStack
|
|
||||||
lda ]1
|
lda ]1
|
||||||
sta (pStack)
|
>PUSHA
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PULLW
|
.MA PULLW
|
||||||
lda (pStack)
|
>PULLA
|
||||||
sta ]1
|
sta ]1
|
||||||
inc pStack
|
>PULLA
|
||||||
lda (pStack)
|
|
||||||
sta ]1+1
|
sta ]1+1
|
||||||
inc pStack
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA POP
|
|
||||||
lda pStack
|
|
||||||
clc
|
|
||||||
adc ]1
|
|
||||||
sta pStack
|
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* General WORD Manipulation Macros
|
* General WORD Manipulation Macros
|
||||||
|
@ -319,16 +297,6 @@ AUTO 6
|
||||||
ldy ]1
|
ldy ]1
|
||||||
.FIN
|
.FIN
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
|
||||||
.MA LDAX
|
|
||||||
.DO ]#=2
|
|
||||||
ldx ]1+1,]2
|
|
||||||
lda ]1,]2
|
|
||||||
.ELSE
|
|
||||||
ldx ]1+1
|
|
||||||
lda ]1
|
|
||||||
.FIN
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA STYA
|
.MA STYA
|
||||||
.DO ]#=2
|
.DO ]#=2
|
||||||
|
@ -340,17 +308,6 @@ AUTO 6
|
||||||
sty ]1
|
sty ]1
|
||||||
.FIN
|
.FIN
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
|
||||||
.MA STAX
|
|
||||||
.DO ]#=2
|
|
||||||
sta ]1+1,]2
|
|
||||||
txa
|
|
||||||
sta ]1,]2
|
|
||||||
.ELSE
|
|
||||||
stx ]1+1
|
|
||||||
sta ]1
|
|
||||||
.FIN
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* General Strings Macros
|
* General Strings Macros
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -214,7 +214,8 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
|
||||||
|
|
||||||
* BitMap Blocks : 0=Used 1=free
|
* BitMap Blocks : 0=Used 1=free
|
||||||
|
|
||||||
>LDAX VolDirHdr.TB
|
lda VolDirHdr.TB
|
||||||
|
ldx VolDirHdr.TB+1
|
||||||
jsr GetProDOSCatSizeAX X=blk used for boot/dir/bitmap
|
jsr GetProDOSCatSizeAX X=blk used for boot/dir/bitmap
|
||||||
|
|
||||||
lda VolDirHdr.TB
|
lda VolDirHdr.TB
|
||||||
|
|
|
@ -196,10 +196,12 @@ GetDynPort inc DYNPORT.LAST
|
||||||
bcs .1
|
bcs .1
|
||||||
|
|
||||||
>LDAXI K.DYNPORT.START
|
>LDAXI K.DYNPORT.START
|
||||||
>STAX DYNPORT.LAST
|
sta DYNPORT.LAST
|
||||||
|
stx DYNPORT.LAST+1
|
||||||
rts CC
|
rts CC
|
||||||
|
|
||||||
.1 >LDAX DYNPORT.LAST
|
.1 lda DYNPORT.LAST
|
||||||
|
ldx DYNPORT.LAST+1
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -567,8 +567,8 @@ Cmd.Exec.READ lda (ZPPtr2)
|
||||||
Cmd.Exec.SLEEP lda (ZPPtr2)
|
Cmd.Exec.SLEEP lda (ZPPtr2)
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
>PUSHEA.G Sleep
|
|
||||||
>PUSHW ZPPtr2
|
>PUSHW ZPPtr2
|
||||||
|
>PUSHEA.G Sleep
|
||||||
>SYSCALL AToL
|
>SYSCALL AToL
|
||||||
|
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
|
@ -126,7 +126,10 @@ K.SaveFile jsr K.FOpen
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 pha
|
.9 pha
|
||||||
>POP 4 Discard SrcPtr & SrcLen
|
lda pStack Discard SrcPtr & SrcLen
|
||||||
|
clc
|
||||||
|
adc #4
|
||||||
|
sta pStack
|
||||||
pla
|
pla
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
|
@ -722,7 +722,7 @@ K.SScanF.IncPtr1
|
||||||
* ## Out:
|
* ## Out:
|
||||||
* CC : success
|
* CC : success
|
||||||
* CS : error code from Output
|
* CS : error code from Output
|
||||||
* Specifiers :
|
* Specifiers :
|
||||||
* %b : pull 1 byte to Print BIN
|
* %b : pull 1 byte to Print BIN
|
||||||
* %B : pull 2 bytes to Print BIN
|
* %B : pull 2 bytes to Print BIN
|
||||||
* %d : pull 1 byte unsigned DEC 0..255
|
* %d : pull 1 byte unsigned DEC 0..255
|
||||||
|
@ -746,7 +746,7 @@ K.SScanF.IncPtr1
|
||||||
* \r : Print 'CR' ($0D,13)
|
* \r : Print 'CR' ($0D,13)
|
||||||
* \\\\ : Print \
|
* \\\\ : Print \
|
||||||
* \% : Print %
|
* \% : Print %
|
||||||
* Modifiers for len and padding :
|
* Modifiers for len and padding :
|
||||||
* %d : '9' '12'
|
* %d : '9' '12'
|
||||||
* %2d : ' 9' '12'
|
* %2d : ' 9' '12'
|
||||||
* %02d : '09' '12'
|
* %02d : '09' '12'
|
||||||
|
@ -754,10 +754,12 @@ K.SScanF.IncPtr1
|
||||||
* %011s : 'ABCDEFGH000'
|
* %011s : 'ABCDEFGH000'
|
||||||
* %2f : '3.14'
|
* %2f : '3.14'
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
K.SPrintF.YA >STYA ZPPtr1
|
K.SPrintF.YA
|
||||||
|
* >STYA ZPPtr1
|
||||||
* >PULLW Printf.Cout.Ptr+1
|
* >PULLW Printf.Cout.Ptr+1
|
||||||
|
|
||||||
K.FPrintF.YA >STYA ZPPtr1
|
K.FPrintF.YA
|
||||||
|
* >STYA ZPPtr1
|
||||||
|
|
||||||
K.PrintF.YA >STYA ZPPtr1
|
K.PrintF.YA >STYA ZPPtr1
|
||||||
|
|
||||||
|
@ -897,8 +899,9 @@ PrintF.U.1 stz SIGN
|
||||||
jsr HEX2DEC
|
jsr HEX2DEC
|
||||||
jmp PrintDEC
|
jmp PrintDEC
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PrintF.E >PULLW ZPPtr2
|
PrintF.E
|
||||||
rts
|
* >PULLW ZPPtr2
|
||||||
|
* rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PrintF.F >PULLW ZPPtr2
|
PrintF.F >PULLW ZPPtr2
|
||||||
rts
|
rts
|
||||||
|
@ -1123,6 +1126,62 @@ SIGN .BS 1
|
||||||
PADLEN .BS 1
|
PADLEN .BS 1
|
||||||
PADCHAR .BS 1
|
PADCHAR .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* Convert HEXBUF to ASCBUF decimal padded with 0
|
||||||
|
*--------------------------------------
|
||||||
|
HEX2DEC ldx #4
|
||||||
|
|
||||||
|
.1 stz BCDBUF,x Clear all 5 bytes
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
sed switch to BCD mode
|
||||||
|
|
||||||
|
ldx #32 let's roll 32 bits
|
||||||
|
|
||||||
|
.2 asl HEXBUF
|
||||||
|
rol HEXBUF+1
|
||||||
|
rol HEXBUF+2
|
||||||
|
rol HEXBUF+3
|
||||||
|
|
||||||
|
ldy #4
|
||||||
|
|
||||||
|
.3 lda BCDBUF,y
|
||||||
|
adc BCDBUF,y
|
||||||
|
sta BCDBUF,y
|
||||||
|
dey
|
||||||
|
bpl .3
|
||||||
|
|
||||||
|
dex
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
cld
|
||||||
|
|
||||||
|
ldy #4
|
||||||
|
ldx #9
|
||||||
|
|
||||||
|
.4 lda BCDBUF,y
|
||||||
|
pha
|
||||||
|
and #$0F
|
||||||
|
ora #$30
|
||||||
|
sta ASCBUF,x
|
||||||
|
dex
|
||||||
|
pla
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
ora #$30
|
||||||
|
sta ASCBUF,x
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .4
|
||||||
|
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
HEXBUF .BS 4
|
||||||
|
BCDBUF .BS 5 5, enough to handle 10 digits (32bits)
|
||||||
|
ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295)
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE /A2OSX.SRC/SYS/KERNEL.S.STDIO
|
SAVE /A2OSX.SRC/SYS/KERNEL.S.STDIO
|
||||||
LOAD /A2OSX.SRC/SYS/KERNEL.S
|
LOAD /A2OSX.SRC/SYS/KERNEL.S
|
||||||
|
|
|
@ -4,14 +4,158 @@ LOMEM $A00
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
|
* # StrToF
|
||||||
|
* Convert String to 40 bits Float
|
||||||
|
* ## In:
|
||||||
|
* PUSHW PTR to EndPtr
|
||||||
|
* PUSHW Source String (C-Sring)
|
||||||
|
* PUSHW PTR to target buffer (5 bytes)
|
||||||
|
* ## Out:
|
||||||
|
*\--------------------------------------
|
||||||
|
K.StrToF jsr PullPtr1Ptr2Ptr3
|
||||||
|
jsr K.AToF.I
|
||||||
|
bcc K.StrToUL.Exit
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*/--------------------------------------
|
||||||
* # AToF
|
* # AToF
|
||||||
* Convert String to 40 bits Float
|
* Convert String to 40 bits Float
|
||||||
* ## In:
|
* ## In:
|
||||||
* PUSHW PTR to target buffer (5 Bytes)
|
|
||||||
* PUSHW Source String (C-Sring)
|
* PUSHW Source String (C-Sring)
|
||||||
|
* PUSHW PTR to target buffer (5 Bytes)
|
||||||
* ## Out:
|
* ## Out:
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
K.AToF
|
K.AToF jsr PullPtr1Ptr2 C-String in Ptr2, Dst buffer in Ptr1
|
||||||
|
|
||||||
|
K.AToF.I jsr MANTISSA.Clear
|
||||||
|
|
||||||
|
ldy #$ff
|
||||||
|
|
||||||
|
.1 iny
|
||||||
|
lda (ZPPtr2),y
|
||||||
|
beq .8
|
||||||
|
cmp #' '
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
.2 iny
|
||||||
|
lda (ZPPtr2),y
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
jsr STDIO.IsDigit
|
||||||
|
bcc .7
|
||||||
|
|
||||||
|
cmp #'+'
|
||||||
|
beq .3
|
||||||
|
cmp #'-'
|
||||||
|
bne .4
|
||||||
|
|
||||||
|
.3 jsr K.AToF.CheckSign
|
||||||
|
bcs .9
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.4 cmp #'.'
|
||||||
|
bne .5
|
||||||
|
ldx INEXP Decimal point not allowed in EXP
|
||||||
|
bne .9
|
||||||
|
ldx bDECPOINT ....and only one!
|
||||||
|
bne .9
|
||||||
|
inc bDECPOINT
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.5 cmp #'E'
|
||||||
|
beq .6
|
||||||
|
|
||||||
|
cmp #'e'
|
||||||
|
bne .8
|
||||||
|
.6
|
||||||
|
|
||||||
|
.7
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
|
||||||
|
.9 lda #SYSMGR.ERRSYN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
K.AToF.CheckSign
|
||||||
|
ldy INEXP Get MANTSIGN or EXPSIGN
|
||||||
|
ldx MANTSIGN,y
|
||||||
|
bne .9 Already set, error
|
||||||
|
|
||||||
|
cmp #'-'
|
||||||
|
bne .1
|
||||||
|
lda #$ff
|
||||||
|
.1 sta MANTSIGN,y set '+' of $ff to test with BIT
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*/--------------------------------------
|
||||||
|
* # StrToL
|
||||||
|
* Convert String to 32 bits int
|
||||||
|
* ## In:
|
||||||
|
* PUSHB Base
|
||||||
|
* PUSHW PTR to EndPtr
|
||||||
|
* PUSHW Source String (C-Sring)
|
||||||
|
* PUSHW PTR to target buffer DWORD
|
||||||
|
* ## Out:
|
||||||
|
*\--------------------------------------
|
||||||
|
K.StrToL sec Signed
|
||||||
|
.HS 90 BCC
|
||||||
|
*/--------------------------------------
|
||||||
|
* # StrToUL
|
||||||
|
* Convert String to 32 bits unsigned int
|
||||||
|
* ## In:
|
||||||
|
* PUSHB Base
|
||||||
|
* PUSHW PTR to EndPtr
|
||||||
|
* PUSHW Source String (C-Sring)
|
||||||
|
* PUSHW PTR to target buffer DWORD
|
||||||
|
* ## Out:
|
||||||
|
*\--------------------------------------
|
||||||
|
K.StrToUL clc Unsigned
|
||||||
|
jsr PullPtr1Ptr2Ptr3
|
||||||
|
>PULLA Base
|
||||||
|
jsr K.AToL.I
|
||||||
|
bcs K.StrToUL.rts
|
||||||
|
|
||||||
|
* clc
|
||||||
|
|
||||||
|
K.StrToUL.Exit adc ZPPtr2
|
||||||
|
sta ZPPtr3
|
||||||
|
lda #0
|
||||||
|
adc ZPPtr2+1
|
||||||
|
sta ZPPtr3+1
|
||||||
|
|
||||||
|
K.StrToUL.rts rts
|
||||||
|
*/--------------------------------------
|
||||||
|
* # AToL
|
||||||
|
* Convert String to 32 bits int
|
||||||
|
* ## In:
|
||||||
|
* PUSHW Source String (C-Sring)
|
||||||
|
* PUSHW PTR to target buffer DWORD
|
||||||
|
* ## Out:
|
||||||
|
*\--------------------------------------
|
||||||
|
K.AToL jsr PullPtr1Ptr2 C-String in Ptr2, Dst buffer in Ptr1
|
||||||
|
|
||||||
|
lda #10 base 10
|
||||||
|
sec signed
|
||||||
|
|
||||||
|
K.AToL.I jsr STDLIB.Dec2Hex
|
||||||
|
bcs .9
|
||||||
|
phy Save Count processed
|
||||||
|
ldy #3
|
||||||
|
|
||||||
|
.3 lda MANTISSA,y
|
||||||
|
sta (ZPPtr1),y
|
||||||
|
dey
|
||||||
|
bpl .3
|
||||||
|
pla
|
||||||
|
|
||||||
|
* clc
|
||||||
|
|
||||||
|
.9 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # AToI.YA
|
* # AToI.YA
|
||||||
* Convert String to 16 bits int
|
* Convert String to 16 bits int
|
||||||
|
@ -20,201 +164,104 @@ K.AToF
|
||||||
* ## Out:
|
* ## Out:
|
||||||
* Y,A = Int
|
* Y,A = Int
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
K.AToI.YA >STYA ZPPtr1
|
K.AToI.YA >STYA ZPPtr2
|
||||||
lda #10 base 10
|
lda #10 base 10
|
||||||
sec signed
|
sec signed
|
||||||
|
|
||||||
jsr STDLIB.Dec2Hex
|
jsr STDLIB.Dec2Hex
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>LDYA HEXBUF
|
>LDYA MANTISSA
|
||||||
.9 rts
|
.9 rts
|
||||||
*/--------------------------------------
|
|
||||||
* # AToL
|
|
||||||
* Convert String to 32 bits int
|
|
||||||
* ## In:
|
|
||||||
* PUSHW PTR to target buffer DWORD
|
|
||||||
* PUSHW Source String (C-Sring)
|
|
||||||
* ## Out:
|
|
||||||
*\--------------------------------------
|
|
||||||
K.AToL jsr PullPtr1Ptr2 C-String in Ptr1, Dst buffer in Ptr2
|
|
||||||
|
|
||||||
lda #10 base 10
|
|
||||||
sec signed
|
|
||||||
|
|
||||||
jsr STDLIB.Dec2Hex
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
ldy #3
|
|
||||||
|
|
||||||
.3 lda HEXBUF,y
|
|
||||||
sta (ZPPtr2),y
|
|
||||||
dey
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*/--------------------------------------
|
|
||||||
* # StrToF
|
|
||||||
* Convert String to 40 bits Float
|
|
||||||
* ## In:
|
|
||||||
* PUSHW PTR to target buffer FLOAT (5 bytes)
|
|
||||||
* PUSHW PTR to EndPtr
|
|
||||||
* PUSHW Source String (C-Sring)
|
|
||||||
* ## Out:
|
|
||||||
*\--------------------------------------
|
|
||||||
K.StrToF
|
|
||||||
*/--------------------------------------
|
|
||||||
* # StrToL
|
|
||||||
* Convert String to 32 bits int
|
|
||||||
* ## In:
|
|
||||||
* PUSHB Base
|
|
||||||
* PUSHW PTR to target buffer DWORD
|
|
||||||
* PUSHW PTR to EndPtr
|
|
||||||
* PUSHW Source String (C-Sring)
|
|
||||||
* ## Out:
|
|
||||||
*\--------------------------------------
|
|
||||||
K.StrToL
|
|
||||||
*/--------------------------------------
|
|
||||||
* # StrToUL
|
|
||||||
* Convert String to 32 bits unsigned int
|
|
||||||
* ## In:
|
|
||||||
* PUSHB Base
|
|
||||||
* PUSHW PTR to target buffer DWORD
|
|
||||||
* PUSHW PTR to EndPtr
|
|
||||||
* PUSHW Source String (C-Sring)
|
|
||||||
* ## Out:
|
|
||||||
*\--------------------------------------
|
|
||||||
K.StrToUL
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Convert ZPPtr1 to HEXBUF
|
* Convert ZPPtr1 to MANTISSA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
STDLIB.Dec2Hex stz HEXBUF
|
STDLIB.Dec2Hex jsr MANTISSA.Clear
|
||||||
stz HEXBUF+1
|
|
||||||
stz HEXBUF+2
|
|
||||||
stz HEXBUF+3
|
|
||||||
|
|
||||||
ldy #$ff
|
ldy #$ff
|
||||||
|
|
||||||
.1 iny
|
.1 iny
|
||||||
lda (ZPPtr1),y
|
lda (ZPPtr2),y
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
jsr STDIO.IsDigit
|
jsr STDIO.IsDigit
|
||||||
bcs .8
|
bcs .8
|
||||||
|
|
||||||
lda HEXBUF+3 save HEXBUF for 4+1
|
jsr MANTISSA.T10
|
||||||
pha
|
bcs .9
|
||||||
lda HEXBUF+2
|
|
||||||
pha
|
|
||||||
lda HEXBUF+1
|
|
||||||
pha
|
|
||||||
lda HEXBUF
|
|
||||||
pha
|
|
||||||
|
|
||||||
jsr HEXBUF.ROL HEXBUF * 2 -> HEXBUF
|
lda (ZPPtr2),y
|
||||||
bcs .9 overflow!!!
|
|
||||||
|
|
||||||
jsr HEXBUF.ROL HEXBUF * 4 -> HEXBUF
|
|
||||||
bcs .9 overflow!!!
|
|
||||||
|
|
||||||
* clc
|
|
||||||
pla HEXBUF * 4 + HEXBUF -> HEXBUF
|
|
||||||
adc HEXBUF
|
|
||||||
sta HEXBUF
|
|
||||||
pla
|
|
||||||
adc HEXBUF+1
|
|
||||||
sta HEXBUF+1
|
|
||||||
pla
|
|
||||||
adc HEXBUF+2
|
|
||||||
sta HEXBUF+2
|
|
||||||
pla
|
|
||||||
adc HEXBUF+3
|
|
||||||
sta HEXBUF+3
|
|
||||||
bcs .99 overflow!!!
|
|
||||||
|
|
||||||
jsr HEXBUF.ROL HEXBUF * 10 -> HEXBUF
|
|
||||||
bcs .99 overflow!!!
|
|
||||||
|
|
||||||
lda (ZPPtr1),y
|
|
||||||
and #$0F
|
and #$0F
|
||||||
|
|
||||||
adc HEXBUF
|
adc MANTISSA
|
||||||
sta HEXBUF
|
sta MANTISSA
|
||||||
bcc .1
|
bcc .1
|
||||||
inc HEXBUF+1
|
inc MANTISSA+1
|
||||||
bne .1
|
bne .1
|
||||||
inc HEXBUF+2
|
inc MANTISSA+2
|
||||||
bne .1
|
bne .1
|
||||||
inc HEXBUF+3
|
inc MANTISSA+3
|
||||||
bne .1 overflow!!!
|
bne .1 overflow!!!
|
||||||
|
* sec
|
||||||
|
rts
|
||||||
|
|
||||||
.9 pla discard saved HEXBUF
|
.8 clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
MANTISSA.T10 ldx #3
|
||||||
|
|
||||||
|
.1 lda MANTISSA,x save MANTISSA for 4+1
|
||||||
|
pha
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
jsr MANTISSA.ROL MANTISSA * 2 -> MANTISSA
|
||||||
|
bcs .9 overflow!!!
|
||||||
|
|
||||||
|
jsr MANTISSA.ROL MANTISSA * 4 -> MANTISSA
|
||||||
|
bcs .9 overflow!!!
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
ldy #4
|
||||||
|
|
||||||
|
* clc
|
||||||
|
|
||||||
|
.2 pla MANTISSA * 4 + MANTISSA -> MANTISSA
|
||||||
|
adc MANTISSA,x
|
||||||
|
sta MANTISSA,x
|
||||||
|
inx
|
||||||
|
dey
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
bcs .99 overflow!!!
|
||||||
|
|
||||||
|
jsr MANTISSA.ROL MANTISSA * 10 -> MANTISSA
|
||||||
|
bcs .99 overflow!!!
|
||||||
|
|
||||||
|
.9 pla discard saved MANTISSA
|
||||||
pla
|
pla
|
||||||
pla
|
pla
|
||||||
pla
|
pla
|
||||||
.99 rts
|
.99 rts
|
||||||
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
HEXBUF.ROL asl HEXBUF
|
MANTISSA.ROL asl MANTISSA
|
||||||
rol HEXBUF+1
|
rol MANTISSA+1
|
||||||
rol HEXBUF+2
|
rol MANTISSA+2
|
||||||
rol HEXBUF+3
|
rol MANTISSA+3
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Convert HEXBUF to ASCBUF decimal padded with 0
|
MANTISSA.Clear ldx #8
|
||||||
*--------------------------------------
|
.1 stz EXPSIGN,x
|
||||||
HEX2DEC ldx #4
|
|
||||||
|
|
||||||
.1 stz BCDBUF,x Clear all 5 bytes
|
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
sed switch to BCD mode
|
|
||||||
|
|
||||||
ldx #32 let's roll 32 bits
|
|
||||||
|
|
||||||
.2 jsr HEXBUF.ROL
|
|
||||||
|
|
||||||
ldy #4
|
|
||||||
|
|
||||||
.3 lda BCDBUF,y
|
|
||||||
adc BCDBUF,y
|
|
||||||
sta BCDBUF,y
|
|
||||||
dey
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
dex
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
cld
|
|
||||||
|
|
||||||
ldy #4
|
|
||||||
ldx #9
|
|
||||||
|
|
||||||
.4 lda BCDBUF,y
|
|
||||||
pha
|
|
||||||
and #$0F
|
|
||||||
ora #$30
|
|
||||||
sta ASCBUF,x
|
|
||||||
dex
|
|
||||||
pla
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
lsr
|
|
||||||
ora #$30
|
|
||||||
sta ASCBUF,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .4
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
HEXBUF .BS 4 32 bits max
|
bDECPOINT .BS 1
|
||||||
BCDBUF .BS 5 5, enough to handle 10 digits (32bits)
|
INEXP .BS 1
|
||||||
ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295)
|
MANTSIGN .BS 1
|
||||||
|
EXPSIGN .BS 1
|
||||||
|
EXP .BS 1
|
||||||
|
MANTISSA .BS 4 32 bits max
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # RealPath.YA
|
* # RealPath.YA
|
||||||
* Return the canonicalized absolute pathname
|
* Return the canonicalized absolute pathname
|
||||||
|
|
|
@ -183,7 +183,8 @@ NSCDRV.RELOC .DA NSCDRV.R1+1
|
||||||
.DA NSCDRV.R9+1
|
.DA NSCDRV.R9+1
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
NSC.Print >STAX TmpPtr1
|
NSC.Print sta TmpPtr1
|
||||||
|
stx TmpPtr1+1
|
||||||
ldy #0
|
ldy #0
|
||||||
|
|
||||||
.1 lda (TmpPtr1),y
|
.1 lda (TmpPtr1),y
|
||||||
|
|
|
@ -5,7 +5,8 @@ INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PrintFAX >STAX PrintFAX.Next+1
|
PrintFAX sta PrintFAX.Next+1
|
||||||
|
stx PrintFAX.Next+2
|
||||||
pla
|
pla
|
||||||
sta PrintFAX.99+1
|
sta PrintFAX.99+1
|
||||||
pla
|
pla
|
||||||
|
@ -109,7 +110,9 @@ PrintFAX.D ldx #0
|
||||||
.HS D0 bne
|
.HS D0 bne
|
||||||
PrintFAX.DD plx
|
PrintFAX.DD plx
|
||||||
pla
|
pla
|
||||||
>STAX X.HexBuffer
|
sta X.HexBuffer
|
||||||
|
stx X.HexBuffer+1
|
||||||
|
|
||||||
stz X.BCDBuffer
|
stz X.BCDBuffer
|
||||||
stz X.BCDBuffer+1
|
stz X.BCDBuffer+1
|
||||||
stz X.BCDBuffer+2
|
stz X.BCDBuffer+2
|
||||||
|
|
Loading…
Reference in New Issue
Block a user