From cdd1d64001824a1253ba7bb13f1cd0f986141598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 1 Apr 2019 07:07:56 +0100 Subject: [PATCH] Kernel 0.93 --- .Docs/Shell Developers Guide.md | 2 +- BIN/ASM.S.DIR.txt | 16 +-- BIN/ASM.S.EXP.txt | 7 +- BIN/ASM.S.MAC.txt | 182 +++++++++++++++++++------ BIN/ASM.S.OUT.txt | 36 ++++- BIN/ASM.S.SRC.txt | 72 ++++------ BIN/ASM.S.SYM.txt | 88 +++++++++---- BIN/ASM.S.txt | 35 ++--- BIN/SH.S.CMD.txt | 41 +++++- BIN/SH.S.CORE.txt | 81 +++++------- BIN/SH.S.EXP.txt | 23 ++-- BIN/SH.S.HIS.txt | 12 +- BIN/SH.S.IO.txt | 100 +++++++++++++- BIN/SH.S.txt | 126 ++++++++++-------- SYS/KERNEL.S.SLIST.txt | 6 +- X.M32.S.txt | 226 +++++++++++++++++++++----------- 16 files changed, 682 insertions(+), 371 deletions(-) diff --git a/.Docs/Shell Developers Guide.md b/.Docs/Shell Developers Guide.md index a8bd92d3..db3ba34e 100644 --- a/.Docs/Shell Developers Guide.md +++ b/.Docs/Shell Developers Guide.md @@ -58,7 +58,7 @@ where [ exp ] and [ condition ] allow to detail operators.... | ---- | ------ | ------- | | \ | Working | $VAR \| string \| "string with SPACE" \| 123 \| -456 | | \ | Working | \ [\ \] ... | -| \ | Working
---
Planned | \+ signed int32 add
\- signed int32 sub
---
\*
div
mod | +| \ | Working | \+ signed int32 add
\- signed int32 sub
\*
/
mod | | \ | Working |[ -D direxists ]
[ -E fileordirexists ]
[ -F fileexists ]
[ -N $VAR variable is not empty ]
[ -Z $VAR variable is empty ]
[ string1 = string2 ]
[ string1 != string2 ]
[ string1 .< string2 ]
[ string1 <= string2 ]
[ string1 .> string2 ]
[ string1 >= string2 ]
[ int32 -eq int32 ]
[ int32 -ne int32 ]
[ int32 -lt int32 ]
[ int32 -le int32 ]
[ int32 -gt int32 ]
[ int32 -ge int32 ] | | BREAK | Working | Exit CASE of SWITCH | | CASE | Working | CASE | diff --git a/BIN/ASM.S.DIR.txt b/BIN/ASM.S.DIR.txt index 8217b0e8..bdd76c27 100644 --- a/BIN/ASM.S.DIR.txt +++ b/BIN/ASM.S.DIR.txt @@ -420,21 +420,7 @@ DIR.IN jsr SRC.GetNextCharNB bcs .9 >LDYA ZPLinePtr - >SYSCALL RealPath - - phx - - jsr FIO.OpenFile - plx - php - pha - - txa - >SYSCALL FreeMem - - pla - plp - rts + jmp FIO.OpenFile .9 lda #E.SYNTAX.ERROR sec diff --git a/BIN/ASM.S.EXP.txt b/BIN/ASM.S.EXP.txt index 061f07a7..3d06d512 100644 --- a/BIN/ASM.S.EXP.txt +++ b/BIN/ASM.S.EXP.txt @@ -50,9 +50,12 @@ EXP.Eval.Next stz SRC.ACC.F bcs EXP.Eval.Missing cmp #'.' Local Label? - bne .12 + beq .13 - jsr EXP.GetLocal + cmp #':' + bne .12 + +.13 jsr EXP.GetLocal bcs .14 jmp EXP.EvalOperator diff --git a/BIN/ASM.S.MAC.txt b/BIN/ASM.S.MAC.txt index 6e204bc7..df917cee 100644 --- a/BIN/ASM.S.MAC.txt +++ b/BIN/ASM.S.MAC.txt @@ -26,6 +26,7 @@ MAC.Init >SYSCALL SListNew .9 rts *--------------------------------------- MAC.Reset >STZ.G MAC.StkPtr + >STA.G MAC.CtxID rts *--------------------------------------- MAC.Quit >LDA.G MAC.hStk @@ -58,9 +59,12 @@ MAC.AddChar tax >INC.G MAC.BufPtr txa + beq .1 + + cmp #C.CR bne .8 - >LDA.G MAC.BufPtr +.1 >LDA.G MAC.BufPtr tay lda #0 @@ -72,58 +76,156 @@ MAC.AddChar tax rts .8 clc - rts -*--------------------------------------- -MAC.Lookup >PUSHW ZPLinePtr - >LDA.G MAC.hList - >SYSCALL SListLookup - bcs .9 - - pha - txa - adc ZPLinePtr - sta ZPLinePtr - bcc .8 - - inc ZPLinePtr+1 - clc -.8 pla Y,A = MAC.ID - -.9 rts +MAC.AddChar.RTS rts *--------------------------------------- MAC.ReadLine >LDA.G MAC.StkPtr tay dey - dey - dey - lda (ZPMacroStk),y + sta ZPPtr1 + dey + lda (ZPMacroStk),y + sta ZPPtr1+1 pop mac ID + + dey + lda (ZPMacroStk),y + sta ZPPtr2 + dey + lda (ZPMacroStk),y + sta ZPPtr2+1 pop offset + + dey + lda (ZPMacroStk),y + sta ZPMacroBuf + dey + lda (ZPMacroStk),y + sta ZPMacroBuf+1 pop args - >PUSHA offset - dey - lda (ZPMacroStk),y - >PUSHA - - lda #0 - >PUSHA len = 0 (string mode) - >PUSHA + tya + >STA.G MAC.StkPtr + >PUSHW ZPPtr2 offset + >PUSHWI 0 len = 0 (string mode) >PUSHW ZPLineBuf - >LDA.G MAC.StkPtr - - tay - dey - lda (ZPMacroStk),y - >PUSHA - dey - lda (ZPMacroStk),y - >PUSHA - + >PUSHW ZPPtr1 Mac ID >LDA.G MAC.hList >SYSCALL SListGetData + bcs MAC.AddChar.RTS + + pha + tya +* clc + adc ZPPtr2 + sta ZPPtr2 + + pla + adc ZPPtr2+1 + sta ZPPtr2+1 + + >LDYA ZPMacroBuf + >SYSCALL puts + + >LDA.G MAC.StkPtr + tay + + lda ZPLinePtr+1 push args + sta (ZPMacroStk),y + iny + + lda ZPLinePtr + sta (ZPMacroStk),y + iny +*--------------------------------------- +MAC.Push lda ZPPtr2+1 push offset + sta (ZPMacroStk),y + iny + + lda ZPPtr2 + sta (ZPMacroStk),y + iny + + lda ZPPtr1+1 push MAC.ID + sta (ZPMacroStk),y + iny + + lda ZPPtr1 + sta (ZPMacroStk),y + iny + + tya + >STA.G MAC.StkPtr + + clc rts *--------------------------------------- +MAC.Exec jsr SRC.GetNextChar skip '>' + bcs .90 + + >PUSHW ZPLinePtr + >LDA.G MAC.hList + >SYSCALL SListLookup + bcs .90 + >STYA ZPPtr1 MAC.ID + + txa +* clc + adc ZPLinePtr + sta ZPLinePtr + bcc .1 + + inc ZPLinePtr+1 + +.1 jsr SRC.GetChar + bcs .8 + + cmp #' ' + bne .92 + + jsr SRC.GetNextChar + beq .8 eol.. + + cmp #' ' some arg... + bne .8 + +.2 jsr SRC.GetNextChar comment....skip + bcc .2 + +.8 >LDA.G MAC.StkPtr + cmp #MA.MAXDEPTH*8 + beq .91 + + stz ZPPtr2 + stz ZPPtr2+1 offset = 0 + + >INC.G MAC.CtxID + >INC.G MAC.Depth + + >LDA.G MAC.StkPtr + tay + + lda ZPLinePtr+1 push args + sta (ZPMacroStk),y + iny + + lda ZPLinePtr + sta (ZPMacroStk),y + iny + + jmp MAC.Push + +.90 lda #E.MACRO.INV + sec + rts + +.91 lda #E.MACRO.TOO.MANY + sec + rts + +.92 lda #E.SYNTAX.ERROR + sec + rts +*--------------------------------------- MAN SAVE USR/SRC/BIN/ASM.S.MAC LOAD USR/SRC/BIN/ASM.S diff --git a/BIN/ASM.S.OUT.txt b/BIN/ASM.S.OUT.txt index 659312ac..b466ce6e 100644 --- a/BIN/ASM.S.OUT.txt +++ b/BIN/ASM.S.OUT.txt @@ -106,10 +106,34 @@ OUT.PrintLine jsr OUT.PrintLineOn OUT.PrintLine.1 jsr OUT.PrintLineOutBuf bcs OUT.Print.RTS - >PUSHW ZPLineBuf - >PUSHW.G SRC.LINENUM - >PUSHBI 4 - >LDYA L.MSG.SRCLINE + >LDA.G SRC.COUNT + +.1 dec + bmi .2 + pha + >LDA.G '>' + >SYSCALL putchar + pla + bra .1 + +.2 >PUSHW.G SRC.LINENUM + >PUSHBI 2 + >LDYA L.MSG.LINENUM + >SYSCALL printf + + >LDA.G MAC.Depth + +.3 dec + bmi .4 + pha + >LDA.G '>' + >SYSCALL putchar + pla + bra .3 + +.4 >LDYA ZPLineBuf + >SYSCALL puts + jmp OUT.PrintCR1 *--------------------------------------- OUT.Print >SYSCALL printf bcs OUT.Print.RTS @@ -226,8 +250,8 @@ OUT.EmitByte phy OUT.PrintCR >PUSHBI 0 >LDYA L.MSG.CRLF >SYSCALL printf - - >DEC.G OUT.LineCnt + >DEBUG +OUT.PrintCR1 >DEC.G OUT.LineCnt bne .8 lda #PAGE.LEN diff --git a/BIN/ASM.S.SRC.txt b/BIN/ASM.S.SRC.txt index 38c3216a..d32e20f4 100644 --- a/BIN/ASM.S.SRC.txt +++ b/BIN/ASM.S.SRC.txt @@ -85,7 +85,7 @@ SRC.ParseLine.Macro .8 clc rts -.80 lda #0 +.80 lda #C.CR jmp MAC.AddChar .3 lda (ZPLinePtr) @@ -130,10 +130,18 @@ SRC.ParseLine.LABEL cmp #' ' no label...go scan dir/opcode beq SRC.ParseLine.DirOp + tax save char... + cmp #'.' local symbol? - bne .1 + beq .1 + + cmp #':' private symbol? + bne .8 + + >LDA.G MAC.StkPtr + beq SRC.ParseLine.InvLbl - >LDA.G SYM.bInGlobal Not relative to Global label... +.1 >LDA.G SYM.bInGlobal Not relative to Global label... bpl SRC.ParseLine.InvLbl jsr SRC.GetNextChar @@ -148,11 +156,18 @@ SRC.ParseLine.LABEL lda SRC.ACC beq SRC.ParseLine.InvLbl .0 is not allowed - jsr SYM.NewOrGetLocalA - bcs SRC.ParseLine.RTS + cpx #':' + beq .2 + + jsr SYM.NewLocalA + bra .3 + +.2 jsr SYM.NewPrivateA + +.3 bcs SRC.ParseLine.RTS bra SRC.ParseLine.DirOp -.1 jsr SYM.NewOrGetGlobal +.8 jsr SYM.NewOrGetGlobal bcs SRC.ParseLine.RTS *--------------------------------------- SRC.ParseLine.DirOp @@ -172,7 +187,7 @@ SRC.ParseLine.DirOp .5 cmp #'>' bne SRC.ParseLine.OpCode - jsr SRC.ParseLine.ExecMacro + jsr MAC.Exec bcs SRC.ParseLine.Err bra SRC.ParseLine.Ok @@ -199,49 +214,6 @@ SRC.ParseLine.Dir jmp (J.DIRECTIVES,x) *--------------------------------------- -SRC.ParseLine.ExecMacro - jsr SRC.GetNextChar skip '>' - bcs .90 - - jsr MAC.Lookup - bcs .90 - >STYA ZPPtr1 MAC.ID - >LDA.G MAC.StkPtr - cmp #MA.MAXDEPTH*4 - beq .91 - - tay - - lda #0 - sta (ZPMacroStk),y - iny - - sta (ZPMacroStk),y - iny - - lda ZPPtr1 - sta (ZPMacroStk),y - iny - - lda ZPPtr1+1 - sta (ZPMacroStk),y - iny - - tya - >STA.G MAC.StkPtr - - - clc - rts - -.90 lda #E.MACRO.INV - sec - rts - -.91 lda #E.MACRO.TOO.MANY - sec - rts -*--------------------------------------- SRC.ParseLine.OpCode >LDYA ZPOpsPtr >STYA ZPOpDefPtr diff --git a/BIN/ASM.S.SYM.txt b/BIN/ASM.S.SYM.txt index 1544c15b..828f6e53 100644 --- a/BIN/ASM.S.SYM.txt +++ b/BIN/ASM.S.SYM.txt @@ -113,37 +113,57 @@ SYM.Dump >LDA.G ASM.LI.ON bit #SYMG.F.LOCALS beq .7 - ldy #SYMG + jsr SYM.Dump.LP + +.7 jsr OUT.PrintCR + jmp .1 +*--------------------------------------- +SYM.Dump.LP ldy #SYMG .4 lda (ZPSymbolBuf),y - beq .7 End Local Symbol + beq .8 - pha Save ID + phy + + iny ldx #4 - iny Skip Macro ID - .5 iny lda (ZPSymbolBuf),y >PUSHA dex bne .5 - pla - >PUSHA - phy - >PUSHBI 6 - >LDYA L.MSG.LSYMBOL - >SYSCALL printf ply iny - bra .4 + lda (ZPSymbolBuf),y + tax + beq .55 + >PUSHA -.7 >PUSHBI 0 - >LDYA L.MSG.CRLF - >SYSCALL printf - jmp .1 +.55 dey + lda (ZPSymbolBuf),y + >PUSHA + phy + + txa + beq .6 + >PUSHBI 6 + >LDYA L.MSG.PSYMBOL + bra .66 + +.6 >PUSHBI 5 + >LDYA L.MSG.LSYMBOL +.66 >SYSCALL printf + pla + clc + adc #SYML + tay + + bra .4 + +.8 rts *--------------------------------------- SYM.NewOrGetGlobal >LDA.G ASM.PASS @@ -298,6 +318,7 @@ SYM.StoreGlobal >LDA.G ASM.PASS lda #0 >STA.G SYM.bInGlobal + >STA.G MAC.CtxID rts @@ -336,12 +357,17 @@ SYM.Acc2Global ldy #SYMG-1 rts *--------------------------------------- -* Local Symbol Record: (6 bytes) +* Local/Private Symbol Record: (6 bytes) * 0 : Local ID (1->255) -* 1 : Macro ID +* 1 : Macro Context ID * 2-5 : 32 bits Value (PC) *--------------------------------------- -SYM.NewOrGetLocalA +SYM.NewPrivateA sec + .HS 90 BCC + +SYM.NewLocalA clc + + ror ZPPtr1 tax Save Local ID >LDA.G SYM.bInGlobal not in a global label @@ -365,8 +391,12 @@ SYM.NewOrGetLocalA cpy #ASM.PC bne .1 - >LDA.G MAC.StkPtr Get Macro Context ID - pha + lda #0 + bit ZPPtr1 + bpl .11 local, Ctx = 0 + + >LDA.G MAC.CtxID Get Macro Context ID +.11 pha >LDA.G SYM.GlobalPtr tay @@ -412,18 +442,23 @@ SYM.GetLocalX lda (ZPSymbolBuf) beq .9 ldy #SYMG - + .1 lda (ZPSymbolBuf),y beq .9 txa cmp (ZPSymbolBuf),y + bne .4 + + phy + >LDA.G MAC.CtxID + ply + iny + cmp (ZPSymbolBuf),y bne .3 ldx #0 - iny Macro ID - .2 iny lda (ZPSymbolBuf),y sta SRC.ACC,x @@ -436,8 +471,9 @@ SYM.GetLocalX lda (ZPSymbolBuf) clc rts - -.3 tya + +.3 dey +.4 tya clc adc #SYML tay diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 203023df..a7063bc5 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -7,6 +7,9 @@ AUTO 4,1 .TF BIN/ASM *--------------------------------------- PAGE.LEN .EQ 23 +DO.MAXDEPTH .EQ 8 +IN.MAXDEPTH .EQ 4 +MA.MAXDEPTH .EQ 8 *--------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I @@ -54,27 +57,23 @@ ASM.T.AM .EQ 0 ASM.T.R .EQ 2 ASM.T.O .EQ 4 *--------------------------------------- -DO.MAXDEPTH .EQ 8 -IN.MAXDEPTH .EQ 4 -MA.MAXDEPTH .EQ 8 -*--------------------------------------- E.SYNTAX.ERROR .EQ $A0 E.SYM.TOO.LONG .EQ $A1 -E.VAL.TOO.BIG .EQ $A2 +E.VAL.TOO.BIG .EQ $A2 E.LINE.TOO.LONG .EQ $A3 E.INV.LABEL .EQ $A4 -E.INV.DIR .EQ $A5 -E.INV.OPCODE .EQ $A6 -E.INV.AM.SYN .EQ $A7 -E.INV.AM .EQ $A8 -E.INV.AM.4.OC .EQ $A9 +E.INV.DIR .EQ $A5 +E.INV.OPCODE .EQ $A6 +E.INV.AM.SYN .EQ $A7 +E.INV.AM .EQ $A8 +E.INV.AM.4.OC .EQ $A9 E.RANGE .EQ $AA E.UNDEF.SYMBOL .EQ $AB E.SYMBOL.REDEF .EQ $AC -E.TOO.MANY.DO .EQ $AD +E.TOO.MANY.DO .EQ $AD E.ELSE.WITHOUT.DO .EQ $AE E.TOO.MANY.LOCAL .EQ $AF -E.MISSING.EXP .EQ $B0 +E.MISSING.EXP .EQ $B0 E.EXP.SYN.ERROR .EQ $B1 E.MACRO.INV.DEF .EQ $B2 E.MACRO.TOO.BIG .EQ $B3 @@ -118,10 +117,11 @@ L.MSG.EQU0 .DA MSG.EQU0 .DA MSG.EQU3 .DA MSG.EQU4 L.MSG.PASS .DA MSG.PASS -L.MSG.SRCLINE .DA MSG.SRCLINE +L.MSG.LINENUM .DA MSG.LINENUM L.MSG.ERROR .DA MSG.ERROR L.MSG.SYMBOLS .DA MSG.SYMBOLS L.MSG.LSYMBOL .DA MSG.LSYMBOL +L.MSG.PSYMBOL .DA MSG.PSYMBOL L.MSG.SUMMARY .DA MSG.SUMMARY L.MSG.END .DA MSG.END L.MSG.PSTR .DA MSG.PSTR @@ -313,8 +313,9 @@ CS.RUN ldy #S.PS.hStdIn jsr MAC.ReadLine bcc .2 - tax + cmp #E.NODATA bne .9 + >DEC.G MAC.Depth .20 jsr FIO.ReadLine bcc .2 @@ -470,10 +471,11 @@ MSG.EQU1 .AZ " [ %h] " MSG.EQU2 .AZ " [ %h%h] " MSG.EQU3 .AZ " [ %h%h%h] " MSG.EQU4 .AZ " [%h%h%h%h] " -MSG.SRCLINE .AZ " %05D %s" +MSG.LINENUM .AZ " %05D " MSG.ERROR .AZ "**** Fatal Error $%h" MSG.SYMBOLS .AZ "Symbol Table:" MSG.LSYMBOL .AZ " .%d=%h%h%h%h" +MSG.PSYMBOL .AZ " :%d(%d)=%h%h%h%h" MSG.SUMMARY .AZ "\r\nSymbol Table Size : %5D Bytes.\r\n" MSG.END .AZ "End Of Assembly." MSG.PSTR .AS "{%S}" @@ -561,7 +563,10 @@ MAC.hBuf .BS 1 MAC.BufPtr .BS 1 MAC.hStk .BS 1 MAC.StkPtr .BS 1 +MAC.CtxID .BS 1 MAC.ID .BS 2 +MAC.Depth .BS 1 +MAC.CtxIDS .BS MA.MAXDEPTH OUT.PC .BS 4 OUT.Buf .BS 4 diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 73c68524..9d852924 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -85,7 +85,7 @@ CMD.CD.1 >SYSCALL realpath bcs CMD.POPD.RTS >STYA ZPPtr1 - stx TmpByte Save hMem + stx M32.TMP Save hMem ldy #1 lda (ZPPtr1),y @@ -107,7 +107,7 @@ CMD.CD.1 >SYSCALL realpath lda #MLI.E.INVPATH .19 pha - lda TmpByte + lda M32.TMP >SYSCALL freemem pla sec @@ -124,7 +124,7 @@ CMD.CD.1 >SYSCALL realpath cmp #'/' bne .14 - lda TmpByte + lda M32.TMP jmp CMD.SetPrefixA already ends with a / .14 iny @@ -147,7 +147,7 @@ CMD.CD.1 >SYSCALL realpath lda #'/' sta (ZPPtr2),y phx - lda TmpByte + lda M32.TMP >SYSCALL freemem pla *-------------------------------------- @@ -480,8 +480,8 @@ CMD.EXIT lda (ZPArgVBufPtr) >SYSCALL AToL bcs .9 - >PULLL.G M32.ACC - >LDA.G M32.ACC + >PULLL M32.ACC + lda M32.ACC .8 pha lda #$FF @@ -572,6 +572,35 @@ CMD.FUNC lda (ZPArgVBufPtr) CMD.RETURN .9 jmp CMD.Exec.CSYN *-------------------------------------- +CMD.CALL >LDA.G hFuncList + beq .9 + + >PUSHW ZPInputBufPtr + >LDA.G hFuncList + >SYSCALL SListLookup + bcs .9 + + >STYA M32.TMP KeyID + + >PUSHWI 0 From Start + >PUSHWI $ffff all + >PUSHWI 0 Allocate.. + >PUSHW M32.TMP KeyID + >LDA.G hFuncList + >SYSCALL SListGetData + bcs .99 + txa + pha + >SYSCALL GetMemPtr + pla + >SYSCALL freemem + rts + + +.9 lda #E.FUNDEF + sec +.99 rts +*-------------------------------------- CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test bcs .9 diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index b29f5f96..0007345d 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -64,8 +64,11 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping >STA.G CORE.PSFlags lda #$ff + >STA.G CORE.IntCmd assume external - + inc + >STA.G CORE.CmdFile no Cmd file mode + jsr CORE.GetCharNB bcc .11 @@ -120,27 +123,18 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping cmp #C.SPACE bne .4 - >LDA.G CORE.PSFlags yes, child process will run in same ENV - and #$ff^S.PS.F.DUPENV - sta (pData),y - jsr CORE.GetNextCharNB skip ". " bcs .99 nothing to execute... + lda #$ff + >STA.G CORE.CmdFile + + bra .42 + .4 >LDYA L.CMD internal command ? jsr CORE.LookupInputBuf bcc .41 - >LDA.G hFuncList - beq .40 - - >PUSHW ZPInputBufPtr - >LDA.G hFuncList - >SYSCALL SListLookup - bcs .40 - - jmp CORE.ExecFunc - .40 jsr CORE.ArgV.Add external cmd, go check context bra .42 @@ -225,10 +219,22 @@ CORE.ExecCmd.1 lda #0 >LDA.G CORE.IntCmd bmi CORE.ExecExtCmd + asl tax jmp (J.CMD,x) -CORE.ExecExtCmd >PUSHB.G CORE.PSFlags +CORE.ExecExtCmd >LDA.G CORE.CmdFile + bpl .1 + + >LDYA ZPArgVBufPtr + >SYSCALL puts + >DEBUG + + >LDYA ZPArgVBufPtr + jsr IO.FILECALL.NOQUIT + bra CORE.ExecExtCmd.Exit + +.1 >PUSHB.G CORE.PSFlags >LDYA ZPArgVBuf >SYSCALL execv @@ -342,31 +348,6 @@ CORE.SkipLine jsr CORE.GetNextCharNB .8 rts *-------------------------------------- -CORE.ExecFunc >STYA TmpWord KeyID - - jsr CORE.SkipLine - - - - >PUSHWI 0 From Start - >PUSHWI $ffff all - >PUSHWI 0 Allocate.. - >PUSHW TmpWord KeyID - >LDA.G hFuncList - >SYSCALL SListGetData - bcs .9 - txa - pha - >SYSCALL GetMemPtr - >SYSCALL puts - - >DEBUG - pla - >SYSCALL freemem - - -.9 rts -*-------------------------------------- * search ZPInputBufPtr/ZPArgVBufPtr in Y,A table *-------------------------------------- CORE.LookupInputBuf @@ -421,7 +402,6 @@ CORE.Lookup >STYA ZPPtr2 inc ZPPtr1+1 .6 inx - inx lda (ZPPtr1) Array Ending 0, must be an external Cmd.... bne .1 @@ -436,38 +416,38 @@ CORE.ArgV.Add >LDYA ZPArgVBufPtr >STYA ZPArgVBufPrev Save String start of Expand lda #C.SPACE - sta TmpByte + sta M32.TMP jsr CORE.GetCharNB bcs .9 cmp #'"' bne .10 - sta TmpByte + sta M32.TMP bra .1 .10 cmp #'(' bne .11 ldx #')' - stx TmpByte + stx M32.TMP bra .12 .11 cmp #'`' bne .12 - sta TmpByte + sta M32.TMP .12 jsr CORE.ArgV.PutChar .1 jsr CORE.GetNextChar bcs .5 -.2 cmp TmpByte +.2 cmp M32.TMP bne .3 jsr CORE.GetNextChar bra .5 -.3 ldy TmpByte +.3 ldy M32.TMP cpy #C.SPACE bne .40 jsr CORE.IsEndCmd @@ -533,7 +513,10 @@ CORE.ArgV.Next lda (ZPArgVBufPtr) *-------------------------------------- * IO *-------------------------------------- -CORE.IO.JMP jmp (J.CORE.IO,x) +CORE.IO.JMP txa + asl + tax + jmp (J.CORE.IO,x) CORE.IO.AMP >LDA.G CORE.PSFlags and #$ff^S.PS.F.HOLD diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index cb7e0c02..82cf6d54 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -14,9 +14,9 @@ EXP.GET jsr CORE.ArgV.Next >SYSCALL AToL bcs .99 - >PULLL.G M32.ACC + >PULLL M32.ACC -.2 >LDYA L.EXP.OP.MATH + - .... ? +.2 >LDYA L.EXP.OP.MATH + - .... ? jsr CORE.LookupArgVBuf bcs .9 @@ -25,28 +25,28 @@ EXP.GET jsr CORE.ArgV.Next jsr M32.ACC2ARG - jsr CORE.ArgV.Next get next argument in ACC + jsr CORE.ArgV.Next get next argument in ACC beq .9 >LDYA ZPArgVBufPtr >SYSCALL AToL bcs .9 - >PULLL.G M32.ACC + >PULLL M32.ACC jsr EXP.GET.OP .99 bcs .9 jsr CORE.ArgV.Next another op ? bne .2 -.8 >PUSHL.G M32.ACC +.8 >PUSHL M32.ACC >PUSHBI 4 >PUSHW L.M32.Printf >LEA.G M32.BUF >SYSCALL sprintf bcs .9 - >LEA.G M32.Buf + >LEA.G M32.BUF rts @@ -55,6 +55,7 @@ EXP.GET jsr CORE.ArgV.Next rts EXP.GET.OP >LDA.G CORE.Operator + asl tax jmp (J.EXP.OP.MATH,x) *-------------------------------------- @@ -131,6 +132,7 @@ EXP.TEST.UNARY jsr CORE.ArgV.Next beq EXP.OP.UNARY.ESYN we need one arg or ] >LDA.G CORE.Operator + asl tax jmp (J.EXP.OP.UNARY,x) @@ -232,7 +234,7 @@ EXP.TEST.BINARY.NUM >SYSCALL AToL bcs EXP.TEST.BINARY.ESYN - >PULLL.G M32.ACC + >PULLL M32.ACC jsr CORE.ArgV.Next beq EXP.TEST.BINARY.ESYN @@ -241,7 +243,7 @@ EXP.TEST.BINARY.NUM >SYSCALL AToL bcs EXP.TEST.BINARY.ESYN - >PULLL.G M32.ARG + >PULLL M32.ARG jsr M32.Cmp @@ -263,6 +265,11 @@ EXP.TEST.BINARY.END clc rts *-------------------------------------- +EXP.OP.AND +EXP.OP.OR + clc + rts +*-------------------------------------- MAN SAVE USR/SRC/BIN/SH.S.EXP LOAD USR/SRC/BIN/SH.S diff --git a/BIN/SH.S.HIS.txt b/BIN/SH.S.HIS.txt index 2aa17738..7fbd493e 100644 --- a/BIN/SH.S.HIS.txt +++ b/BIN/SH.S.HIS.txt @@ -3,7 +3,7 @@ PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- -HIS.Init >LDYAI History.MAX Get a buffer for History +HIS.Init >LDYAI HISTORY.MAX Get a buffer for History >SYSCALL GetMem0 bcs .9 @@ -15,6 +15,11 @@ HIS.Init >LDYAI History.MAX Get a buffer for History >STA.G HIS.Index .9 rts *-------------------------------------- +HIS.Quit >LDA.G HIS.hBuf + beq .9 + >SYSCALL FreeMem +.9 rts +*-------------------------------------- HIS.Add >LDA.G HIS.hBuf beq .9 @@ -174,11 +179,6 @@ HIS.GetA ldy #0 .80 clc rts *-------------------------------------- -HIS.Quit >LDA.G HIS.hBuf - beq .9 - >SYSCALL FreeMem -.9 rts -*-------------------------------------- MAN SAVE USR/SRC/BIN/SH.S.HIS LOAD USR/SRC/BIN/SH.S diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 3faed7fd..1fd38dac 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -3,11 +3,97 @@ PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- +IO.Init lda #FILECALL.STACK + >STA.G FILECALL.STACK + rts +*-------------------------------------- IO.Reset jsr IO.Reset.In jsr IO.Reset.Out jsr IO.Reset.Err IO.Reset.9 rts *-------------------------------------- +IO.FILECALL.QUIT sec + .HS 90 BCC +IO.FILECALL.NOQUIT clc + + >STYA ZPPtr1 Filename + + lda #0 + ror + >STA.G bExitOnEOF + + >LDA.G FILECALL.STACK + cmp #FILECALL.STACK+FILECALL.STACK.MAX*3 + beq .90 + + >PUSHWI 0 Aux type + >PUSHBI S.FI.T.TXT + >PUSHBI O.RDONLY + + >LDYA ZPPtr1 + >SYSCALL LoadTxtFile + bcs .9 + + >LDA.G FILECALL.STACK + tay + + iny + lda ZPInputBufPtr+1 + sta (pData),y + iny + lda ZPInputBufPtr + sta (pData),y + iny + txa + sta (pData),y + + tya + >STA.G FILECALL.STACK + + txa + >SYSCALL GetMemPtr + >STYA ZPInputBuf + >STYA ZPInputBufPtr + + lda #$ff + >STA.G bBatchMode +* +* clc + rts + +.90 lda #E.STKOVERFLOW + sec +.9 rts +*-------------------------------------- +IO.FEXIT >LDA.G FILECALL.STACK + cmp #FILECALL.STACK + beq .90 + + tay + dey + lda (pData),y + tax hBuf + + dey + lda (pData),y + sta ZPInputBufPtr + + dey + lda (pData),y + sta ZPInputBufPtr+1 + + tya + >STA.G FILECALL.STACK + txa + >SYSCALL GetMemPtr + >STYA ZPInputBuf +* clc + rts + +.90 lda #E.STACKERROR + sec + rts +*-------------------------------------- IO.Pipe.In >LDA.G IO.hOut ldy #S.PS.hStdOut sta (pPS),y @@ -20,7 +106,7 @@ IO.Pipe.In >LDA.G IO.hOut >LEA.G IO.NodBuf >SYSCALL fopen - bcs IO.Reset.9 + bcs IO.Set.RTS *-------------------------------------- IO.Set.In pha jsr IO.Reset.In @@ -30,7 +116,7 @@ IO.Set.In pha pla ldy #S.PS.hStdIn sta (pPS),y - rts +IO.Set.RTS rts *-------------------------------------- IO.Reset.In >LDA.G IO.hIn beq .8 @@ -150,12 +236,12 @@ IO.PrintBatchErrMsg .11 >STYA ZPPtr2 - stz TmpWord Line Count - stz TmpWord+1 + stz M32.TMP Line Count + stz M32.TMP+1 -.1 inc TmpWord +.1 inc M32.TMP bne .2 - inc TmpWord+1 + inc M32.TMP+1 .2 ldy #$ff @@ -226,7 +312,7 @@ IO.PrintBatchErrMsg ply bra .7 -.8 >PUSHW TmpWord +.8 >PUSHW M32.TMP >PUSHBI 2 >PUSHW L.MSG.BATCHERR diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 11a55c8b..fbd7c425 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -6,46 +6,48 @@ AUTO 4,1 .OR $2000 .TF BIN/SH *-------------------------------------- -History.MAX .EQ 256 +HISTORY.MAX .EQ 256 CORE.STACK.MAX .EQ 64 PUSHD.STACK.MAX .EQ 8 +FILECALL.STACK.MAX .EQ 8 *-------------------------------------- C.NOHUP .EQ 0 -C.CD .EQ 2 -C.DATE .EQ 4 -C.ECHO .EQ 6 -C.EXIT .EQ 8 -C.GETKEY .EQ 10 -C.MD .EQ 12 -C.PAUSE .EQ 14 -C.PWD .EQ 16 -C.RD .EQ 18 -C.READ .EQ 20 -C.REN .EQ 22 -C.SET .EQ 24 -C.SLEEP .EQ 26 -C.SHIFT .EQ 28 -C.TIME .EQ 30 -C.PUSHD .EQ 32 -C.POPD .EQ 34 -C.FUNC .EQ 36 -C.RETURN .EQ 38 -C.BREAK .EQ 40 -C.SWITCH .EQ 42 -C.CASE .EQ 44 -C.DEFAULT .EQ 46 -C.END .EQ 48 +C.CD .EQ 1 +C.DATE .EQ 2 +C.ECHO .EQ 3 +C.EXIT .EQ 4 +C.GETKEY .EQ 5 +C.MD .EQ 6 +C.PAUSE .EQ 7 +C.PWD .EQ 8 +C.RD .EQ 9 +C.READ .EQ 10 +C.REN .EQ 11 +C.SET .EQ 12 +C.SLEEP .EQ 13 +C.SHIFT .EQ 14 +C.TIME .EQ 15 +C.PUSHD .EQ 16 +C.POPD .EQ 17 +C.FUNC .EQ 18 +C.RETURN .EQ 19 +C.CALL .EQ 20 +C.BREAK .EQ 21 +C.SWITCH .EQ 22 +C.CASE .EQ 23 +C.DEFAULT .EQ 24 +C.END .EQ 25 *-------------------------------------- -C.FOR .EQ 50 +C.FOR .EQ 26 C.FOR.LIST .EQ 0 C.FOR.FILE .EQ 2 C.FOR.EXEC .EQ 4 -C.WHILE .EQ 52 -C.IF .EQ 54 -C.NEXT .EQ 56 -C.LOOP .EQ 58 -C.ELSE .EQ 60 -C.FI .EQ 62 +C.WHILE .EQ 27 +C.IF .EQ 28 +C.NEXT .EQ 29 +C.LOOP .EQ 30 +C.ELSE .EQ 31 +C.FI .EQ 32 *-------------------------------------- E.CSYN .EQ $C0 E.ESYN .EQ $C1 @@ -56,6 +58,7 @@ E.NOFOR .EQ $C5 E.NOIF .EQ $C6 E.BADEXP .EQ $C7 E.BADFTYPE .EQ $C8 +E.FUNDEF .EQ $C7 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I @@ -73,10 +76,14 @@ ZPArgVBuf .BS 2 ZPArgVBufPrev .BS 2 ZPArgVBufPtr .BS 2 ZPVarNamePtr .BS 2 + ZPPtr1 .BS 2 ZPPtr2 .BS 2 -TmpWord .BS 2 -TmpByte .BS 1 + +M32.ACC .BS 4 +M32.ARG .BS 4 +M32.TMP .BS 4 + ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -141,6 +148,7 @@ J.CMD .DA CMD.NOHUP .DA CMD.POPD .DA CMD.FUNC .DA CMD.RETURN + .DA CMD.CALL .DA CMD.BREAK .DA CMD.SWITCH .DA CMD.CASE @@ -179,6 +187,9 @@ J.EXP.OP.MATH .DA M32.Add .DA M32.Mul .DA M32.Div .DA M32.Mod +L.EXP.OP.LOGIC .DA EXP.OP.LOGIC +J.EXP.OP.LOGIC .DA EXP.OP.AND + .DA EXP.OP.OR L.HOME.PROFILE .DA HOME.PROFILE L.M32.Printf .DA M32.Printf L.ERR.Codes .DA ERR.Codes @@ -191,31 +202,21 @@ CS.INIT.RTS rts *-------------------------------------- CS.RUN jsr CL.Init jsr CORE.Init + jsr IO.Init ldy #S.PS.ARGC lda (pPS),y beq .1 no arg, continue starting interactive - >PUSHWI 0 Aux type - >PUSHBI S.FI.T.TXT - >PUSHBI O.RDONLY lda #1 >SYSCALL ArgV - >SYSCALL LoadTxtFile + + jsr IO.FILECALL.QUIT Exec file an exit bcs CS.INIT.RTS - txa - >STA.G hInputBuf - >SYSCALL GetMemPtr - >STYA ZPInputBuf - >STYA ZPInputBufPtr - lda #0 - jsr CMD.SHIFTA Remove $0=/bin/sh + jsr CMD.SHIFTA Remove $0=/bin/sh - lda #$ff - >STA.G bBatchMode - bra CS.RUN.LOOP *-------------------------------------- .1 jsr CMD.CD.HOME @@ -231,11 +232,12 @@ CS.RUN jsr CL.Init >PUSHEA.G StatBuf >LDYA L.HOME.PROFILE >SYSCALL STAT - bcs CS.RUN.LOOP - - >PUSHBI S.PS.F.HOLD + bcs CS.RUN.LOOP no profile... + >LDYA L.HOME.PROFILE - >SYSCALL execl + jsr IO.FILECALL.NOQUIT exec profile and continue + +* bcs CS.RUN.LOOP *-------------------------------------- CS.RUN.LOOP >SLEEP @@ -434,9 +436,12 @@ CS.RUN.BATCH bne CS.RUN.LOOP.END pha - lda #$ff + jsr IO.FEXIT + + >LDA.G bExitOnEOF >STA.G bExit pla + sec CS.RUN.LOOP.END ldy #S.PS.RC sta (pPs),y @@ -602,6 +607,7 @@ CMD .AZ "NOHUP" .AZ "POPD" .AZ "FUNC" .AZ "RETURN" + .AZ "CALL" .AZ "BREAK" .AZ "SWITCH" .AZ "CASE" @@ -667,8 +673,11 @@ EXP.OP.BINARY.BITS EXP.OP.MATH .AZ "+" .AZ "-" .AZ "*" - .AZ "div" - .AZ "mod" + .AZ "/" + .AZ "MOD" + .HS 00 +EXP.OP.LOGIC .AZ "&&" + .AZ "||" .HS 00 *-------------------------------------- .INB USR/SRC/X.M32.S @@ -684,13 +693,16 @@ M32.Printf .AZ "%L" DS.START CORE.STACK .BS CORE.STACK.MAX+1 pData (0 = Stack Ptr) PUSHD.STACK .BS PUSHD.STACK.MAX+1 +FILECALL.STACK .BS FILECALL.STACK.MAX*3+1 hFuncList .BS 1 + hInputBuf .BS 1 bReadMode .BS 1 bBatchMode .BS 1 bFuncMode .BS 1 +bExitOnEOF .BS 1 bEscMode .BS 1 bPause .BS 1 @@ -711,6 +723,7 @@ CL.Len .BS 1 CL.bReady .BS 1 CORE.IntCmd .BS 1 +CORE.CmdFile .BS 1 CORE.hArgVBuf .BS 1 CORE.ArgIndex .BS 1 @@ -729,9 +742,6 @@ IO.hPipe .BS 1 IO.NodBuf .BS 12 /DEV/PIPExx\0 *-------------------------------------- M32.BUF .BS 12 -1234567890\0 -M32.ACC .BS 4 -M32.ARG .BS 4 -M32.TMP .BS 4 DS.END .ED *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.SLIST.txt b/SYS/KERNEL.S.SLIST.txt index 6157eb3b..c85b7ab9 100644 --- a/SYS/KERNEL.S.SLIST.txt +++ b/SYS/KERNEL.S.SLIST.txt @@ -22,7 +22,7 @@ SLIST.GetData jsr SLIST.Select eor #$ff sta SLIST.nDataCnt lda SLIST.DataLen+1 - sbc ZPMemMgrSize + sbc ZPMemMgrSize+1 eor #$ff sta SLIST.nDataCnt+1 Data remaining @@ -75,7 +75,7 @@ SLIST.GetData jsr SLIST.Select bpl .5 cmp #C.CR - beq .7 + beq .8 .5 jsr MEM.SetDataByte inc ZPSListDataLen @@ -87,8 +87,6 @@ SLIST.GetData jsr SLIST.Select sec .9 rts -.7 jsr SLIST.GetNextByte - .8 bit SLIST.bStringMode bpl .81 diff --git a/X.M32.S.txt b/X.M32.S.txt index 3c75367b..a2576d62 100644 --- a/X.M32.S.txt +++ b/X.M32.S.txt @@ -3,60 +3,45 @@ PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- -* Uses: (pData) +* Uses: 12 ZP * M32.ACC .BS 4 * M32.ARG .BS 4 * M32.TMP .BS 4 *-------------------------------------- * TODO : Make it SIGNED 32 bits -* TODO : Implement mul, div, mod ... * http://6502.org/source/integers/32muldiv.htm +* http://nparker.llx.com/a2/mult.html *-------------------------------------- -M32.Add ldy #M32.ARG+4 ARG+ACC->ACC - -.1 dey - lda (pData),y - pha - cpy #M32.ARG - bne .1 +M32.Add ldx #4 + ldy #0 - ldy #M32.ACC - ldx #4 + clc ARG+ACC->ACC - clc - -.2 pla - adc (pData),y - sta (pData),y +.1 lda M32.ARG,y + adc M32.ACC,y + sta M32.ACC,y iny dex - bne .2 - clc + bne .1 + + clc rts if CS, Overflow *--------------------------------------- -M32.Sub ldy #M32.ARG+4 ARG-ACC->ACC +M32.Sub ldx #4 + + ldy #0 + + sec ARG-ACC->ACC -.1 dey - lda (pData),y - pha - cpy #M32.ARG - bne .1 - - ldy #M32.ACC - ldx #4 - - sec - -.2 pla - sbc (pData),y - sta (pData),y +.1 lda M32.ARG,y + sbc M32.ACC,y + sta M32.ACC,y iny dex - bne .2 + bne .1 - - clc - rts + clc + rts bcs .8 if CC, Overflow @@ -66,69 +51,154 @@ M32.Sub ldy #M32.ARG+4 ARG-ACC->ACC .8 clc rts *-------------------------------------- -M32.Mul -*-------------------------------------- -M32.Div +M32.Mul ldx #3 ARG*ACC->ACC - sec - rts -*-------------------------------------- -M32.Mod +.1 lda M32.ACC,x + sta M32.TMP,x + stz M32.ACC,x + dex + bpl .1 + + ldx #32 + +.2 lsr M32.TMP+3 + ror M32.TMP+2 + ror M32.TMP+1 + ror M32.TMP + + bcc .3 + + clc + lda M32.ARG + adc M32.ACC + sta M32.ACC + lda M32.ARG+1 + adc M32.ACC+1 + sta M32.ACC+1 + lda M32.ARG+2 + adc M32.ACC+2 + sta M32.ACC+2 + + lda M32.ARG+3 + adc M32.ACC+3 + sta M32.ACC+3 + +.3 asl M32.ARG + rol M32.ARG+1 + rol M32.ARG+2 + rol M32.ARG+3 + + dex + bne .2 + clc rts *-------------------------------------- -M32.ACC2ARG ldy #M32.ACC+4 ACC->ARG - -.1 dey - lda (pData),y +M32.Mod sec + .HS 90 BCC +*-------------------------------------- +M32.Div clc + php + + stz M32.TMP ARG/ACC->ACC + stz M32.TMP+1 + stz M32.TMP+2 + stz M32.TMP+3 + + ldx #32 + +.1 asl M32.ARG + rol M32.ARG+1 + rol M32.ARG+2 + rol M32.ARG+3 + + rol M32.TMP + rol M32.TMP+1 + rol M32.TMP+2 + rol M32.TMP+3 + + sec + + lda M32.TMP + sbc M32.ACC pha - cpy #M32.ACC + lda M32.TMP+1 + sbc M32.ACC+1 + pha + lda M32.TMP+2 + sbc M32.ACC+2 + pha + lda M32.TMP+3 + sbc M32.ACC+3 + bcs .2 + + pla + pla + pla + + dex bne .1 + bra .3 - ldy #M32.ARG +.2 sta M32.TMP+3 + pla + sta M32.TMP+2 + pla + sta M32.TMP+1 + pla + sta M32.TMP -.2 pla - sta (pData),y - iny - cpy #M32.ARG+4 - bne .2 + inc M32.ARG bit0 always 0 because of .1 asl + + dex + bne .1 + +.3 plp + ldx #3 + + ldy #M32.ARG+3 + bcc .4 + ldy #M32.TMP+3 + clc + +.4 lda $0,y + sta M32.ACC,x + dey + dex + bpl .4 + + rts +*-------------------------------------- +M32.ACC2ARG ldx #3 ACC->ARG + +.1 lda M32.ACC,x + sta M32.ARG,x + dex + bpl .1 rts *-------------------------------------- M32.Cmp ldx #4 - ldy #M32.ARG+3 -.1 lda (pData),y - pha - dey - dex - bne .1 - - ldx #4 - ldy #M32.ACC + ldy #0 sec -.2 pla - sbc (pData),y - sta (pData),y +.1 lda M32.ARG,y + sbc M32.ACC,y + sta M32.ACC,y iny dex - bne .2 - + bne .1 + bcc .5 CC if ACC < ARG - ldy #M32.ACC - - lda (pData),y - iny - ora (pData),y - iny - ora (pData),y - iny - ora (pData),y Z if ACC = ARG + lda M32.ACC + ora M32.ACC+1 + ora M32.ACC+2 + ora M32.ACC+3 Z if ACC = ARG bne .4