Kernel 0.9.1 : STDLIB : AToF, StrToF OK

This commit is contained in:
Rémy GIBERT 2017-10-17 17:40:21 +02:00
parent bbbdd3d867
commit f3d06059ae
12 changed files with 183 additions and 179 deletions

Binary file not shown.

Binary file not shown.

View File

@ -190,18 +190,18 @@ SYS.GetMemByID.A .EQ $C6
SYS.GetMem.YA .EQ $C8 SYS.GetMem.YA .EQ $C8
SYS.GetMem0.YA .EQ $CA SYS.GetMem0.YA .EQ $CA
* .EQ $CC SYS.SetLoMem .EQ $CC
SYS.NewStr.YA .EQ $CE SYS.NewStr.YA .EQ $CE
SYS.SetLoMem .EQ $D0 * .EQ $D0
SYS.GetMemStat.YA .EQ $D2 * .EQ $D2
* .EQ $D4 * .EQ $D4
* .EQ $D6 * .EQ $D6
SYS.LoadStkObj.YA .EQ $D8 SYS.LoadStkObj.YA .EQ $D8
SYS.GetStkObj.A .EQ $DA SYS.GetStkObj.A .EQ $DA
SYS.FreeStkObj.A .EQ $DC SYS.FreeStkObj.A .EQ $DC
* .EQ $DE SYS.GetMemStat.YA .EQ $DE
SYS.Sleep .EQ $E0 SYS.Sleep .EQ $E0
*-------------------------------------- *--------------------------------------

View File

@ -1,6 +1,6 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BUILD
LOMEM $900 LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
@ -13,12 +13,12 @@ K.EVT.MAX .EQ 8
K.DEV.MAX .EQ 32 K.DEV.MAX .EQ 32
K.PS.MAX .EQ 32 K.PS.MAX .EQ 32
*-------------------------------------- *--------------------------------------
H.BIN.HEADER .EQ 0 H.BIN.T .EQ 0
H.BIN.HEADER.DRV65 .EQ $4CD8 6502:cld,jmp abs H.BIN.T.DRV65 .EQ $4CD8 6502:cld,jmp abs
H.BIN.HEADER.LIB65 .EQ $7CD8 6502:cld,jmp (abs,x) H.BIN.T.LIB65 .EQ $7CD8 6502:cld,jmp (abs,x)
H.BIN.HEADER.BIN65 .EQ $7CD8 6502:cld,jmp (abs,x) H.BIN.T.BIN65 .EQ $7CD8 6502:cld,jmp (abs,x)
*H.BIN.HEADER.LIB80 .EQ $A28D Z80: *H.BIN.T.LIB80 .EQ $A28D Z80:
*H.BIN.HEADER.BIN80 .EQ $A28D Z80: *H.BIN.T.BIN80 .EQ $A28D Z80:
H.BIN.JMP .EQ 2 H.BIN.JMP .EQ 2
*H.BIN.CODE.TYPE .EQ 4 *H.BIN.CODE.TYPE .EQ 4
*H.BIN.VERSION .EQ 5 *H.BIN.VERSION .EQ 5
@ -36,11 +36,10 @@ H.BIN.DRV.REL.TABLE .EQ 0
*-------------------------------------- *--------------------------------------
* Kernel ZP Aux * Kernel ZP Aux
*-------------------------------------- *--------------------------------------
ZPKERNEL .EQ $0 ZPPtr1 .EQ $0
ZPPtr1 .EQ ZPKERNEL ZPPtr2 .EQ ZPPtr1+2
ZPPtr2 .EQ ZPKERNEL+2 ZPPtr3 .EQ ZPPtr1+4
ZPPtr3 .EQ ZPKERNEL+4 ZPPtr4 .EQ ZPPtr1+6
ZPPtr4 .EQ ZPKERNEL+6
*-------------------------------------- *--------------------------------------
ZPMEMMGR .EQ $8 ZPMEMMGR .EQ $8
*-------------------------------------- *--------------------------------------
@ -49,6 +48,7 @@ ZPMEMMGR .EQ $8
* $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP) * $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP)
*-------------------------------------- *--------------------------------------
*INDEX .EQ $5E ->$5F *INDEX .EQ $5E ->$5F
FORPNT .EQ $85 ->$86
FAC .EQ $9D ->$A1 FAC .EQ $9D ->$A1
FAC.SIGN .EQ $A2 FAC.SIGN .EQ $A2
FAC.EXTENSION .EQ $AC FAC.EXTENSION .EQ $AC
@ -56,8 +56,9 @@ TXTPTR .EQ $B8
*-------------------------------------- *--------------------------------------
* ROM Entry Point * ROM Entry Point
*-------------------------------------- *--------------------------------------
ROM.FIN .EQ $0 ROM.GETFAC .EQ $0 Get FAC at FORPNT
ROM.FOUT .EQ $2 ROM.FIN .EQ $2
ROM.FOUT .EQ $4
*-------------------------------------- *--------------------------------------
* Memory Map * Memory Map
*-------------------------------------- *--------------------------------------

