From 0195d8aef624ea7beac740eb1a905383aae46450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 8 Feb 2019 16:13:43 +0000 Subject: [PATCH] Kernel 0.92+ --- .Docs/KERNEL.md | 19 ++- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/CSH.E.txt | 14 -- BIN/CSH.I.txt | 6 + BIN/CSH.S.CORE.txt | 70 ++++++---- BIN/CSH.S.txt | 1 + BIN/{SHELL.S.CL.txt => SH.S.CL.txt} | 4 +- BIN/{SHELL.S.CMD.txt => SH.S.CMD.txt} | 115 ++++++++++++++--- BIN/{SHELL.S.CORE.txt => SH.S.CORE.txt} | 162 +++--------------------- BIN/{SHELL.S.EXP.txt => SH.S.EXP.txt} | 18 +-- BIN/{SHELL.S.HIS.txt => SH.S.HIS.txt} | 4 +- BIN/{SHELL.S.IO.txt => SH.S.IO.txt} | 4 +- BIN/{SHELL.S.txt => SH.S.txt} | 74 +++-------- 13 files changed, 210 insertions(+), 281 deletions(-) rename BIN/{SHELL.S.CL.txt => SH.S.CL.txt} (92%) rename BIN/{SHELL.S.CMD.txt => SH.S.CMD.txt} (79%) rename BIN/{SHELL.S.CORE.txt => SH.S.CORE.txt} (72%) rename BIN/{SHELL.S.EXP.txt => SH.S.EXP.txt} (89%) rename BIN/{SHELL.S.HIS.txt => SH.S.HIS.txt} (92%) rename BIN/{SHELL.S.IO.txt => SH.S.IO.txt} (92%) rename BIN/{SHELL.S.txt => SH.S.txt} (87%) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index b328cf95..ca85d0b0 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -349,13 +349,6 @@ CS: A = EC ## RETURN VALUE Y,A = ... -# pipe - -## C -`int pipe(int pipefd[2]);` - -## ASM - # FAdd,FSub,FMult,FDiv,FPwr Return X+Y, X-Y, X*Y, X/Y, X^Y @@ -684,6 +677,18 @@ return a hFILE to a new FIFO CC = OK, CS = ERROR A = hFILE +# pipe + +## C +`hFD pipe();` + +## ASM +`>SYSCALL pipe` + +## RETURN VALUE +CC = OK, CS = ERROR +A = hFD + # PutChar Print A (char) to StdOut diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index e48a740ee0f3bdee6eee74ca0e14568ec9e24bab..9238fe4b11bcdc8ea89a7fc6e070ca24f0cfafdb 100644 GIT binary patch delta 368703 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 z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKa~ z5<)^q2nit}B!q;J5E4Q{NC*ibAtZ!^kPs3=LP!V+At5A$gpd#tLPAIg2_YdQgoKdr M|4YK_PSTR "printf" .DA #CSH.T.CHAR .DA #CSH.T.VARIADIC .DA #0 +* int puts ( const char * str ); + >PSTR "printf" + .DA #CSH.T.INT returned value + .DA #CSH.Q.CONST+CSH.Q.POINTER1 + .DA #CSH.T.CHAR + .DA 0 * float cos ( float x ); >PSTR "cos" .DA #CSH.T.FLOAT returned value diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index 664b18db..0c0f4897 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -3,6 +3,20 @@ PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- +CSH.Q.CONST .EQ %11000000 +CSH.Q.ARRAY .EQ %10001100 max 3 bounds +CSH.Q.POINTER1 .EQ %10000001 max 3 depth +CSH.Q.POINTER2 .EQ %10000010 +CSH.Q.POINTER3 .EQ %10000011 +CSH.T.CHAR .EQ 1 +CSH.T.INT .EQ 2 +CSH.T.LONG .EQ 3 +CSH.T.UCHAR .EQ 4 +CSH.T.UINT .EQ 5 +CSH.T.ULONG .EQ 6 +CSH.T.FLOAT .EQ 7 +CSH.T.VARIADIC .EQ $F +*-------------------------------------- CSH.Init lda #$0 >STA.G CSH.SymbolsPtr >STA.G CSH.DataPtr @@ -335,33 +349,33 @@ CSH.TYPE >STA.G CSH.ACCT sec .99 rts *-------------------------------------- -CSH.FnEval jsr CSH.GetCharNB +CSH.FnEval >STYA ZPFnDefPtr + jsr CSH.GetCharNB bcs .9 cmp #'(' bne .9 - lda (ZPPtr1) Get Return value Type + lda (ZPFnDefPtr) Get Return value Type >CMP.G CSH.ACCT Match with ACC ? bne .99 - jsr CSH.PushACCT Save Acc & T on stack - - -.1 inc ZPPtr1 advance to arg list type - bne .2 - inc ZPPtr1+1 - -.2 lda (ZPPtr1) - beq .7 end of list, go check no more - jsr CSH.GetNextCharNB skip '(' bcs .9 + jsr CSH.PushACCT Save Acc & T on stack + +.1 inc ZPFnDefPtr advance to arg list type + bne .2 + inc ZPFnDefPtr+1 + +.2 lda (ZPFnDefPtr) + beq .7 end of list, go check no more + .20 jsr CSH.ExpEval bcs .90 - lda (ZPPtr1) + lda (ZPFnDefPtr) cmp #CSH.T.VARIADIC bne .3 @@ -370,10 +384,10 @@ CSH.FnEval jsr CSH.GetCharNB .3 >CMP.G CSH.ACCT Match with ACC ? bne .99 - inc ZPPtr1 advance to next arg + inc ZPFnDefPtr advance to next arg bne .4 - inc ZPPtr1+1 -.4 lda (ZPPtr1) no more arg in fn definition + inc ZPFnDefPtr+1 +.4 lda (ZPFnDefPtr) no more arg in fn definition beq .7 jsr CSH.GetNextCharNB @@ -384,7 +398,7 @@ CSH.FnEval jsr CSH.GetCharNB jsr CSH.GetNextCharNB bra .20 -.7 jsr CSH.GetNextCharNB +.7 jsr CSH.GetCharNB bcs .9 cmp #')' bne .9 @@ -406,13 +420,14 @@ CSH.FnEval jsr CSH.GetCharNB rts *-------------------------------------- CSH.ExpEval jsr CSH.ZeroACC - dec A=0 - >STA.G CSH.EXPBOP1 +.10 lda #$ff + >STA.G CSH.EXPBOP1 Reset BOP1 + jsr CSH.GetCharNB bcs .9 -.10 jsr CSH.IsLetter Fnc or Var ? + jsr CSH.IsLetter Fnc or Var ? bcs .2 jsr CSH.GetVar @@ -425,6 +440,7 @@ CSH.ExpEval jsr CSH.ZeroACC .1 >LDYA L.CSH.FN jsr CSH.LookupFn bcs .9 + >LDYA ZPPtr1 jsr CSH.FnEval bcs .99 bra .11 @@ -476,16 +492,17 @@ CSH.ExpEval jsr CSH.ZeroACC * Old OP has precedence, compute ACC=ARG ACC .3 >LDA.G CSH.EXPBOP1 - jsr CSA.Compute - bcs .9 + jsr CSH.Compute + bcs .9 + jsr CSH.GetCharNB - bcc .10 - bra .9 + bcs .9 + jmp .10 .8 >LDA.G CSH.EXPBOP1 bmi .80 - jmp CSA.Compute + jmp CSH.Compute .80 clc rts @@ -848,7 +865,8 @@ CSH.IsACC0 >LDA.G CSH.ACCT .9 sec rts *-------------------------------------- -CSA.Compute tax +CSH.Compute tax + jmp (J.CSH.BOPS,x) *-------------------------------------- CSH.BOPS.ADD diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index e7878ca7..2846c0c5 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -23,6 +23,7 @@ ZPPtr2 .BS 2 ZPPtr3 .BS 2 ZPFileBuf .BS 2 ZPFileBufPtr .BS 2 +ZPFnDefPtr .BS 2 ZPCSHSymbols .BS 2 ZPCSHData .BS 2 diff --git a/BIN/SHELL.S.CL.txt b/BIN/SH.S.CL.txt similarity index 92% rename from BIN/SHELL.S.CL.txt rename to BIN/SH.S.CL.txt index 654c72e4..6ea2676d 100644 --- a/BIN/SHELL.S.CL.txt +++ b/BIN/SH.S.CL.txt @@ -286,6 +286,6 @@ CL.PrintCLBuf >LDYA ZPCLBuf rts *-------------------------------------- MAN -SAVE USR/SRC/BIN/SHELL.S.CL -LOAD USR/SRC/BIN/SHELL.S +SAVE USR/SRC/BIN/SH.S.CL +LOAD USR/SRC/BIN/SH.S ASM diff --git a/BIN/SHELL.S.CMD.txt b/BIN/SH.S.CMD.txt similarity index 79% rename from BIN/SHELL.S.CMD.txt rename to BIN/SH.S.CMD.txt index 96bac5f6..bfebed23 100644 --- a/BIN/SHELL.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -343,14 +343,7 @@ CMD.TIME clc *-------------------------------------- CMD.ECHO >STZ.G bECHO.N - lda #1 - >STA.G CORE.ArgIndex - -.1 tax - jsr CORE.GetArgX - bcs .7 - - jsr CMD.IsSwitch +.1 jsr CMD.IsSwitch bcs .2 cmp #'N' @@ -359,7 +352,6 @@ CMD.ECHO >STZ.G bECHO.N lda #$ff >EOR.G bECHO.N sta (pData),y - >INC.G CORE.ArgIndex bra .1 .2 pha @@ -663,21 +655,20 @@ CMD.LOOP jsr CORE.StkPull sec .99 rts *-------------------------------------- -CMD.IsSwitch >STYA ZPPtr1 - lda (ZPPtr1) +CMD.IsSwitch lda (ZPInputBufPtr) cmp #'-' bne .9 ldy #1 - lda (ZPPtr1),y + lda (ZPInputBufPtr),y beq .9 iny - lda (ZPPtr1),y + lda (ZPInputBufPtr),y bne .9 dey - lda (ZPPtr1),y + lda (ZPInputBufPtr),y cmp #'a' bcc .8 cmp #'z'+1 @@ -687,11 +678,99 @@ CMD.IsSwitch >STYA ZPPtr1 .8 clc rts -.9 >LDYA ZPPtr1 - sec +.9 sec rts *-------------------------------------- +CMD.IOCheck >LDYA L.CMD.IO + + jsr CORE.Lookup + bcs CMD.IOCheck.RTS not a IO token...should be an arg.... + + jmp (J.CMD.IO,x) + +CMD.IOCheck.RTS rts +*-------------------------------------- +CMD.IO.AMP >LDA.G CORE.PSFlags + and #$ff^S.PS.F.HOLD + sta (pData),y + clc + rts + +CMD.IO.IN lda #O.RDONLY+O.TEXT + jsr CMD.IO.Open + bcs CMD.IOCheck.RTS + jmp IO.Set.In +CMD.IO.OUTA +CMD.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT + bra CMD.IO.OUT.1 +CMD.IO.OUT +CMD.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT + +CMD.IO.OUT.1 jsr CMD.IO.Open + bcs CMD.IOCheck.RTS + jmp IO.Set.Out + +CMD.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT + bra CMD.IO.2OUT.1 +CMD.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT + +CMD.IO.2OUT.1 jsr CMD.IO.Open + bcs CMD.IOCheck.RTS + jmp IO.Set.Err +*-------------------------------------- +CMD.IO.Open pha Open Mode + lda (ZPArgVBufPtr) + beq .9 no arg left.... + + >PUSHWI 0 Aux type + >PUSHBI S.FI.T.TXT ftype + pla + >PUSHA flags + >LDYA ZPArgVBufPtr + >SYSCALL fopen + rts + +.9 pla + lda #E.CSYN + sec + rts +*-------------------------------------- +CMD.AddArg2ArgV jsr CORE.GetCharNB + bcs .9 + + ldx #0 + +.1 cmp #'"' + bne .2 + + txa + eor #$ff + tax + bra .4 + +.2 cmp #C.SPACE + bne .3 + txa + bpl .8 + +.3 jsr CORE.IsEndCmd + bcc .9 + + sta (ZPArgVBufPtr) + +.4 inc ZPArgVBufPtr + bne .5 + inc ZPArgVBufPtr +.5 jsr CORE.GetNextChar + bcc .1 + +.8 lda #0 + sta (ZPArgVBufPtr) + + clc +.9 rts +*-------------------------------------- MAN -SAVE USR/SRC/BIN/SHELL.S.CMD -LOAD USR/SRC/BIN/SHELL.S +SAVE USR/SRC/BIN/SH.S.CMD +LOAD USR/SRC/BIN/SH.S ASM diff --git a/BIN/SHELL.S.CORE.txt b/BIN/SH.S.CORE.txt similarity index 72% rename from BIN/SHELL.S.CORE.txt rename to BIN/SH.S.CORE.txt index 63a911b6..3e4d2503 100644 --- a/BIN/SHELL.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -17,67 +17,6 @@ CORE.Quit >LDA.G CORE.hArgVBuf .9 rts *-------------------------------------- -* Input : ZPCLBuf/ZPFileBuf -* Get Line from buf until ;, CR, \0 (EOL / EOF) -> ZPArgVBuf -*-------------------------------------- -CORE.GetCmd >LDYA ZPInputBufPtr Save Actual cmd for looping - >STYA ZPInputCmdPtr - - lda (ZPInputBufPtr) - beq .9 - - ldx #0 reset "" flag - ldy #0 - -.1 lda (ZPInputBufPtr),y - beq .7 - - cmp #C.CR - beq .6 - - cmp #'"' - bne .2 - - txa - eor #$80 toggle "" flag - tax - - lda #'"' - bra .5 - -.2 cmp #';' - bne .5 - - txa - beq .6 not between "" - - lda #';' - -.5 sta (ZPArgVBuf),y - iny - bne .1 - - lda #E.SYN Line Too long !!! -.9 sec - rts - -.6 sec skip CR or ; - .HS 90 BCC - -.7 clc - - tya - adc ZPInputBufPtr - sta ZPInputBufPtr - bcc .8 - inc ZPInputBufPtr+1 - -.8 lda #0 - sta (ZPArgVBuf),y - - clc - rts -*-------------------------------------- * Input : ZPArgVBuf (String) * Tokenize ZPArgVBuf * :LOOP @@ -144,7 +83,7 @@ CORE.Exec >PUSHW ZPArgVBuf sta (pData),y jsr CORE.ShiftArgVToken and skip this token -.2 jsr CORE.IO.Check +.2 jsr CMD.IOCheck bcc .7 IO token & related args processed tay an error ? bne .90 yes...I/O error... @@ -201,7 +140,7 @@ CORE.ExecCmd ldy #$ff .11 >PUSHW ZPArgVBuf >LDYA L.CORE.CMD - jsr Lookup no / found, search internal... + jsr CORE.Lookup no / found, search internal... bcc .13 not internal .12 ldx #$ff found a / in Arg0 .. external @@ -236,6 +175,11 @@ CORE.ExecCmd ldy #$ff CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping >STYA ZPInputCmdPtr + >LDYA ZPArgVBuf + >STYA ZPArgVBufPtr + lda #0 + sta (ZPArgVBuf) Reset Arg Buffer + jsr CORE.GetCharNB bcs CORE.Run.RTS Ending 0, CS,A=0 @@ -365,7 +309,7 @@ CORE.Lookup >STYA ZPPtr1 lda (ZPInputBufPtr),y beq .3 Src Keyword end - jsr CORE.IsSep + jsr CORE.IsSpaceOrEndCmd bcc .3 Src Keyword end lda (ZPPtr1),y @@ -412,16 +356,20 @@ CORE.Lookup >STYA ZPPtr1 sec rts *-------------------------------------- -CORE.IsSep cmp #C.SPACE - beq .8 +CORE.IsSpaceOrEndCmd + cmp #C.SPACE + beq CORE.IsEndCmd.8 + +CORE.IsEndCmd cmp #C.CR + beq CORE.IsEndCmd.8 cmp #';' - beq .8 + beq CORE.IsEndCmd.8 cmp #'|' - beq .8 + beq CORE.IsEndCmd.8 sec rts -.8 clc +CORE.IsEndCmd.8 clc rts *-------------------------------------- CORE.GetCharNB jsr CORE.GetChar @@ -535,79 +483,7 @@ CORE.StkGet lda (pData) StackPtr sec rts *-------------------------------------- -CORE.IO.Check >PUSHW ZPArgVBufPtr - >LDYA L.CORE.IO - jsr Lookup - bcs .9 not a IO token...should be an arg.... - phx - - jsr CORE.ShiftArgVToken skip this IO token - - plx - jmp (J.CORE.IO,x) - -.9 lda #0 - rts -*-------------------------------------- -CORE.IO.AMP >LDA.G CORE.PSFlags - and #$ff^S.PS.F.HOLD - sta (pData),y - clc - rts - -CORE.IO.IN lda #O.RDONLY+O.TEXT - jsr CORE.IO.Open - bcs .9 - jsr IO.Set.In - - jsr CORE.ShiftArgVToken skip arg - clc -.9 rts - -CORE.IO.OUTA -CORE.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT - bra CORE.IO.OUT.1 -CORE.IO.OUT -CORE.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT - -CORE.IO.OUT.1 jsr CORE.IO.Open - bcs .9 - jsr IO.Set.Out - - jsr CORE.ShiftArgVToken skip arg - clc -.9 rts - -CORE.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT - bra CORE.IO.2OUT.1 -CORE.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT - -CORE.IO.2OUT.1 jsr CORE.IO.Open - bcs .9 - jsr IO.Set.Err - - jsr CORE.ShiftArgVToken skip arg - clc -.9 rts -*-------------------------------------- -CORE.IO.Open pha - lda (ZPArgVBufPtr) - beq .9 no arg left.... - - >PUSHWI 0 Aux type - >PUSHBI S.FI.T.TXT ftype - pla - >PUSHA flags - >LDYA ZPArgVBufPtr - >SYSCALL fopen - rts - -.9 pla - lda #E.CSYN - sec - rts -*-------------------------------------- MAN -SAVE USR/SRC/BIN/SHELL.S.CORE -LOAD USR/SRC/BIN/SHELL.S +SAVE USR/SRC/BIN/SH.S.CORE +LOAD USR/SRC/BIN/SH.S ASM diff --git a/BIN/SHELL.S.EXP.txt b/BIN/SH.S.EXP.txt similarity index 89% rename from BIN/SHELL.S.EXP.txt rename to BIN/SH.S.EXP.txt index 8599007f..60d65997 100644 --- a/BIN/SHELL.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -7,9 +7,8 @@ EXP.EVAL ldx #1 jsr CORE.GetArgX beq .9 - >PUSHYA >LDYA L.EXP.BEGIN - jsr Lookup + jsr CORE.Lookup bcs .9 @@ -28,9 +27,8 @@ EXP.EVAL ldx #1 jsr CORE.GetArgX beq .9 - >PUSHYA >LDYA L.EXP.OP.UNARY -d -e -f ? - jsr Lookup + jsr CORE.Lookup bcs .1 @@ -54,9 +52,8 @@ EXP.EVAL ldx #1 jsr CORE.GetArgX beq .9 - >PUSHYA >LDYA L.EXP.OP.BINARY -eq -ne .... ? - jsr Lookup + jsr CORE.Lookup bcs .9 txa >STA.G CORE.Operator @@ -227,9 +224,8 @@ EXP.GET >LDA.G CORE.ArgIndex jsr EXP.GetNext -.2 >PUSHYA - >LDYA L.EXP.OP.MATH + - .... ? - jsr Lookup +.2 >LDYA L.EXP.OP.MATH + - .... ? + jsr CORE.Lookup bcs .9 txa @@ -274,6 +270,6 @@ EXP.GetNext >INC.G CORE.ArgIndex rts *-------------------------------------- MAN -SAVE USR/SRC/BIN/SHELL.S.EXP -LOAD USR/SRC/BIN/SHELL.S +SAVE USR/SRC/BIN/SH.S.EXP +LOAD USR/SRC/BIN/SH.S ASM diff --git a/BIN/SHELL.S.HIS.txt b/BIN/SH.S.HIS.txt similarity index 92% rename from BIN/SHELL.S.HIS.txt rename to BIN/SH.S.HIS.txt index 8184f208..2aa17738 100644 --- a/BIN/SHELL.S.HIS.txt +++ b/BIN/SH.S.HIS.txt @@ -180,6 +180,6 @@ HIS.Quit >LDA.G HIS.hBuf .9 rts *-------------------------------------- MAN -SAVE USR/SRC/BIN/SHELL.S.HIS -LOAD USR/SRC/BIN/SHELL.S +SAVE USR/SRC/BIN/SH.S.HIS +LOAD USR/SRC/BIN/SH.S ASM diff --git a/BIN/SHELL.S.IO.txt b/BIN/SH.S.IO.txt similarity index 92% rename from BIN/SHELL.S.IO.txt rename to BIN/SH.S.IO.txt index dc47beb3..0ec20b29 100644 --- a/BIN/SHELL.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -214,6 +214,6 @@ IO.PrintErrMsg pha Save EC for PrintF rts *-------------------------------------- MAN -SAVE USR/SRC/BIN/SHELL.S.IO -LOAD USR/SRC/BIN/SHELL.S +SAVE USR/SRC/BIN/SH.S.IO +LOAD USR/SRC/BIN/SH.S ASM diff --git a/BIN/SHELL.S.txt b/BIN/SH.S.txt similarity index 87% rename from BIN/SHELL.S.txt rename to BIN/SH.S.txt index 42215a15..4467ca8a 100644 --- a/BIN/SHELL.S.txt +++ b/BIN/SH.S.txt @@ -138,15 +138,15 @@ J.CORE.CMD .DA CMD.NOHUP .DA CMD.IF .DA CMD.ELSE .DA CMD.FI -L.CORE.IO .DA CORE.IO -J.CORE.IO .DA CORE.IO.AMP - .DA CORE.IO.IN - .DA CORE.IO.OUTA - .DA CORE.IO.OUT - .DA CORE.IO.1OUTA - .DA CORE.IO.1OUT - .DA CORE.IO.2OUTA - .DA CORE.IO.2OUT +L.CMD.IO .DA CMD.IO +J.CMD.IO .DA CMD.IO.AMP + .DA CMD.IO.IN + .DA CMD.IO.OUTA + .DA CMD.IO.OUT + .DA CMD.IO.1OUTA + .DA CMD.IO.1OUT + .DA CMD.IO.2OUTA + .DA CMD.IO.2OUT L.EXP.BEGIN .DA EXP.BEGIN L.EXP.OP.UNARY .DA EXP.OP.UNARY J.EXP.OP.UNARY .DA EXP.OP.UNARY.D @@ -463,44 +463,6 @@ CheckSleep ldy #Sleep+3 ora (pData),y rts *-------------------------------------- -Lookup >STYA ZPPtr2 - >PULLW ZPPtr1 - - ldx #0 - -.1 phx - - >PUSHW ZPPtr2 - >LDYA ZPPtr1 - >SYSCALL StrCaseCmp - bcs .2 - - plx - >LDYA ZPPtr2 - clc - rts - -.2 inc ZPPtr2 - bne .3 - inc ZPPtr2+1 - -.3 lda (ZPPtr2) - bne .2 - - inc ZPPtr2 - bne .4 - inc ZPPtr2+1 - -.4 plx - inx - inx - - lda (ZPPtr2) Array Ending 0, must be an external Cmd.... - bne .1 - - sec - rts -*-------------------------------------- RemoveStrFromArgV >STYA ZPPtr1 >STYA ZPPtr2 @@ -536,16 +498,16 @@ RemoveStrFromArgV .8 rts *-------------------------------------- - .INB USR/SRC/BIN/SHELL.S.CL - .INB USR/SRC/BIN/SHELL.S.HIS - .INB USR/SRC/BIN/SHELL.S.CORE - .INB USR/SRC/BIN/SHELL.S.IO - .INB USR/SRC/BIN/SHELL.S.CMD - .INB USR/SRC/BIN/SHELL.S.EXP + .INB USR/SRC/BIN/SH.S.CL + .INB USR/SRC/BIN/SH.S.HIS + .INB USR/SRC/BIN/SH.S.CORE + .INB USR/SRC/BIN/SH.S.IO + .INB USR/SRC/BIN/SH.S.CMD + .INB USR/SRC/BIN/SH.S.EXP *-------------------------------------- CS.END *-------------------------------------- -MSG.GREETINGS .AZ "\r\nA2osX-Shell %d.%d\r\n\r\n" +MSG.GREETINGS .AZ "\r\nA2osX-SH %d.%d\r\n\r\n" MSG.PROMPT .AZ "\e[7h$ " MSG.TRACE .AZ ">%s\r\n" MSG.BATCHERR .AZ "^\r\nLine #%D:" @@ -595,7 +557,7 @@ CORE.CMD .AZ "NOHUP" *-------------------------------------- * https://www.tldp.org/LDP/abs/html/io-redirection.html *-------------------------------------- -CORE.IO .AZ "&" +CMD.IO .AZ "&" .AZ "<" .AZ ">>" .AZ ">" @@ -697,5 +659,5 @@ M32.TMP .BS 4 DS.END .ED *-------------------------------------- MAN -SAVE USR/SRC/BIN/SHELL.S +SAVE USR/SRC/BIN/SH.S ASM