From 16d47d590232078d98c7cc1ee40abdcd4f51359f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 15 Sep 2017 17:16:04 +0200 Subject: [PATCH] Kernel 0.9.1 : Code reorganization & move to CSTR (SHELL) --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes DRV/CONSOLE.DRV.S.txt | 66 +++++++------- INC/MACROS.I.txt | 11 ++- SBIN/SHELL.S.CMD.txt | 192 ++++++++++++++++++++------------------- SBIN/SHELL.S.HIS.txt | 2 +- SBIN/SHELL.S.txt | 113 ++++++++++++----------- 7 files changed, 199 insertions(+), 185 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index e006158b6275ca2aef712ee592e64d9f594620d3..130518e1db543903ca83d730430d58ea2f95ea61 100644 GIT binary patch delta 9206 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 KYK~3RPW%suB&qNK delta 7043 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 delta 21728 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 ddap?uwDLUqO~l-duD8r|b^C#LDYAI CmdLine.MAX+1 Cmd.Parse >LDYA ZPCMDBuf >STYA ZPPtr1 + ldy #0 + lda (ZPCMDBuf) empty line...quit beq .9 - - ldy #0 - + .1 jsr Cmd.Parse.NextC beq .8 no more char, exit @@ -52,8 +52,10 @@ Cmd.Parse >LDYA ZPCMDBuf .8 lda #0 sta (ZPCMDBuf),y - -.9 rts + +.9 tya + >STA.G CmdBuflen + rts Cmd.Parse.NextC lda (ZPPtr1) beq .8 @@ -68,7 +70,6 @@ Cmd.Parse.NextC lda (ZPPtr1) Cmd.Exec lda #0 >STA.G CMD.bStartProc >STA.G CMD.hFullpath - >STA.G CMD.hExtCmdLine >LDYA ZPCMDBuf >SYSCALL ExpandStr.YA @@ -77,27 +78,29 @@ Cmd.Exec lda #0 txa >STA.G CMD.hCmdLine - jsr Cmd.Exec.Split - >LDYA L.INTCMDS - >STYA ZPCMDBuf we use ZPCMDBuf as a temp Ptr + >STYA ZPPtr2 ldx #0 -.3 lda (ZPCMDBuf) +.3 lda (ZPPtr2) beq Cmd.Exec.EXT Array Ending 0, must be an external Cmd.... ldy #$ff .4 iny - lda (ZPCMDBuf),y + lda (ZPPtr2),y bne .41 End of string in array lda (ZPPtr1),y Get CMD char... beq .8 both end with 0, found! + cmp #' ' + beq .8 we reached space between CMD & ARGS.... .41 lda (ZPPtr1),y Get CMD char... beq .61 end of CMD.....too short... + cmp #' ' + beq .61 we reached space between CMD & ARGS.... cmp #'a' To Uppercase bcc .5 @@ -105,11 +108,11 @@ Cmd.Exec lda #0 bcs .5 eor #$20 -.5 cmp (ZPCMDBuf),y +.5 cmp (ZPPtr2),y beq .4 .61 iny - lda (ZPCMDBuf),y + lda (ZPPtr2),y bne .61 .7 inx @@ -117,72 +120,36 @@ Cmd.Exec lda #0 tya sec - adc ZPCMDBuf - sta ZPCMDBuf + adc ZPPtr2 + sta ZPPtr2 bcc .3 - inc ZPCMDBuf+1 + inc ZPPtr2+1 bra .3 -.8 jmp (J.INTCMDS,x) Found an internal Cmd... +.8 jsr Cmd.Exec.Split X unmodified + jmp (J.INTCMDS,x) Found an internal Cmd... *-------------------------------------- Cmd.Exec.Done php pha >LDA.G CMD.hCmdLine >SYSCALL FreeMem.A - >LDA.G CMD.hExtCmdLine + >LDA.G CMD.hFullpath beq .1 >SYSCALL FreeMem.A -.1 >LDA.G CMD.hFullpath - beq .2 - >SYSCALL FreeMem.A - -.2 pla +.1 pla plp rts *-------------------------------------- -Cmd.Exec.Split ldy #$ff CMD Len - -.1 iny - lda (ZPPtr1),y Get CMD char... - beq .2 - - cmp #' ' we reached blank between CMD ARGS - bne .1 - - lda #0 - sta (ZPPtr1),y Cut CMD with the ending 0 - iny - -.2 tya Y=CMD len+0, if ARGS="" Y= - clc - adc ZPPtr1 - sta ZPPtr2 - lda ZPPtr1+1 - adc #0 - sta ZPPtr2+1 ZPPtr2->ARGS or CMD ending 0 if empty - rts -*-------------------------------------- -* ZPPtr1->CMD -* ZPPtr2->ARGS -*-------------------------------------- -Cmd.Exec.EXT >LDYAI 256 - >SYSCALL GetMem.YA - bcs .99 - >STYA ZPCMDBuf - - txa - >STA.G CMD.hExtCmdLine - - lda #0 - sta (ZPCMDBuf) - +Cmd.Exec.EXT jsr Cmd.Exec.Split + lda (ZPPtr1) cmp #'/' Command line is already full path, no search bne .1 - >PUSHW L.STAT + >LEA.G CMD.Stat + >PUSHYA >PUSHW ZPPtr1 >SYSCALL STAT bcs Cmd.Exec.Done @@ -209,7 +176,8 @@ Cmd.Exec.EXT >LDYAI 256 txa >STA.G CMD.hFullpath - lda STAT+S.STAT.P.TYPE + ldy #CMD.Stat+S.STAT.P.TYPE + lda (pData),y cmp #$04 TXT File ? beq Cmd.Exec.EXT.TXT cmp #$06 BIN File ? @@ -264,7 +232,8 @@ Cmd.Exec.EXT.Search >PUSHYA push search list >PUSHW ZPPtr1 push CMD >PUSHW ZPCMDBuf push dest full path - >PUSHW L.STAT + >LEA.G CMD.Stat + >PUSHYA >SYSCALL FileSearch rts *-------------------------------------- @@ -292,7 +261,8 @@ Cmd.Exec.PWD ldy #S.PS.hPREFIX >SYSCALL PrintF.YA jmp Cmd.Exec.Done -Cmd.Exec.CD1 stz UsrBuf256 +Cmd.Exec.CD1 lda #0 + sta (ZPCMDBuf) cmp #'/' Full Path? beq .1 @@ -301,47 +271,57 @@ Cmd.Exec.CD1 stz UsrBuf256 lda (pPs),y >SYSCALL GetMemPtr.A >PUSHYA - >PUSHWI UsrBuf256 + >PUSHW ZPCMDBuf >SYSCALL StrCpy .1 >PUSHW ZPPTR2 Append ARG to buffer - >PUSHWI UsrBuf256 + >PUSHW ZPCMDBuf >SYSCALL StrCat - lda #'/' - ldx UsrBuf256 - cmp UsrBuf256,x Ending '/' ? + ldy #$ff + ldx #'/' + +.10 tax + iny + lda (ZPCMDBuf),y + bne .10 + + cpx #'/' beq .2 + lda #'/' - sta UsrBuf256+1,x no, add one... - inc UsrBuf256 + sta (ZPCMDBuf),y + iny + lda #0 + sta (ZPCMDBuf),y -.2 ldx #0 path is something like : /dir1/../dir2/ +.2 ldy #$ff path is something like : /dir1/../dir2/ -.3 ldy #0 reset char counter +.3 ldx #0 reset char counter -.4 cpx UsrBuf256 +.4 iny + lda (ZPCMDBuf),y beq .8 - inx - lda UsrBuf256,x cmp #'/' - beq .5 - iny char=char+1!!! + bne .4 + +.5 txa any char count? + bne .51 no, start counting... + + inx bra .4 -.5 tya any char count? - beq .4 no, start counting... - - cpy #2 do we have /xx/? +.51 inx + cpx #2 do we have /xx/? bne .3 no, skip this token - lda #'.' - cmp UsrBuf256-1,x /yy/x./ ? + dey + lda (ZPCMDBuf),y /yy/x./ ? + dey + cmp (ZPCMDBuf),y /yy/../ ? bne .3 - cmp UsrBuf256-2,x /yy/../ ? - bne .3 - cpx #4 /../ ? + cpy #3 /../ ? beq Cmd.Exec.ERRSYN illegal txa @@ -370,12 +350,14 @@ Cmd.Exec.CD1 stz UsrBuf256 .8 cpx #1 beq .80 we have '/' go change prefix - >PUSHW L.STAT + >LEA.G CMD.Stat + >PUSHYA >PUSHWI UsrBuf256 >SYSCALL STAT bcs .9 - lda STAT+S.STAT.P.TYPE + ldy #CMD.Stat+S.STAT.P.TYPE + lda (pData),y cmp #$0F Directory ? bne Cmd.Exec.ERRSYN @@ -410,7 +392,6 @@ Cmd.Exec.STARTPROC >LDYA ZPPTR2 >STYA ZPPTR1 - jsr Cmd.Exec.Split jmp Cmd.Exec.EXT *-------------------------------------- Cmd.Exec.SET lda (ZPPTR2) @@ -511,23 +492,23 @@ Cmd.Exec.SETVAR ldy #0 *-------------------------------------- Cmd.Exec.DATE sec .HS 90 bcc - Cmd.Exec.TIME clc php - >LDYA L.TIME + >LEA.G CMD.Time >SYSCALL TimeYA - >PUSHWI UsrBuf256 + >PUSHWI ZPCMDBuf plp bcc .1 >PUSHW L.FMT.DATE bra .2 .1 >PUSHW L.FMT.TIME -.2 >PUSHW L.TIME +.2 >LEA.G CMD.Time + >PUSHYA >SYSCALL StrFTime - >LDYAI UsrBuf256 + >LDYAI ZPCMDBuf >SYSCALL PrintF.YA bcs Cmd.Exec.ECHO.END bra Cmd.Exec.ECHO.CR @@ -545,7 +526,6 @@ Cmd.Exec.ECHO.CR lda #10 >SYSCALL PutChar.A - Cmd.Exec.ECHO.END jmp Cmd.Exec.Done *-------------------------------------- @@ -661,6 +641,28 @@ Cmd.Exec.EXIT lda #$FF clc jmp Cmd.Exec.Done *-------------------------------------- +Cmd.Exec.Split ldy #$ff CMD Len + +.1 iny + lda (ZPPtr1),y Get CMD char... + beq .2 + + cmp #' ' we reached blank between CMD ARGS + bne .1 + + lda #0 + sta (ZPPtr1),y Cut CMD with the ending 0 + iny + +.2 tya Y=CMD len+0, if ARGS="" Y= + clc + adc ZPPtr1 + sta ZPPtr2 + lda ZPPtr1+1 + adc #0 + sta ZPPtr2+1 ZPPtr2->ARGS or CMD ending 0 if empty + rts +*-------------------------------------- MAN SAVE /A2OSX.SRC/SBIN/SHELL.S.CMD LOAD /A2OSX.SRC/SBIN/SHELL.S diff --git a/SBIN/SHELL.S.HIS.txt b/SBIN/SHELL.S.HIS.txt index 1018d05f..70058f75 100644 --- a/SBIN/SHELL.S.HIS.txt +++ b/SBIN/SHELL.S.HIS.txt @@ -156,7 +156,7 @@ HIS.SetBuf jsr CmdLine.CLR sta (ZPCMDBuf),y dey bpl .1 - jmp CmdLine.SET + jmp CmdLine.PRINT *-------------------------------------- HIS.Quit >LDA.G HIS.hBuf beq .9 diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 8e40ff60..178a037b 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -23,7 +23,7 @@ ZPCSHSymbols .EQ ZPBIN+10 ZPCSHData .EQ ZPBIN+12 ZPCSHStack .EQ ZPBIN+14 *-------------------------------------- -CmdLine.MAX .EQ 127 +CmdLine.MAX .EQ 255 VarLen.MAX .EQ 15 CSH.Stack.MAX .EQ 15 @@ -64,8 +64,6 @@ L.MSG.CSHERR .DA MSG.CSHERR L.ENV.PATH .DA ENV.PATH L.ENV.PWD .DA ENV.PWD L.ENV.PS1 .DA ENV.PS1 -L.TIME .DA TIME -L.STAT .DA STAT L.FMT.DATE .DA FMT.DATE L.FMT.TIME .DA FMT.TIME L.INTCMDS .DA INTCMDS @@ -142,15 +140,12 @@ CS.RUN >LDA.G bReadMode READ Command ? beq .10 jmp CS.RUN.BATCH -* Interactive Mode +*-------------------------------------- .10 >LDA.G hCmdBuf Get the buffer >SYSCALL GetMemPtr.A >STYA ZPCMDBuf - lda #0 reset it - sta (ZPCMDBuf) - - >STA.G bCmdBufexec + jsr CmdLine.RESET reset it >STA.G bSecureRead Clear password mode .12 jsr PrintPrompt @@ -162,19 +157,22 @@ CS.RUN >LDA.G bReadMode READ Command ? jsr CS.CHARIN - >LDA.G bCmdBufexec Something to execute ? + >LDA.G bCmdBufExec Something to execute ? bpl .1 - jsr Cmd.Parse + jsr CMD.Parse >LDA.G CmdBuflen beq .12 Empty line jsr HIS.Add - jsr Cmd.Exec + jsr CMD.Exec + bcs .2 + + lda #0 - ldy #S.PS.RC +.2 ldy #S.PS.RC sta (pPs),y >LDA.G bExit @@ -200,7 +198,7 @@ CS.RUN.READ >LDA.G hCmdBuf Get the buffer jsr CS.CHARIN - >LDA.G bCmdBufexec + >LDA.G bCmdBufExec bpl .1 >PUSHW ZPCMDBuf @@ -216,30 +214,12 @@ CS.RUN.READ >LDA.G hCmdBuf Get the buffer rts *-------------------------------------- CS.RUN.BATCH jsr CSH.Run - bcs .9 + bcc .7 + + cmp #MLI.ERR.EOF + beq .9 - >LDA.G bCmdBufexec - bpl .8 Empty line....nothing to do.... - - jsr Cmd.Parse - - lda (ZPCMDBuf) - beq .8 - - jsr Cmd.Exec - -.8 ldy #S.PS.RC - sta (pPs),y - clc - rts - -.9 cmp #MLI.ERR.EOF - bne .7 - lda #0 - sec - rts - -.7 pha + pha ldy #CSH.BufPtr+1 >PUSHB (pData),y @@ -251,23 +231,20 @@ CS.RUN.BATCH jsr CSH.Run jsr CSH.RestorePtr -.90 jsr CSH.GetChar - bcs .92 + jsr CSH.GetChar + bcs .2 >SYSCALL PutChar.A -.91 jsr CSH.GetNextChar - bcs .92 +.1 jsr CSH.GetNextChar + bcs .2 cmp #13 - beq .92 + beq .2 >SYSCALL PutChar.A - bra .91 + bra .1 -.92 pla - bra .99 +.2 pla -.98 lda #0 - -.99 ldy #S.PS.RC + ldy #S.PS.RC sta (pPs),y pha @@ -277,6 +254,28 @@ CS.RUN.BATCH jsr CSH.Run pla rts + +.7 >LDA.G bCmdBufExec + bpl .8 Empty line....nothing to do.... + + jsr Cmd.Parse + + lda (ZPCMDBuf) + beq .8 + + jsr Cmd.Exec + bcs .8 + + lda #0 + +.8 ldy #S.PS.RC + sta (pPs),y + clc + rts + +.9 lda #0 + sec + rts *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 @@ -363,6 +362,9 @@ CS.CHARIN tax Save Char txa ply sta (ZPCMDBuf),y + iny + lda #0 + sta (ZPCMDBuf),y >LDA.G bSecureRead bne .8 @@ -481,10 +483,9 @@ CmdLine.CLR ldy #0 iny bne .1 - jsr CmdLine.SET + jsr CmdLine.PRINT - lda #0 - sta (ZPCMDBuf) + jmp CmdLine.RESET .9 rts *-------------------------------------- @@ -501,9 +502,15 @@ CmdLine.DEL >LDA.G CmdBuflen >SYSCALL PutChar.A .9 rts *-------------------------------------- -CmdLine.SET >LDYA ZPCMDBuf +CmdLine.PRINT >LDYA ZPCMDBuf >SYSCALL PrintF.YA rts +*-------------------------------------- +CmdLine.RESET lda #0 + sta (ZPCMDBuf) + >STA.G CmdBuflen + >STA.G bCmdBufExec + rts *-------------------------------------- .INB /A2OSX.SRC/SBIN/SHELL.S.CMD .INB /A2OSX.SRC/SBIN/SHELL.S.CSH @@ -551,8 +558,6 @@ FMT.TIME >CSTR "%H:%M:%S (%I:%M:%S%p)" *-------------------------------------- EscChars >PSTR "DBAC" EscAscii .HS 04080A0B15 -TIME .BS S.TIME -STAT .BS S.STAT CSH.TSIZE .HS 0001020405 00,CHAR,INT,LONG,FLOAT.... CSH.ACCT .BS 1 CSH.ACC .BS 5 @@ -579,10 +584,10 @@ Sleep .BS 4 CMD.hCmdLine .BS 1 CMD.hFullpath .BS 1 -CMD.hExtCmdLine .BS 1 CMD.bStartProc .BS 1 CMD.VarName .BS VarLen.MAX+1 CMD.Stat .BS S.STAT +CMD.Time .BS S.TIME HIS.hBuf .BS 1 HIS.BufIndex .BS 1