View File

@ -317,10 +317,13 @@ CSH.IF jsr CSH.GetCharNB
cmp #'{' cmp #'{'
bne .9 bne .9
lda CSH.ACC >LDA.G CSH.ACC
ora CSH.ACC+1 iny
ora CSH.ACC+2 ora (pData),y
ora CSH.ACC+3 iny
ora (pData),y
iny
ora (pData),y
beq .6 eval returned false, skip {{....}} beq .6 eval returned false, skip {{....}}
jsr CSH.GetNextCharNB Skip '{' jsr CSH.GetNextCharNB Skip '{'
@ -396,7 +399,7 @@ CSH.LONG lda #CSH.TYPE.LONG
bra CSH.TYPE bra CSH.TYPE
CSH.FLOAT lda #CSH.TYPE.FLOAT CSH.FLOAT lda #CSH.TYPE.FLOAT
CSH.TYPE sta CSH.ACCT CSH.TYPE >STA.G CSH.ACCT
jsr CSH.GetChar jsr CSH.GetChar
bcs .9 bcs .9
@ -498,23 +501,9 @@ CSH.GetName ldy #0
*-------------------------------------- *--------------------------------------
CSH.GetNumInACC CSH.GetNumInACC
* ldy #0 >LDA.G CSH.ACCT
*
*.1 iny
* cpy #10
* beq .9
* sta ARGS,y * >SYSCALL StrToL
* jsr CSH.GetNextChar
* bcs .8
* jsr CSH.IsDigit10
* bcc .1
*.8 sty ARGS
* >PUSHW L.CSH.ACC
* >PUSHW L.ARGS
* >SYSCALL AToL
* bcs .9 * bcs .9
* rts * rts
@ -522,10 +511,15 @@ CSH.GetNumInACC
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.ZeroACC stz CSH.ACC CSH.ZeroACC lda #0
stz CSH.ACC+1
stz CSH.ACC+2 >STA.G CSH.ACC
stz CSH.ACC+3 iny
sta (pData),y
iny
sta (pData),y
iny
sta (pData),y
rts rts
*-------------------------------------- *--------------------------------------
* Vars... * Vars...

View File

@ -94,7 +94,6 @@ J.CSHCMDS .DA CSH.IF
.DA CSH.FLOAT .DA CSH.FLOAT
J.CSHCMDS.END .DA CSH.IF.END J.CSHCMDS.END .DA CSH.IF.END
.DA CSH.WHILE.END .DA CSH.WHILE.END
L.CSH.ACC .DA CSH.ACC
L.ERR.Codes .DA ERR.Codes L.ERR.Codes .DA ERR.Codes
L.ERR.Messages .DA ERR.Messages L.ERR.Messages .DA ERR.Messages
.DA 0 .DA 0
@ -515,10 +514,6 @@ EscChars.Count .EQ 4
EscChars .AS 'DBAC' EscChars .AS 'DBAC'
CSH.TSIZE .HS 0001020405 00,CHAR,INT,LONG,FLOAT.... CSH.TSIZE .HS 0001020405 00,CHAR,INT,LONG,FLOAT....
CSH.ACCT .BS 1
CSH.ACC .BS 5
CSH.ARGT .BS 1
CSH.ARG .BS 5
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
@ -565,6 +560,8 @@ CSH.DataPtr .BS 1
CSH.hStack .BS 1 CSH.hStack .BS 1
CSH.StackPtr .BS 1 CSH.StackPtr .BS 1
CSH.CmdSave .BS 1 CSH.CmdSave .BS 1
CSH.ACCT .BS 1
CSH.ACC .BS 5
CSH.Name .BS CSH.Name.MAX+1 CSH.Name .BS CSH.Name.MAX+1
DS.END .ED DS.END .ED
*-------------------------------------- *--------------------------------------

