diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 6ce492d6..90399888 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 49fbec03..17c686cd 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -532,51 +532,161 @@ CMD.RD lda (ZPArgVBufPtr) .9 jmp CMD.Exec.CSYN *-------------------------------------- -CMD.BREAK +CMD.FUNC .9 jmp CMD.Exec.CSYN *-------------------------------------- -CMD.CONTINUE -CMD.CONTINUE.CSYN - jmp CMD.Exec.CSYN +CMD.RETURN +.9 jmp CMD.Exec.CSYN *-------------------------------------- -CMD.FOR jsr CORE.StkGet - bcs .1 no context... +* stack-1 hVALUE +* stack SWITCH TOKEN +*-------------------------------------- +CMD.SWITCH jsr CORE.StkGetCtx - and #$80 get current.. - lsr becomes parent - bra .2 + jsr EXP.GET + bcs .9 + >SYSCALL strdup + bcs .9 + + txa + jsr CORE.StkPush Push EXP hVALUE + bcs .9 + + >LDA.G CORE.Test + beq .1 -.1 lda #$40 ...set Parent = true + ora #$80 + +.1 ora #C.SWITCH + jmp CORE.StkPush + +.9 rts +*-------------------------------------- +CMD.CASE jsr CORE.StkGetCtx Get context in CORE.Test -.2 >STA.G CORE.Test + bcs .9 + + and #$3F + cmp #C.SWITCH + beq .1 + + cmp #C.CASE + bne .9 + + jsr CORE.StkPull remove C.SWITCH + jsr CORE.StkPull get hVALUE + >SYSCALL freemem + bra CMD.CASE + +.1 jsr EXP.GET + bcs .9 + + >PUSHYA + + lda (pDATA) + tay + dey get hVALUE + lda (pDATA),y + >SYSCALL GetMemPtr + >SYSCALL strcmp + ror CS if != + and #$80 + eor #$80 + >ORA.G CORE.Test + ora #C.CASE + jmp CORE.StkPush + +.9 jmp CMD.Exec.CSYN +*-------------------------------------- +CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.Test + bcs .9 + + and #$3F + cmp #C.SWITCH + beq .1 + + cmp #C.CASE + bne .9 + + jsr CORE.StkPull remove C.CASE + +.1 lda #$80 + >ORA.G CORE.Test + ora #C.DEFAULT + jmp CORE.StkPush + +.9 jmp CMD.Exec.CSYN +*-------------------------------------- +CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test + bcs .9 + + and #$3F + cmp #C.CASE + bne .9 + + >LDA.G CORE.Test + beq .8 + + jsr CORE.StkPull remove C.CASE + jsr CORE.StkGet + and #$7F + sta (pDATA),y +.8 clc + rts + +.9 jmp CMD.Exec.CSYN +*-------------------------------------- +CMD.END jsr CORE.StkGetCtx Get context in CORE.Test + bcs CMD.END.CSYN + + and #$3F + cmp #C.SWITCH + beq .2 + + cmp #C.CASE + beq .1 + + cmp #C.DEFAULT + bne CMD.END.CSYN + +.1 jsr CORE.StkPull remove C.CASE,C.DEFAULT + +.2 jsr CORE.StkPull remove C.SWITCH + jsr CORE.StkPull get hVALUE + >SYSCALL freemem + rts + +CMD.END.CSYN jmp CMD.Exec.CSYN +*-------------------------------------- +CMD.FOR jsr CORE.StkGetCtx lda (ZPArgVBufPtr) - beq CMD.CONTINUE.CSYN + beq CMD.END.CSYN >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr jsr CORE.ArgV.Next - beq CMD.CONTINUE.CSYN + beq CMD.END.CSYN jsr ToUpperCase cmp #'I' - bne CMD.CONTINUE.CSYN + bne CMD.END.CSYN ldy #1 lda (ZPArgVBufPtr),y - beq CMD.CONTINUE.CSYN + beq CMD.END.CSYN jsr ToUpperCase cmp #'N' - bne CMD.CONTINUE.CSYN + bne CMD.END.CSYN iny lda (ZPArgVBufPtr),y - bne CMD.CONTINUE.CSYN + bne CMD.END.CSYN jsr CORE.ArgV.Next - beq CMD.CONTINUE.CSYN + beq CMD.END.CSYN cmp #'(' beq FOR.FILE @@ -765,7 +875,7 @@ CMD.NEXT jsr CORE.StkGet Y = StkPtr * stack-4 ListPtr * stack-3 hLIST * stack-2 hVARNAME -* stack-1 FOR SUB TOKEN +* stack-1 FOR SUB TOKEN * stack FOR TOKEN *-------------------------------------- CMD.NEXT.LIST lda (pData),y Y = StkPtr @@ -1063,16 +1173,7 @@ CMD.NEXT.EXEC.1 lda (pData) .9 rts *-------------------------------------- CMD.WHILE -CMD.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 +CMD.IF jsr CORE.StkGetCtx bit #$40 Parent is true ? beq .3 diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 916bde2a..06d8b161 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -579,6 +579,20 @@ CORE.StkPush pha * sec rts *-------------------------------------- +CORE.StkGetCtx jsr CORE.StkGet + tax + bcs .1 no context... + + and #$80 get current.. + lsr becomes parent + bra .2 + +.1 lda #$40 ...set Parent = true + +.2 >STA.G CORE.Test + txa + rts +*-------------------------------------- CORE.StkPull jsr CORE.StkGet bcs .9 diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 57f78455..a94134da 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -28,19 +28,24 @@ C.SHIFT .EQ 28 C.TIME .EQ 30 C.PUSHD .EQ 32 C.POPD .EQ 34 -C.BREAK .EQ 36 -C.CONTINUE .EQ 38 +C.FUNC .EQ 36 +C.RETURN .EQ 38 +C.SWITCH .EQ 40 +C.CASE .EQ 42 +C.DEFAULT .EQ 44 +C.BREAK .EQ 46 +C.END .EQ 48 *-------------------------------------- -C.FOR .EQ 40 +C.FOR .EQ 50 C.FOR.LIST .EQ 0 C.FOR.FILE .EQ 2 C.FOR.EXEC .EQ 4 -C.WHILE .EQ 42 -C.IF .EQ 44 -C.NEXT .EQ 46 -C.LOOP .EQ 48 -C.ELSE .EQ 50 -C.FI .EQ 52 +C.WHILE .EQ 52 +C.IF .EQ 54 +C.NEXT .EQ 56 +C.LOOP .EQ 58 +C.ELSE .EQ 60 +C.FI .EQ 62 *-------------------------------------- E.CSYN .EQ $C0 E.ESYN .EQ $C1 @@ -134,8 +139,13 @@ J.CMD .DA CMD.NOHUP .DA CMD.TIME .DA CMD.PUSHD .DA CMD.POPD + .DA CMD.FUNC + .DA CMD.RETURN + .DA CMD.SWITCH + .DA CMD.CASE + .DA CMD.DEFAULT .DA CMD.BREAK - .DA CMD.CONTINUE + .DA CMD.END .DA CMD.FOR .DA CMD.WHILE .DA CMD.IF @@ -590,8 +600,13 @@ CMD .AZ "NOHUP" .AZ "TIME" .AZ "PUSHD" .AZ "POPD" + .AZ "FUNC" + .AZ "RETURN" + .AZ "SWITCH" + .AZ "CASE" + .AZ "DEFAULT" .AZ "BREAK" - .AZ "CONTINUE" + .AZ "END" .AZ "FOR" .AZ "WHILE" .AZ "IF"