From f29d232415cdf45c4787967b4a8ad44ad8619538 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 28 Jan 2019 16:33:30 +0000 Subject: [PATCH] Kernel 0.92 --- .A2osX Issue List.xlsx | Bin 50748 -> 52217 bytes BIN/SHELL.S.CL.txt | 304 --------- BIN/SHELL.S.CMD.txt | 1340 ++++++++-------------------------------- BIN/SHELL.S.CORE.txt | 1106 +++++++++++++++++++++++++++++++++ BIN/SHELL.S.IO.txt | 6 +- BIN/SHELL.S.txt | 84 ++- 6 files changed, 1418 insertions(+), 1422 deletions(-) create mode 100644 BIN/SHELL.S.CORE.txt diff --git a/.A2osX Issue List.xlsx b/.A2osX Issue List.xlsx index 095231e6af62e3057079843ee7b801e359054dc6..d6e9dad2b887335f1713e42ab2e716ccddb1dde7 100644 GIT binary patch delta 47825 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

>|E> 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

Z<)f__r_t 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 Lk~oI{@$3Hpp4#ld delta 46369 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 ZPCLBuf >SYSCALL fputs rts *-------------------------------------- -* Read From CLBuf or FileBuf -*-------------------------------------- -CL.GetLine >LDYA ZPFileBufPtr - >STYA ZPFileBufPtrBak - - lda (ZPFileBufPtr) - beq .9 - - ldx #0 not in " - - ldy #0 - -.1 lda (ZPFileBufPtr),y - beq .7 - - cmp #C.CR - beq .6 - - cmp #'"' - bne .2 - - txa - eor #$80 toggle " switch - tax - - lda #'"' - bra .5 - -.2 cmp #';' - bne .5 - - txa - beq .6 - - lda #';' - -.5 sta (ZPCLBuf),y - iny - cpy #CL.MAX - bne .1 - - lda #E.SYN Line Too long !!! -* sec - rts - -.6 sec skip CR or ; - .HS 90 BCC - -.7 clc - - tya - adc ZPFileBufPtr - sta ZPFileBufPtr - bcc .8 - inc ZPFileBufPtr+1 - -.8 lda #0 - sta (ZPCLBuf),y - - tya - >STA.G CL.Len - lda #$ff - >STA.G CL.bExec - - clc - rts - -.9 lda #C.EOF - sec - rts -*-------------------------------------- -* in: -* ZPCLBuf : CString command line -* out: -* ZPArgVBuf : -* /path/excmd\0 arg1\0 arg2\0 ... \0 -* - or - -* intcmd\0 arg1\0 arg2\0 ... \0 -*-------------------------------------- -CL.Parse >STZ.G CMD.IntCmd - - lda #S.PS.F.HOLD+S.PS.F.DUPENV - >STA.G CMD.PSFlags - - >PUSHW ZPCLBuf - >LDYA ZPCLBuf - >STYA ZPCLBufPtr - - >SYSCALL Args2ArgV - - lda #0 - sta (ZPArgVBuf) - - lda (ZPCLBufPtr) - beq .8 - -.1 cmp #'#' comment ? - beq .8 yes, ignore remaining - - >LDA.G CMD.IntCmd - bne .3 we already have Cmd, go check args - - ldy #1 - lda (ZPCLBufPtr),y only one char ? - bne .2 - - lda (ZPCLBufPtr) - cmp #'.' leading dot ? - bne .2 - - >LDA.G CMD.PSFlags yes, child process will run in same ENV - and #$ff^S.PS.F.DUPENV - sta (pData),y - bra .6 and skip this token - -.2 jsr CL.CheckCmd - bcc .6 success, skip token, already added by CheckCmd - - rts - -.3 jsr CL.CheckIO - bcc .7 IO token & related args processed - tay an error ? - bne .9 yes...I/O error... - - jsr CL.AddCLBufPtrToArgV no...add as an arg - bcs .9 - -.6 jsr CL.NextCLToken -.7 lda (ZPCLBufPtr) - bne .1 - -.8 clc - -.9 rts -*-------------------------------------- -* ZPCLBuf-> argv[] (formatted & not empty) -*-------------------------------------- -CL.CheckCmd ldy #$ff - -.1 iny - lda (ZPCLBufPtr),y - beq .2 - cmp #'/' - bne .1 - - bra .4 - -.2 >PUSHW ZPCLBufPtr - >LDYA L.CMD.INT - jsr Lookup no / found, search internal... - bcs .4 not internal, search PATH - - phx - plx - bne .3 - - >LDA.G CMD.PSFlags if STARTPROC, skip keyword... - and #$ff^S.PS.F.HOLD - sta (pData),y ...and toggle S.PS.F.HOLD flag - clc -.9 rts - -.3 jsr CL.AddYAToArgV X unmodified - bcs .9 - - txa - >STA.G CMD.IntCmd - - clc - rts - -.4 >LDYA ZPCLBufPtr - jsr CL.AddYAToArgV - - lda #$ff - >STA.G CMD.IntCmd - clc - -CL.CheckCmd.RTS - rts -*-------------------------------------- -CL.CheckIO >PUSHW ZPCLBufPtr - >LDYA L.CL.IO - jsr Lookup - bcs .9 not a IO token...should be an arg.... - phx - - jsr CL.NextCLToken skip this IO token - - plx - jmp (J.CL.IO,x) - -.9 lda #0 - rts -*-------------------------------------- -CL.IO.AMP >LDA.G CMD.PSFlags - and #$ff^S.PS.F.HOLD - sta (pData),y - clc - rts - -CL.IO.IN lda #O.RDONLY+O.TEXT - jsr CL.IO.Open - bcs .9 - jsr IO.Set.In - - jsr CL.NextCLToken skip arg - clc -.9 rts - -CL.IO.OUTA -CL.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT - bra CL.IO.OUT.1 -CL.IO.OUT -CL.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT - -CL.IO.OUT.1 jsr CL.IO.Open - bcs .9 - jsr IO.Set.Out - - jsr CL.NextCLToken skip arg - clc -.9 rts - -CL.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT - bra CL.IO.2OUT.1 -CL.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT - -CL.IO.2OUT.1 jsr CL.IO.Open - bcs .9 - jsr IO.Set.Err - - jsr CL.NextCLToken skip arg - clc -.9 rts -*-------------------------------------- -CL.IO.Open pha - lda (ZPCLBufPtr) - beq .9 no arg left.... - - >PUSHWI 0 Aux type - >PUSHBI S.FI.T.TXT ftype - pla - >PUSHA flags - >LDYA ZPCLBufPtr - >SYSCALL fopen - rts - -.9 pla - lda #E.CSYN - sec - rts -*-------------------------------------- -CL.NextCLToken - lda (ZPCLBufPtr) - inc ZPCLBufPtr - bne .1 - inc ZPCLBufPtr+1 -.1 tax - bne CL.NextCLToken - rts -*-------------------------------------- -CL.AddCLBufPtrToArgV - >LDYA ZPCLBufPtr -CL.AddYAToArgV >STYA ZPPtr1 - - >LDYA ZPArgVBuf - >STYA ZPPtr2 - -.1 lda (ZPPtr2) scan to end of argV - beq .6 - -.2 inc ZPPtr2 - bne .3 - inc ZPPtr2+1 -.3 lda (ZPPtr2) - bne .2 - - inc ZPPtr2 - bne .4 - inc ZPPtr2+1 -.4 lda (ZPPtr2) - bne .2 - -.6 ldy #$ff - -.7 iny -* beq .9 - lda (ZPPtr1),y - sta (ZPPtr2),y - bne .7 including str ending \0 - - iny -* beq .9 - sta (ZPPtr2),y arg[] ending \0 - - clc - rts - -.9 lda #E.BUF - sec - rts -*-------------------------------------- MAN SAVE USR/SRC/BIN/SHELL.S.CL LOAD USR/SRC/BIN/SHELL.S diff --git a/BIN/SHELL.S.CMD.txt b/BIN/SHELL.S.CMD.txt index 5107a57c..6288803f 100644 --- a/BIN/SHELL.S.CMD.txt +++ b/BIN/SHELL.S.CMD.txt @@ -4,14 +4,6 @@ AUTO 4,1 .LIST OFF *-------------------------------------- CMD.Init >LDYAI 256 - >SYSCALL GetMem - bcs .9 - >STYA ZPCLBuf - - txa - >STA.G CMD.hCLBuf - - >LDYAI 256 >SYSCALL GetMem bcs .9 >STYA ZPArgVBuf @@ -27,9 +19,6 @@ CMD.Init >LDYAI 256 CMD.Quit ldy #CMD.hArgVBuf jsr .8 - ldy #CMD.hCmdBuf - jsr .8 - ldy #hFileBuf .8 lda (pData),y @@ -38,1101 +27,308 @@ CMD.Quit ldy #CMD.hArgVBuf clc .9 rts *-------------------------------------- -* Input : CMD.IntCmd,ZPArgVBuf +* Read From InputBuf *-------------------------------------- -Cmd.Exec jsr CMD.StkGet IF,WHILE,FOR ? - bcs .3 no particular context, exec... +CMD.Get >LDYA ZPInputBufPtr + >STYA ZPInputBufPtrBak + + lda (ZPInputBufPtr) + beq .9 + + ldx #0 not in " + + ldy #0 + +.1 lda (ZPInputBufPtr),y + beq .7 + + cmp #C.CR + beq .6 + + cmp #'"' + bne .2 + + txa + eor #$80 toggle " switch tax - >LDA.G CMD.IntCmd - bmi .2 external ... - - and #$3F - cmp #C.FOR - bcs .3 FOR...FI : always execute - -.2 txa - bpl .8 context is FALSE, skip line - asl - bpl .8 parent context is FALSE, skip line - -.3 >LDA.G CMD.IntCmd - bpl .80 Internal - - >PUSHB.G CMD.PSFlags - >LDYA ZPArgVBuf - >SYSCALL execv - bcs .9 - - tax CPID - - >LDA.G CMD.PSFlags - and #S.PS.F.HOLD - bne .4 - - txa - >PUSHA - >PUSHBI 1 - >LDYA L.MSG.PID - >SYSCALL printf - rts - -.4 >SLEEP Suspend this PID - - sec - ldy #S.PS.RC CPID will update S.PS.RC - lda (pPs),y - bne .9 - -.8 clc -.9 rts - -.80 tax - jmp (J.CMD.INT,x) -*-------------------------------------- -* STARTPROC : intcmd = 0 -*-------------------------------------- -Cmd.INT.STARTPROC - clc - rts -*-------------------------------------- -Cmd.INT.SHIFT lda #1 - jmp ShiftA -*-------------------------------------- -Cmd.INT.PWD ldy #S.PS.hPREFIX - lda (pPs),y - >SYSCALL GetMemPtr - >SYSCALL puts - rts -*-------------------------------------- -Cmd.INT.PUSHD >LDA.G PUSHD.STACK - cmp #PUSHD.STACK+PUSHD.STACK.MAX - beq Cmd.INT.POPD.CSYN - - ldy #S.PS.hPREFIX - lda (pPs),y - >SYSCALL GetMemPtr - >SYSCALL strdup - bcs Cmd.INT.POPD.CSYN - - >INC.G PUSHD.STACK - tay - txa - sta (pData),y - - ldx #1 - jsr Cmd.GetArgX - bcc Cmd.INT.CD.1 - -.8 clc -.9 rts -*-------------------------------------- -Cmd.INT.POPD >LDA.G PUSHD.STACK - cmp #PUSHD.STACK - beq Cmd.INT.POPD.CSYN - - tay - lda (pData),y - jsr Cmd.SetPrefixA - - >DEC.G PUSHD.STACK - clc -Cmd.INT.POPD.RTS - rts - -Cmd.INT.POPD.CSYN - jmp Cmd.Exec.CSYN -*-------------------------------------- -Cmd.INT.CD ldx #1 - jsr Cmd.GetArgX - bcc Cmd.INT.CD.1 - -Cmd.INT.CD.HOME >LDYA L.ENV.HOME - >SYSCALL GetEnv - bcc Cmd.INT.CD.1 - - >LDYA L.ENV.ROOT - >SYSCALL GetEnv - bcc Cmd.INT.CD.1 - - jmp Cmd.INT.PWD - -Cmd.INT.CD.1.9 pla - >SYSCALL freemem - bra Cmd.INT.POPD.CSYN - -Cmd.INT.CD.1 >SYSCALL realpath - bcs Cmd.INT.POPD.RTS - >STYA ZPPtr1 - phx - - ldy #1 - lda (ZPPtr1),y - beq Cmd.SetPrefixPHA we have '/' - - >PUSHEA.G CMD.Stat - >LDYA ZPPtr1 - >SYSCALL STAT - - bcs Cmd.INT.CD.1.9 - - >LDA.G CMD.Stat+S.STAT.P.TYPE - cmp #S.FI.T.DIR - bne Cmd.INT.CD.1.9 - - ldy #$ff - -.1 iny - lda (ZPPtr1),y - bne .1 - - dey - lda (ZPPtr1),y - cmp #'/' - beq Cmd.SetPrefixPHA already ends witrh a / - - iny - iny - lda #0 - >SYSCALL getmem - bcs Cmd.INT.CD.1.9 - >STYA ZPPtr2 - - ldy #$ff - -.2 iny - lda (ZPPtr1),y - lda (ZPPtr2),y - bne .2 - - iny - sta (ZPPtr2),y - dey - lda #'/' - sta (ZPPtr2),y - pla - phx - >SYSCALL freemem - pla -*-------------------------------------- -Cmd.SetPrefixA pha -Cmd.SetPrefixPHA - ldy #S.PS.hPREFIX - lda (pPs),y - >SYSCALL FreeMem - - pla - - ldy #S.PS.hPREFIX - sta (pPs),y - lda #0 -* clc - rts -*-------------------------------------- -Cmd.Exec.CSYN lda #E.CSYN - sec - rts -*-------------------------------------- -Cmd.Exec.SSYN lda #E.SSYN - sec - rts -*-------------------------------------- -Cmd.INT.SET ldx #1 - jsr Cmd.GetArgX - bcc Cmd.INT.SET.1 - -* No arg, print all ENV - - ldy #S.PS.hENV - lda (pPs),y - >SYSCALL GetMemPtr - >STYA ZPPTR1 - -.1 lda (ZPPTR1) - beq .8 Ending 0 ? - - ldy #$ff - -.2 iny - lda (ZPPTR1),y - bne .2 - - tya - sec - adc ZPPTR1 - sta ZPPTR2 - lda #0 - adc ZPPTR1+1 - sta ZPPTR2+1 - - >PUSHW ZPPTR2 Push value - >PUSHW ZPPTR1 Push name - jsr Cmd.INT.SET.PRINT - - bcs .9 - - ldy #$ff - -.3 iny - lda (ZPPTR2),y - bne .3 - - tya - sec - adc ZPPTR2 - sta ZPPTR1 - lda #0 - adc ZPPTR2+1 - sta ZPPTR1+1 - bra .1 - -.8 clc -.9 rts -*-------------------------------------- -* SET +X VAR = VALUE1 op VALUE2 op VALUE3 ... -*-------------------------------------- -Cmd.INT.SET.1 >STZ.G CMD.Varname - - lda #1 - >STA.G CMD.ArgIndex - -.1 tax - jsr Cmd.GetArgX - bcs .8 - - jsr CMD.IsSwitch - bcs .6 - - cmp #'C' - bne .2 - - >LDA.G bSET.C + lda #'"' bra .5 -.2 cmp #'X' - bne .99 - - >LDA.G bSET.X - -.5 eor #$ff - sta (pData),y - >INC.G CMD.ArgIndex - bra .1 - -.6 >LDA.G CMD.ArgIndex - >STA.G CMD.Varname - - >INC.G CMD.ArgIndex - tax - jsr Cmd.GetArgX - bcs Cmd.INT.SET.GET - - >STYA ZPPTR1 - - lda (ZPPTR1) - - cmp #'=' - bne .99 - - ldy #1 - lda (ZPPTR1),y - bne .99 - - >INC.G CMD.ArgIndex - tax - jsr Cmd.GetArgX - bcs Cmd.INT.SET.UNSET - - jsr Cmd.GetEXP - - bcs .99 - - >PUSHYA - >LDA.G CMD.Varname - tax - jsr Cmd.GetArgX - >SYSCALL SetEnv - rts - -.8 clc - rts - -.99 jmp Cmd.Exec.CSYN - -Cmd.INT.SET.UNSET - >LDA.G CMD.Varname - tax - jsr Cmd.GetArgX - >SYSCALL UnsetEnv - rts - -Cmd.INT.SET.GET - >LDA.G CMD.Varname - tax - jsr Cmd.GetArgX - >SYSCALL GetEnv - bcc .1 - clc - rts - -.1 >PUSHYA push value - >LDA.G CMD.Varname - tax - jsr Cmd.GetArgX - >PUSHYA push name -*-------------------------------------- -Cmd.INT.SET.PRINT - >PUSHBI 4 - >LDYA L.MSG.PRINTENV - >SYSCALL printf - rts -*-------------------------------------- -Cmd.INT.DATE sec - .HS 90 bcc -Cmd.INT.TIME clc - php - >LEA.G CMD.Time - >SYSCALL Time - - >PUSHEA.G CMD.Time - - plp - bcc .1 - >PUSHW L.FMT.DATE - bra .2 -.1 >PUSHW L.FMT.TIME - -.2 >LDYA ZPCLBuf - >SYSCALL StrFTime - - >LDYA ZPCLBuf - >SYSCALL puts - rts -*-------------------------------------- -Cmd.INT.ECHO >STZ.G bECHO.N - - lda #1 - >STA.G CMD.ArgIndex - -.1 tax - jsr Cmd.GetArgX - bcs .7 - - jsr CMD.IsSwitch - bcs .2 - - cmp #'N' - bne .99 - - lda #$ff - >EOR.G bECHO.N - sta (pData),y - >INC.G CMD.ArgIndex - bra .1 - -.2 pha - >PUSHBI 0 - pla - >SYSCALL printf - bcs .9 - - >INC.G CMD.ArgIndex - tax - - jsr Cmd.GetArgX - bcs .7 - -.6 lda #C.SPACE - >SYSCALL putchar - bcs .9 - - >PUSHBI 0 - - >LDA.G CMD.ArgIndex - tax - jsr Cmd.GetArgX - - >SYSCALL printf - bcs .9 - - >INC.G CMD.ArgIndex - tax - - jsr Cmd.GetArgX - bcc .6 - -.7 >LDA.G bECHO.N - bmi .8 - - >PUSHBI 0 - >LDYA L.MSG.ECHOCRLF - >SYSCALL printf - rts - -.8 clc -.9 rts - -.99 lda #E.CSYN - sec - rts -*-------------------------------------- -Cmd.INT.GETKEY ldx #1 - jsr Cmd.GetArgX - bcs .99 - - >SYSCALL getchar - bcc .1 - tay - bne .9 - -.1 >PUSHA - >PUSHBI 1 - >PUSHW L.FMT.GETKEY - >LEA.G M32.BUF - >SYSCALL sprintf - bcs .9 - - >PUSHEA.G M32.BUF - - ldx #1 - jsr Cmd.GetArgX - >SYSCALL SetEnv -.9 rts - -.99 jmp Cmd.Exec.CSYN -*-------------------------------------- -Cmd.INT.READ lda #1 - >STA.G CMD.ArgIndex - - tax - jsr Cmd.GetArgX - bcs .9 - -.1 jsr CMD.IsSwitch - bcs .4 - cmp #'S' - bne .2 - - lda #$ff - >STA.G bREAD.S - - bra .7 - -.2 cmp #'P' - bne .9 - - >INC.G CMD.ArgIndex - tax - jsr Cmd.GetArgX - bcs .9 - pha - >PUSHBI 0 - pla - >SYSCALL printf - bcs .99 - bra .7 - -.4 >SYSCALL strdup - txa - >STA.G hVarName - -.7 >INC.G CMD.ArgIndex - tax - jsr Cmd.GetArgX - bcc .1 - - >LDA.G hVarName - beq .9 - clc -.99 rts - -.9 jmp Cmd.Exec.CSYN -*-------------------------------------- -Cmd.INT.SLEEP ldx #1 - jsr Cmd.GetArgX - bcs .9 - - >SYSCALL AToL - bcs .9 - - >PULLL.G Sleep - clc - rts - -.9 jmp Cmd.Exec.CSYN -*-------------------------------------- -Cmd.INT.PAUSE lda #$FF - >STA.G bPause - clc - rts -*-------------------------------------- -Cmd.INT.EXIT ldx #1 - jsr Cmd.GetArgX - bcs .8 no arg, exit 0 - - >SYSCALL AToL - bcs .9 - - >PULLL.G M32.ACC - - lda #$FF - >STA.G bExit - - >LDA.G M32.ACC - clc - rts - -.8 lda #$FF - >STA.G bExit - inc - clc -.9 rts -*-------------------------------------- -Cmd.INT.MD ldx #1 - jsr Cmd.GetArgX - bcs .9 - - >SYSCALL MKDir - rts - -.9 jmp Cmd.Exec.CSYN -*-------------------------------------- -Cmd.INT.REN ldx #2 - jsr Cmd.GetArgX - bcs .9 - >PUSHYA - ldx #1 - jsr Cmd.GetArgX - - >SYSCALL Rename - rts - -.9 jmp Cmd.Exec.CSYN -*-------------------------------------- -Cmd.INT.RD ldx #1 - jsr Cmd.GetArgX - bcs .9 - phy - pha - >PUSHEA.G CMD.Stat - pla - ply - >SYSCALL STAT - bcs .99 - - >LDA.G CMD.Stat+S.STAT.P.TYPE - cmp #S.FI.T.DIR - bne .9 - - ldx #1 - jsr Cmd.GetArgX - >SYSCALL Remove -.99 rts - -.9 jmp Cmd.Exec.CSYN -*-------------------------------------- -Cmd.INT.BREAK -.9 jmp Cmd.Exec.SSYN -*-------------------------------------- -Cmd.INT.CONTINUE -.9 jmp Cmd.Exec.SSYN -*-------------------------------------- -Cmd.INT.FOR -.9 jmp Cmd.Exec.SSYN -*-------------------------------------- -Cmd.INT.NEXT -.9 jmp Cmd.Exec.SSYN -*-------------------------------------- -Cmd.INT.WHILE -Cmd.INT.IF jsr CMD.StkGet - bcs .1 no context... - - and #$80 get current.. - lsr becomes parent - bra .2 - -.1 lda #$40 ...set Parent = true - -.2 >STA.G CMD.Test - - bit #$40 Parent is true ? - beq .3 - - jsr Cmd.Eval - bcs .9 - -.3 >LDA.G CMD.IntCmd - cmp #C.WHILE - bne .8 - - jsr CMD.StkPushPtr - bcs .9 - -.8 >LDA.G CMD.Test - >ORA.G CMD.IntCmd - jmp CMD.StkPush - - clc -.9 rts -*-------------------------------------- -Cmd.INT.ELSE jsr CMD.StkGet - bcs .9 - - bit #$40 parent is true ? - beq .8 no, skip - - tax - and #$3F - cmp #C.IF - bne .9 - txa - eor #$80 toggle and store at stack ptr - sta (pData),y - -.8 clc - rts - -.9 lda #E.NOIF - sec - rts -*-------------------------------------- -Cmd.INT.FI jsr CMD.StkPull - bcs .9 - - and #$3F - cmp #C.IF - bne .9 - - clc - rts - -.9 lda #E.NOIF - sec - rts -*-------------------------------------- -Cmd.INT.LOOP jsr CMD.StkPull - bcs .9 - tax - and #$3F - cmp #C.WHILE - bne .9 +.2 cmp #';' + bne .5 txa - bpl .1 + beq .6 - jmp CMD.StkPullPtr - -.1 jsr CMD.StkPull - bcs .99 - jmp CMD.StkPull - -.9 lda #E.NOWHILE - sec -.99 rts -*-------------------------------------- -Cmd.Eval ldx #1 - jsr Cmd.GetArgX - beq .9 - - >PUSHYA - >LDYA L.CMD.Eval.TOKEN1 - jsr Lookup - - bcs .9 - - cpx #4 [ or ![ - bcs .9 - dex - dex 1 or $ff - - txa - - and #$80 true or false - >ORA.G CMD.Test - sta (pData),y - - ldx #2 - jsr Cmd.GetArgX - beq .9 - - >PUSHYA - >LDYA L.CMD.Eval.TOKEN2 -d -e -f ? - jsr Lookup - - bcs .1 - - txa - >STA.G CMD.Operator - - jsr CMD.Eval.UNARY - bcs .9 - - >EOR.G CMD.Test - sta (pData),y - - ldx #4 go check ] - bra .8 - -.9 lda #E.ESYN - sec -.99 rts - -.1 ldx #3 - jsr Cmd.GetArgX - beq .9 - - >PUSHYA - >LDYA L.CMD.Eval.TOKEN3 -eq -ne .... ? - jsr Lookup - bcs .9 - txa - >STA.G CMD.Operator - - jsr CMD.Eval.BINARY - bcs .9 - - >EOR.G CMD.Test - sta (pData),y - - ldx #5 go check ] - -.8 jsr Cmd.GetArgX - beq .9 - - >STYA ZPPTR1 - - lda (ZPPTR1) - cmp #']' - bne .9 - - ldy #1 - lda (ZPPTR1),y - bne .9 - clc - rts -*-------------------------------------- -CMD.Eval.UNARY ldx #3 - jsr Cmd.GetArgX - bcs .9 we need one arg - - >LDA.G CMD.Operator - tax - jmp (J.CMD.Eval.TOKEN2,x) - -.9 lda #E.ESYN - sec - rts - -CMD.Eval.D jsr CMD.Eval.DEF.7 - bcs CMD.Eval.DEF.9 - >LDA.G CMD.Stat+S.STAT.P.TYPE - cmp #S.FI.T.DIR - bne CMD.Eval.DEF.9 - bra CMD.Eval.DEF.8 - -CMD.Eval.E jsr CMD.Eval.DEF.7 - bcs CMD.Eval.DEF.9 - bra CMD.Eval.DEF.8 DIR or FILE exist - -CMD.Eval.F jsr CMD.Eval.DEF.7 - bcs CMD.Eval.DEF.9 - - >LDA.G CMD.Stat+S.STAT.P.TYPE - cmp #S.FI.T.DIR - beq CMD.Eval.DEF.9 - bra CMD.Eval.DEF.8 - -CMD.Eval.DEF.7 >PUSHEA.G CMD.Stat - ldx #3 - jsr Cmd.GetArgX - >SYSCALL STAT - rts - -CMD.Eval.DEF.8 lda #$80 true - clc - rts - -CMD.Eval.DEF.9 lda #0 false - clc - rts -*-------------------------------------- -CMD.Eval.BINARY ldx #2 - jsr Cmd.GetArgX - bcs .9 - - ldx #4 - jsr Cmd.GetArgX - bcs .9 - - >LDA.G CMD.Operator - beq .1 = - - cmp #2 != - bne CMD.Eval.BINARY.NUM - lda #$80 - >STA.G CMD.Operator - -.1 ldx #2 - jsr Cmd.GetArgX - >PUSHYA - ldx #4 - jsr Cmd.GetArgX - >SYSCALL strcmp - ror CS if != - and #$80 - eor #$80 - >EOR.G CMD.Operator - clc - rts - -.9 lda #E.ESYN - sec - rts -*-------------------------------------- -CMD.Eval.BINARY.NUM - ldx #2 - jsr Cmd.GetArgX - bcs .9 - - >SYSCALL AToL - bcs .9 - - >PULLL.G M32.ACC - - ldx #4 - jsr Cmd.GetArgX - bcs .9 - - >SYSCALL AToL - bcs .9 - - >PULLL.G M32.ARG - - jsr M32.Cmp - pha - - >LDA.G CMD.Operator - lsr - tax - pla - and CMD.Eval.TOKEN3.BITS,x - beq .80 - - lda #$80 true - clc - rts - -.80 lda #0 false - clc - rts - -.9 lda #E.ESYN - sec - rts -*-------------------------------------- -Cmd.GetEXP >LDA.G CMD.ArgIndex - inc - tax - jsr Cmd.GetArgX - bcc .1 - - >LDA.G CMD.ArgIndex no op, return text value - tax - jsr Cmd.GetArgX - rts - -.1 >LDA.G CMD.ArgIndex - tax - jsr Cmd.GetArgX - >SYSCALL AToL - bcs .99 - - >PULLL.G M32.ACC - - jsr Cmd.GetEXP.GetNext - -.2 >PUSHYA - >LDYA L.CMD.Eval.TOKEN4 + - .... ? - jsr Lookup - - bcs .9 - txa - >STA.G CMD.Operator - - jsr M32.ACC2ARG - - jsr Cmd.GetEXP.GetNext get next argument in ACC -.99 bcs .9 - - >SYSCALL AToL - bcs .9 - - >PULLL.G M32.ACC - jsr Cmd.GetEXP.Op - bcs .9 - - jsr Cmd.GetEXP.GetNext another op ? - bcc .2 - -.8 >PUSHL.G M32.ACC - >PUSHBI 4 - >PUSHW L.M32.Printf - >LEA.G M32.BUF - >SYSCALL sprintf - bcs .9 - - >LEA.G M32.Buf - - rts - -.9 lda #E.BADEXP - rts - -Cmd.GetEXP.Op >LDA.G CMD.Operator - tax - jmp (J.CMD.Eval.TOKEN4,x) -*-------------------------------------- -Cmd.GetEXP.GetNext - >INC.G CMD.ArgIndex - tax - jsr Cmd.GetArgX - rts -*-------------------------------------- -Cmd.GetArgX >LDYA ZPArgVBuf - - dex - bmi .8 - - >STYA ZPPtr1 - -.1 lda (ZPPtr1) - beq .9 - -.2 inc ZPPtr1 - bne .3 - inc ZPPtr1+1 -.3 lda (ZPPtr1) - bne .2 - - inc ZPPtr1 - bne .4 - inc ZPPtr1+1 - -.4 lda (ZPPtr1) - beq .9 - - dex - bpl .1 - - >LDYA ZPPtr1 - -.8 clc - rts - -.9 sec - rts -*-------------------------------------- -CMD.IsSwitch >STYA ZPPtr1 - lda (ZPPtr1) - cmp #'-' - bne .9 - - ldy #1 - lda (ZPPtr1),y - beq .9 + lda #';' +.5 sta (ZPCLBuf),y iny - lda (ZPPtr1),y - bne .9 + cpy #CL.MAX + bne .1 - dey - lda (ZPPtr1),y - cmp #'a' - bcc .8 - cmp #'z'+1 - bcs .8 - eor #$20 - -.8 clc + lda #E.SYN Line Too long !!! +* sec rts -.9 >LDYA ZPPtr1 - sec +.6 sec skip CR or ; + .HS 90 BCC + +.7 clc + + tya + adc ZPInputBufPtr + sta ZPInputBufPtr + bcc .8 + inc ZPInputBufPtr+1 + +.8 lda #0 + sta (ZPCLBuf),y + + tya + >STA.G CL.Len + lda #$ff + >STA.G CL.bExec + + clc + rts + +.9 lda #C.EOF + sec rts *-------------------------------------- -CMD.StkPushPtr lda ZPFileBufPtrBak - jsr CMD.StkPush - bcs CMD.StkPullPtr.9 - lda ZPFileBufPtrBak+1 - bra CMD.StkPush +* in: +* ZPCLBuf : CString command line +* out: +* ZPArgVBuf : +* /path/excmd\0 arg1\0 arg2\0 ... \0 +* - or - +* intcmd\0 arg1\0 arg2\0 ... \0 +*-------------------------------------- +CL.Parse >STZ.G CMD.IntCmd + + lda #S.PS.F.HOLD+S.PS.F.DUPENV + >STA.G CMD.PSFlags + + >PUSHW ZPCLBuf + >LDYA ZPCLBuf + >STYA ZPCLBufPtr + + >SYSCALL Args2ArgV + + lda #0 + sta (ZPArgVBuf) + + lda (ZPCLBufPtr) + beq .8 + +.1 cmp #'#' comment ? + beq .8 yes, ignore remaining + + >LDA.G CMD.IntCmd + bne .3 we already have Cmd, go check args + + ldy #1 + lda (ZPCLBufPtr),y only one char ? + bne .2 + + lda (ZPCLBufPtr) + cmp #'.' leading dot ? + bne .2 + + >LDA.G CMD.PSFlags yes, child process will run in same ENV + and #$ff^S.PS.F.DUPENV + sta (pData),y + bra .6 and skip this token + +.2 jsr CL.CheckCmd + bcc .6 success, skip token, already added by CheckCmd + + rts + +.3 jsr CL.CheckIO + bcc .7 IO token & related args processed + tay an error ? + bne .9 yes...I/O error... + + jsr CL.AddCLBufPtrToArgV no...add as an arg + bcs .9 + +.6 jsr CL.NextCLToken +.7 lda (ZPCLBufPtr) + bne .1 + +.8 clc + .9 rts *-------------------------------------- -CMD.StkPullPtr jsr CMD.StkPull - bcs CMD.StkPullPtr.9 - sta ZPFileBufPtr+1 - jsr CMD.StkPull - bcs CMD.StkPullPtr.9 - sta ZPFileBufPtr -CMD.StkPullPtr.9 - rts +* ZPCLBuf-> argv[] (formatted & not empty) *-------------------------------------- -CMD.StkGetPtr lda (pData) StackPtr - beq .9 - dec - beq .9 - - tay +CL.CheckCmd ldy #$ff - lda (pData),y - sta ZPFileBufPtr - iny - lda (pData),y - sta ZPFileBufPtr+1 +.1 iny + lda (ZPCLBufPtr),y + beq .2 + cmp #'/' + bne .1 + bra .4 + +.2 >PUSHW ZPCLBufPtr + >LDYA L.CMD.INT + jsr Lookup no / found, search internal... + bcs .4 not internal, search PATH + + phx + plx + bne .3 + + >LDA.G CMD.PSFlags if STARTPROC, skip keyword... + and #$ff^S.PS.F.HOLD + sta (pData),y ...and toggle S.PS.F.HOLD flag + clc +.9 rts + +.3 jsr CL.AddYAToArgV X unmodified + bcs .9 + + txa + >STA.G CMD.IntCmd + + clc + rts + +.4 >LDYA ZPCLBufPtr + jsr CL.AddYAToArgV + + lda #$ff + >STA.G CMD.IntCmd + clc + +CL.CheckCmd.RTS + rts +*-------------------------------------- +CL.CheckIO >PUSHW ZPCLBufPtr + >LDYA L.CL.IO + jsr Lookup + bcs .9 not a IO token...should be an arg.... + phx + + jsr CL.NextCLToken skip this IO token + + plx + jmp (J.CL.IO,x) + +.9 lda #0 + rts +*-------------------------------------- +CL.IO.AMP >LDA.G CMD.PSFlags + and #$ff^S.PS.F.HOLD + sta (pData),y clc rts -.9 lda #E.SSYN - sec - rts +CL.IO.IN lda #O.RDONLY+O.TEXT + jsr CL.IO.Open + bcs .9 + jsr IO.Set.In + + jsr CL.NextCLToken skip arg + clc +.9 rts + +CL.IO.OUTA +CL.IO.1OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT + bra CL.IO.OUT.1 +CL.IO.OUT +CL.IO.1OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT + +CL.IO.OUT.1 jsr CL.IO.Open + bcs .9 + jsr IO.Set.Out + + jsr CL.NextCLToken skip arg + clc +.9 rts + +CL.IO.2OUTA lda #O.WRONLY+O.APPEND+O.CREATE+O.TEXT + bra CL.IO.2OUT.1 +CL.IO.2OUT lda #O.WRONLY+O.TRUNC+O.CREATE+O.TEXT + +CL.IO.2OUT.1 jsr CL.IO.Open + bcs .9 + jsr IO.Set.Err + + jsr CL.NextCLToken skip arg + clc +.9 rts *-------------------------------------- -CMD.StkPush pha - lda (pData) StackPtr - inc - cmp #CMD.STACK.MAX - beq .9 - sta (pData) StackPtr - tay - pla - sta (pData),y -* clc +CL.IO.Open pha + lda (ZPCLBufPtr) + beq .9 no arg left.... + + >PUSHWI 0 Aux type + >PUSHBI S.FI.T.TXT ftype + pla + >PUSHA flags + >LDYA ZPCLBufPtr + >SYSCALL fopen rts .9 pla - lda #E.STKOVERFLOW -* sec + lda #E.CSYN + sec + rts +*-------------------------------------- +CL.NextCLToken + lda (ZPCLBufPtr) + inc ZPCLBufPtr + bne .1 + inc ZPCLBufPtr+1 +.1 tax + bne CL.NextCLToken rts *-------------------------------------- -CMD.StkPull jsr CMD.StkGet - bcs .9 +CL.AddCLBufPtrToArgV + >LDYA ZPCLBufPtr +CL.AddYAToArgV >STYA ZPPtr1 + + >LDYA ZPArgVBuf + >STYA ZPPtr2 - dey - pha - tya - sta (pData) StackPtr - pla +.1 lda (ZPPtr2) scan to end of argV + beq .6 + +.2 inc ZPPtr2 + bne .3 + inc ZPPtr2+1 +.3 lda (ZPPtr2) + bne .2 + + inc ZPPtr2 + bne .4 + inc ZPPtr2+1 +.4 lda (ZPPtr2) + bne .2 + +.6 ldy #$ff + +.7 iny +* beq .9 + lda (ZPPtr1),y + sta (ZPPtr2),y + bne .7 including str ending \0 + + iny +* beq .9 + sta (ZPPtr2),y arg[] ending \0 -.9 rts -*-------------------------------------- -CMD.StkGet lda (pData) StackPtr - beq .9 - tay - lda (pData),y clc rts -.9 lda #E.SSYN - sec +.9 lda #E.BUF + sec rts *-------------------------------------- MAN diff --git a/BIN/SHELL.S.CORE.txt b/BIN/SHELL.S.CORE.txt new file mode 100644 index 00000000..b99540ed --- /dev/null +++ b/BIN/SHELL.S.CORE.txt @@ -0,0 +1,1106 @@ +NEW +PREFIX +AUTO 4,1 + .LIST OFF +*-------------------------------------- +* Input : CMD.IntCmd,ZPArgVBuf +*-------------------------------------- +CORE.Exec jsr CORE.StkGet IF,WHILE,FOR ? + bcs .3 no particular context, exec... + tax + + >LDA.G CORE.IntCmd + bmi .2 external ... + + and #$3F + cmp #C.FOR + bcs .3 FOR...FI : always execute + +.2 txa + bpl .8 context is FALSE, skip line + asl + bpl .8 parent context is FALSE, skip line + +.3 >LDA.G CMD.IntCmd + bpl .80 Internal + + >PUSHB.G CORE.PSFlags + >LDYA ZPArgVBuf + >SYSCALL execv + bcs .9 + + tax CPID + + >LDA.G CMD.PSFlags + and #S.PS.F.HOLD + bne .4 + + txa + >PUSHA + >PUSHBI 1 + >LDYA L.MSG.PID + >SYSCALL printf + rts + +.4 >SLEEP Suspend this PID + + sec + ldy #S.PS.RC CPID will update S.PS.RC + lda (pPs),y + bne .9 + +.8 clc +.9 rts + +.80 tax + jmp (J.CORE.INT,x) +*-------------------------------------- +* STARTPROC : intcmd = 0 +*-------------------------------------- +CORE.INT.STARTPROC + clc + rts +*-------------------------------------- +CORE.INT.SHIFT lda #1 + jmp ShiftA +*-------------------------------------- +CORE.INT.PWD ldy #S.PS.hPREFIX + lda (pPs),y + >SYSCALL GetMemPtr + >SYSCALL puts + rts +*-------------------------------------- +CORE.INT.PUSHD >LDA.G PUSHD.STACK + cmp #PUSHD.STACK+PUSHD.STACK.MAX + beq CORE.INT.POPD.CSYN + + ldy #S.PS.hPREFIX + lda (pPs),y + >SYSCALL GetMemPtr + >SYSCALL strdup + bcs CORE.INT.POPD.CSYN + + >INC.G PUSHD.STACK + tay + txa + sta (pData),y + + ldx #1 + jsr CORE.GetArgX + bcc CORE.INT.CD.1 + +.8 clc +.9 rts +*-------------------------------------- +CORE.INT.POPD >LDA.G PUSHD.STACK + cmp #PUSHD.STACK + beq CORE.INT.POPD.CSYN + + tay + lda (pData),y + jsr CORE.SetPrefixA + + >DEC.G PUSHD.STACK + clc +CORE.INT.POPD.RTS + rts + +CORE.INT.POPD.CSYN + jmp Cmd.Exec.CSYN +*-------------------------------------- +CORE.INT.CD ldx #1 + jsr CORE.GetArgX + bcc CORE.INT.CD.1 + +CORE.INT.CD.HOME >LDYA L.ENV.HOME + >SYSCALL GetEnv + bcc CORE.INT.CD.1 + + >LDYA L.ENV.ROOT + >SYSCALL GetEnv + bcc CORE.INT.CD.1 + + jmp CORE.INT.PWD + +CORE.INT.CD.1.9 pla + >SYSCALL freemem + bra CORE.INT.POPD.CSYN + +CORE.INT.CD.1 >SYSCALL realpath + bcs CORE.INT.POPD.RTS + >STYA ZPPtr1 + phx + + ldy #1 + lda (ZPPtr1),y + beq CORE.SetPrefixPHA we have '/' + + >PUSHEA.G CMD.Stat + >LDYA ZPPtr1 + >SYSCALL STAT + + bcs CORE.INT.CD.1.9 + + >LDA.G CMD.Stat+S.STAT.P.TYPE + cmp #S.FI.T.DIR + bne CORE.INT.CD.1.9 + + ldy #$ff + +.1 iny + lda (ZPPtr1),y + bne .1 + + dey + lda (ZPPtr1),y + cmp #'/' + beq CORE.SetPrefixPHA already ends witrh a / + + iny + iny + lda #0 + >SYSCALL getmem + bcs CORE.INT.CD.1.9 + >STYA ZPPtr2 + + ldy #$ff + +.2 iny + lda (ZPPtr1),y + lda (ZPPtr2),y + bne .2 + + iny + sta (ZPPtr2),y + dey + lda #'/' + sta (ZPPtr2),y + pla + phx + >SYSCALL freemem + pla +*-------------------------------------- +CORE.SetPrefixA pha +CORE.SetPrefixPHA + ldy #S.PS.hPREFIX + lda (pPs),y + >SYSCALL FreeMem + + pla + + ldy #S.PS.hPREFIX + sta (pPs),y + lda #0 +* clc + rts +*-------------------------------------- +CORE.Exec.CSYN lda #E.CSYN + sec + rts +*-------------------------------------- +CORE.Exec.SSYN lda #E.SSYN + sec + rts +*-------------------------------------- +CORE.INT.SET ldx #1 + jsr CORE.GetArgX + bcc CORE.INT.SET.1 + +* No arg, print all ENV + + ldy #S.PS.hENV + lda (pPs),y + >SYSCALL GetMemPtr + >STYA ZPPTR1 + +.1 lda (ZPPTR1) + beq .8 Ending 0 ? + + ldy #$ff + +.2 iny + lda (ZPPTR1),y + bne .2 + + tya + sec + adc ZPPTR1 + sta ZPPTR2 + lda #0 + adc ZPPTR1+1 + sta ZPPTR2+1 + + >PUSHW ZPPTR2 Push value + >PUSHW ZPPTR1 Push name + jsr CORE.INT.SET.PRINT + + bcs .9 + + ldy #$ff + +.3 iny + lda (ZPPTR2),y + bne .3 + + tya + sec + adc ZPPTR2 + sta ZPPTR1 + lda #0 + adc ZPPTR2+1 + sta ZPPTR1+1 + bra .1 + +.8 clc +.9 rts +*-------------------------------------- +* SET +X VAR = VALUE1 op VALUE2 op VALUE3 ... +*-------------------------------------- +CORE.INT.SET.1 >STZ.G CORE.Varname + + lda #1 + >STA.G CORE.ArgIndex + +.1 tax + jsr CORE.GetArgX + bcs .8 + + jsr CORE.IsSwitch + bcs .6 + + cmp #'C' + bne .2 + + >LDA.G bSET.C + bra .5 + +.2 cmp #'X' + bne .99 + + >LDA.G bSET.X + +.5 eor #$ff + sta (pData),y + >INC.G CORE.ArgIndex + bra .1 + +.6 >LDA.G CORE.ArgIndex + >STA.G CORE.Varname + + >INC.G CORE.ArgIndex + tax + jsr CORE.GetArgX + bcs CORE.INT.SET.GET + + >STYA ZPPTR1 + + lda (ZPPTR1) + + cmp #'=' + bne .99 + + ldy #1 + lda (ZPPTR1),y + bne .99 + + >INC.G CORE.ArgIndex + tax + jsr CORE.GetArgX + bcs CORE.INT.SET.UNSET + + jsr CORE.GetEXP + + bcs .99 + + >PUSHYA + >LDA.G CORE.Varname + tax + jsr CORE.GetArgX + >SYSCALL SetEnv + rts + +.8 clc + rts + +.99 jmp CORE.Exec.CSYN + +CORE.INT.SET.UNSET + >LDA.G CORE.Varname + tax + jsr CORE.GetArgX + >SYSCALL UnsetEnv + rts + +CORE.INT.SET.GET + >LDA.G CORE.Varname + tax + jsr CORE.GetArgX + >SYSCALL GetEnv + bcc .1 + clc + rts + +.1 >PUSHYA push value + >LDA.G CORE.Varname + tax + jsr CORE.GetArgX + >PUSHYA push name +*-------------------------------------- +CORE.INT.SET.PRINT + >PUSHBI 4 + >LDYA L.MSG.PRINTENV + >SYSCALL printf + rts +*-------------------------------------- +CORE.INT.DATE sec + .HS 90 bcc +CORE.INT.TIME clc + php + >LEA.G CORE.Time + >SYSCALL Time + + >PUSHEA.G CORE.Time + + plp + bcc .1 + >PUSHW L.FMT.DATE + bra .2 +.1 >PUSHW L.FMT.TIME + +.2 >LDYA ZPCLBuf + >SYSCALL StrFTime + + >LDYA ZPCLBuf + >SYSCALL puts + rts +*-------------------------------------- +CORE.INT.ECHO >STZ.G bECHO.N + + lda #1 + >STA.G CORE.ArgIndex + +.1 tax + jsr CORE.GetArgX + bcs .7 + + jsr CORE.IsSwitch + bcs .2 + + cmp #'N' + bne .99 + + lda #$ff + >EOR.G bECHO.N + sta (pData),y + >INC.G CORE.ArgIndex + bra .1 + +.2 pha + >PUSHBI 0 + pla + >SYSCALL printf + bcs .9 + + >INC.G CORE.ArgIndex + tax + + jsr CORE.GetArgX + bcs .7 + +.6 lda #C.SPACE + >SYSCALL putchar + bcs .9 + + >PUSHBI 0 + + >LDA.G CORE.ArgIndex + tax + jsr CORE.GetArgX + + >SYSCALL printf + bcs .9 + + >INC.G CORE.ArgIndex + tax + + jsr CORE.GetArgX + bcc .6 + +.7 >LDA.G bECHO.N + bmi .8 + + >PUSHBI 0 + >LDYA L.MSG.ECHOCRLF + >SYSCALL printf + rts + +.8 clc +.9 rts + +.99 lda #E.CSYN + sec + rts +*-------------------------------------- +CORE.INT.GETKEY ldx #1 + jsr CORE.GetArgX + bcs .99 + + >SYSCALL getchar + bcc .1 + tay + bne .9 + +.1 >PUSHA + >PUSHBI 1 + >PUSHW L.FMT.GETKEY + >LEA.G M32.BUF + >SYSCALL sprintf + bcs .9 + + >PUSHEA.G M32.BUF + + ldx #1 + jsr Cmd.GetArgX + >SYSCALL SetEnv +.9 rts + +.99 jmp CORE.Exec.CSYN +*-------------------------------------- +CORE.INT.READ lda #1 + >STA.G CORE.ArgIndex + + tax + jsr CORE.GetArgX + bcs .9 + +.1 jsr CORE.IsSwitch + bcs .4 + cmp #'S' + bne .2 + + lda #$ff + >STA.G bREAD.S + + bra .7 + +.2 cmp #'P' + bne .9 + + >INC.G CORE.ArgIndex + tax + jsr CORE.GetArgX + bcs .9 + pha + >PUSHBI 0 + pla + >SYSCALL printf + bcs .99 + bra .7 + +.4 >SYSCALL strdup + txa + >STA.G hVarName + +.7 >INC.G CMD.ArgIndex + tax + jsr Cmd.GetArgX + bcc .1 + + >LDA.G hVarName + beq .9 + clc +.99 rts + +.9 jmp CORE.Exec.CSYN +*-------------------------------------- +CORE.INT.SLEEP ldx #1 + jsr CORE.GetArgX + bcs .9 + + >SYSCALL AToL + bcs .9 + + >PULLL.G Sleep + clc + rts + +.9 jmp CORE.Exec.CSYN +*-------------------------------------- +CORE.INT.PAUSE lda #$FF + >STA.G bPause + clc + rts +*-------------------------------------- +CORE.INT.EXIT ldx #1 + jsr CORE.GetArgX + bcs .8 no arg, exit 0 + + >SYSCALL AToL + bcs .9 + + >PULLL.G M32.ACC + + lda #$FF + >STA.G bExit + + >LDA.G M32.ACC + clc + rts + +.8 lda #$FF + >STA.G bExit + inc + clc +.9 rts +*-------------------------------------- +CORE.INT.MD ldx #1 + jsr CORE.GetArgX + bcs .9 + + >SYSCALL MKDir + rts + +.9 jmp CORE.Exec.CSYN +*-------------------------------------- +CORE.INT.REN ldx #2 + jsr CORE.GetArgX + bcs .9 + >PUSHYA + ldx #1 + jsr CORE.GetArgX + + >SYSCALL Rename + rts + +.9 jmp CORE.Exec.CSYN +*-------------------------------------- +CORE.INT.RD ldx #1 + jsr CORE.GetArgX + bcs .9 + phy + pha + >PUSHEA.G CORE.Stat + pla + ply + >SYSCALL STAT + bcs .99 + + >LDA.G CORE.Stat+S.STAT.P.TYPE + cmp #S.FI.T.DIR + bne .9 + + ldx #1 + jsr CORE.GetArgX + >SYSCALL Remove +.99 rts + +.9 jmp CORE.Exec.CSYN +*-------------------------------------- +CORE.INT.BREAK +.9 jmp CORE.Exec.SSYN +*-------------------------------------- +CORE.INT.CONTINUE +.9 jmp CORE.Exec.SSYN +*-------------------------------------- +CORE.INT.FOR +.9 jmp CORE.Exec.SSYN +*-------------------------------------- +CORE.INT.NEXT +.9 jmp CORE.Exec.SSYN +*-------------------------------------- +CORE.INT.WHILE +CORE.INT.IF jsr CORE.StkGet + bcs .1 no context... + + and #$80 get current.. + lsr becomes parent + bra .2 + +.1 lda #$40 ...set Parent = true + +.2 >STA.G CORE.Test + + bit #$40 Parent is true ? + beq .3 + + jsr CORE.Eval + bcs .9 + +.3 >LDA.G CORE.IntCmd + cmp #C.WHILE + bne .8 + + jsr CORE.StkPushPtr + bcs .9 + +.8 >LDA.G CORE.Test + >ORA.G CORE.IntCmd + jmp CORE.StkPush + + clc +.9 rts +*-------------------------------------- +CORE.INT.ELSE jsr CORE.StkGet + bcs .9 + + bit #$40 parent is true ? + beq .8 no, skip + + tax + and #$3F + cmp #C.IF + bne .9 + txa + eor #$80 toggle and store at stack ptr + sta (pData),y + +.8 clc + rts + +.9 lda #E.NOIF + sec + rts +*-------------------------------------- +CORE.INT.FI jsr CORE.StkPull + bcs .9 + + and #$3F + cmp #C.IF + bne .9 + + clc + rts + +.9 lda #E.NOIF + sec + rts +*-------------------------------------- +CORE.INT.LOOP jsr CORE.StkPull + bcs .9 + tax + and #$3F + cmp #C.WHILE + bne .9 + + txa + bpl .1 + + jmp CORE.StkPullPtr + +.1 jsr CORE.StkPull + bcs .99 + jmp CORE.StkPull + +.9 lda #E.NOWHILE + sec +.99 rts +*-------------------------------------- +CORE.Eval ldx #1 + jsr CORE.GetArgX + beq .9 + + >PUSHYA + >LDYA L.CORE.Eval.TOKEN1 + jsr Lookup + + bcs .9 + + cpx #4 [ or ![ + bcs .9 + dex + dex 1 or $ff + + txa + + and #$80 true or false + >ORA.G CORE.Test + sta (pData),y + + ldx #2 + jsr CORE.GetArgX + beq .9 + + >PUSHYA + >LDYA L.CORE.Eval.TOKEN2 -d -e -f ? + jsr Lookup + + bcs .1 + + txa + >STA.G CORE.Operator + + jsr CORE.Eval.UNARY + bcs .9 + + >EOR.G CORE.Test + sta (pData),y + + ldx #4 go check ] + bra .8 + +.9 lda #E.ESYN + sec +.99 rts + +.1 ldx #3 + jsr CORE.GetArgX + beq .9 + + >PUSHYA + >LDYA L.CORE.Eval.TOKEN3 -eq -ne .... ? + jsr Lookup + bcs .9 + txa + >STA.G CORE.Operator + + jsr CORE.Eval.BINARY + bcs .9 + + >EOR.G CORE.Test + sta (pData),y + + ldx #5 go check ] + +.8 jsr CORE.GetArgX + beq .9 + + >STYA ZPPTR1 + + lda (ZPPTR1) + cmp #']' + bne .9 + + ldy #1 + lda (ZPPTR1),y + bne .9 + clc + rts +*-------------------------------------- +CORE.Eval.UNARY ldx #3 + jsr CORE.GetArgX + bcs .9 we need one arg + + >LDA.G CORE.Operator + tax + jmp (J.CORE.Eval.TOKEN2,x) + +.9 lda #E.ESYN + sec + rts + +CORE.Eval.D jsr CORE.Eval.DEF.7 + bcs CORE.Eval.DEF.9 + >LDA.G CORE.Stat+S.STAT.P.TYPE + cmp #S.FI.T.DIR + bne CORE.Eval.DEF.9 + bra CORE.Eval.DEF.8 + +CORE.Eval.E jsr CORE.Eval.DEF.7 + bcs CORE.Eval.DEF.9 + bra CORE.Eval.DEF.8 DIR or FILE exist + +CORE.Eval.F jsr CORE.Eval.DEF.7 + bcs CORE.Eval.DEF.9 + + >LDA.G CORE.Stat+S.STAT.P.TYPE + cmp #S.FI.T.DIR + beq CORE.Eval.DEF.9 + bra CORE.Eval.DEF.8 + +CORE.Eval.DEF.7 >PUSHEA.G CORE.Stat + ldx #3 + jsr CORE.GetArgX + >SYSCALL STAT + rts + +CORE.Eval.DEF.8 lda #$80 true + clc + rts + +CORE.Eval.DEF.9 lda #0 false + clc + rts +*-------------------------------------- +CORE.Eval.BINARY ldx #2 + jsr CORE.GetArgX + bcs .9 + + ldx #4 + jsr CORE.GetArgX + bcs .9 + + >LDA.G CORE.Operator + beq .1 = + + cmp #2 != + bne CORE.Eval.BINARY.NUM + lda #$80 + >STA.G CORE.Operator + +.1 ldx #2 + jsr CORE.GetArgX + >PUSHYA + ldx #4 + jsr CORE.GetArgX + >SYSCALL strcmp + ror CS if != + and #$80 + eor #$80 + >EOR.G CORE.Operator + clc + rts + +.9 lda #E.ESYN + sec + rts +*-------------------------------------- +CORE.Eval.BINARY.NUM + ldx #2 + jsr CORE.GetArgX + bcs .9 + + >SYSCALL AToL + bcs .9 + + >PULLL.G M32.ACC + + ldx #4 + jsr CORE.GetArgX + bcs .9 + + >SYSCALL AToL + bcs .9 + + >PULLL.G M32.ARG + + jsr M32.Cmp + pha + + >LDA.G CORE.Operator + lsr + tax + pla + and CORE.Eval.TOKEN3.BITS,x + beq .80 + + lda #$80 true + clc + rts + +.80 lda #0 false + clc + rts + +.9 lda #E.ESYN + sec + rts +*-------------------------------------- +CORE.GetEXP >LDA.G CORE.ArgIndex + inc + tax + jsr CORE.GetArgX + bcc .1 + + >LDA.G CORE.ArgIndex no op, return text value + tax + jsr CORE.GetArgX + rts + +.1 >LDA.G CORE.ArgIndex + tax + jsr CORE.GetArgX + >SYSCALL AToL + bcs .99 + + >PULLL.G M32.ACC + + jsr CORE.GetEXP.GetNext + +.2 >PUSHYA + >LDYA L.CORE.Eval.TOKEN4 + - .... ? + jsr Lookup + + bcs .9 + txa + >STA.G CORE.Operator + + jsr M32.ACC2ARG + + jsr CORE.GetEXP.GetNext get next argument in ACC +.99 bcs .9 + + >SYSCALL AToL + bcs .9 + + >PULLL.G M32.ACC + jsr CORE.GetEXP.Op + bcs .9 + + jsr CORE.GetEXP.GetNext another op ? + bcc .2 + +.8 >PUSHL.G M32.ACC + >PUSHBI 4 + >PUSHW L.M32.Printf + >LEA.G M32.BUF + >SYSCALL sprintf + bcs .9 + + >LEA.G M32.Buf + + rts + +.9 lda #E.BADEXP + rts + +CORE.GetEXP.Op >LDA.G CORE.Operator + tax + jmp (J.CORE.Eval.TOKEN4,x) +*-------------------------------------- +CORE.GetEXP.GetNext + >INC.G CORE.ArgIndex + tax + jsr CORE.GetArgX + rts +*-------------------------------------- +CORE.GetArgX >LDYA ZPArgVBuf + + dex + bmi .8 + + >STYA ZPPtr1 + +.1 lda (ZPPtr1) + beq .9 + +.2 inc ZPPtr1 + bne .3 + inc ZPPtr1+1 +.3 lda (ZPPtr1) + bne .2 + + inc ZPPtr1 + bne .4 + inc ZPPtr1+1 + +.4 lda (ZPPtr1) + beq .9 + + dex + bpl .1 + + >LDYA ZPPtr1 + +.8 clc + rts + +.9 sec + rts +*-------------------------------------- +CORE.IsSwitch >STYA ZPPtr1 + lda (ZPPtr1) + cmp #'-' + bne .9 + + ldy #1 + lda (ZPPtr1),y + beq .9 + + iny + lda (ZPPtr1),y + bne .9 + + dey + lda (ZPPtr1),y + cmp #'a' + bcc .8 + cmp #'z'+1 + bcs .8 + eor #$20 + +.8 clc + rts + +.9 >LDYA ZPPtr1 + sec + rts +*-------------------------------------- +CORE.StkPushPtr lda ZPInputBufPtrBak + jsr CORE.StkPush + bcs CORE.StkPullPtr.9 + lda ZPInputBufPtrBak+1 + bra CORE.StkPush +.9 rts +*-------------------------------------- +CORE.StkPullPtr jsr CORE.StkPull + bcs CORE.StkPullPtr.9 + sta ZPInputBufPtr+1 + jsr CORE.StkPull + bcs CORE.StkPullPtr.9 + sta ZPInputBufPtr +CORE.StkPullPtr.9 + rts +*-------------------------------------- +CORE.StkGetPtr lda (pData) StackPtr + beq .9 + dec + beq .9 + + tay + + lda (pData),y + sta ZPInputBufPtr + iny + lda (pData),y + sta ZPInputBufPtr+1 + + clc + rts + +.9 lda #E.SSYN + sec + rts +*-------------------------------------- +CORE.StkPush pha + lda (pData) StackPtr + inc + cmp #CORE.STACK.MAX + beq .9 + sta (pData) StackPtr + tay + pla + sta (pData),y +* clc + rts + +.9 pla + lda #E.STKOVERFLOW +* sec + rts +*-------------------------------------- +CORE.StkPull jsr CORE.StkGet + bcs .9 + + dey + pha + tya + sta (pData) StackPtr + pla + +.9 rts +*-------------------------------------- +CORE.StkGet lda (pData) StackPtr + beq .9 + tay + lda (pData),y + clc + rts + +.9 lda #E.SSYN + sec + rts +*-------------------------------------- +MAN +SAVE USR/SRC/BIN/SHELL.S.CORE +LOAD USR/SRC/BIN/SHELL.S +ASM diff --git a/BIN/SHELL.S.IO.txt b/BIN/SHELL.S.IO.txt index 5624c708..b368a78d 100644 --- a/BIN/SHELL.S.IO.txt +++ b/BIN/SHELL.S.IO.txt @@ -111,9 +111,9 @@ IO.PrintBatchErrMsg bne .2 Scan until EoL ldx ZPPtr1 - cpx ZPFileBufPtr + cpx ZPInputBufPtr lda ZPPtr1+1 - sbc ZPFileBufPtr+1 + sbc ZPInputBufPtr+1 bcc .1 not this line.... .4 ldy #0 @@ -137,7 +137,7 @@ IO.PrintBatchErrMsg lda (pPS),y >SYSCALL fprintf - lda ZPFileBufPtr + lda ZPInputBufPtr sec sbc ZPPtr2 beq .8 diff --git a/BIN/SHELL.S.txt b/BIN/SHELL.S.txt index 3570210f..601a705c 100644 --- a/BIN/SHELL.S.txt +++ b/BIN/SHELL.S.txt @@ -4,7 +4,7 @@ AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 - .TF BIN/SHELL + .TF BIN/SHELL2 *-------------------------------------- CL.MAX .EQ 159 History.MAX .EQ 256 @@ -63,9 +63,8 @@ ZPPtr2 .BS 2 ZPPtr3 .BS 2 ZPCLBuf .BS 2 ZPCLBufPtr .BS 2 -ZPFileBufPtr .BS 2 -ZPFileBufPtrBak .BS 2 -ZPCmdBuf .BS 2 +ZPInputBufPtr .BS 2 +ZPInputBufPtrBak .BS 2 ZPArgVBuf .BS 2 ZS.END .ED *-------------------------------------- @@ -119,42 +118,42 @@ J.CL.IO .DA CL.IO.AMP .DA CL.IO.1OUT .DA CL.IO.2OUTA .DA CL.IO.2OUT -L.CMD.INT .DA CMD.INT -J.CMD.INT .DA Cmd.INT.STARTPROC - .DA Cmd.INT.CD - .DA Cmd.INT.DATE - .DA Cmd.INT.ECHO - .DA Cmd.INT.EXIT - .DA Cmd.INT.GETKEY - .DA Cmd.INT.MD - .DA Cmd.INT.PAUSE - .DA Cmd.INT.PWD - .DA Cmd.INT.RD - .DA Cmd.INT.READ - .DA Cmd.INT.REN - .DA Cmd.INT.SET - .DA Cmd.INT.SLEEP - .DA Cmd.INT.SHIFT - .DA Cmd.INT.TIME - .DA Cmd.INT.PUSHD - .DA Cmd.INT.POPD - .DA Cmd.INT.BREAK - .DA Cmd.INT.CONTINUE - .DA Cmd.INT.FOR - .DA Cmd.INT.NEXT - .DA Cmd.INT.WHILE - .DA Cmd.INT.LOOP - .DA Cmd.INT.IF - .DA Cmd.INT.ELSE - .DA Cmd.INT.FI -L.CMD.Eval.TOKEN1 .DA CMD.Eval.TOKEN1 -L.CMD.Eval.TOKEN2 .DA CMD.Eval.TOKEN2 -J.CMD.Eval.TOKEN2 .DA CMD.Eval.D - .DA CMD.Eval.E - .DA CMD.Eval.F -L.CMD.Eval.TOKEN3 .DA CMD.Eval.TOKEN3 -L.CMD.Eval.TOKEN4 .DA CMD.Eval.TOKEN4 -J.CMD.Eval.TOKEN4 .DA M32.Add +L.CORE.INT .DA CORE.INT +J.CORE.INT .DA CORE.INT.STARTPROC + .DA CORE.INT.CD + .DA CORE.INT.DATE + .DA CORE.INT.ECHO + .DA CORE.INT.EXIT + .DA CORE.INT.GETKEY + .DA CORE.INT.MD + .DA CORE.INT.PAUSE + .DA CORE.INT.PWD + .DA CORE.INT.RD + .DA CORE.INT.READ + .DA CORE.INT.REN + .DA CORE.INT.SET + .DA CORE.INT.SLEEP + .DA CORE.INT.SHIFT + .DA CORE.INT.TIME + .DA CORE.INT.PUSHD + .DA CORE.INT.POPD + .DA CORE.INT.BREAK + .DA CORE.INT.CONTINUE + .DA CORE.INT.FOR + .DA CORE.INT.NEXT + .DA CORE.INT.WHILE + .DA CORE.INT.LOOP + .DA CORE.INT.IF + .DA CORE.INT.ELSE + .DA CORE.INT.FI +L.CORE.Eval.TOKEN1 .DA CORE.Eval.TOKEN1 +L.CORE.Eval.TOKEN2 .DA CORE.Eval.TOKEN2 +J.CORE.Eval.TOKEN2 .DA CORE.Eval.D + .DA CORE.Eval.E + .DA CORE.Eval.F +L.CORE.Eval.TOKEN3 .DA CORE.Eval.TOKEN3 +L.CORE.Eval.TOKEN4 .DA CORE.Eval.TOKEN4 +J.CORE.Eval.TOKEN4 .DA M32.Add .DA M32.Sub .DA M32.Mul .DA M32.Div @@ -186,7 +185,7 @@ CS.RUN jsr CMD.Init txa >STA.G hFileBuf >SYSCALL GetMemPtr - >STYA ZPFileBufPtr + >STYA ZPInputBufPtr lda #0 jsr ShiftA Remove $0=/bin/shell @@ -359,7 +358,7 @@ CS.RUN.BATCH >SYSCALL GetChar clc jmp CS.RUN.LOOP.END -.2 jsr CL.GetLine +.2 jsr CL.GetCmd bcc .7 cmp #C.EOF @@ -674,7 +673,6 @@ CL.Len .BS 1 CL.bExec .BS 1 CMD.IntCmd .BS 1 -CMD.hCmdBuf .BS 1 CMD.hArgVBuf .BS 1 CMD.ArgIndex .BS 1