View File

@ -497,11 +497,11 @@ BIN.Relocate.Start .BS 2
BIN.Relocate.End .BS 2 BIN.Relocate.End .BS 2
BIN.Relocate.Offset .BS 2 BIN.Relocate.Offset .BS 2
*-------------------------------------- *--------------------------------------
BIN.RelocateEXE ldy #H.BIN.HEADER+1 BIN.RelocateEXE ldy #H.BIN.T+1
lda (ZPPtr1),y lda (ZPPtr1),y
cmp /H.BIN.HEADER.BIN65 cmp /H.BIN.T.BIN65
beq .1 beq .1
cmp /H.BIN.HEADER.DRV65 cmp /H.BIN.T.DRV65
beq .1 beq .1
lda #SYSMGR.ERRIBIN lda #SYSMGR.ERRIBIN

View File

@ -116,7 +116,8 @@ A2osX.ROMCALL1 phx
rts rts
.1 jmp (.2,x) .1 jmp (.2,x)
.2 .DA $EC4A FIN .2 .DA $EB27 SETFOR
.DA $EC4A FIN
.DA $ED36 FOUT.1 .DA $ED36 FOUT.1
*-------------------------------------- *--------------------------------------
* A2osX.DIIDrv * A2osX.DIIDrv

View File

@ -126,17 +126,17 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.GetMemByID.A .DA K.GetMemByID.A
.DA K.GetMem.YA .DA K.GetMem.YA
.DA K.GetMem0.YA .DA K.GetMem0.YA
.DA 0 .DA K.SetLoMem
.DA K.NewStr.YA .DA K.NewStr.YA
*-------------------------------------- *--------------------------------------
.DA K.SetLoMem $D0 .DA 0 $D0
.DA K.GetMemStat.YA .DA 0
.DA 0 .DA 0
.DA 0 .DA 0
.DA K.LoadStkObj.YA .DA K.LoadStkObj.YA
.DA K.GetStkObj.A .DA K.GetStkObj.A
.DA K.FreeStkObj.A .DA K.FreeStkObj.A
.DA 0 .DA K.GetMemStat.YA
*-------------------------------------- *--------------------------------------
.DA K.Sleep $E0 .DA K.Sleep $E0
*-------------------------------------- *--------------------------------------

View File

