diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 826255e7..e02d497d 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/CSH.I.txt b/BIN/CSH.I.txt index 28c9b446..c37727bd 100644 --- a/BIN/CSH.I.txt +++ b/BIN/CSH.I.txt @@ -91,6 +91,7 @@ CSH.STYPES >PSTR "char" >PSTR "int" >PSTR "long" * .HS 00 +*-------------------------------------- CSH.TYPESIZE .HS 0001020401020405 VOID,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT.... *-------------------------------------- * int printf ( const char * format, ... ); diff --git a/BIN/CSH.R.txt b/BIN/CSH.R.txt index 9a839ec3..ab74df00 100644 --- a/BIN/CSH.R.txt +++ b/BIN/CSH.R.txt @@ -21,6 +21,22 @@ J.CSH.BOPS .DA CSH.BOPS.ADD .DA CSH.BOPS.EOR .DA CSH.BOPS.LAND .DA CSH.BOPS.LOR +J.CSH.BOPS.ADDt .DA CSH.TMISSMATCH + .DA CSH.BOPS.ADDi8 + .DA CSH.BOPS.ADDi16 + .DA CSH.BOPS.ADDi32 + .DA CSH.BOPS.ADDu8 + .DA CSH.BOPS.ADDu16 + .DA CSH.BOPS.ADDu32 + .DA CSH.BOPS.ADDf +J.CSH.BOPS.SUBt .DA CSH.TMISSMATCH + .DA CSH.BOPS.SUBi8 + .DA CSH.BOPS.SUBi16 + .DA CSH.BOPS.SUBi32 + .DA CSH.BOPS.SUBu8 + .DA CSH.BOPS.SUBu16 + .DA CSH.BOPS.SUBu32 + .DA CSH.BOPS.SUBf L.CSH.FN .DA CSH.FN L.CSH.KW .DA CSH.KW L.CSH.STYPES .DA CSH.STYPES @@ -42,8 +58,8 @@ J.CSH.STYPES .DA CSH.CHAR J.CSH.UTYPES .DA CSH.UCHAR .DA CSH.UINT .DA CSH.ULONG -J.CSH.KW.START .DA CSH.IF.START - .DA CSH.WHILE.START +*J.CSH.KW.START .DA CSH.IF.START +* .DA CSH.WHILE.START J.CSH.KW.END .DA CSH.IF.END .DA CSH.WHILE.END *-------------------------------------- diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index d2ca945e..88a71ec3 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -70,7 +70,11 @@ CSH.Run.1 cmp #'#' jsr CSH.CheckStack must be something on stack.... bcs .9 - jsr CSH.Pop was expected, get stacked Cmd... + jsr CSH.GetNextCharNB Skip '}' + + jsr CSH.Pop was expected.... + + jsr CSH.Pop get stacked Cmd... tax jmp (J.CSH.KW.END,x) @@ -141,9 +145,9 @@ CSH.Run.1 cmp #'#' * Built in Keywords *-------------------------------------- CSH.KW.JMP txa - >STA.G CSH.CmdSave + >STA.G CSH.CmdSave jmp (J.CSH.KW,x) - +*-------------------------------------- CSH.WHILE CSH.IF jsr CSH.GetCharNB bcs .9 @@ -169,11 +173,22 @@ CSH.IF jsr CSH.GetCharNB jsr CSH.GetNextCharNB Skip '{' bcs .99 - + jsr CSH.IsValue0 X = var type from ExpEval bcc .6 Value=0, skip {{....}} + >LDA.G CSH.CmdSave + beq .1 IF + pha + >LDA.G CSH.BufPtrSave+1 WHILE : push loop address... + jsr CSH.Push + >LDA.G CSH.BufPtrSave + jsr CSH.Push + pla + +.1 jsr CSH.Push + bcs .99 lda #'}' Tell '}' is expected at the end of block jsr CSH.Push @@ -181,29 +196,31 @@ CSH.IF jsr CSH.GetCharNB rts -.6 jmp CSH.SkipBlock +.6 jsr CSH.SkipBlock + + bcc .99 + .9 lda #CSH.E.SYNTAX sec .99 rts *-------------------------------------- -CSH.Keyword.Start - >LDA.G CSH.CmdSave get back Token ("IF" or "WHILE") - tax - jmp (J.CSH.KW.START,x) +*CSH.Keyword.Start +* >LDA.G CSH.CmdSave get back Token ("IF" or "WHILE") +* tax +* jmp (J.CSH.KW.START,x) *-------------------------------------- -CSH.IF.START jmp CSH.Push Push "IF" Token +*CSH.IF.START jmp CSH.Push Push "IF" Token *-------------------------------------- -CSH.WHILE.START pha - >LDA.G CSH.BufPtrSave+1 WHILE : push loop address... - jsr CSH.Push - >LDA.G CSH.BufPtrSave - jsr CSH.Push - pla - jmp CSH.Push Push "WHILE" Token +*CSH.WHILE.START pha +* >LDA.G CSH.BufPtrSave+1 WHILE : push loop address... +* jsr CSH.Push +* >LDA.G CSH.BufPtrSave +* jsr CSH.Push +* pla +* jmp CSH.Push Push "WHILE" Token *-------------------------------------- -CSH.IF.END jsr CSH.GetNextChar just skip ending '}' - clc +CSH.IF.END clc rts *-------------------------------------- CSH.WHILE.END jsr CSH.Pop @@ -580,7 +597,7 @@ CSH.ExpEval ldx ZPPtr1 * Old OP has precedence, compute ACC=ARG ACC .6 lda ZPPtr2 Var Type ldx ZPPtr2+1 BOP - jsr CSH.Compute + jsr CSH.BOPExec bcs .99 jsr CSH.GetCharNB @@ -591,7 +608,7 @@ CSH.ExpEval ldx ZPPtr1 bmi .80 lda ZPPtr2 Var Type - jsr CSH.Compute + jsr CSH.BOPExec bcc .80 bcs .99 @@ -913,17 +930,18 @@ CSH.GetVarValueOnStack bne .2 clc X = Var Type - rts - -.99 lda #CSH.E.TMISMATCH - sec .9 rts + +.99 +*-------------------------------------- +CSH.TMISSMATCH lda #CSH.E.TMISMATCH + sec + rts *-------------------------------------- * Input : Value on Stack, X = Var Type * Output : CC = true, CS = false *-------------------------------------- -CSH.IsValue0 >DEBUG - cpx #CSH.T.FLOAT +CSH.IsValue0 cpx #CSH.T.FLOAT bcc .1 char,int,long ldy CSH.TYPESIZE,x @@ -950,31 +968,85 @@ CSH.IsValue0 >DEBUG .9 sec rts *-------------------------------------- -CSH.Compute jmp (J.CSH.BOPS,x) +* A = Type, X = OP *-------------------------------------- -CSH.BOPS.ADD cmp #CSH.T.FLOAT - beq .8 - +CSH.BOPExec jmp (J.CSH.BOPS,x) +*-------------------------------------- +CSH.BOPS.ADD asl + tax + jmp (J.CSH.BOPS.ADDt,x) - clc - rts - -.8 >FPU FADD - clc - rts - - -CSH.BOPS.SUB cmp #CSH.T.FLOAT - beq .8 - - - clc - rts - -.8 >FPU FSUB +CSH.BOPS.ADDi8 +CSH.BOPS.ADDu8 clc + >PULLA + adc (pStack) + sta (pStack) clc rts + +CSH.BOPS.ADDi16 +CSH.BOPS.ADDu16 clc + ldy #1 + >PULLA + adc (pStack),y + sta (pStack),y + >PULLA + adc (pStack),y + sta (pStack),y + clc + rts + +CSH.BOPS.ADDi32 +CSH.BOPS.ADDu32 >FPU ADD32 + clc + rts + +CSH.BOPS.ADDf >FPU FADD + clc + rts +*-------------------------------------- +CSH.BOPS.SUB asl + tax + jmp (J.CSH.BOPS.SUBt,x) + +CSH.BOPS.SUBi8 +CSH.BOPS.SUBu8 sec + ldy #1 + lda (pStack),y + sbc (pStack) + sta (pStack),y + inc pStack + clc + rts + + +CSH.BOPS.SUBi16 +CSH.BOPS.SUBu16 sec + ldy #2 + lda (pStack),y + sbc (pStack) + sta (pStack),y + + iny + lda (pStack),y + ldy #1 + sbc (pStack),y + inc pStack + inc pStack + sta (pStack),y + clc + rts + +CSH.BOPS.SUBi32 +CSH.BOPS.SUBu32 >FPU SUB32 + clc + rts + +CSH.BOPS.SUBf >FPU FSUB + clc + rts +*-------------------------------------- CSH.BOPS.MUL cmp #CSH.T.FLOAT beq .8 @@ -986,6 +1058,7 @@ CSH.BOPS.MUL cmp #CSH.T.FLOAT clc rts +*-------------------------------------- CSH.BOPS.DIV cmp #CSH.T.FLOAT beq .8 @@ -996,6 +1069,7 @@ CSH.BOPS.DIV cmp #CSH.T.FLOAT .8 >FPU FDIV clc rts +*-------------------------------------- CSH.BOPS.MOD CSH.BOPS.SHL CSH.BOPS.SHR @@ -1089,22 +1163,43 @@ CSH.GetIDLen ldy #0 .8 tya rts *-------------------------------------- -CSH.SkipBlock ldx #1 expecting 1 '}' for now.... +CSH.SkipStatement + + clc + rts +*-------------------------------------- +CSH.SkipBlock ldy #0 not in "", TOTO:skip comments + + ldx #1 starting with 1 '{' for now.... .1 jsr CSH.GetNextCharNB bcs .9 + cmp #'{' bne .2 + + tya + bmi .1 + inx bra .1 .2 cmp #'}' - bne .1 - txa - beq .9 + bne .3 + + tya + bmi .1 + dex bne .1 +.3 cmp #'"' + bne .1 + tya + eor #$ff + tay + bra .1 + jmp CSH.GetNextCharNB skip '}' .9 rts diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index c8c2ffed..3c9300b3 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -31,6 +31,8 @@ ZPVarID .BS 2 ZPVarData .BS 6 ZPVarType .BS 1 +ArgIndex .BS 1 + ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -56,7 +58,7 @@ CS.START cld L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.USAGE .DA MSG.USAGE L.MSG.ECHOCRLF .DA MSG.ECHOCRLF -L.MSG.HEXWORD .DA MSG.HEXWORD +L.MSG.DEBUG .DA MSG.DEBUG L.MSG.ERR .DA MSG.ERR .INB USR/SRC/BIN/CSH.R .DA 0 @@ -65,50 +67,36 @@ L.MSG.ERR .DA MSG.ERR * Put code for loading LIB here *-------------------------------------- CS.INIT clc - rts +CS.INIT.RTS rts *-------------------------------------- * Called until exit with CS * if RUN exits with CC, RN entered again *-------------------------------------- -CS.RUN lda #$ff - >STA.G bTrace - - >PUSHWI K.VER +CS.RUN >PUSHWI K.VER >PUSHBI 2 >LDYA L.MSG.GREETINGS >SYSCALL printf - bcs .99 + bcs CS.INIT.RTS + jsr CS.RUN.ARGS + bcs CS.INIT.RTS + jsr CSH.Init - bcs .99 - - ldy #S.PS.ARGC - lda (pPS),y - beq .90 no arg, usage - - >PUSHWZ Aux type - >PUSHBI S.FI.T.TXT - >PUSHBI O.RDONLY - lda #1 - >SYSCALL ArgV - >SYSCALL LoadTxtFile - bcs .99 - - txa - >STA.G hFileBuf - >SYSCALL GetMemPtr - >STYA ZPFileBuf - >STYA ZPFileBufPtr + bcs CS.INIT.RTS .1 >SLEEP - >LDA.G bTrace + >LDA.G bDebug bpl .2 + jsr PrintDebugMsg + +.2 >LDA.G bTrace + bpl .3 >LDYA ZPFileBufPtr jsr PrintTraceMsg -.2 jsr CSH.Run +.3 jsr CSH.Run bcc .1 cmp #MLI.E.EOF @@ -123,6 +111,56 @@ CS.RUN lda #$ff .8 lda #0 Exit Code = Success sec rts +*-------------------------------------- +CS.RUN.ARGS inc ArgIndex + + lda ArgIndex + >SYSCALL ARGV + bcs .7 + + >STYA ZPPtr1 + lda (ZPPtr1) + cmp #'-' + bne .4 + + ldy #1 + lda (ZPPtr1),y + ldx #OptionVars-OptionList-1 + +.1 cmp OptionList,x + beq .2 + dex + bpl .1 + + bra .90 + +.2 ldy OptionVars,x + lda #$ff + sta (pData),y + bra CS.RUN.ARGS + +.4 >LDA.G hFileBuf + bne .90 + + >PUSHWZ Aux type + >PUSHBI S.FI.T.TXT + >PUSHBI O.RDONLY + >LDYA ZPPtr1 + >SYSCALL LoadTxtFile + bcs .9 + + txa + >STA.G hFileBuf + >SYSCALL GetMemPtr + >STYA ZPFileBuf + >STYA ZPFileBufPtr + bra CS.RUN.ARGS + +.7 >LDA.G hFileBuf + beq .90 + + clc + rts .90 >PUSHBI 0 >LDYA L.MSG.USAGE @@ -130,17 +168,12 @@ CS.RUN lda #$ff lda #E.SYN sec QUIT Process -.99 rts -*-------------------------------------- -* Called if option S.PS.F.EVENT enabled in Header -* Timer Event : every 10th seconds + +.9 rts *-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- -* Called once, when RUN exited with CS -* Put code for unloading LIB here -*-------------------------------------- CS.QUIT jsr CSH.Quit clc rts @@ -207,14 +240,13 @@ PrintErrMsg >LDYA ZPFileBuf rts *-------------------------------------- -PrintTraceMsg >STYA ZPPtr3 - - >PUSHW pStack +PrintDebugMsg >PUSHW pStack >PUSHBI 2 - >PUSHW L.MSG.HEXWORD - ldy #S.PS.hStdErr - lda (pPS),y - >SYSCALL fprintf + >LDYA L.MSG.DEBUG + >SYSCALL printf + rts +*-------------------------------------- +PrintTraceMsg >STYA ZPPtr3 PrintTraceMsg.3 >PUSHBI '>' ldy #S.PS.hStdErr @@ -252,14 +284,14 @@ CS.END * Initialized DATA *-------------------------------------- MSG.Greetings .AZ "\r\nCSH-Shell %d.%d\r\n\r\n" -MSG.USAGE .AS "Usage : CSH file\r\n" +MSG.USAGE .AS "Usage : CSH