diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 9e7ddd5a..0e87dae3 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 99c7fdd7..ece36de7 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 6150e5b3..a0b70cca 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index 35219e53..2bcbb2d2 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -40,31 +40,18 @@ L.MSG.CTRLCHAR .DA MSG.CTRLCHAR L.ASCII .DA ASCII .DA 0 *-------------------------------------- -CS.INIT ldy #S.PS.ARGC - lda (pPs),y - beq .99 - - >STA.G ArgCount - -.1 >LDA.G ArgCount - dec - bmi .5 - - sta (pData),y - +CS.INIT +.1 >INC.G ArgCount >SYSCALL GetArg.A + bcs .7 + >STYA ZPPtr1 - ldy #1 - lda (ZPPtr1),y + lda (ZPPtr1) cmp #'-' bne .4 - lda (ZPPtr1) - cmp #2 - bne .4 - - iny + ldy #1 lda (ZPPtr1),y ldx OptionList @@ -85,12 +72,10 @@ CS.INIT ldy #S.PS.ARGC sta (pData),y bra .1 -.4 >LDA.G FileCount - inc - sta (pData),y +.4 >INC.G FileCount bra .1 scan for any other args -.5 >LDA.G FileCount +.7 >LDA.G FileCount beq .99 >LDYAI 256 @@ -128,16 +113,13 @@ CS.RUN >SYSCALL GetChar >LDA.G hFILE bne .2 -.1 >LDA.G ArgIndex - inc - sta (pData),y +.1 >INC.G ArgIndex >SYSCALL GetArg.A bcs .99 No more arg...the end! >STYA ZPPtr1 - ldy #1 - lda (ZPPtr1),y + lda (ZPPtr1) cmp #'-' beq .1 An option, skip... diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index 6c2410ce..f8823f8d 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -87,7 +87,8 @@ CS.RUN >SYSCALL Sleep >SYSCALL GetChar bcs CS.RUN -.11 jsr PRINTA2 +.11 +* jsr PRINTA2 >SYSCALL Sleep >SYSCALL GetChar @@ -115,7 +116,7 @@ CS.RUN.LOOP >SYSCALL GetChar bcs .4 - jsr PRINTA +* jsr PRINTA cmp #IAC beq CS.RUN.IACMODE @@ -144,22 +145,22 @@ CS.RUN.IACMODE >SYSCALL Sleep Wait for IAC VERB (or SB) bcs CS.RUN.IACMODE >STA.G IAC.VERB - jsr PRINTA +* jsr PRINTA .1 >SYSCALL Sleep Wait for IAC OPT >SYSCALL GetChar bcs .1 >STA.G IAC.OPT - jsr PRINTA +* jsr PRINTA >LDA.G IAC.VERB cmp #SB beq CS.RUN.IACSB *-------------------------------------- CS.RUN.IACVERB - lda #'.' - >SYSCALL PutChar.A +* lda #'.' +* >SYSCALL PutChar.A jmp CS.RUN.LOOP *-------------------------------------- CS.RUN.IACSB @@ -169,7 +170,7 @@ CS.RUN.IACSB >STA.G IAC.SB - jsr PRINTA +* jsr PRINTA lda #0 sta (pData) reset IAC.SB.DATA @@ -182,7 +183,7 @@ CS.RUN.IACSB beq .4 end of DATA, go wait SE pha - jsr PRINTA +* jsr PRINTA ldy #IAC.SB.DATA-1 @@ -216,8 +217,9 @@ CS.RUN.IACSB >PUSHW L.ENV.TERM >SYSCALL SetEnv -.8 lda #':' - >SYSCALL PutChar.A +.8 +* lda #':' +* >SYSCALL PutChar.A jmp CS.RUN.LOOP *-------------------------------------- CS.DOEVENT lda (pEvent) diff --git a/SBIN/SHELL.S.CSH.txt b/SBIN/SHELL.S.CSH.txt index 2487cae7..b2050dc1 100644 --- a/SBIN/SHELL.S.CSH.txt +++ b/SBIN/SHELL.S.CSH.txt @@ -69,7 +69,7 @@ CSH.Run lda #0 jsr CSH.Pop was expected, get stacked Cmd... tax - jmp (J.CSHCMDS.END,x) + jmp (J.CSH.KEYWORDS.END,x) .1 cmp #$0D bne .2 @@ -87,14 +87,14 @@ CSH.Run lda #0 bra .9 error, todo : PREOPS ++ --..... -.3 >LDYA L.CSHCMDS +.3 >LDYA L.CSH.KEYWORDS jsr CSH.IsKeyword bcs .4 not an internal CSH keyword.... txa >STA.G CSH.CmdSave - jmp (J.CSHCMDS,x) + jmp (J.CSH.KEYWORDS,x) .4 jsr CSH.GetVar Y=Ptr To Value bcs .5 @@ -113,7 +113,7 @@ CSH.Run lda #0 ply bcs .9 - jsr CSH.SetVarValueAtY + jsr CSH.SetVarValue bcs .9 cmp #';' bne .99 @@ -126,28 +126,31 @@ CSH.Run lda #0 .5 - jsr CSH.RestorePtr Restore ptr to get full cmd line to execute - jsr CSH.GetCharNB + ldy #$0 - ldy #0 +.6 lda (ZPCSHBufPtr),y + beq .7 -.6 cmp #13 + cmp #13 beq .7 sta (ZPCMDBuf),y iny cpy #CmdLine.MAX - beq .8 + bne .6 + bra .99 Line Too long !!! - jsr CSH.GetNextChar - bcc .6 - bra .8 - -.7 jsr CSH.GetNextCharNB Skip CR +.7 tya + clc + adc ZPCSHBufPtr + sta ZPCSHBufPtr + bcc .8 + inc ZPCSHBufPtr+1 .8 lda #0 sta (ZPCMDBuf),y + tya >STA.G CmdBuflen lda #$ff @@ -181,16 +184,12 @@ CSH.Quit >LDA.G CSH.hBuf .8 rts *-------------------------------------- -CSH.SavePtr phy - >LDYA ZPCSHBufPtr +CSH.SavePtr >LDYA ZPCSHBufPtr >STYA.G CSH.BufPtrSave - ply rts *-------------------------------------- -CSH.RestorePtr phy - >LDYA.G CSH.BufPtrSave +CSH.RestorePtr >LDYA.G CSH.BufPtrSave >STYA ZPCSHBufPtr - ply rts *-------------------------------------- CSH.IsKeyword >STYA ZPPtr1 @@ -245,6 +244,69 @@ CSH.IsKeyword >STYA ZPPtr1 sec rts *-------------------------------------- +CSH.CHAR lda #CSH.TYPE.CHAR + bra CSH.TYPE +CSH.INT lda #CSH.TYPE.INT + bra CSH.TYPE +CSH.LONG lda #CSH.TYPE.LONG + bra CSH.TYPE +CSH.FLOAT lda #CSH.TYPE.FLOAT + +CSH.TYPE >STA.G CSH.ACCT + + jsr CSH.GetChar + bcs .9 + cmp #' ' + bne .9 + + jsr CSH.GetNextCharNB + bcs .9 + + jsr CSH.IsLetter + bcs .9 + + jsr CSH.GetVar Already exists ? + bcc .90 + + jsr CSH.AddVar No, add with undefined value... + bcs .99 + + jsr CSH.GetCharNB + bcs .9 + cmp #';' + beq .8 end of declaration, no value... + + cmp #'=' + bne .9 + + jsr CSH.GetNextCharNB + bcs .9 + + phy Save Ptr To Value + jsr CSH.ExpEval + ply + + bcs .9 + + jsr CSH.SetVarValue Update value to this var + + jsr CSH.GetChar + bcs .9 + cmp #';' + bne .9 + +.8 jsr CSH.GetNextCharNB Skip ; + clc + rts + +.90 lda #CSH.E.DUP + sec + rts + +.9 lda #CSH.E.SYNTAX + sec +.99 rts +*-------------------------------------- CSH.WHILE CSH.IF jsr CSH.GetCharNB bcs .9 @@ -333,78 +395,18 @@ CSH.WHILE.END jsr CSH.Pop clc rts *-------------------------------------- +CSH.ELSE +CSH.DO +CSH.FOR +CSH.SWITCH +CSH.CASE CSH.BREAK -*-------------------------------------- CSH.CONTINUE lda #CSH.E.SYNTAX sec rts *-------------------------------------- -CSH.CHAR lda #CSH.TYPE.CHAR - bra CSH.TYPE -CSH.INT lda #CSH.TYPE.INT - bra CSH.TYPE -CSH.LONG lda #CSH.TYPE.LONG - bra CSH.TYPE -CSH.FLOAT lda #CSH.TYPE.FLOAT - -CSH.TYPE >STA.G CSH.ACCT - - jsr CSH.GetChar - bcs .9 - cmp #' ' - bne .9 - - jsr CSH.GetNextCharNB - bcs .9 - - jsr CSH.IsLetter - bcs .9 - - jsr CSH.GetVar Already exists ? - bcc .90 - - jsr CSH.AddVar No, add with undefined value... - bcs .99 -* Y=Ptr in DATA to Value - - jsr CSH.GetCharNB - bcs .9 - cmp #';' - beq .8 end of declaration, no value... - - cmp #'=' - bne .9 - - jsr CSH.GetNextCharNB - bcs .9 - - phy Save Ptr To Value - jsr CSH.ExpEval - ply - - bcs .9 - - jsr CSH.SetVarValueAtY Update value to this var - - jsr CSH.GetChar - bcs .9 - cmp #';' - bne .9 - -.8 jsr CSH.GetNextCharNB Skip ; - clc - rts - -.90 lda #CSH.E.DUP - sec - rts - -.9 lda #CSH.E.SYNTAX - sec -.99 rts -*-------------------------------------- CSH.ExpEval jsr CSH.ZeroACC jsr CSH.GetCharNB @@ -449,7 +451,7 @@ CSH.GetNumInACC >LDA.G CSH.ACCT >PUSHWI ZPCSHBufPtr >PUSHW ZPCSHBufPtr >PUSHEA.G CSH.ACC - >DEBUG + >SYSCALL StrToL rts *-------------------------------------- @@ -467,13 +469,14 @@ CSH.ZeroACC lda #0 * Vars... *-------------------------------------- CSH.AddVar jsr CSH.GetIdentLen + sec - >ADC.G CSH.SymbolsPtr + >ADC.G CSH.SymbolsPtr Enough room to store this symbol ? bcs .99 - adc #1 OFS - bcs .99 + adc #1 Add One Byte for storing Ptr to DATA + bcs .99 Out of Symbols space >LDA.G CSH.DataPtr pha @@ -482,58 +485,44 @@ CSH.AddVar jsr CSH.GetIdentLen tax sec +1 for Type adc CSH.TSIZE,x - bcs .98 Out of memory + bcs .98 Out of Data Space >LDA.G CSH.SymbolsPtr - tay + pha + + jsr CSH.GetIdentLen + + ply + sta (ZPCSHSymbols),y + iny jsr CSH.GetChar -.1 sta (ZPCSHSymbols),y +.1 sta (ZPCSHSymbols),y Store this symbol.... iny jsr CSH.GetNextChar jsr CSH.IsLetterOrDigit bcc .1 - pla Get Back Data OFS + pla Get Back Data Ptr pha + sta (ZPCSHSymbols),y iny tya - >STA.G CSH.SymbolsPtr + >STA.G CSH.SymbolsPtr Mark new end of Symbols - >LEA.G CSH.ACCT - >STYA ZPPtr1 ACCT/ACC in ZPPtr1 - - ply Get Back Data OFS again - phy - - lda (ZPPtr1) - sta (ZPCSHSymbols),y Add Type to Data - iny - - tax - lda CSH.TSIZE,x A = byte count to store - - tax - -.2 inc ZPPtr1 - bne .3 - inc ZPPtr1+1 - -.3 lda (ZPPtr1) - sta (ZPCSHData),y - iny - dex - bne .2 - - tya - >STA.G CSH.DataPtr - - ply Exit with Y=Data Offset + pla Get again Data Ptr clc + adc ZPCSHData + sta ZPCSHValue + lda #0 + adc ZPCSHData+1 + sta ZPCSHValue+1 + +* clc rts .98 pla @@ -541,8 +530,19 @@ CSH.AddVar jsr CSH.GetIdentLen sec rts *-------------------------------------- -CSH.SetVarValueAtY +CSH.SetVarValue >LDA.G CSH.ACCT + tax + lda CSH.TSIZE,x + tax + + >LDA.G CSH.ACCT + tay +.1 lda (pData),y + sta (ZPCSHValue),y + iny + dex + bpl .1 +1 for ACCT clc rts *-------------------------------------- @@ -550,8 +550,8 @@ CSH.GetVar >LDYA ZPCSHSymbols >STYA ZPPtr1 jsr CSH.GetIdentLen - phy - + pha + .1 lda (ZPPtr1) beq .9 @@ -570,16 +570,36 @@ CSH.GetVar >LDYA ZPCSHSymbols tya bne .2 + lda (ZPPtr1) + inc + tay + lda (ZPPtr1),y Get Ptr to DATA + clc + adc ZPCSHData + sta ZPCSHValue + lda #0 + adc ZPCSHData+1 + sta ZPCSHValue+1 + pla - - jsr CSH.VarSkipName - + + clc + adc ZPCSHBufPtr + sta ZPCSHBufPtr + bcc .8 + inc ZPCSHBufPtr+1 + clc .8 rts -.3 jsr CSH.VarSkipName +.3 lda (ZPPtr1) + sec + adc ZPPtr1 + sta ZPPtr1 + bcc .4 + inc ZPPtr1+1 -.5 inc ZPPtr1 Skip Pointer to TYPE/DATA +.4 inc ZPPtr1 Skip Pointer to TYPE/DATA bne .1 inc ZPPtr1+1 bra .1 @@ -588,14 +608,6 @@ CSH.GetVar >LDYA ZPCSHSymbols sec rts *-------------------------------------- -CSH.VarSkipName lda (ZPPtr1) - sec - adc ZPPtr1 - sta ZPPtr1 - bcc .8 - inc ZPPtr1+1 -.8 rts -*-------------------------------------- * Stack *-------------------------------------- CSH.Push pha @@ -658,7 +670,9 @@ CSH.GetIdentLen ldy #0 jsr CSH.IsLetterOrDigit bcc .1 -.8 rts + +.8 tya + rts *-------------------------------------- CSH.GetCharNB jsr CSH.GetChar bcs CSH.GetNextCharNB.RTS @@ -737,7 +751,7 @@ CSH.ErrorMsg >LDA.G CSH.hBuf >STA.G CSH.LineNum iny >STA.G CSH.LineNum+1 - + .1 >LDYA ZPPtr1 >STYA ZPPtr2 Save actual line start @@ -775,12 +789,14 @@ CSH.ErrorMsg >LDA.G CSH.hBuf lda #$0A >SYSCALL PutChar.A + + lda ZPCSHBufPtr sec sbc ZPPtr2 beq .8 tay - + .7 phy lda #'-' >SYSCALL PutChar.A diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 2db84bb3..5716ada0 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -12,13 +12,13 @@ AUTO 6 .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/MLI.ERR.I *-------------------------------------- -ZPPTR1 .EQ ZPBIN -ZPPTR2 .EQ ZPBIN+2 +ZPPtr1 .EQ ZPBIN +ZPPtr2 .EQ ZPBIN+2 ZPCMDBuf .EQ ZPBIN+4 -*ZPCSHBufBase .EQ ZPBIN+6 -ZPCSHBufPtr .EQ ZPBIN+8 -ZPCSHSymbols .EQ ZPBIN+10 -ZPCSHData .EQ ZPBIN+12 +ZPCSHBufPtr .EQ ZPBIN+6 +ZPCSHSymbols .EQ ZPBIN+8 +ZPCSHData .EQ ZPBIN+10 +ZPCSHValue .EQ ZPBIN+12 ZPCSHStack .EQ ZPBIN+14 *-------------------------------------- CmdLine.MAX .EQ 255 @@ -83,16 +83,22 @@ J.INTCMDS .DA Cmd.Exec.CD .DA Cmd.Exec.SLEEP .DA Cmd.Exec.STARTPROC .DA Cmd.Exec.TIME -L.CSHCMDS .DA CSHCMDS -J.CSHCMDS .DA CSH.IF - .DA CSH.WHILE - .DA CSH.BREAK - .DA CSH.CONTINUE - .DA CSH.CHAR +L.CSH.KEYWORDS .DA CSH.KEYWORDS +J.CSH.KEYWORDS .DA CSH.CHAR .DA CSH.INT .DA CSH.LONG .DA CSH.FLOAT -J.CSHCMDS.END .DA CSH.IF.END + .DA CSH.IF + .DA CSH.WHILE + .DA CSH.ELSE + .DA CSH.DO + .DA CSH.FOR + .DA CSH.SWITCH + .DA CSH.CASE + .DA CSH.BREAK + .DA CSH.CONTINUE +J.CSH.KEYWORDS.END + .DA CSH.IF.END .DA CSH.WHILE.END L.ERR.Codes .DA ERR.Codes L.ERR.Messages .DA ERR.Messages @@ -470,16 +476,81 @@ INTCMDS >CSTR "CD" >CSTR "STARTPROC" >CSTR "TIME" .HS 00 -CSHCMDS >PSTR "IF" - >PSTR "WHILE" - >PSTR "BREAK" - >PSTR "CONTINUE" - >PSTR "CHAR" - >PSTR "INT" - >PSTR "LONG" - >PSTR "FLOAT" +*-------------------------------------- +* Pre Operators: + - ! ~ ++ -- +*-------------------------------------- +CSH.PREOOPS >PSTR "+" + >PSTR "-" + >PSTR "!" + >PSTR "~" +*-------------------------------------- +* Post Operators: ++ -- +*-------------------------------------- +CSH.POSTOPS >PSTR "++" + >PSTR "--" + .HS 00 +*-- Binary ---- H to L prececence ----- +* Arithmetic Operators: * / % +* Arithmetic Operators: + - +* Shift Operators: << >> +* Relational Operators: < > >= < >= == != +* Bitwise Operators: & | ^ ~ +* Logical Operators: && || +*-------------------------------------- +CSH.BOPS >PSTR "+" + >PSTR "-" + >PSTR "*" + >PSTR "/" + >PSTR "%" + >PSTR "<<" + >PSTR ">>" + >PSTR "<" + >PSTR ">" + >PSTR ">=" + >PSTR "<" + >PSTR ">=" + >PSTR "==" + >PSTR "!=" + >PSTR "&" + >PSTR "|" + >PSTR "^" + >PSTR "~" + >PSTR "&&" + >PSTR "||" .HS 00 *-------------------------------------- +* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= +*-------------------------------------- +CSH.AOPS >PSTR "=" + >PSTR "+=" + >PSTR "-=" + >PSTR "*=" + >PSTR "/=" + >PSTR "%=" + >PSTR "<<=" + >PSTR ">>=" + >PSTR "&=" + >PSTR "^=" + >PSTR "!=" + .HS 00 +*-------------------------------------- +* Reserved Keywords: +*-------------------------------------- +CSH.KEYWORDS >PSTR "char" + >PSTR "int" + >PSTR "long" + >PSTR "float" + >PSTR "if" + >PSTR "while" + >PSTR "else" + >PSTR "do" + >PSTR "for" + >PSTR "switch" + >PSTR "case" + .HS 00 +*-------------------------------------- +CSH.OPChars >PSTR "!~+-*/%=&|^&<>" +*-------------------------------------- MSG.GREETINGS >CSTR "\r\nA2osX-Shell 0.9.1\r\n\r\n" MSG.PROMPT >CSTR "$ " MSG.ECHO >CSTR ">%s\r\n" diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index cb67010f..a178ab0c 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -62,9 +62,9 @@ K.StrToL sec Signed K.StrToUL clc Unsigned jsr PullPtr1Ptr2Ptr3 >PULLA Base + jsr K.AToL.I bcs K.StrToUL.rts - * clc K.StrToUL.Exit adc ZPPtr2 @@ -91,6 +91,7 @@ K.AToL jsr PullPtr1Ptr2 C-String in Ptr2, Dst buffer in Ptr1 K.AToL.I jsr STDLIB.Dec2Hex bcs .9 phy Save Count processed + ldy #3 .3 lda STDLIB.32,y @@ -161,10 +162,10 @@ STDLIB.32.T10 ldx #3 dex bpl .1 - jsr STDLIB.32.ROL STDLIB.32 * 2 -> STDLIB.32 + jsr STDLIB.32.ROL STDLIB.32 * 2 -> STDLIB.32 bcs .9 overflow!!! - jsr STDLIB.32.ROL STDLIB.32 * 4 -> STDLIB.32 + jsr STDLIB.32.ROL STDLIB.32 * 4 -> STDLIB.32 bcs .9 overflow!!! ldx #0 @@ -181,8 +182,8 @@ STDLIB.32.T10 ldx #3 bcs .99 overflow!!! - jsr STDLIB.32.ROL STDLIB.32 * 10 -> STDLIB.32 - bcs .99 overflow!!! + jsr STDLIB.32.ROL STDLIB.32 * 10 -> STDLIB.32 + rts if CS, overflow!!! .9 pla discard saved STDLIB.32 pla