mirror of
https://github.com/A2osX/A2osX.git
synced 2025-03-03 12:29:54 +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'
|
||||
+ %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
|
||||
Convert String to 40 bits Float
|
||||
|
||||
## In:
|
||||
+ PUSHW PTR to target buffer (5 Bytes)
|
||||
+ 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:
|
||||
|
||||
@ -586,47 +627,6 @@ Convert String to 16 bits int
|
||||
## Out:
|
||||
+ 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
|
||||
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
|
||||
*--------------------------------------
|
||||
A2osX.QC.PrintAX
|
||||
>STAX TmpPtr1
|
||||
sta TmpPtr1
|
||||
stx TmpPtr1+1
|
||||
lda (TmpPtr1)
|
||||
tax
|
||||
beq .9
|
||||
|
@ -366,7 +366,8 @@ BUF.GetLine ldy #FileY+1
|
||||
dey
|
||||
lda (pData),y
|
||||
|
||||
BUF.GetLineAX >STAX BUF.TmpLine1
|
||||
BUF.GetLineAX sta BUF.TmpLine1
|
||||
stx BUF.TmpLine1+1
|
||||
|
||||
stz BUF.LOffset
|
||||
stz BUF.LOffset+1
|
||||
|
@ -76,7 +76,8 @@ SCRN.UpdateMain ldy #ScreenY
|
||||
lda (pData),y
|
||||
sta TmpCount
|
||||
|
||||
.1 >LDAX TmpIndex
|
||||
.1 lda TmpIndex
|
||||
ldx TmpIndex+1
|
||||
jsr BUF.GetLineAX Y = line length
|
||||
bcs .5
|
||||
|
||||
|
@ -219,83 +219,61 @@ AUTO 6
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHYA
|
||||
dec pStack
|
||||
sta (pStack)
|
||||
>PUSHA
|
||||
tya
|
||||
dec pStack
|
||||
sta (pStack)
|
||||
>PUSHA
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLYA
|
||||
lda (pStack)
|
||||
inc pStack
|
||||
>PULLA
|
||||
tay
|
||||
lda (pStack)
|
||||
inc pStack
|
||||
>PULLA
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHBI
|
||||
dec pStack
|
||||
lda #]1
|
||||
sta (pStack)
|
||||
>PUSHA
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHB
|
||||
.DO ]#=2
|
||||
dec pStack
|
||||
lda ]1,]2
|
||||
sta (pStack)
|
||||
>PUSHA
|
||||
.ELSE
|
||||
dec pStack
|
||||
lda ]1
|
||||
sta (pStack)
|
||||
>PUSHA
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLB
|
||||
.DO ]#=2
|
||||
lda (pStack)
|
||||
>PULLA
|
||||
sta ]1,]2
|
||||
inc pStack
|
||||
.ELSE
|
||||
lda (pStack)
|
||||
>PULLA
|
||||
sta ]1
|
||||
inc pStack
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHWI
|
||||
dec pStack
|
||||
lda /]1
|
||||
sta (pStack)
|
||||
dec pStack
|
||||
>PUSHA
|
||||
lda #]1
|
||||
sta (pStack)
|
||||
>PUSHA
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHW
|
||||
dec pStack
|
||||
lda ]1+1
|
||||
sta (pStack)
|
||||
dec pStack
|
||||
>PUSHA
|
||||
lda ]1
|
||||
sta (pStack)
|
||||
>PUSHA
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLW
|
||||
lda (pStack)
|
||||
>PULLA
|
||||
sta ]1
|
||||
inc pStack
|
||||
lda (pStack)
|
||||
>PULLA
|
||||
sta ]1+1
|
||||
inc pStack
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA POP
|
||||
lda pStack
|
||||
clc
|
||||
adc ]1
|
||||
sta pStack
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* General WORD Manipulation Macros
|
||||
@ -319,16 +297,6 @@ AUTO 6
|
||||
ldy ]1
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LDAX
|
||||
.DO ]#=2
|
||||
ldx ]1+1,]2
|
||||
lda ]1,]2
|
||||
.ELSE
|
||||
ldx ]1+1
|
||||
lda ]1
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA STYA
|
||||
.DO ]#=2
|
||||
@ -340,17 +308,6 @@ AUTO 6
|
||||
sty ]1
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA STAX
|
||||
.DO ]#=2
|
||||
sta ]1+1,]2
|
||||
txa
|
||||
sta ]1,]2
|
||||
.ELSE
|
||||
stx ]1+1
|
||||
sta ]1
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* General Strings Macros
|
||||
*--------------------------------------
|
||||
|
@ -214,7 +214,8 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
|
||||
|
||||
* 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
|
||||
|
||||
lda VolDirHdr.TB
|
||||
|
@ -196,10 +196,12 @@ GetDynPort inc DYNPORT.LAST
|
||||
bcs .1
|
||||
|
||||
>LDAXI K.DYNPORT.START
|
||||
>STAX DYNPORT.LAST
|
||||
sta DYNPORT.LAST
|
||||
stx DYNPORT.LAST+1
|
||||
rts CC
|
||||
|
||||
.1 >LDAX DYNPORT.LAST
|
||||
.1 lda DYNPORT.LAST
|
||||
ldx DYNPORT.LAST+1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -567,8 +567,8 @@ Cmd.Exec.READ lda (ZPPtr2)
|
||||
Cmd.Exec.SLEEP lda (ZPPtr2)
|
||||
beq .9
|
||||
|
||||
>PUSHEA.G Sleep
|
||||
>PUSHW ZPPtr2
|
||||
>PUSHEA.G Sleep
|
||||
>SYSCALL AToL
|
||||
|
||||
bcs .9
|
||||
|
@ -126,7 +126,10 @@ K.SaveFile jsr K.FOpen
|
||||
rts
|
||||
|
||||
.9 pha
|
||||
>POP 4 Discard SrcPtr & SrcLen
|
||||
lda pStack Discard SrcPtr & SrcLen
|
||||
clc
|
||||
adc #4
|
||||
sta pStack
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
|
@ -722,7 +722,7 @@ K.SScanF.IncPtr1
|
||||
* ## Out:
|
||||
* CC : success
|
||||
* CS : error code from Output
|
||||
* Specifiers :
|
||||
* Specifiers :
|
||||
* %b : pull 1 byte to Print BIN
|
||||
* %B : pull 2 bytes to Print BIN
|
||||
* %d : pull 1 byte unsigned DEC 0..255
|
||||
@ -746,7 +746,7 @@ K.SScanF.IncPtr1
|
||||
* \r : Print 'CR' ($0D,13)
|
||||
* \\\\ : Print \
|
||||
* \% : Print %
|
||||
* Modifiers for len and padding :
|
||||
* Modifiers for len and padding :
|
||||
* %d : '9' '12'
|
||||
* %2d : ' 9' '12'
|
||||
* %02d : '09' '12'
|
||||
@ -754,10 +754,12 @@ K.SScanF.IncPtr1
|
||||
* %011s : 'ABCDEFGH000'
|
||||
* %2f : '3.14'
|
||||
*\--------------------------------------
|
||||
K.SPrintF.YA >STYA ZPPtr1
|
||||
K.SPrintF.YA
|
||||
* >STYA ZPPtr1
|
||||
* >PULLW Printf.Cout.Ptr+1
|
||||
|
||||
K.FPrintF.YA >STYA ZPPtr1
|
||||
K.FPrintF.YA
|
||||
* >STYA ZPPtr1
|
||||
|
||||
K.PrintF.YA >STYA ZPPtr1
|
||||
|
||||
@ -897,8 +899,9 @@ PrintF.U.1 stz SIGN
|
||||
jsr HEX2DEC
|
||||
jmp PrintDEC
|
||||
*--------------------------------------
|
||||
PrintF.E >PULLW ZPPtr2
|
||||
rts
|
||||
PrintF.E
|
||||
* >PULLW ZPPtr2
|
||||
* rts
|
||||
*--------------------------------------
|
||||
PrintF.F >PULLW ZPPtr2
|
||||
rts
|
||||
@ -1123,6 +1126,62 @@ SIGN .BS 1
|
||||
PADLEN .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
|
||||
SAVE /A2OSX.SRC/SYS/KERNEL.S.STDIO
|
||||
LOAD /A2OSX.SRC/SYS/KERNEL.S
|
||||
|
@ -4,14 +4,158 @@ LOMEM $A00
|
||||
INC 1
|
||||
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
|
||||
* Convert String to 40 bits Float
|
||||
* ## In:
|
||||
* PUSHW PTR to target buffer (5 Bytes)
|
||||
* PUSHW Source String (C-Sring)
|
||||
* PUSHW PTR to target buffer (5 Bytes)
|
||||
* ## 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
|
||||
* Convert String to 16 bits int
|
||||
@ -20,201 +164,104 @@ K.AToF
|
||||
* ## Out:
|
||||
* Y,A = Int
|
||||
*\--------------------------------------
|
||||
K.AToI.YA >STYA ZPPtr1
|
||||
K.AToI.YA >STYA ZPPtr2
|
||||
lda #10 base 10
|
||||
sec signed
|
||||
|
||||
jsr STDLIB.Dec2Hex
|
||||
bcs .9
|
||||
|
||||
>LDYA HEXBUF
|
||||
>LDYA MANTISSA
|
||||
.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
|
||||
stz HEXBUF+1
|
||||
stz HEXBUF+2
|
||||
stz HEXBUF+3
|
||||
STDLIB.Dec2Hex jsr MANTISSA.Clear
|
||||
|
||||
ldy #$ff
|
||||
|
||||
.1 iny
|
||||
lda (ZPPtr1),y
|
||||
lda (ZPPtr2),y
|
||||
beq .8
|
||||
|
||||
jsr STDIO.IsDigit
|
||||
bcs .8
|
||||
|
||||
lda HEXBUF+3 save HEXBUF for 4+1
|
||||
pha
|
||||
lda HEXBUF+2
|
||||
pha
|
||||
lda HEXBUF+1
|
||||
pha
|
||||
lda HEXBUF
|
||||
pha
|
||||
jsr MANTISSA.T10
|
||||
bcs .9
|
||||
|
||||
jsr HEXBUF.ROL HEXBUF * 2 -> HEXBUF
|
||||
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
|
||||
lda (ZPPtr2),y
|
||||
and #$0F
|
||||
|
||||
adc HEXBUF
|
||||
sta HEXBUF
|
||||
adc MANTISSA
|
||||
sta MANTISSA
|
||||
bcc .1
|
||||
inc HEXBUF+1
|
||||
inc MANTISSA+1
|
||||
bne .1
|
||||
inc HEXBUF+2
|
||||
inc MANTISSA+2
|
||||
bne .1
|
||||
inc HEXBUF+3
|
||||
inc MANTISSA+3
|
||||
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
|
||||
.99 rts
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
HEXBUF.ROL asl HEXBUF
|
||||
rol HEXBUF+1
|
||||
rol HEXBUF+2
|
||||
rol HEXBUF+3
|
||||
MANTISSA.ROL asl MANTISSA
|
||||
rol MANTISSA+1
|
||||
rol MANTISSA+2
|
||||
rol MANTISSA+3
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Convert HEXBUF to ASCBUF decimal padded with 0
|
||||
*--------------------------------------
|
||||
HEX2DEC ldx #4
|
||||
|
||||
.1 stz BCDBUF,x Clear all 5 bytes
|
||||
MANTISSA.Clear ldx #8
|
||||
.1 stz EXPSIGN,x
|
||||
dex
|
||||
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
|
||||
*--------------------------------------
|
||||
HEXBUF .BS 4 32 bits max
|
||||
BCDBUF .BS 5 5, enough to handle 10 digits (32bits)
|
||||
ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295)
|
||||
bDECPOINT .BS 1
|
||||
INEXP .BS 1
|
||||
MANTSIGN .BS 1
|
||||
EXPSIGN .BS 1
|
||||
EXP .BS 1
|
||||
MANTISSA .BS 4 32 bits max
|
||||
*/--------------------------------------
|
||||
* # RealPath.YA
|
||||
* Return the canonicalized absolute pathname
|
||||
|
@ -183,7 +183,8 @@ NSCDRV.RELOC .DA NSCDRV.R1+1
|
||||
.DA NSCDRV.R9+1
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
NSC.Print >STAX TmpPtr1
|
||||
NSC.Print sta TmpPtr1
|
||||
stx TmpPtr1+1
|
||||
ldy #0
|
||||
|
||||
.1 lda (TmpPtr1),y
|
||||
|
@ -5,7 +5,8 @@ INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
PrintFAX >STAX PrintFAX.Next+1
|
||||
PrintFAX sta PrintFAX.Next+1
|
||||
stx PrintFAX.Next+2
|
||||
pla
|
||||
sta PrintFAX.99+1
|
||||
pla
|
||||
@ -109,7 +110,9 @@ PrintFAX.D ldx #0
|
||||
.HS D0 bne
|
||||
PrintFAX.DD plx
|
||||
pla
|
||||
>STAX X.HexBuffer
|
||||
sta X.HexBuffer
|
||||
stx X.HexBuffer+1
|
||||
|
||||
stz X.BCDBuffer
|
||||
stz X.BCDBuffer+1
|
||||
stz X.BCDBuffer+2
|
||||
|
Loading…
x
Reference in New Issue
Block a user