@ -434,6 +434,10 @@ K.GetMemByID.A sta ZPMemMgrSPtr
* sty ZPMemMgrSPtr * sty ZPMemMgrSPtr
* sta ZPMemMgrSPtr+1 * sta ZPMemMgrSPtr+1
* rts * rts
*--------------------------------------
K.SetLoMem
clc
rts
*/-------------------------------------- */--------------------------------------
* # NewStr.YA * # NewStr.YA
* Create a new copy of this C-String * Create a new copy of this C-String
@ -490,15 +494,78 @@ K.NewStr.YA >STYA .1+1
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* SList :
* Block :
* 0 hMem of next Block (0=End)
* 1....255 data records
* Record :
* 0 Flags
* 1 KeyLen+Key
* n DataLen+Data
*/--------------------------------------
* # SListNew
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.SListNew
*/--------------------------------------
* # SListAdd
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.SListAdd
*/--------------------------------------
* # SListGet
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.SListGet
*/--------------------------------------
* # SListPut
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.SListPut
*/--------------------------------------
* # SListFree
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.SListFree
*--------------------------------------
MEM.SList.Next
*/--------------------------------------
* # LoadStkObj.YA
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.LoadStkObj.YA K.LoadStkObj.YA
*-------------------------------------- */--------------------------------------
* # GetStkObj.A
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.GetStkObj.A K.GetStkObj.A
*-------------------------------------- */--------------------------------------
* # FreeStkObj.A
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.FreeStkObj.A K.FreeStkObj.A
*--------------------------------------
K.SetLoMem
clc
rts
*/-------------------------------------- */--------------------------------------
* # GetMemStat.YA * # GetMemStat.YA
* ## In: * ## In:
@ -594,10 +661,6 @@ MEM.GetMemByNameYA
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
MEM.GarbageCollector
clc
rts
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -11,19 +11,17 @@ AUTO 6
* PUSHW Source String (C-Sring) * PUSHW Source String (C-Sring)
* PUSHW PTR to target buffer (5 bytes) * PUSHW PTR to target buffer (5 bytes)
* ## Out: * ## Out:
* Target buffer filled with a FLOAT (packed)
*\-------------------------------------- *\--------------------------------------
K.StrToF jsr PullPtr1Ptr2Ptr3 K.StrToF jsr K.AToF
* jsr K.AToF.I bcs .9
* bcc K.StrToUL.Exit
>LDYA ZPPtr2
>STYA TXTPTR
jsr CHARGOT
>ROMCALL FIN
>PULLW ZPPtr3
lda TXTPTR
sta (ZPPtr3)
ldy #1
lda TXTPTR
sta (ZPPtr3),y
.9 rts .9 rts
*/-------------------------------------- */--------------------------------------
@ -34,73 +32,14 @@ K.StrToF jsr PullPtr1Ptr2Ptr3
* PUSHW PTR to target buffer (5 Bytes) * PUSHW PTR to target buffer (5 Bytes)
* ## Out: * ## Out:
*\-------------------------------------- *\--------------------------------------
K.AToF jsr PullPtr1Ptr2 C-String in Ptr2, Dst buffer in Ptr1 K.AToF >PULLW FORPNT Ptr to dst buffer
>PULLW TXTPTR Ptr to source string
jsr CHARGOT
K.AToF.I jsr MANTISSA.Clear >ROMCALL FIN
>ROMCALL GETFAC
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 clc
rts rts
.9 sec
rts
*/-------------------------------------- */--------------------------------------
* # StrToL * # StrToL
* Convert String to 32 bits int * Convert String to 32 bits int
@ -156,7 +95,7 @@ K.AToL.I jsr STDLIB.Dec2Hex
phy Save Count processed phy Save Count processed
ldy #3 ldy #3
.3 lda MANTISSA,y .3 lda STDLIB.32,y
sta (ZPPtr1),y sta (ZPPtr1),y
dey dey
bpl .3 bpl .3
@ -180,12 +119,12 @@ K.AToI.YA >STYA ZPPtr2
jsr STDLIB.Dec2Hex jsr STDLIB.Dec2Hex
bcs .9 bcs .9
>LDYA MANTISSA >LDYA STDLIB.32
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* Convert ZPPtr1 to MANTISSA * Convert ZPPtr1 to STDLIB.32
*-------------------------------------- *--------------------------------------
STDLIB.Dec2Hex jsr MANTISSA.Clear STDLIB.Dec2Hex jsr STDLIB.32.Clear
ldy #$ff ldy #$ff
@ -196,20 +135,20 @@ STDLIB.Dec2Hex jsr MANTISSA.Clear
jsr STDIO.IsDigit jsr STDIO.IsDigit
bcs .8 bcs .8
jsr MANTISSA.T10 jsr STDLIB.32.T10
bcs .9 bcs .9
lda (ZPPtr2),y lda (ZPPtr2),y
and #$0F and #$0F
adc MANTISSA adc STDLIB.32
sta MANTISSA sta STDLIB.32
bcc .1 bcc .1
inc MANTISSA+1 inc STDLIB.32+1
bne .1 bne .1
inc MANTISSA+2 inc STDLIB.32+2
bne .1 bne .1
inc MANTISSA+3 inc STDLIB.32+3
bne .1 overflow!!! bne .1 overflow!!!
* sec * sec
rts rts
@ -217,17 +156,17 @@ STDLIB.Dec2Hex jsr MANTISSA.Clear
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
MANTISSA.T10 ldx #3 STDLIB.32.T10 ldx #3
.1 lda MANTISSA,x save MANTISSA for 4+1 .1 lda STDLIB.32,x save STDLIB.32 for 4+1
pha pha
dex dex
bpl .1 bpl .1
jsr MANTISSA.ROL MANTISSA * 2 -> MANTISSA jsr STDLIB.32.ROL STDLIB.32 * 2 -> STDLIB.32
bcs .9 overflow!!! bcs .9 overflow!!!
jsr MANTISSA.ROL MANTISSA * 4 -> MANTISSA jsr STDLIB.32.ROL STDLIB.32 * 4 -> STDLIB.32
bcs .9 overflow!!! bcs .9 overflow!!!
ldx #0 ldx #0
@ -235,42 +174,38 @@ MANTISSA.T10 ldx #3
* clc * clc
.2 pla MANTISSA * 4 + MANTISSA -> MANTISSA .2 pla STDLIB.32 * 4 + STDLIB.32 -> STDLIB.32
adc MANTISSA,x adc STDLIB.32,x
sta MANTISSA,x sta STDLIB.32,x
inx inx
dey dey
bne .2 bne .2
bcs .99 overflow!!! bcs .99 overflow!!!
jsr MANTISSA.ROL MANTISSA * 10 -> MANTISSA jsr STDLIB.32.ROL STDLIB.32 * 10 -> STDLIB.32
bcs .99 overflow!!! bcs .99 overflow!!!
.9 pla discard saved MANTISSA .9 pla discard saved STDLIB.32
pla pla
pla pla
pla pla
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
MANTISSA.ROL asl MANTISSA STDLIB.32.ROL asl STDLIB.32
rol MANTISSA+1 rol STDLIB.32+1
rol MANTISSA+2 rol STDLIB.32+2
rol MANTISSA+3 rol STDLIB.32+3
rts rts
*-------------------------------------- *--------------------------------------
MANTISSA.Clear ldx #8 STDLIB.32.Clear ldx #3
.1 stz EXPSIGN,x
.1 stz STDLIB.32,x
dex dex
bpl .1 bpl .1
rts rts
*-------------------------------------- *--------------------------------------
bDECPOINT .BS 1 STDLIB.32 .BS 4 32 bits max
INEXP .BS 1
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

