From fac33c60ce9bba651ee9354da556e901fb04bf84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 14 Mar 2019 16:51:02 +0000 Subject: [PATCH] Kernel 0.92+ --- .Docs/KERNEL.md | 26 ++++---- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/SH.S.CMD.txt | 12 +++- BIN/SH.S.CORE.txt | 115 +++++++++++++++++++++++++++------- BIN/SH.S.txt | 1 + INC/A2osX.I.txt | 3 + SYS/KERNEL.S.MEM.txt | 31 ++++----- SYS/KERNEL.S.SLIST.txt | 131 +++++++++++++++++++++------------------ 8 files changed, 207 insertions(+), 112 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 5f8614a8..6213f3da 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -449,8 +449,9 @@ Y,A = PTR to MemBlock # SListAddData ## ASM -`PUSHB Data` -`PUSHW DataID` +`PUSHB DataLen` +`PUSHB DataPtr` +`PUSHW KeyID` `lda hSList` `>SYSCALL SListAddData` @@ -460,24 +461,24 @@ Y,A = PTR to MemBlock # SListGetData ## ASM -`PUSHB Data` -`PUSHW DataID` +`PUSHB DataLen` +`PUSHB DataPtr` +`PUSHW KeyID` `lda hSList` `>SYSCALL SListGetData` ## RETURN VALUE - Y,A = Next DataID # SListSetData ## ASM -`PUSHB Data` -`PUSHW DataID` +`PUSHB DataLen` +`PUSHB DataPtr` +`PUSHW KeyID` `lda hSList` `>SYSCALL SListSetData` ## RETURN VALUE - Y,A = Next DataID # SListGetByID @@ -490,16 +491,16 @@ Y,A = PTR to MemBlock ## RETURN VALUE Y,A = Next KeyID -# SListAddKey +# SListNewKey ## ASM `PUSHW KeyPtr` `lda hSList` -`>SYSCALL SListAddKey` +`>SYSCALL SListNewKey` ## RETURN VALUE - A = Key Length - X,Y = KeyID + Y,A = KeyID + X = KeyLen # SListLookup @@ -536,7 +537,6 @@ A=hSList `>SYSCALL GetStkObjData` ## RETURN VALUE - Y,A = Property Value # NewStkObj Y,A = Size Requested diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index f644ed2853fcc66942bc877da5b82021171629c7..73fdee6d3520bf6340a3ab8344a133b2f1085525 100644 GIT binary patch delta 44243 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 P_!IamVHf|M(ChyJO_Zu6 delta 44428 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 diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 996f5321..38cf6cbf 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -559,7 +559,13 @@ CMD.FUNC lda (ZPArgVBufPtr) bcs .99 lda #$C0+C.FUNC - jmp CORE.StkPush + jsr CORE.StkPush + bcs .99 + + lda #$ff + >STA.G bFuncMode + clc + rts .9 jmp CMD.Exec.CSYN .99 rts @@ -678,7 +684,7 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.Test and #$3F cmp #C.FUNC - beq .3 + beq CMD.END.FUNC cmp #C.SWITCH beq .2 @@ -696,7 +702,7 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.Test >SYSCALL freemem rts -.3 jsr CORE.StkPull remove C.FUNC +CMD.END.FUNC jsr CORE.StkPull remove C.FUNC jsr CORE.StkPull remove KeyID jmp CORE.StkPull remove KeyID diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index b7282225..3b86c6d9 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -47,7 +47,7 @@ CORE.Quit >LDA.G hFuncList * set hStdIn = hStdOut * set hStdOut = Std *-------------------------------------- -CORE.Run.CSYN lda #E.SYN +CORE.Run.SYN lda #E.SYN sec rts @@ -81,7 +81,7 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping bcs .9 jsr CORE.GetNextCharNB Skip | - bcs CORE.Run.CSYN + bcs CORE.Run.SYN bra .3 @@ -89,19 +89,16 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping jsr IO.Reset pla -.3 cmp #C.CR - beq .80 empty line ? +.3 cmp #C.CR empty line ? + bne .33 - cmp #'#' commented line? + jsr CORE.GetNextChar skip CR... + bra .8 + +.33 cmp #'#' commented line? bne .2 -.12 jsr CORE.GetNextCharNB - bcs .8 EOF - - cmp #C.CR - bne .12 EOL - -.80 jsr CORE.GetNextChar skip CR... +.12 jsr CORE.SkipLine .8 jsr IO.Reset @@ -109,15 +106,10 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping clc .9 rts EOL, CS,A=0 -.2 jsr CORE.StkGet - bcs .13 - cmp #$C0+C.FUNC - beq .12 - - - - +.2 >LDA.G bFuncMode + bpl .13 + jmp CORE.Run.Func skip line .13 jsr CORE.GetCharNB cmp #'.' @@ -180,7 +172,7 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping .44 jsr CORE.GetNextCharNB Skip EoL char clc .99 rts - +*-------------------------------------- .5 >LDYA L.CORE.IO jsr CORE.LookupInputBuf bcs .6 @@ -258,6 +250,87 @@ CORE.ExecExtCmd.Exit .8 clc .9 rts *-------------------------------------- +CORE.Run.Func ldy #$ff + +.1 iny + lda (ZPInputBufPtr),y + beq .9 + + cmp #C.SPACE + beq .1 + + jsr ToUpperCase + cmp #'E' + bne .8 + + iny + lda (ZPInputBufPtr),y + beq .9 + + jsr ToUpperCase + cmp #'N' + bne .8 + + iny + lda (ZPInputBufPtr),y + beq .9 + + jsr ToUpperCase + cmp #'D' + bne .8 + + iny + lda (ZPInputBufPtr),y + beq .9 + + cmp #C.SPACE + beq .7 + cmp #C.CR + bne .9 + +.7 jsr CORE.SkipLine + + lda #0 + >STA.G bFuncMode + + jmp CMD.END.FUNC Cleanup Stk +.9 jmp CORE.Run.SYN + +.8 ldy #0 + +.80 lda (ZPInputBufPtr),y + iny + beq .82 + cmp #C.CR + bne .80 + +.82 lda #0 + >PUSHYA DataLen + >PUSHW ZPInputBufPtr DataPtr + + lda (pData) + tay + + dey skip C.FUNC + lda (pData),y KeyID + >PUSHA + dey + lda (pData),y KeyID + >PUSHA + >LDA.G hFuncList + >SYSCALL SListAddData + bcs .9 +*-------------------------------------- +CORE.SkipLine jsr CORE.GetNextCharNB + bcs .8 EOF + + cmp #C.CR EOL + bne CORE.SkipLine + + jsr CORE.GetNextChar skip CR... + +.8 rts +*-------------------------------------- * search ZPInputBufPtr/ZPArgVBufPtr in Y,A table *-------------------------------------- CORE.LookupInputBuf diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 2b05dccd..11a55c8b 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -690,6 +690,7 @@ hInputBuf .BS 1 bReadMode .BS 1 bBatchMode .BS 1 +bFuncMode .BS 1 bEscMode .BS 1 bPause .BS 1 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index e6f6a75c..08446376 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -106,6 +106,9 @@ E.FTB .EQ $F5 File Too Big Error E.OOB .EQ $F4 Out Of Bound E.INUM .EQ $F3 Invalid Numerical E.IUSR .EQ $F2 Invalid User + +E.NOKEY .EQ $EF Undefined Key +E.DUPKEY .EQ $EE Duplicate Key *-------------------------------------- * A2osX.SYSCALL Constants *-------------------------------------- diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index a230b7b9..c1f7ee9b 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -6,10 +6,11 @@ ZPMemMgrSPtr .EQ ZPMEMMGR Pointer To Slot selected ZPMemMgrTmp1 .EQ ZPMEMMGR+2 ZPMemMgrSize .EQ ZPMEMMGR+4 ZPSListID .EQ ZPMEMMGR+6 -ZPSListIBlkPtr .EQ ZPMEMMGR+8 -ZPSListDBlkPtr .EQ ZPMEMMGR+10 -ZPSListKeyPtr .EQ ZPMEMMGR+12 -ZPSListDataPtr .EQ ZPMEMMGR+14 +ZPSListKeyPtr .EQ ZPMEMMGR+8 +ZPSListDataPtr .EQ ZPMEMMGR+8 +ZPSListDataLen .EQ ZPMEMMGR+10 +ZPSListIBlkPtr .EQ ZPMEMMGR+12 +ZPSListDBlkPtr .EQ ZPMEMMGR+14 */-------------------------------------- * # GetMem0 * Y,A = Size Requested @@ -353,7 +354,7 @@ K.FreeMem tay * (X unmodified) *\-------------------------------------- * Optimized for : -* Mem.Table is page aligned at $1800 +* Mem.Table is page aligned at $800 * S.MEM is 8 bytes *-------------------------------------- .DO Mem.Table=$800 @@ -387,8 +388,9 @@ MEM.GetMemByID sta ZPMemMgrSPtr */-------------------------------------- * # SListAddData * ## ASM -* `PUSHB Data` -* `PUSHW DataID` +* `PUSHB DataLen` +* `PUSHB DataPtr` +* `PUSHW KeyID` * `lda hSList` * `>SYSCALL SListAddData` * ## RETURN VALUE @@ -398,23 +400,23 @@ K.SListAddData */-------------------------------------- * # SListGetData * ## ASM -* `PUSHB Data` -* `PUSHW DataID` +* `PUSHB DataLen` +* `PUSHB DataPtr` +* `PUSHW KeyID` * `lda hSList` * `>SYSCALL SListGetData` * ## RETURN VALUE -* Y,A = Next DataID *\-------------------------------------- K.SListGetData */-------------------------------------- * # SListSetData * ## ASM -* `PUSHB Data` -* `PUSHW DataID` +* `PUSHB DataLen` +* `PUSHB DataPtr` +* `PUSHW KeyID` * `lda hSList` * `>SYSCALL SListSetData` * ## RETURN VALUE -* Y,A = Next DataID *\-------------------------------------- K.SListSetData pha >PULLW ZPSListID @@ -441,6 +443,7 @@ K.SListGetByID pha * `>SYSCALL SListNewKey` * ## RETURN VALUE * Y,A = KeyID +* X = KeyLen *\-------------------------------------- K.SListNewKey */-------------------------------------- @@ -487,12 +490,12 @@ K.SListFree * `lda hStkObj` * `>SYSCALL GetStkObjData` * ## RETURN VALUE -* Y,A = Property Value *\-------------------------------------- K.GetStkObjData sta SETREADAUX jsr K.GetMemPtr >STYA ZPMemMgrTmp1 + >PULLW ZPSListDataLen >PULLW ZPSListDataPtr lda (ZPMemMgrTmp1),y diff --git a/SYS/KERNEL.S.SLIST.txt b/SYS/KERNEL.S.SLIST.txt index 0202e05b..fd8f5347 100644 --- a/SYS/KERNEL.S.SLIST.txt +++ b/SYS/KERNEL.S.SLIST.txt @@ -12,8 +12,10 @@ X.SLIST jmp (.1-SYS.SListAddData,x) .DA SLIST.New .DA SLIST.Free *-------------------------------------- -SLIST.AddData jsr SLIST.Search - bcc .99 Lookup succeeded...DUP +SLIST.AddData jsr SLIST.Select + + + bcs .99 Lookup succeeded...DUP ldy #$ff @@ -55,14 +57,11 @@ SLIST.AddData jsr SLIST.Search .8 lda #$ff SELF MODIFIED clc - .HS B0 BCS + rts -.99 sec - ldx ZPSListID - ldy ZPSListID+1 - +.99 lda #E.NOPKEY + sec .9 rts - *-------------------------------------- SLIST.GetData *-------------------------------------- @@ -107,9 +106,40 @@ SLIST.GetByID jsr SLIST.Select ldy SLIST.IndexOfs rts *-------------------------------------- -SLIST.NewKey +SLIST.NewKey jsr SLIST.Search + bcc .99 + + >LDYA SLIST.IndexOfs + >STYA ZPSListID + + lda SLIST.KeyLen + jsr SLIST.AddBlockByte + bcs .9 + + ldy #0 + +.1 lda (ZPSListKeyPtr),y + jsr SLIST.AddBlockByte + bcs .9 + iny + cpy SLIST.KeyLen + bne .1 + + lda #0 + jsr SLIST.AddBlockByte + bcs .9 + + lda #0 + jsr SLIST.AddBlockByte + bcs .9 + + >LDYA ZPSListID clc rts + +.99 lda #E.DUPKEY + sec +.9 rts *-------------------------------------- SLIST.UpdateByID jsr SLIST.Select @@ -137,25 +167,11 @@ SLIST.UpdateByID rts *-------------------------------------- SLIST.Lookup jsr SLIST.Search - bcs .9 - sty .8+1 Save Key Length + >LDYA ZPSListID + ldx SLIST.KeyLen - jsr SLIST.GetBlockByte - tax - jsr MEM.SetDataByte - -.1 jsr SLIST.GetNextBlockByte - jsr MEM.SetDataByte - dex - bne .1 - -.8 lda #$ff SELF MODIFIED - ldx ZPSListID - ldy ZPSListID+1 - - clc .9 rts *-------------------------------------- SLIST.New >LDYAI 160 40k Max before out of memory!!! @@ -190,6 +206,8 @@ SLIST.Free sta .8+1 .8 lda #$ff SELF MODIFIED jmp K.FreeMem *-------------------------------------- +* PRIVATE +*-------------------------------------- SLIST.Select jsr K.GetMemPtr >STYA ZPSListIBlkPtr @@ -217,47 +235,34 @@ SLIST.Search jsr K.GetMemPtr stz SLIST.BlockOfs stz ZPSListID - jsr SLIST.GetBlockByte - tax - beq .9 + ldy #$ff -.1 ldy #0 +.1 iny + jsr MEM.GetKeyCharY + bcc .1 -.2 jsr MEM.GetKeyCharY - bcs .40 - iny - sta .3+1 + sty SLIST.KeyLen - jsr SLIST.GetNextBlockByte -.3 cmp #$ff SELF MODIFIED + jsr SLIST.GetBlockByte + beq .9 + +.2 cmp SLIST.KeyLen bne .4 - dex - bne .2 + ldy #0 - jsr MEM.GetKeyCharY - bcs .8 End of Key....match!!!! - - jsr SLIST.GetNextBlockByte - bra .41 - -.8 jsr SLIST.GetNextBlockByte Advance to DATA LEN - - clc Y = Key Length +.3 jsr SLIST.GetNextBlockByte + cmp (ZPSListKeyPtr),y + bne .4 + + iny + cpy SLIST.KeyLen + bne .3 + + clc rts -.40 inx - -.4 jsr SLIST.GetNextBlockByte skip remaining key chars - dex - bne .4 - -.41 tax A=get Data Len - -.5 jsr SLIST.GetNextBlockByte skip data bytes - dex - bne .5 - +.4 jsr SLIST.GetNextBlockByte ldx SLIST.IndexOfs @@ -265,12 +270,15 @@ SLIST.Search jsr K.GetMemPtr ldx SLIST.BlockOfs stx ZPSListID - tax - bne .1 + jsr SLIST.GetBlockByte + bne .2 -.9 sec +.9 lda #E.NOKEY + sec rts *-------------------------------------- +SLIST.Skip +*-------------------------------------- SLIST.GetNextBlockByte phy ldy SLIST.BlockOfs @@ -354,6 +362,7 @@ SLIST.SetBlockByte .8 ply rts *-------------------------------------- +SLIST.KeyLen .BS 1 SLIST.IndexOfs .BS 1 SLIST.BlockOfs .BS 1 *--------------------------------------