From 932c784f5410024cad38635abf4c764b8b2889bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 11 May 2021 20:44:13 +0200 Subject: [PATCH] Kernel 0.94++ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/CAT.S.txt | 20 +++++ BIN/PS.S.txt | 20 ++++- BIN/SH.S.CL.txt | 47 +++++++---- BIN/SH.S.CMD.txt | 169 ++++++++++++++++++++------------------- BIN/SH.S.CORE.txt | 28 ++++++- BIN/SH.S.EXP.txt | 46 ++++++----- BIN/SH.S.IO.txt | 1 + BIN/SH.S.txt | 12 ++- 9 files changed, 214 insertions(+), 129 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d2f89cea85af4038212d57958a33a30025ac1a10..38127d110dedf7384695c8f2151c642ac557972e 100644 GIT binary patch delta 40235 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%0A0Vy8Uc?UogZd(6Ye z)aZkI|NFkDQD?f7a=qUxUA}YAG<+a>ru^*0ZpD5iCY+pb&~3yD9kQpygf0JJdvQ#- zT)iJSStl^gTptVxb$Qz*jhf7GP;`s*BjeA-gpq?vsEjJ8ifX8i8mNh@Pz$wD2X#>o z_0a%V;~HFxhG>MwxDMABoQr9aa5^c0P7jo6d31azsMx5*K|eh`)AG+XDcP^|(V{1o z`HP*^y=g|JU-_~|442-0`wSi2cSPQ>UcKe%Af@E`P^N`^(v|RMNTVhSvFj zU6DaVs{a#hepUDA>HkK5r1qpsdM|N|5MY{E+g&VjSw`OPd|n99?}Y#ZF_%h94qz%% zX)#wuTS>%Bi*>_W$#LERin#}TNjTC|Pmt)gv3Zxg*;w4G>s(GH>=MLUUh7VRQ>hv=Q6T}AH_y<7Ai(Qcymigp+6 zA=*>4muPR%KBD)D_7&|X+Fx{l=s?l?MIR6yBsy4hi0Dw!VWJO;4i_CEI#To@(T7DJ z5q(tjG113GpAdag^eNF%qN7Eh7R?hKBl?W!SkZB!B064lg6OlN6GfjBoh16a=w#6s zL|+u0B05#{CDE5fUlE-qYKu-6ogq3?^i|PWqOXb07M&ydy69Zdd7|@07l^(gx={2@ z(YHhwi7pmhBKo%IQqg6i?})xDx?J=<(G{XAMOTUDix!Bk7F{E{R`h+*b)to$>qR$+ zZWR4M^h42)L_Ze&MD$b9&qO~L{X+Ch(XT|m7TqMeS@avxEuvdRw~1~S-66VDbeHIE z(Qiffi0&2LC%RwsJJAE82SpEwelL1h^as%&MSl|gS@ekLQPE#Se-%9@dR+83(G#M- zi=GrcC3;%)579HCe~O+J{Y&(m=y}nkb`05OO~9Ezbh;*o$v zB%uUKq7+J_43be6DM&>c(h-D(5HgU7ER;hw%A*1*B8(hVLSiCfSLtfzQWhogw6N{Td)<|upK+F6T7e* z-(nB;VjuS7I~>449K!cFj34kLe!|ZLE5IE_DW27lr#{=zw& S$KUt|ihpszzf3Rs1OEe|>42gD diff --git a/BIN/CAT.S.txt b/BIN/CAT.S.txt index 16ca2e5d..2e9f0949 100644 --- a/BIN/CAT.S.txt +++ b/BIN/CAT.S.txt @@ -7,6 +7,7 @@ NEW *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i + .INB inc/kernel.i .INB inc/mli.i .INB inc/mli.e.i *-------------------------------------- @@ -108,6 +109,25 @@ CS.RUN >STYA ZPBufPtr stx hBuf + ldy #S.PS.hStdOut + lda (pPS),y + + tax + + lsr + bcc CS.RUN.LOOP + + lda Nod.Table.hFD-2,x + >SYSCALL GetMemPtr + >STYA ZPPtr1 + + lda (ZPPtr1) + + beq CS.RUN.LOOP + + cmp #S.FD.T.PIPE + beq CS.RUN.LOOP + >PUSHW L.MSG.INIT >PUSHBI 0 >SYSCALL PrintF diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index 0158a821..e263b098 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -56,23 +56,32 @@ CS.INIT clc CS.RUN lda #1 >SYSCALL ArgV bcs .10 + >SYSCALL AToI bcs .90 + tax bne .90 + tya + * ldx #0 + .11 cmp PS.Table.PID,x beq .12 + inx cpx #K.PS.MAX bne .11 + lda #E.NSP * sec rts -.12 jsr CS.RUN.DUMP +.12 lda PS.Table.hPS,x + jsr CS.RUN.DUMP bcs .9 + lda #0 sec rts @@ -158,22 +167,27 @@ CS.RUN.DecodeFlags lda (ZPPSPtr) Get flags ldy #PS.FLAGS+7 ldx #7 + .2 lsr pha lda #'-' bcc .3 + lda MSG.FLAGS,x + .3 sta (pData),y pla dey dex bpl .2 + rts *-------------------------------------- CS.RUN.PrintArgs ldy #S.PS.hARGV lda (ZPPSPtr),y beq .8 NO ARGV in PS0 + >SYSCALL GetMemPtr >STYA ZPArgV @@ -185,13 +199,17 @@ CS.RUN.PrintArgs >PUSHBI 2 >SYSCALL PrintF bcs .9 + .2 inc ZPArgV bne .3 + inc ZPArgV+1 .3 lda (ZPArgV) bne .2 + inc ZPArgV bne .1 + inc ZPArgV+1 bra .1 diff --git a/BIN/SH.S.CL.txt b/BIN/SH.S.CL.txt index 7543f903..95177d09 100644 --- a/BIN/SH.S.CL.txt +++ b/BIN/SH.S.CL.txt @@ -5,9 +5,11 @@ NEW CL.Init >LDYAI 256 >SYSCALL GetMem bcs .9 + >STYA ZPCLBuf txa >STA.G CL.hCLBuf + .9 rts *-------------------------------------- CL.PrintPrompt >PUSHW L.PS1 @@ -66,7 +68,7 @@ CL.CHARIN tax .8 rts invalid \e[ sequence -.2 >LDA.G READ.N +.2 >LDA.G CL.MaxCnt bne .3 lda EscChars.Remap,x @@ -85,7 +87,7 @@ CL.CHARIN tax clc rts -.5 >LDA.G READ.N +.5 >LDA.G CL.MaxCnt beq CL.READN0X cpx #C.SPACE @@ -98,10 +100,11 @@ CL.CHARIN tax *-------------------------------------- >LDA.G CL.Len beq .8 + >LDA.G CL.Ptr beq .8 - >LDA.G bREAD.S + >LDA.G CL.bSilent bmi .6 lda #C.BS @@ -111,7 +114,7 @@ CL.CHARIN tax jmp CL.DEL *-------------------------------------- CL.Insert >LDA.G CL.Len - >CMP.G READ.N + >CMP.G CL.MaxCnt beq .8 Buffer full, discard... inc @@ -138,14 +141,14 @@ CL.Insert >LDA.G CL.Len sta (ZPCLBuf),y >INC.G CL.Ptr - >LDA.G bREAD.S + >LDA.G CL.bSilent bmi .7 txa >SYSCALL PutChar jsr CL.PrintEOL -.7 >LDA.G READ.N READ N = 1, don't wait for CR +.7 >LDA.G CL.MaxCnt READ N = 1, don't wait for CR dec bne .8 @@ -159,7 +162,7 @@ CL.CHARIN.CTRL cpx #C.CR beq .18 cpx #C.EOF - beq .18 + beq .19 cpx #3 Ctrl-C beq CL.CLR @@ -176,7 +179,7 @@ CL.CHARIN.CTRL cpx #C.CR .18 jsr CheckLFAfterCR Check for any extra LF bcs .9 - lda #$ff +.19 lda #$ff >STA.G CL.bReady .8 clc @@ -185,7 +188,7 @@ CL.CHARIN.CTRL cpx #C.CR CL.CLR lda (ZPCLBuf) beq CL.Reset.1 - >LDA.G bREAD.S + >LDA.G CL.bSilent bmi CL.Reset.1 .1 >LDA.G CL.Ptr @@ -221,13 +224,22 @@ CL.Reset.1 lda #0 rts *-------------------------------------- +CL.ReadResetV sec Verbose mode + +CL.ReadReset lda #$ff + >STA.G CL.MaxCnt + adc #0 CC = silent + iny CL.bSilent + sta (pData),y + rts +*-------------------------------------- CL.BS >LDA.G CL.Ptr beq .9 dec sta (pData),y - >LDA.G bREAD.S + >LDA.G CL.bSilent bmi .9 lda #C.BS @@ -237,12 +249,16 @@ CL.BS >LDA.G CL.Ptr CL.NAK >LDA.G CL.Ptr >CMP.G CL.Len beq .9 + inc >STA.G CL.Ptr - >LDA.G bREAD.S + + >LDA.G CL.bSilent bmi .9 + lda #C.FS >SYSCALL PutChar + .9 rts *-------------------------------------- * Erase char UNDER cursor @@ -265,12 +281,13 @@ CL.DEL pha >CMP.G CL.Len bne .1 + pla + >DEC.G CL.Len - >LDA.G bREAD.S - bpl CL.PrintEOL - clc - rts + + >LDA.G CL.bSilent + bmi CL.PrintEOL.8 *-------------------------------------- CL.PrintEOL >LDA.G CL.Ptr diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index ca85f62c..975b6169 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -1,6 +1,6 @@ NEW AUTO 3,1 - .LIST OFF + .LIST OFF *-------------------------------------- CMD.. lda (ZPArgVBufPtr) beq CMD...9 @@ -33,7 +33,7 @@ CMD.SHIFT lda (ZPArgVBufPtr) jsr EXP.GetInt8Exp bcs CMD.SHIFTA.RTS .HS B0 BCS - + CMD.SHIFT.1 inc CMD.SHIFTA >SYSCALL Shift @@ -101,10 +101,10 @@ CMD.CD.YA >PUSHYA .12 >LDYA ZPPtr1 jsr IO.StatYA bcs .19 - + cmp /S.STAT.MODE.DIR beq .11 - + lda #MLI.E.INVPATH .19 pha lda ZPTmpW @@ -118,7 +118,7 @@ CMD.CD.YA >PUSHYA lda #'/' cmp (ZPPtr1),y beq .14 - + iny sta (ZPPtr1),y iny @@ -166,19 +166,20 @@ CMD.SET lda (ZPArgVBufPtr) *-------------------------------------- * SET +X VAR = VALUE1 op VALUE2 op VALUE3 ... *-------------------------------------- -CMD.SET.1 +CMD.SET.1 .1 jsr CMD.IsSwitch bcs .6 ldx #SET.VARS-SET.FLAGS - + .2 dex bmi .4 + cmp SET.FLAGS,x bne .2 ldy SET.VARS,x - + lda (pData),y eor #$ff sta (pData),y @@ -201,7 +202,7 @@ CMD.SET.1 jsr CORE.ArgV.Next beq CMD.SET.GET - + cmp #'=' bne .99 @@ -211,7 +212,7 @@ CMD.SET.1 jsr CORE.ArgV.Next beq CMD.SET.UNSET - + cmp #'`' beq CMD.SET.EXEC @@ -228,7 +229,7 @@ CMD.SET.YA pha >PUSHYA >SYSCALL SetEnv rts - + CMD.SET.UNSET >PUSHW ZPVarNamePtr >SYSCALL UnsetEnv rts @@ -237,12 +238,12 @@ CMD.SET.GET >PUSHW ZPVarNamePtr >PUSHW ZPCLBuf >SYSCALL GetEnv bcs .8 - + >LDYA ZPCLBuf >SYSCALL PutS rts - + .8 clc rts *-------------------------------------- @@ -256,9 +257,9 @@ CMD.SET.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.In bcs .9 - lda #255 - >STA.G READ.N - >STA.G bREAD.S + +* clc Silent Mode + jsr CL.ReadReset jmp CMD.READ.VAR .9 rts @@ -267,18 +268,19 @@ CMD.DATE >PUSHEA.G TimeBuf >SYSCALL Time >PUSHEA.G TimeBuf - + >PUSHW ZPCLBuf - + lda (ZPArgVBufPtr) beq .1 - + >LDYA ZPArgVBufPtr bra .2 + .1 >LDYA L.FMT.DATE .2 >PUSHYA - + >PUSHEA.G TimeBuf >SYSCALL StrFTime @@ -294,15 +296,18 @@ CMD.ECHO stz ZPPtr1 echo -N .1 jsr CMD.IsSwitch bcs .2 + cmp #'N' bne CMD.ECHO.CSYN lda #$ff eor ZPPtr1 sta ZPPtr1 - bra .4 + bra .4 + .2 lda ZPPtr1+1 beq .3 + lda #C.SPACE >SYSCALL PutChar @@ -334,9 +339,8 @@ CMD.READ lda (ZPArgVBufPtr) beq CMD.ECHO.CSYN stz ZPVarNamePtr+1 - >STZ.G bREAD.S - dec - >STA.G READ.N + + jsr CL.ReadResetV .1 jsr CMD.IsSwitch bcs .4 @@ -345,7 +349,7 @@ CMD.READ lda (ZPArgVBufPtr) bne .2 lda #$ff - >STA.G bREAD.S + >STA.G CL.bSilent bra .5 .2 cmp #'P' @@ -367,7 +371,7 @@ CMD.READ lda (ZPArgVBufPtr) jsr EXP.GetInt8Arg bcs CMD.ECHO.RTS - >STA.G READ.N + >STA.G CL.MaxCnt bra .5 .4 >LDYA ZPArgVBufPtr @@ -378,7 +382,7 @@ CMD.READ lda (ZPArgVBufPtr) lda ZPVarNamePtr+1 beq CMD.ECHO.CSYN - +*-------------------------------------- CMD.READ.VAR jsr CL.Reset .1 >SYSCALL GetChar @@ -391,9 +395,9 @@ CMD.READ.VAR jsr CL.Reset lda (ZPCLBuf) bne .2 - + jmp CMD.SET.UNSET - + .2 >LDYA ZPCLBuf jmp CMD.SET.YA *-------------------------------------- @@ -427,10 +431,10 @@ CMD.PWD jsr GetCWD *-------------------------------------- CMD.RD lda (ZPArgVBufPtr) beq CMD.REN.CSYN - + jsr IO.StatArgVBufPtr bcs .99 - + cmp /S.STAT.MODE.DIR bne CMD.REN.CSYN @@ -451,52 +455,52 @@ CMD.REN lda (ZPArgVBufPtr) >PUSHWI 0 Allocate >SYSCALL RealPath bcs CMD.REN.CSYN - + >STYA ZPPtr1 stx ZPTmpW - + ldy #$ff - + .1 iny lda (ZPPtr1),y beq .2 cmp #'/' bne .1 - + tya tax bra .1 - + .2 ldy #$ff .3 iny inx lda (ZPArgVBufPtr),y bne .3 - + txa tay lda #0 - + >SYSCALL GetMem bcs .90 >STYA ZPPtr2 stx ZPTmpW+1 - + ldy #$ff - + .4 iny - lda (ZPPtr1),y + lda (ZPPtr1),y beq .5 sta (ZPPtr2),y cmp #'/' bne .4 - + tya inc tax bra .4 - + .5 txa tay lda #0 @@ -505,12 +509,12 @@ CMD.REN lda (ZPArgVBufPtr) >PUSHW ZPPtr2 >PUSHW ZPArgVBufPtr >SYSCALL StrCat - + lda ZPTmpW >SYSCALL FreeMem lda ZPTmpW+1 sta ZPTmpW - + >PUSHW ZPPtr1 >PUSHW ZPPtr2 >SYSCALL Rename @@ -530,15 +534,15 @@ CMD.FUNCTION lda (ZPArgVBufPtr) >LDA.G hFuncList bne .1 - + >SYSCALL SListNew bcs .99 - + >STA.G hFuncList - + .1 >PUSHA >PUSHW ZPArgVBufPtr - + >SYSCALL SListNewKey bcs .99 @@ -552,9 +556,10 @@ CMD.FUNCTION lda (ZPArgVBufPtr) ldy #1 lda (ZPArgVBufPtr),y beq .11 + .9 jmp CMD.E.CSYN -.99 rts +.99 rts *-------------------------------------- .10 jsr CORE.GetCharNB bcs .9 @@ -565,48 +570,46 @@ CMD.FUNCTION lda (ZPArgVBufPtr) jsr CORE.GetNextCharNB bcs .9 -.11 stz M32.ACC '{' counter - - >LDYA ZPInputBufPtr +.11 >LDYA ZPInputBufPtr >STYA ZPPtr1 - ldy #0 - ldx #0 + stz ZPPtr2 + stz ZPPtr2+1 DataLen + + ldx #0 '{' counter + lda (ZPInputBufPtr) beq .6 .12 cmp #'{' bne .13 - inc M32.ACC + inx bra .14 .13 cmp #'}' bne .14 - dec M32.ACC + dex bmi .7 -.14 iny +.14 inc ZPPtr2 bne .15 - inx + + inc ZPPtr2+1 .15 jsr CORE.GetNextChar bne .12 -.6 lda M32.ACC +.6 txa bpl .9 .7 jsr CORE.GetNextChar skip ending '}' - phx - phy >PUSHB.G hFuncList >PUSHW ZPTmpW KeyID >PUSHW ZPPtr1 DataPtr - ply - pla - >PUSHYA DataLen + >PUSHW ZPPtr2 DataLen >SYSCALL SListAddData bcs .99 @@ -627,7 +630,7 @@ CMD.CALL jsr CMD.CALL.GETFUNC >PUSHWZ Allocate.. >PUSHWI $ffff all >PUSHWZ From Start - + >SYSCALL SListGetData X = hMem bcs CMD.CALL.RTS @@ -638,7 +641,7 @@ CMD.CALL jsr CMD.CALL.GETFUNC lda #$C0+C.CALL jmp CORE.StkPush *-------------------------------------- -CMD.CALL.GETFUNC +CMD.CALL.GETFUNC >LDA.G hFuncList beq CMD.CALL.UNDEF @@ -646,7 +649,7 @@ CMD.CALL.GETFUNC >PUSHW ZPArgVBufPtr >SYSCALL SListLookup bcc CMD.CALL.RTS - + CMD.CALL.UNDEF lda #E.FUNDEF sec CMD.CALL.RTS rts @@ -656,7 +659,7 @@ CMD.EXIT lda (ZPArgVBufPtr) jsr EXP.GetInt8Exp bcs .9 - + .1 ldy #S.PS.RC sta (pPS),y @@ -671,7 +674,7 @@ CMD.EXIT lda (ZPArgVBufPtr) cmp #$C0+C.CLEXEC beq .8 - + jsr CORE.StkPopCtxA bcc .2 rts @@ -705,7 +708,7 @@ CMD.EXIT.FILE jsr CORE.StkPullFree Code buffer ldy #S.PS.RC lda (pPS),y - + clc rts *-------------------------------------- @@ -753,7 +756,7 @@ CMD.SWITCH jsr CORE.StkGetCtx CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult bcs .9 - tax + tax and #$3F cmp #C.SWITCH beq .1 @@ -857,12 +860,12 @@ CMD.FOR.LIST >LDYA ZPArgVBufPtr phy pha - + jsr CORE.StkPushInputBufPtr Push CmdPtr AFTER FOR pla ply - + jsr CORE.StkPushYAX Push listPtr,hList jsr CORE.PushVarName Push hVARNAME @@ -882,7 +885,7 @@ CMD.FOR.FILE jsr CORE.ArgV.NextChar skip "(" ldx #O.RDONLY+O.TEXT jsr IO.FOpenYAX bcc CMD.FOR.PUSH -FOR.FILE.9 rts +FOR.FILE.9 rts *-------------------------------------- CMD.FOR.EXEC jsr CORE.ArgV.NextChar skip "`" @@ -895,7 +898,7 @@ CMD.FOR.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pop.Out Restore OUT (NO close) jsr IO.Pipe.OpenR - + bcs FOR.FILE.9 CMD.FOR.PUSH pha save hFILE/hPIPE @@ -915,7 +918,7 @@ CMD.FOR.PUSH pha save hFILE/hPIPE jsr CMD.NEXT.LINE bcs FOR.FILE.9 - + CMD.FOR.LOOP ora CORE.TestResult ora #C.FOR Push FOR pha @@ -1036,7 +1039,7 @@ CMD.NEXT.LIST.TOKEN * stack-4 CmdPtr * stack-3 hFILE/hPIPE * stack-2 hVARNAME -* stack-1 FOR SUB TOKEN +* stack-1 FOR SUB TOKEN * stack FOR TOKEN *-------------------------------------- CMD.NEXT.FILEEXEC @@ -1090,7 +1093,7 @@ CMD.NEXT.LINE jsr CMD.NEXT.GetVarNamePtr >PUSHWI 256 >SYSCALL FGetS bcs CMD.NEXT.END - + >LDYA ZPCLBuf jsr CMD.SET.YA bcs CMD.NEXT.LINE.RTS @@ -1098,7 +1101,7 @@ CMD.NEXT.LINE jsr CMD.NEXT.GetVarNamePtr lda #$80 * clc rts - + CMD.NEXT.END jsr CMD.SET.UNSET bcs .9 lda #0 @@ -1120,7 +1123,7 @@ CMD.NEXT.GetVarNamePtr ply rts *-------------------------------------- -CMD.WHILE +CMD.WHILE CMD.IF jsr CORE.StkGetCtx bit #$40 Parent is true ? @@ -1153,7 +1156,7 @@ CMD.LOOP jsr CORE.StkPull bne .9 txa bmi .8 true, loop - + jmp CORE.StkPopCtxA false, Discard loop Ptr .8 jmp CORE.StkPullInputBufPtr @@ -1213,7 +1216,7 @@ CMD.IsSwitch lda (ZPArgVBufPtr) txa jmp ToUpperCase - + .9 sec rts *-------------------------------------- diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 8013050d..7a9c4820 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -117,6 +117,7 @@ CORE.Run jsr IO.Reset >LDYAI 256 >SYSCALL GetMem bcs CORE.Run.RTS + >STYA ZPArgVBuf txa >STA.G CORE.hArgVBuf @@ -148,6 +149,7 @@ CORE.Run.1 sec coming from PIPE OUT cmp #C.CR empty line ? bne .33 + jsr CORE.GetNextChar skip CR... bra .8 @@ -184,13 +186,16 @@ CORE.Run.1 sec coming from PIPE OUT .45 txa bpl .43 context is FALSE, skip line + asl bmi CORE.Run.7 parent context is true, exec + .43 jsr CORE.GetCharNB bcs .44 EOF cmp #C.CR beq .44 + cmp #';' TODO ";" beq .44 @@ -426,11 +431,11 @@ CORE.ArgV.Add lda #C.SPACE ldx #')' stx ZPTmpW - bra .12 .11 cmp #'`' bne .12 + sta ZPTmpW .12 sta (ZPArgVBufPtr),y @@ -566,25 +571,32 @@ CORE.IO.Open pha Open Mode CORE.IsSpaceOrEndCmd cmp #C.SPACE beq CORE.IsEndCmd.8 + CORE.IsEndCmd cmp #';' beq CORE.IsEndCmd.8 + cmp #C.CR beq CORE.IsEndCmd.8 + cmp #'|' beq CORE.IsEndCmd.8 + sec rts + CORE.IsEndCmd.8 clc rts *-------------------------------------- CORE.GetCharNB jsr CORE.GetChar bcs CORE.GetNextCharNB.RTS + jsr CORE.CheckCharNB bcc CORE.GetNextCharNB.RTS *-------------------------------------- CORE.GetNextCharNB jsr CORE.GetNextChar bcs CORE.GetNextCharNB.RTS + jsr CORE.CheckCharNB bcs CORE.GetNextCharNB CORE.GetNextCharNB.RTS @@ -593,22 +605,28 @@ CORE.GetNextCharNB.RTS CORE.CheckCharNB cmp #C.SPACE beq .9 + cmp #C.LF beq .9 + cmp #C.TAB beq .9 + clc .9 rts *-------------------------------------- CORE.GetNextChar inc ZPInputBufPtr bne CORE.GetChar + inc ZPInputBufPtr+1 *-------------------------------------- CORE.GetChar lda (ZPInputBufPtr) beq .9 + clc rts + .9 sec rts *-------------------------------------- @@ -686,6 +704,7 @@ CORE.StkCheck sec adc (pData) StackPtr cmp #CORE.STACK.MAX bcc .8 + lda #E.STKOVERFLOW * sec .8 rts @@ -740,11 +759,14 @@ CORE.StkGetCtx jsr CORE.StkGet cmp #$C0+C.CALL beq .1 CS + cmp #$C0+C.CLEXEC beq .1 CS + and #$80 get current.. lsr becomes parent bra .8 + .1 lda #$40 ...set Parent = true .8 sta CORE.TestResult @@ -755,9 +777,11 @@ CORE.StkGetCtx jsr CORE.StkGet CORE.StkPullInputBufPtr jsr CORE.StkPull bcs .9 + sta ZPInputBufPtr jsr CORE.StkPull bcs .9 + sta ZPInputBufPtr+1 .9 rts @@ -774,11 +798,13 @@ CORE.StkPullFree *-------------------------------------- CORE.StkPull jsr CORE.StkGet bcs .9 + dey pha tya sta (pData) StackPtr pla + .9 rts *-------------------------------------- CORE.StkGet lda (pData) StackPtr diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index dbbe2f5a..3164886e 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -1,6 +1,6 @@ NEW AUTO 3,1 - .LIST OFF + .LIST OFF *-------------------------------------- EXP.GET jsr CORE.ArgV.Next bne .1 @@ -14,7 +14,7 @@ EXP.GET jsr CORE.ArgV.Next >LDYA ZPArgVBufPrev jsr EXP.GetInt32YA To Int32 on stack bcs .94 4 bytes on stack - + .2 >LDYA L.EXP.OP.MATH + - .... ? jsr CORE.LookupArgVBuf bcs .98 @@ -55,7 +55,7 @@ EXP.TEST lda (ZPArgVBufPtr) jsr CORE.LookupArgVBuf bcs .9 - + dex 0=[ or 1=![ , $ff or 0 txa asl in C @@ -74,7 +74,7 @@ EXP.TEST lda (ZPArgVBufPtr) bcs .1 stx CORE.Operator - + jsr EXP.TEST.UNARY bcs .9 eor CORE.TestResult @@ -132,7 +132,7 @@ EXP.TEST lda (ZPArgVBufPtr) jsr CORE.ArgV.Next beq .9 - jmp .10 + jmp .10 .80 lda CORE.LogicOp bne .88 NONE, or OR : exit with last result @@ -146,7 +146,7 @@ EXP.TEST lda (ZPArgVBufPtr) *-------------------------------------- EXP.TEST.UNARY jsr CORE.ArgV.Next beq EXP.OP.UNARY.ESYN we need one arg or ] - + lda CORE.Operator asl tax @@ -161,7 +161,7 @@ EXP.OP.UNARY.D jsr IO.StatArgVBufPtr cmp /S.STAT.MODE.DIR bne EXP.OP.UNARY.DEF.9 bra EXP.OP.UNARY.DEF.8 - + EXP.OP.UNARY.E jsr IO.StatArgVBufPtr bcs EXP.OP.UNARY.DEF.9 bra EXP.OP.UNARY.DEF.8 DIR or FILE exist @@ -171,18 +171,18 @@ EXP.OP.UNARY.F jsr IO.StatArgVBufPtr cmp /S.STAT.MODE.DIR beq EXP.OP.UNARY.DEF.9 - -EXP.OP.UNARY.DEF.8 + +EXP.OP.UNARY.DEF.8 sec true .HS 90 BCC -EXP.OP.UNARY.DEF.9 +EXP.OP.UNARY.DEF.9 clc false jsr CORE.ArgV.Next lda #0 ror - + * clc EXP.OP.UNARY.DEF.RTS rts @@ -191,7 +191,7 @@ EXP.OP.UNARY.I jsr EXP.GetInt32Arg bcs EXP.OP.UNARY.DEF.9 jsr IncPStack4 Discard Long - + bra EXP.OP.UNARY.DEF.8 *-------------------------------------- EXP.OP.UNARY.N jsr EXP.OP.UNARY.Z @@ -199,7 +199,7 @@ EXP.OP.UNARY.N jsr EXP.OP.UNARY.Z eor #$80 * clc rts - + EXP.OP.UNARY.Z lda (ZPArgVBufPtr) [ -Z ] ? cmp #']' bne .1 @@ -232,20 +232,22 @@ EXP.TEST.BINARY lda CORE.Operator >PUSHW ZPPtr1 >PUSHW ZPArgVBufPtr >SYSCALL StrCmp - bcs .1 CS if != + + bcs .1 CS if != lda #%010 010 str1 = str2 bra .3 .1 asl CS if < - bcs .2 + bcc .2 - lda #%100 010 str1 < str2 + lda #%100 100 str1 < str2 bra .3 -.2 lda #%001 010 str1 > str2 +.2 lda #%001 001 str1 > str2 .3 ldx CORE.Operator + and EXP.OP.BINARY.BITS-6,x beq .8 false @@ -263,7 +265,7 @@ EXP.TEST.BINARY.NUM >LDYA ZPArgVBufPrev jsr EXP.GetInt32YA bcs EXP.TEST.BINARY.ESYN - + jsr CORE.ArgV.Next beq EXP.TEST.BINARY.ESYN4 @@ -288,7 +290,7 @@ EXP.TEST.BINARY.NUM EXP.GetInt8Exp jsr EXP.GET bcc EXP.GetInt8YA rts - + EXP.GetInt8Arg >LDYA ZPArgVBufPtr EXP.GetInt8YA jsr EXP.GetInt32YA @@ -298,7 +300,7 @@ EXP.GetInt8YA jsr EXP.GetInt32YA jsr IncPStack3 * clc - + .9 rts *-------------------------------------- EXP.GetInt32Arg >LDYA ZPArgVBufPtr @@ -308,14 +310,14 @@ EXP.GetInt32YA >PUSHYA >PUSHBI 10 >SYSCALL StrToL bcs EXP.E.ESYN - + lda (ZPPtr1) beq EXP.GetInt32YA.RTS EXP.E.ESYN lda #E.ESYN sec EXP.GetInt32YA.RTS - rts + rts *-------------------------------------- MAN SAVE usr/src/bin/sh.s.exp diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index ee2ffba0..be7b993f 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -187,6 +187,7 @@ IO.PrintBatchErrMsg .1 inc ZPTmpW bne .2 + inc ZPTmpW+1 .2 ldy #$ff diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 1d4ec4c5..5703eb23 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -325,13 +325,11 @@ CS.RUN.INTERACTIVE jsr IO.Reset jsr CL.Reset + jsr CL.ReadResetV + jsr CL.PrintPrompt bcs CS.RUN.CMDLINE.9 - >STZ.G bREAD.S - dec - >STA.G READ.N - .1 >SYSCALL GetChar bcs CS.RUN.CMDLINE.9 I/O error @@ -697,16 +695,16 @@ bSET.C .BS 1 bSET.E .BS 1 bSET.X .BS 1 -bREAD.S .BS 1 -READ.N .BS 1 - Sleep .BS 4 CL.hCLBuf .BS 1 + CL.Ptr .BS 1 CL.Len .BS 1 CL.bReady .BS 1 CL.bEscMode .BS 1 +CL.MaxCnt .BS 1 +CL.bSilent .BS 1 CORE.hArgVBuf .BS 1 CORE.bPipeIn .BS 1