View File

@ -36,18 +36,29 @@ L.FLOAT3 .DA FLOAT3
L.FLOAT4 .DA FLOAT4 L.FLOAT4 .DA FLOAT4
L.FLOAT5 .DA FLOAT5 L.FLOAT5 .DA FLOAT5
L.MSG .DA MSG L.MSG .DA MSG
L.CONST .DA CONST L.CONST1 .DA CONST1
L.CONST2 .DA CONST2
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT clc CS.INIT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN >PUSHEA.G ENDPTR CS.RUN >PUSHEA.G ENDPTR
>LDYA L.CONST >PUSHW L.CONST2
>PUSHEA.G MYFLOAT >PUSHEA.G MYFLOAT2
>SYSCALL StrToF >SYSCALL StrToF
>PUSHEA.G MYFLOAT >PUSHEA.G MYFLOAT2
>PUSHEA.G ENDPTR
>PUSHW L.CONST1
>PUSHEA.G MYFLOAT1
>SYSCALL StrToF
>PUSHEA.G MYFLOAT1
>PUSHW L.FLOAT5 >PUSHW L.FLOAT5
>PUSHW L.FLOAT4 >PUSHW L.FLOAT4
>PUSHW L.FLOAT3 >PUSHW L.FLOAT3
@ -69,18 +80,20 @@ CS.QUIT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
MSG >CSTR "TEST: %e, %e, %e\r\n %e, %e, %e\r\n" MSG >CSTR "TEST: %e, %e, %e, %e, %e\r\n%e, %e\r\n"
FLOAT1 .HS 9B3EBC1FFD 99,999,999.9 FLOAT1 .HS 9B3EBC1FFD 99,999,999.9
FLOAT2 .HS 9E6E6B27FD 999,999,999 FLOAT2 .HS 9E6E6B27FD 999,999,999
FLOAT3 .HS 9E6E6B2800 1,000,000,000 FLOAT3 .HS 9E6E6B2800 1,000,000,000
FLOAT4 .HS 8100000000 1 FLOAT4 .HS 8100000000 1
FLOAT5 .HS 9080000000 -32768 FLOAT5 .HS 9080000000 -32768
CONST >CSTR "3.141592653" CONST1 >CSTR "3.141592653"
CONST2 >CSTR "-45.567E-17"
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
MYFLOAT .BS 5 MYFLOAT1 .BS 5
MYFLOAT2 .BS 5
ENDPTR .BS 2 ENDPTR .BS 2
DS.END DS.END
.ED .ED