From d380289666a75c51f8e1a005cb38f73a1eace407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 12 Aug 2019 09:40:16 +0200 Subject: [PATCH] Kernel 0.93+ --- .Docs/Shell Developers Guide.md | 2 +- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/SH.S.CMD.txt | 191 ++++++++++++++++++++------------ BIN/SH.S.CORE.txt | 106 ++++++------------ BIN/SH.S.txt | 27 +++-- SHARED/X.ERRORS.S.txt | 2 + SYS/KERNEL.S.SLISTX.txt | 40 ++++--- 7 files changed, 188 insertions(+), 180 deletions(-) diff --git a/.Docs/Shell Developers Guide.md b/.Docs/Shell Developers Guide.md index 5d71b692..99351e3d 100644 --- a/.Docs/Shell Developers Guide.md +++ b/.Docs/Shell Developers Guide.md @@ -124,7 +124,7 @@ Notice that the DO X and DO Y logic is swapped between the two cases. | END | Working | End of SWITCH Statement | | EXIT | Working | exit function, script or shell | | FI | Working | Terminator for IF block | -| FUNC | In Progress | FUNC fonction_name
\
END | +| FUNCTION | Working | FUNCTION fonction_name {
\
} | | IF | Working | [ \ ]
![ \ ]| | LOOP | Working | Terminator for WHILE block | | MD | Working | MD path or relative path
Create a directory | diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 2f8ef37bd2f32651df221872b4538cf1ff73bccb..2fd5e3a40ec877c2e5c2bd9348ca239b6c5f9475 100644 GIT binary patch delta 227571 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 F{{fT$f_MM` delta 227000 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 z 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�30p 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.G CORE.PSFlags - ora #S.PS.F.NOHUP - sta (pData),y +CMD.. lda (ZPArgVBufPtr) + beq .9 + + >LDYA ZPArgVBufPtr + jsr IO.Load + bcs .99 + >LDYA ZPArgVBufPtr + jmp CORE.Load.YAX exec cmd file and continue + +.9 jmp CMD.Exec.CSYN +.99 rts +*-------------------------------------- +CMD.NOHUP lda #S.PS.F.NOHUP + tsb CORE.PSFlags >LDYA ZPArgVBuf jmp CORE.ExecExtCmd @@ -51,7 +62,7 @@ CMD.POPD >LDA.G PUSHD.STACK tay lda (pData),y - jsr CMD.SetPrefixA + jsr CMD.SetCWDA >DEC.G PUSHD.STACK clc @@ -91,7 +102,7 @@ CMD.CD.YA >SYSCALL realpath bne .12 txa - jmp CMD.SetPrefixA we have '/' + jmp CMD.SetCWDA we have '/' .12 >PUSHEA.G StatBuf >LDYA ZPPtr1 @@ -119,7 +130,7 @@ CMD.CD.YA >SYSCALL realpath bne .14 lda ZPTmpW - jmp CMD.SetPrefixA already ends with a / + jmp CMD.SetCWDA already ends with a / .14 iny iny @@ -142,7 +153,7 @@ CMD.CD.YA >SYSCALL realpath >SYSCALL freemem pla *-------------------------------------- -CMD.SetPrefixA pha +CMD.SetCWDA pha ldy #S.PS.hCWD lda (pPs),y >SYSCALL FreeMem @@ -538,16 +549,12 @@ CMD.RD lda (ZPArgVBufPtr) .9 jmp CMD.Exec.CSYN *-------------------------------------- -CMD.FUNC lda (ZPArgVBufPtr) +CMD.FUNCTION lda (ZPArgVBufPtr) beq .9 jsr CORE.StkGetCtx - bcc .9 NO context allowed + bcc .9 No context allowed - lda #3 Check stack for 3 bytes - jsr CORE.StkCheck - bcs .99 - >LDA.G hFuncList bne .1 @@ -557,32 +564,77 @@ CMD.FUNC lda (ZPArgVBufPtr) .1 >PUSHW ZPArgVBufPtr >LDA.G hFuncList + >SYSCALL SListNewKey bcs .99 - jsr CORE.StkPushYA + >STYA ZPTmpW Save KeyID - lda #$C0+C.FUNC - jsr CORE.StkPush + jsr CORE.ArgV.Next nothing after function name + beq .10 - lda #$ff - >STA.G bFuncMode + cmp #'{' + bne .9 -* clc -.99 rts + ldy #1 + lda (ZPArgVBufPtr),y + beq .11 .9 jmp CMD.Exec.CSYN -*-------------------------------------- -CMD.. lda (ZPArgVBufPtr) - beq .9 - - >LDYA ZPArgVBufPtr - jsr IO.Load - bcs CMD.CALL.RTS - >LDYA ZPArgVBufPtr - jmp CORE.Load.YAX exec cmd file and continue -.9 jmp CMD.Exec.CSYN +.99 rts +*-------------------------------------- +.10 jsr CORE.GetCharNB + bcs .9 + cmp #'{' + bne .9 + + jsr CORE.GetNextCharNB + bcs .9 + +.11 stz M32.ACC '{' counter + + >LDYA ZPInputBufPtr + >STYA ZPPtr1 + + ldy #0 + ldx #0 + + lda (ZPInputBufPtr) + beq .6 + +.12 cmp #'{' + bne .13 + + inc M32.ACC + bra .14 + +.13 cmp #'}' + bne .14 + + dec M32.ACC + bmi .7 + +.14 iny + bne .15 + inx + +.15 jsr CORE.GetNextChar + bne .12 + +.6 lda M32.ACC + bpl .9 + +.7 jsr CORE.GetNextChar skip ending '}' + + txa + + >PUSHYA DataLen + >PUSHW ZPPtr1 DataPtr + >PUSHW ZPTmpW KeyID + >LDA.G hFuncList + >SYSCALL SListAddData + rts *-------------------------------------- CMD.CALL.UNDEF lda #E.FUNDEF sec @@ -615,40 +667,34 @@ CMD.EXIT lda (ZPArgVBufPtr) >LDYA ZPArgVBufPtr jsr EXP.GET bcs .9 + >SYSCALL AToL - bcs .9 + bcs .99 >PULLA + inc pStack inc pStack inc pStack -.1 jsr CMD.EXIT.A +.1 sta M32.ACC + +.2 jsr CORE.StkPull bcs .9 - lda (pData) - bne .8 - - lda #$ff - >STA.G bExitOnEOF - -.8 lda M32.ACC - clc -.9 rts - -CMD.EXIT.A sta M32.ACC - -.1 jsr CORE.StkPull - bcs CMD.EXIT.RTS - cmp #$C0 in CALL / . context ? - beq .8 + beq CMD.EXIT.CALL jsr CMD.EXIT.POP - bcc .1 + bcc .2 + +.9 rts + +.99 lda #E.ESYN +* sec rts - -.8 jsr CORE.StkPull +*-------------------------------------- +CMD.EXIT.CALL jsr CORE.StkPull >SYSCALL freemem Code buffer ldy #S.PS.hARGV @@ -672,31 +718,39 @@ CMD.EXIT.A sta M32.ACC sta ZPInputBuf lda M32.ACC - clc + +CMD.EXIT.CLCRTS clc CMD.EXIT.RTS rts *-------------------------------------- CMD.EXIT.POP and #$3F cmp #C.IF - beq CMD.EXIT.POP0 - - cmp #C.CASE CASE : nothing - beq CMD.EXIT.POP0 - + beq CMD.EXIT.CLCRTS IF : Nothing + ldx #2 - cmp #C.WHILE WHILE : one Ptr + cmp #C.WHILE WHILE : One Ptr = 2 bytes beq CMD.EXIT.POPX - + cmp #C.SWITCH SWITCH : hValue - bne .9 + beq .2 - jsr CORE.StkPull + ldx #1 + + cmp #C.CASE CASE : C.CASE + hValue + beq .1 + + cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue + bne .9 + +.1 jsr CMD.EXIT.POPX + +.2 jsr CORE.StkPull >SYSCALL freemem rts .9 lda #E.STACKERROR sec rts - +*-------------------------------------- CMD.EXIT.POPX lda (pData) .1 dec @@ -705,7 +759,7 @@ CMD.EXIT.POPX lda (pData) sta (pData) -CMD.EXIT.POP0 clc + clc rts *-------------------------------------- CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult @@ -819,11 +873,8 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult *-------------------------------------- CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult bcs CMD.END.CSYN - - and #$3F - cmp #C.FUNC - beq CMD.END.FUNC + and #$3F cmp #C.SWITCH beq .3 @@ -833,17 +884,13 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult cmp #C.DEFAULT bne CMD.END.CSYN -.2 jsr CORE.StkPull remove C.CASE,C.DEFAULT +.2 jsr CORE.StkPull remove C.CASE or C.DEFAULT .3 jsr CORE.StkPull remove C.SWITCH jsr CORE.StkPull get hVALUE >SYSCALL freemem rts -CMD.END.FUNC jsr CORE.StkPull remove C.FUNC - jsr CORE.StkPull remove KeyID - jmp CORE.StkPull remove KeyID - CMD.END.CSYN jmp CMD.Exec.CSYN *-------------------------------------- CMD.FOR jsr CORE.StkGetCtx diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 5e5d915f..146e537e 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -38,11 +38,9 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute >LDYA ZPInputBuf jsr CORE.StkPushYA - bcs CORE.FUNCRESET.RTS >LDYA ZPInputBufPtr jsr CORE.StkPushYA - bcs CORE.FUNCRESET.RTS ldy #S.PS.ARGC lda (pPS),y @@ -95,6 +93,25 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute * set hStdIn = hStdOut * set hStdOut = Std *-------------------------------------- +CORE.Run.EOF jsr CORE.StkPull + bcs .9 + + cmp #$C0 in CALL / . context ? + bne .9 + + jsr CMD.EXIT.CALL + bcs .9 + + jsr IO.Reset + + lda #0 + sec + rts Ending 0, CS,A=0 + +.9 lda #E.UNEXP + sec + rts +*-------------------------------------- CORE.Run.SYN lda #E.SYN sec rts @@ -109,25 +126,16 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping sta (ZPArgVBuf) lda #S.PS.F.HOLD - >STA.G CORE.PSFlags + sta CORE.PSFlags lda #$ff - sta CORE.IntCmd assume external + sta CORE.IntCmd assume external jsr CORE.GetCharNB - bcc .11 + bcs CORE.Run.EOF - lda #0 EOF - jsr CMD.EXIT.A - bcs .9 - - jsr IO.Reset - lda #0 - sec - rts Ending 0, CS,A=0 - -.11 cmp #'|' + cmp #'|' bne .21 jsr IO.Pipe.In @@ -149,7 +157,7 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping bra .8 .33 cmp #'#' commented line? - bne .2 + bne .4 .12 jsr CORE.SkipLine @@ -159,11 +167,6 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping clc .9 rts EOL, CS,A=0 -.2 >LDA.G bFuncMode - bpl .4 - - jmp CORE.AddFunc - .4 >LDYA L.CMD internal command ? jsr CORE.LookupInputBuf bcc .41 @@ -233,10 +236,10 @@ CORE.Run.7 jsr CORE.GetCharNB jsr IO.Pipe.Out bcs CORE.Run.RTS - >LDA.G CORE.PSFlags + lda CORE.PSFlags and #$ff^S.PS.F.HOLD Run in the background... ora #S.PS.F.CLOSEONX ...and close PIPE on exit - sta (pData),y + sta CORE.PSFlags bra CORE.ExecCmd.1 Do not skip | @@ -259,16 +262,14 @@ CORE.ExecCmd.1 lda #0 tax jmp (J.CMD,x) -CORE.ExecExtCmd >PUSHB.G CORE.PSFlags +CORE.ExecExtCmd >PUSHB CORE.PSFlags >LDYA ZPArgVBuf >SYSCALL execv - -CORE.ExecExtCmd.Exit bcs .9 tax CPID - >LDA.G CORE.PSFlags + lda CORE.PSFlags and #S.PS.F.HOLD bne .4 @@ -291,45 +292,6 @@ CORE.ExecExtCmd.Exit .8 clc .9 rts *-------------------------------------- -CORE.AddFunc >LDYA L.ENDCMD - jsr CORE.LookupInputBuf - bcs .1 - - >STZ.G bFuncMode - - jsr .1 add "END" - bcs .9 - - jmp CMD.END.FUNC Cleanup Stk - -.9 jmp CORE.Run.SYN - -.1 ldy #$ff - -.2 iny - lda (ZPInputBufPtr),y - beq .3 - - eor #C.CR - bne .2 - -.3 - >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 @@ -551,9 +513,8 @@ CORE.IO.JMP txa tax jmp (J.CORE.IO,x) -CORE.IO.AMP >LDA.G CORE.PSFlags - and #$ff^S.PS.F.HOLD - sta (pData),y +CORE.IO.AMP lda #S.PS.F.HOLD + trb CORE.PSFlags clc CORE.IO.RTS rts @@ -742,13 +703,14 @@ CORE.StkPull jsr CORE.StkGet .9 rts *-------------------------------------- CORE.StkGet lda (pData) StackPtr - beq CORE.StkErr + beq .9 + tay lda (pData),y clc rts -*-------------------------------------- -CORE.StkErr lda #E.STACKERROR + +.9 lda #E.STACKERROR sec rts *-------------------------------------- diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index fb3e751f..f2b01988 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -29,7 +29,7 @@ C.SHIFT .EQ 16 C.TIME .EQ 17 C.PUSHD .EQ 18 C.POPD .EQ 19 -C.FUNC .EQ 20 +C.FUNCTION .EQ 20 C.CALL .EQ 21 C.BREAK .EQ 22 C.SWITCH .EQ 23 @@ -55,9 +55,9 @@ E.STKOVERFLOW .EQ $C3 E.NOWHILE .EQ $C4 E.NOFOR .EQ $C5 E.NOIF .EQ $C6 -E.BADEXP .EQ $C7 -E.BADFTYPE .EQ $C8 -E.FUNDEF .EQ $C9 +E.BADFTYPE .EQ $C7 +E.FUNDEF .EQ $C8 +E.UNEXP .EQ $C9 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I @@ -76,18 +76,19 @@ ZPArgVBufPrev .BS 2 ZPArgVBufPtr .BS 2 ZPVarNamePtr .BS 2 +CORE.PSFlags .BS 1 CORE.IntCmd .BS 1 CORE.Operator .BS 1 CORE.LogicOp .BS 1 CORE.TestResult .BS 1 CORE.PrevTestResult .BS 1 -M32.ACC .BS 4 - ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPTmpW .BS 2 +M32.ACC .BS 4 + ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -130,7 +131,6 @@ J.ESC .DA CL.BS left arrow .DA CL.NAK right arrow L.IN .DA IN L.CMD .DA CMD -L.ENDCMD .DA ENDCMD J.CMD .DA CMD... .DA CMD.. .DA CMD.CD @@ -151,7 +151,7 @@ J.CMD .DA CMD... .DA CMD.TIME .DA CMD.PUSHD .DA CMD.POPD - .DA CMD.FUNC + .DA CMD.FUNCTION .DA CMD.CALL .DA CMD.BREAK .DA CMD.SWITCH @@ -439,8 +439,10 @@ CS.RUN.BATCH >LDA.G bSET.C lda (ZPInputBufPtr),y sta (ZPArgVBuf),y beq .4 + eor #C.CR bne .3 + sta (ZPArgVBuf),y .4 >PUSHW ZPArgVBuf @@ -476,7 +478,7 @@ CS.RUN.LOOP.END ldy #S.PS.RC jsr IO.PrintErrMsg bcs CS.RUN.LOOP.RTS -CS.RUN.LOOP.80 lda (pData) +CS.RUN.LOOP.80 lda (pData) something on stack ? bne .8 >LDA.G bExitOnEOF @@ -652,7 +654,7 @@ CMD .AZ ".." .AZ "TIME" .AZ "PUSHD" .AZ "POPD" - .AZ "FUNC" + .AZ "FUNCTION" .AZ "CALL" .AZ "BREAK" .AZ "SWITCH" @@ -665,7 +667,7 @@ CMD .AZ ".." .AZ "LOOP" .AZ "ELSE" .AZ "FI" -ENDCMD .AZ "END" + .AZ "END" .HS 00 *-------------------------------------- * https://www.tldp.org/LDP/abs/html/io-redirection.html @@ -738,7 +740,6 @@ PUSHD.STACK .BS PUSHD.STACK.MAX+1 hFuncList .BS 1 bReadMode .BS 1 -bFuncMode .BS 1 bExitOnEOF .BS 1 bEscMode .BS 1 @@ -761,8 +762,6 @@ CL.bReady .BS 1 CORE.hArgVBuf .BS 1 -CORE.PSFlags .BS 1 - HIS.hBuf .BS 1 HIS.Count .BS 1 HIS.Index .BS 1 diff --git a/SHARED/X.ERRORS.S.txt b/SHARED/X.ERRORS.S.txt index 192e2fdc..78506bc4 100644 --- a/SHARED/X.ERRORS.S.txt +++ b/SHARED/X.ERRORS.S.txt @@ -41,6 +41,7 @@ ERR.Codes .DA #MLI.E.IO .DA #E.NOIF .DA #E.BADFTYPE .DA #E.FUNDEF + .DA #E.UNEXP *-------------------------------------- ERR.Count .EQ *-ERR.Codes *-------------------------------------- @@ -83,6 +84,7 @@ ERR.Messages >PSTR "I/O Error" >PSTR "FI/ELSE Without IF" >PSTR "Bad File Type" >PSTR "Undefined Function" + >PSTR "Unexpected EOF" *-------------------------------------- >PSTR "Unknown Error" *-------------------------------------- diff --git a/SYS/KERNEL.S.SLISTX.txt b/SYS/KERNEL.S.SLISTX.txt index 604da225..d541b810 100644 --- a/SYS/KERNEL.S.SLISTX.txt +++ b/SYS/KERNEL.S.SLISTX.txt @@ -9,9 +9,9 @@ ZPSListDBlkPtr .EQ ZPMEMMGR+14 */-------------------------------------- * # SListGetData * ## ASM -* `PUSHW DataOfs` -* `PUSHW DataLen` -* `PUSHW DataPtr` +* `PUSHW DataOfs` (Start offset in Data) +* `PUSHW DataLen` (Data bytes to return, 0 if String mode) +* `PUSHW DataPtr` (0 if KERNEL should allocate a buffer) * `PUSHW KeyID` * `lda hSList` * `>SYSCALL SListGetData` @@ -36,7 +36,7 @@ K.SListGetData sta SLIST.hList lda SLIST.DataLen sec - sbc ZPMemMgrSize + sbc ZPMemMgrSize Offset eor #$ff sta SLIST.nDataCnt lda SLIST.DataLen+1 @@ -44,9 +44,9 @@ K.SListGetData sta SLIST.hList eor #$ff sta SLIST.nDataCnt+1 Data remaining - bcc .99 + bcc .99 Offset Beyond DataLen -.10 lda ZPMemMgrSize +.10 lda ZPMemMgrSize Skip to Offset ldx ZPMemMgrSize+1 jsr SLIST.SkipDataAX @@ -55,7 +55,11 @@ K.SListGetData sta SLIST.hList bne .12 >LDYA SLIST.DataLen - ldx #SYS.GetMem + iny + bne .11 + inc +1 for ending 0 + +.11 ldx #SYS.GetMem jsr K.SYSCALL2.MAIN !!! Get a buffer In MAIN Mem !!! bcs .9 stx .82+1 @@ -106,14 +110,8 @@ K.SListGetData sta SLIST.hList sec .9 rts -.8 bit SLIST.bStringMode - bpl .81 - - lda #0 +.8 lda #0 jsr SHARED.SetDataByte - inc ZPSListDataLen - bne .81 - inc ZPSListDataLen+1 .81 >LDYA ZPSListDataLen .82 ldx #$ff SELF MODIFIED @@ -182,15 +180,16 @@ K.SListAddData sta SLIST.hList beq .8 .2 jsr SHARED.GetDataByte - jsr SLIST.AddBlockByte bcc .1 + rts .8 lda #0 - jsr SLIST.AddBlockByte Make sure 0 follow DATA - -.9 rts + jsr SLIST.AddBlockByte Add an extra 0 to stop Search here + + clc + rts */-------------------------------------- * # SListSetData * ## ASM @@ -562,15 +561,13 @@ SLIST.AddBlockByte .9 plx ply - sec -SLIST.AddBlockByte.RTS rts *-------------------------------------- SLIST.SetBlockByte ldy SLIST.BytePtr sta (ZPSListDBlkPtr),y inc SLIST.BytePtr - bne SLIST.AddBlockByte.RTS + bne SLIST.ToNextBlock.RTS *-------------------------------------- SLIST.ToNextBlock inc SLIST.BlockPtr @@ -578,6 +575,7 @@ SLIST.ToNextBlock lda (ZPSListIBlkPtr),y jsr K.GetMemPtr >STYA ZPSListDBlkPtr +SLIST.ToNextBlock.RTS rts *-------------------------------------- SLIST.hList .BS 1