diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 845a50b5..dff1fc32 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 25b80e5f..9eb804ce 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -207,27 +207,38 @@ CMD.SET.1 bcs .6 cmp #'C' bne .2 + ldy #bSET.C bra .5 + .2 cmp #'X' bne .3 + ldy #bSET.X bra .5 + .3 cmp #'E' bne .4 + ldy #bSET.E bra .5 + .4 cmp #'F' bne .99 + jsr CORE.FUNCRESET bra .50 + .5 lda (pData),y eor #$ff sta (pData),y + .50 jsr CORE.ArgV.Next bne .1 + clc rts + .6 >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr @@ -235,9 +246,11 @@ CMD.SET.1 beq CMD.SET.GET cmp #'=' bne .99 + ldy #1 lda (ZPArgVBufPtr),y bne .99 + jsr CORE.ArgV.Next beq CMD.SET.UNSET @@ -663,87 +676,55 @@ CMD.EXIT lda (ZPArgVBufPtr) jsr EXP.GetInt8Exp bcs .9 -.1 sta M32.ACC +.1 ldy #S.PS.RC + sta (pPs),y .2 jsr CORE.StkPull Pull everything until CALL . CL... bcs .9 - cmp #$C0+C.. in CALL . CL context ? + cmp #$C0+C.. in CALL, "." or CL context ? beq CMD.EXIT.FILE + cmp #$C0+C.CALL beq CMD.EXIT.FILE + cmp #$C0+C.CLEXEC - beq CMD.EXIT.SH - jsr CMD.EXIT.POP + beq .8 + + jsr CORE.StkPopCtxA bcc .2 + rts -.9 rts -*-------------------------------------- -CMD.EXIT.SH jsr CMD.EXIT.FILE - +.8 jsr CMD.EXIT.FILE lda #$ff >STA.G bExitOnEOF clc - rts +.9 rts *-------------------------------------- CMD.EXIT.FILE jsr CORE.StkPull >SYSCALL freemem Code buffer + ldy #S.PS.hARGV lda (pPS),y >SYSCALL freemem ArgV buffer + jsr CORE.StkPull ldy #S.PS.hARGV sta (pPS),y + jsr CORE.StkPull ldy #S.PS.ARGC sta (pPS),y jsr CORE.StkPullInputBufPtr + jsr CORE.StkPull sta ZPInputBuf+1 jsr CORE.StkPull sta ZPInputBuf - lda M32.ACC -CMD.EXIT.CLCRTS clc -CMD.EXIT.RTS rts -*-------------------------------------- -CMD.EXIT.POP and #$3F - cmp #C.IF - beq CMD.EXIT.CLCRTS IF : Nothing - - ldx #2 - cmp #C.WHILE WHILE : One Ptr = 2 bytes - beq CMD.EXIT.POPX - - cmp #C.SWITCH SWITCH : hValue - beq .2 - - 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 - dex - bne .1 - - sta (pData) - clc - rts + rts *-------------------------------------- CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult bcs .9 @@ -848,18 +829,15 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult and #$3F cmp #C.SWITCH - beq .3 + beq .8 cmp #C.CASE - beq .2 + beq .8 cmp #C.DEFAULT bne CMD.E.CSYN -.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 + +.8 jmp CORE.StkPopCtx *-------------------------------------- CMD.FOR jsr CORE.StkGetCtx @@ -968,6 +946,7 @@ CMD.NEXT jsr CORE.StkGet Y = StkPtr tax beq CMD.NEXT.LIST jmp CMD.NEXT.FILEEXEC + .9 lda #E.NOFOR sec rts @@ -1168,11 +1147,14 @@ CMD.IF jsr CORE.StkGetCtx .3 lda CORE.IntCmd cmp #C.WHILE bne .8 + lda #3 jsr CORE.StkCheck bcs CMD.NEXT.LINE.RTS + >LDYA ZPInputCmdPtr jsr CORE.StkPushYA Push BEFORE WHILE/IF + .8 lda CORE.TestResult ora CORE.IntCmd jmp CORE.StkPush @@ -1185,10 +1167,9 @@ CMD.LOOP jsr CORE.StkPull cmp #C.WHILE bne .9 txa - bmi .8 + bmi .8 true, loop - ldx #2 Discard loop Ptr - jmp CMD.EXIT.POPX + jmp CORE.StkPopCtxA false, Discard loop Ptr .8 jmp CORE.StkPullInputBufPtr @@ -1217,11 +1198,14 @@ CMD.ELSE jsr CORE.StkGet *-------------------------------------- CMD.FI jsr CORE.StkPull bcs .9 + and #$3F cmp #C.IF bne .9 + clc rts + .9 lda #E.NOIF sec rts diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 43f8d5f1..380201ef 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -99,6 +99,7 @@ CORE.Run.EOF jsr CORE.StkPull lda #0 sec rts Ending 0, CS,A=0 + .9 lda #E.UNEXPEOF sec rts @@ -151,15 +152,21 @@ CORE.Run.1 sec coming from PIPE OUT .4 >LDYA L.CMD internal command ? jsr CORE.LookupInputBuf bcc .41 + .40 jsr CORE.ArgV.Add external cmd, go check context bra .42 -.41 jsr CORE.SkipCharsA - stx CORE.IntCmd + +.41 stx CORE.IntCmd + asl CORE.IntCmd + jsr CORE.SkipCharsA + .42 jsr CORE.StkGet bcs CORE.Run.7 no particular context, exec... + tax lda CORE.IntCmd bmi .45 + and #$3F cmp #C.SWITCH SWITCH....FI ? bcs CORE.Run.7 @@ -178,6 +185,7 @@ CORE.Run.1 sec coming from PIPE OUT jsr CORE.GetNextChar bra .43 + .44 jsr CORE.GetNextCharNB Skip EoL char clc .99 rts @@ -263,7 +271,7 @@ CORE.ExecCmd lda #0 lda CORE.IntCmd bmi CORE.ExecExtCmd - asl + tax jmp (J.CMD,x) @@ -319,9 +327,12 @@ CORE.LookupArgVBuf CORE.Lookup >STYA ZPPtr2 ldx #0 + .1 ldy #$ff + .2 jsr .7 get next valid char in src text bcs .3 + .20 jsr ToUpperCase eor (ZPPtr1),y match table char ? asl compare only 7 bits @@ -340,12 +351,14 @@ CORE.Lookup >STYA ZPPtr2 .3 dey lda (ZPPtr1),y was last char in this keyword ? bmi .8 + iny .41 jsr IncPtr1 skip chars to next keyword .4 lda (ZPPtr1) bpl .41 jsr IncPtr1 + .6 inx lda (ZPPtr1) Array Ending 0, lookup failed bne .1 @@ -594,12 +607,53 @@ CORE.SkipCharsA clc *-------------------------------------- * Stack *-------------------------------------- +CORE.StkPopCtx jsr CORE.StkPull + +CORE.StkPopCtxA and #$3F + cmp #C.IF + beq .8 IF : Nothing + + ldx #2 + cmp #C.WHILE WHILE : One Ptr = 2 bytes + beq CORE.StkPopX + + cmp #C.SWITCH SWITCH : hValue + beq .2 + + ldx #1 + cmp #C.CASE CASE : C.CASE + hValue + beq .1 + + cmp #C.DEFAULT DEFAULT : C.DEFAULT + hValue + bne .9 + +.1 jsr CORE.StkPopX + +.2 jsr CORE.StkPull + >SYSCALL freemem +.8 clc + rts + +.9 lda #E.STACKERROR + sec + rts +*-------------------------------------- +CORE.StkPopX lda (pData) +.1 dec + dex + bne .1 + + sta (pData) + + clc + rts +*-------------------------------------- CORE.StkCheck sec adc (pData) StackPtr cmp #CORE.STACK.MAX bcc .8 lda #E.STKOVERFLOW -* clc +* sec .8 rts *-------------------------------------- CORE.StkPushYAX phx diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 7f7cc093..f6068fca 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -162,8 +162,10 @@ IO.PrintBatchErrMsg lda (pPs),y cmp #E.SYN beq .10 + >LDYA ZPInputCmdPtr bra .11 + .10 >LDYA ZPInputBufPtr .11 >STYA ZPPtr2 @@ -235,13 +237,14 @@ IO.PrintBatchErrMsg >PUSHW L.MSG.BATCHERR .80 bra IO.PrintErr *-------------------------------------- -IO.PrintErrMsg pha Save EC for PrintF - - ldx L.ERR.Codes +IO.PrintErrMsg ldx L.ERR.Codes stx ZPPTR1 ldx L.ERR.Codes+1 stx ZPPTR1+1 + ldy #S.PS.RC + lda (pPs),y + ldy #0 .1 cmp (ZPPTR1),y @@ -260,8 +263,12 @@ IO.PrintErrMsg pha Save EC for PrintF lda (ZPPTR1) jsr AddAp1Ptr1 bra .3 + .8 >PUSHW ZPPTR1 - pla + + ldy #S.PS.RC + lda (pPs),y + >PUSHA >PUSHBI 3 >PUSHW L.MSG.ERROR diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 26620e35..753cb55e 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -10,40 +10,40 @@ CORE.STACK.MAX .EQ 128 PUSHD.STACK.MAX .EQ 4 *-------------------------------------- C... .EQ 0 -C.. .EQ 1 -C.CD .EQ 2 -C.NOHUP .EQ 3 -C.DATE .EQ 4 -C.ECHO .EQ 5 -C.EXIT .EQ 6 -C.MD .EQ 7 -C.PAUSE .EQ 8 -C.PWD .EQ 9 -C.RD .EQ 10 -C.READ .EQ 11 -C.REN .EQ 12 -C.SET .EQ 13 -C.SLEEP .EQ 14 -C.SHIFT .EQ 15 -C.PUSHD .EQ 16 -C.POPD .EQ 17 -C.FUNCTION .EQ 18 -C.CALL .EQ 19 -C.BREAK .EQ 20 -C.SWITCH .EQ 21 -C.CASE .EQ 22 -C.DEFAULT .EQ 23 +C.. .EQ 2 +C.CD .EQ 4 +C.NOHUP .EQ 6 +C.DATE .EQ 8 +C.ECHO .EQ 10 +C.EXIT .EQ 12 +C.MD .EQ 14 +C.PAUSE .EQ 16 +C.PWD .EQ 18 +C.RD .EQ 20 +C.READ .EQ 22 +C.REN .EQ 24 +C.SET .EQ 26 +C.SLEEP .EQ 28 +C.SHIFT .EQ 30 +C.PUSHD .EQ 32 +C.POPD .EQ 34 +C.FUNCTION .EQ 36 +C.CALL .EQ 38 +C.BREAK .EQ 40 +C.SWITCH .EQ 42 +C.CASE .EQ 44 +C.DEFAULT .EQ 46 *-------------------------------------- -C.FOR .EQ 24 +C.FOR .EQ 48 C.FOR.LIST .EQ 0 C.FOR.FILEEXEC .EQ 1 -C.WHILE .EQ 25 -C.IF .EQ 26 -C.NEXT .EQ 27 -C.LOOP .EQ 20 -C.ELSE .EQ 29 -C.FI .EQ 30 -C.END .EQ 31 +C.WHILE .EQ 50 +C.IF .EQ 52 +C.NEXT .EQ 54 +C.LOOP .EQ 56 +C.ELSE .EQ 58 +C.FI .EQ 60 +C.END .EQ 62 *-------------------------------------- C.CLEXEC .EQ 63 *-------------------------------------- @@ -369,6 +369,7 @@ CS.RUN.BATCH >LDA.G bSET.X bcs CS.RUN.LOOP.RTS .5 jsr CORE.Run + CS.RUN.LOOP.END ldy #S.PS.RC sta (pPs),y bcc CS.RUN.LOOP.80 @@ -378,22 +379,35 @@ CS.RUN.LOOP.END ldy #S.PS.RC >LDA.G bSET.E bmi CS.RUN.LOOP.80 - jsr CORE.StkGet +.1 jsr CORE.StkGet cmp #$C0+C.CLEXEC - beq .1 - jsr IO.PrintBatchErrMsg + beq .8 + + cmp #$C0+C.. in . ? + beq .7 + + cmp #$C0+C.CALL in CALL ? + beq .7 + + jsr CORE.StkPopCtx + bcc .1 + +.7 jsr IO.PrintBatchErrMsg bcs CS.RUN.LOOP.RTS -.1 ldy #S.PS.RC - lda (pPs),y - jsr IO.PrintErrMsg + + jsr CORE.StkPull + jsr CMD.EXIT.FILE + +.8 jsr IO.PrintErrMsg bcs CS.RUN.LOOP.RTS CS.RUN.LOOP.80 lda (pData) something on stack ? - bne .8 + bne CS.RUN.LOOP.88 + >LDA.G bExitOnEOF bmi CS.RUN.LOOP.EXIT -.8 jmp CS.RUN.LOOP +CS.RUN.LOOP.88 jmp CS.RUN.LOOP CS.RUN.LOOP.EXIT ldy #S.PS.RC lda (pPs),y