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.GetMem0.YA .EQ $CA
* .EQ $CC
SYS.SetLoMem .EQ $CC
SYS.NewStr.YA .EQ $CE
SYS.SetLoMem .EQ $D0
SYS.GetMemStat.YA .EQ $D2
* .EQ $D0
* .EQ $D2
* .EQ $D4
* .EQ $D6
SYS.LoadStkObj.YA .EQ $D8
SYS.GetStkObj.A .EQ $DA
SYS.FreeStkObj.A .EQ $DC
* .EQ $DE
SYS.GetMemStat.YA .EQ $DE
SYS.Sleep .EQ $E0
*--------------------------------------

View File

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

View File

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

View File

@ -94,7 +94,6 @@ J.CSHCMDS .DA CSH.IF
.DA CSH.FLOAT
J.CSHCMDS.END .DA CSH.IF.END
.DA CSH.WHILE.END
L.CSH.ACC .DA CSH.ACC
L.ERR.Codes .DA ERR.Codes
L.ERR.Messages .DA ERR.Messages
.DA 0
@ -515,10 +514,6 @@ EscChars.Count .EQ 4
EscChars .AS 'DBAC'
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
.OR 0
@ -565,6 +560,8 @@ CSH.DataPtr .BS 1
CSH.hStack .BS 1
CSH.StackPtr .BS 1
CSH.CmdSave .BS 1
CSH.ACCT .BS 1
CSH.ACC .BS 5
CSH.Name .BS CSH.Name.MAX+1
DS.END .ED
*--------------------------------------

View File

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

View File

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

View File

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

View File

@ -434,6 +434,10 @@ K.GetMemByID.A sta ZPMemMgrSPtr
* sty ZPMemMgrSPtr
* sta ZPMemMgrSPtr+1
* rts
*--------------------------------------
K.SetLoMem
clc
rts
*/--------------------------------------
* # NewStr.YA
* Create a new copy of this C-String
@ -490,15 +494,78 @@ K.NewStr.YA >STYA .1+1
clc
.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
*--------------------------------------
*/--------------------------------------
* # GetStkObj.A
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.GetStkObj.A
*--------------------------------------
*/--------------------------------------
* # FreeStkObj.A
* ## In:
* ## Out:
* A=hMem
*\--------------------------------------
K.FreeStkObj.A
*--------------------------------------
K.SetLoMem
clc
rts
*/--------------------------------------
* # GetMemStat.YA
* ## In:
@ -594,10 +661,6 @@ MEM.GetMemByNameYA
.9 sec
rts
*--------------------------------------
MEM.GarbageCollector
clc
rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM
LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

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

View File

@ -36,18 +36,29 @@ L.FLOAT3 .DA FLOAT3
L.FLOAT4 .DA FLOAT4
L.FLOAT5 .DA FLOAT5
L.MSG .DA MSG
L.CONST .DA CONST
L.CONST1 .DA CONST1
L.CONST2 .DA CONST2
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN >PUSHEA.G ENDPTR
>LDYA L.CONST
>PUSHEA.G MYFLOAT
>PUSHW L.CONST2
>PUSHEA.G MYFLOAT2
>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.FLOAT4
>PUSHW L.FLOAT3
@ -69,18 +80,20 @@ CS.QUIT clc
rts
*--------------------------------------
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
FLOAT2 .HS 9E6E6B27FD 999,999,999
FLOAT3 .HS 9E6E6B2800 1,000,000,000
FLOAT4 .HS 8100000000 1
FLOAT5 .HS 9080000000 -32768
CONST >CSTR "3.141592653"
CONST1 >CSTR "3.141592653"
CONST2 >CSTR "-45.567E-17"
*--------------------------------------
.DUMMY
.OR 0
DS.START
MYFLOAT .BS 5
MYFLOAT1 .BS 5
MYFLOAT2 .BS 5
ENDPTR .BS 2
DS.END
.ED