From f3d06059aeb2fbddc347b5611b24927b321cec67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 17 Oct 2017 17:40:21 +0200 Subject: [PATCH] Kernel 0.9.1 : STDLIB : AToF, StrToF OK --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/A2osX.I.txt | 8 +-- INC/KERNEL.I.txt | 29 ++++---- SBIN/SHELL.S.CSH.txt | 44 +++++------- SBIN/SHELL.S.txt | 7 +- SYS/KERNEL.S.BIN.txt | 6 +- SYS/KERNEL.S.GP.txt | 3 +- SYS/KERNEL.S.JMP.txt | 8 +-- SYS/KERNEL.S.MEM.txt | 83 +++++++++++++++++++--- SYS/KERNEL.S.STDLIB.txt | 147 +++++++++++---------------------------- TEST.S.txt | 27 +++++-- 12 files changed, 183 insertions(+), 179 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d730fa9f57208d362759275fa87c26f8dba1a252..727664f86651ba4df49b1deba949659774feb641 100644 GIT binary patch delta 5905 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 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index ce78954d98fb4a0fdf7e5ecaea9535048c806152..2a1463e5355f079b105648e066c4032933591b0e 100644 GIT binary patch delta 15188 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 delta 15154 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 +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 *-------------------------------------- diff --git a/SBIN/SHELL.S.CSH.txt b/SBIN/SHELL.S.CSH.txt index 9923e18a..8915f86d 100644 --- a/SBIN/SHELL.S.CSH.txt +++ b/SBIN/SHELL.S.CSH.txt @@ -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... diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 29689102..abf4ed86 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -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 *-------------------------------------- diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index cb43526e..0731f20e 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -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 diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 9887ceef..a622204f 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -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 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 7dd5bbfa..d8d53303 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -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 *-------------------------------------- diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 896493f9..c550ff0b 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -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 diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 2ca45880..0bd1865a 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -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 diff --git a/TEST.S.txt b/TEST.S.txt index c56a45ca..526d3a08 100644 --- a/TEST.S.txt +++ b/TEST.S.txt @@ -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