From da6265c0cdc5fefec156d88493899e2b730ee09d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 20 Nov 2018 16:54:49 +0100 Subject: [PATCH] Kernel 0.92 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/X.FILEENUM.S.txt | 4 +- INC/A2osX.I.txt | 30 ++++---- README.md | 9 +-- SBIN/GETTY.S.txt | 114 ++++++++++++++++++++++++------- SBIN/LOGIN.S.txt | 2 +- SBIN/SHELL.S.CMD.txt | 144 ++++++++++++++++++++++++--------------- SBIN/SHELL.S.txt | 95 ++++++++++++++++++++------ SBIN/TELNETD.S.txt | 2 +- SYS/KERNEL.S.DIRENT.txt | 4 +- SYS/KERNEL.S.STDIO.txt | 2 +- SYS/KERNEL.S.STDLIB.txt | 2 +- 12 files changed, 282 insertions(+), 126 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d0cebd4ea10f9f475cde74ca5773e57bbd8765c9..bf355f209cf36d14177fc7bf3df827382d95ece5 100644 GIT binary patch delta 32424 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.G ArgIndex + >SYSCALL ArgV + bcs .8 + + >STYA ZPPtr1 + + jsr CkeckOption + bcs .9 + beq .1 valid option, check next arg + + >LDA.G ArgDev + bne .2 + + >LDA.G ArgIndex + >STA.G ArgDev + bra .1 + +.2 >LDA.G ArgProg + bne .9 + + >LDA.G ArgIndex + >STA.G ArgProg + bra .1 + +.9 >PUSHBI 0 + >LDYA L.MSG.USAGE + >SYSCALL printf + lda #E.SYN + sec +.99 rts + +.8 >LDA.G ArgDev + beq .9 + >LDA.G ArgProg + beq .9 + >PUSHWI 0 auxtype >PUSHBI 0 type >PUSHBI O.RDWR - lda #1 - >SYSCALL ArgV get /dev/xxx + >LDA.G ArgDev + >SYSCALL ArgV >SYSCALL fopen - bcs .9 + bcs .99 ldy #S.PS.hStdIn sta (pPs),y @@ -66,15 +103,7 @@ CS.RUN ldy #S.PS.ARGC iny #S.PS.hStdErr sta (pPs),y - >STA.G hDEV - bra CS.RUN.LOOP0 - -.90 >PUSHBI 0 - >LDYA L.MSG.USAGE - >SYSCALL printf - lda #E.SYN - sec -.9 rts + >STA.G hFILE CS.RUN.LOOP0 >LDYA L.ENV.TERM >SYSCALL UnSetEnv @@ -119,16 +148,20 @@ CS.RUN.LOOP1 >SLEEP .2 >PUSHBI S.PS.F.DUPENV+S.PS.F.HOLD - lda #2 + >LDA.G ArgProg >SYSCALL ArgV >SYSCALL ExecV bcs CS.RUN.9 >SLEEP + >LDA.G bExitOnClose + bmi .8 + jmp CS.RUN.LOOP0 - clc +.8 lda #0 + sec CS.RUN.9 rts *-------------------------------------- CS.RUN.IACMODE >SLEEP Wait for IAC CMD (or SB) @@ -222,7 +255,7 @@ CS.RUN.IAC.SB >SYSCALL SetEnv .8 jmp CS.RUN.LOOP1 -*-------------------------------------- +*-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? @@ -235,7 +268,7 @@ CS.DOEVENT lda (pEvent) .9 sec do not discard TIMER event rts *-------------------------------------- -CS.QUIT >LDA.G hDEV +CS.QUIT >LDA.G hFILE beq .8 >SYSCALL fclose @@ -253,13 +286,41 @@ Wait.TimeOut sec clc .9 rts *-------------------------------------- +CkeckOption lda (ZPPtr1) + cmp #'-' + bne .8 + + ldy #2 + lda (ZPPtr1),y + bne .8 + + dey + lda (ZPPtr1),y + + ldx OptionList + +.2 cmp OptionList,x + beq .3 + dex + bne .2 + + sec invalid option + rts + +.3 ldy OptionVars-1,x + eor #$80 toggle option + sta (pData),y + lda #0 exit with 0 + +.8 clc !0 if bot an option + rts +*-------------------------------------- CS.END OptionList >PSTR "Ee" -OptionVars .DA #bCloseOnExit,#bCloseOnExit -MSG.USAGE .AZ "Usage : GETTY \r\n" - .AZ " -E : Close DEV on exit\r\n" +OptionVars .DA #bExitOnClose,#bExitOnClose +MSG.USAGE .AS "Usage : GETTY \r\n" + .AZ " -E : Exit on disconnect\r\n" MSG.GREETINGS .AZ "\r\nA2osX-GeTTY %d.%d\r\n" -MSG.DEBUG .AZ "{%h}" *-------------------------------------- TELNETOPTS .DA #IAC,#WILL,#TELOPT.BINARY .DA #IAC,#WILL,#TELOPT.ECHO @@ -280,8 +341,11 @@ ENV.TERM .AZ "TERM" .DUMMY .OR 0 DS.START -hDEV .BS 1 -bCloseOnExit .BS 1 +ArgIndex .BS 1 +ArgDev .BS 1 +ArgProg .BS 1 +hFILE .BS 1 +bExitOnClose .BS 1 TimeOut .BS 1 IAC.CMD .BS 1 IAC.SUBCMD .BS 1 diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index 29f65f51..e55037a5 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -184,7 +184,7 @@ INPUT.LINEIN ldy #INPUT.Status CS.END MSG.LOGIN .AZ "\r\nlogin:" MSG.PASSWORD .AZ "\r\npassword:" -SHELL .AZ "${A2OSX}SBIN/SHELL" +SHELL .AZ "${ROOT}SBIN/SHELL" .HS 00 *-------------------------------------- .DUMMY diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index ebea25cc..2afd7b02 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -39,17 +39,13 @@ Cmd.Exec >LDA.G CMD.IntCmd cpx #C.ELSE always execute ELSE,FI bcs .1 - jsr CMD.StkGet + jsr CMD.StkGet IF,WHILE,FOR ? bcs .1 no particular context bpl .8 context is FALSE, skip line .1 jmp (J.CMD.INT,x) -.99 lda #E.SYN - sec - rts - .2 >PUSHB.G CMD.PSFlags >LDYA ZPArgVBuf >SYSCALL execv @@ -59,7 +55,7 @@ Cmd.Exec >LDA.G CMD.IntCmd >LDA.G CMD.PSFlags and #S.PS.F.HOLD - bne .3 + bne .4 txa >PUSHA @@ -68,45 +64,53 @@ Cmd.Exec >LDA.G CMD.IntCmd >SYSCALL printf rts -.3 >SLEEP Suspend this PID +.4 >SLEEP Suspend this PID ldy #S.PS.RC lda (pPs),y - bne .9 + bne .99 + .8 clc .9 rts + +.99 sec + rts *-------------------------------------- * STARTPROC : intcmd = 0 *-------------------------------------- Cmd.INT.STARTPROC clc rts -*-------------------------------------- +*-------------------------------------- +Cmd.INT.SHIFT lda #1 + jmp ShiftA +*-------------------------------------- Cmd.INT.PWD ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL GetMemPtr >SYSCALL puts -Cmd.INT.PWD.RTS rts + rts *-------------------------------------- Cmd.INT.CD ldx #1 jsr Cmd.GetArgX - bcc Cmd.INT.CD.ARG + bcs Cmd.INT.CD.HOME + >SYSCALL RealPath + bcc Cmd.INT.CD.1 + +Cmd.INT.CD.RTS rts + Cmd.INT.CD.HOME >LDYA L.ENV.HOME >SYSCALL GetEnv bcc .1 >LDYA L.ENV.ROOT >SYSCALL GetEnv - bcs Cmd.INT.PWD.RTS + bcs Cmd.INT.PWD .1 >SYSCALL ExpandStr - bcs Cmd.INT.PWD.RTS - bra Cmd.INT.CD.1 - -Cmd.INT.CD.ARG >SYSCALL RealPath - bcs Cmd.INT.PWD.RTS - + bcs Cmd.INT.CD.RTS + Cmd.INT.CD.1 >STYA ZPPtr1 txa >STA.G CMD.hCmdLine @@ -170,7 +174,7 @@ Cmd.Exec.ERRSYN lda #E.SYN *-------------------------------------- Cmd.INT.SET ldx #1 jsr Cmd.GetArgX - bcc Cmd.INT.SETVAR + bcc Cmd.INT.SET.1 * No arg, print all ENV @@ -220,8 +224,19 @@ Cmd.INT.SET ldx #1 .8 clc .9 rts *-------------------------------------- -Cmd.INT.SETVAR jsr CMD.IsSwitch - bcs .10 +* SET +X VAR = VALUE1 op VALUE2 op VALUE3 ... +*-------------------------------------- +Cmd.INT.SET.1 >STZ.G CMD.Varname + + lda #1 + >STA.G CMD.ArgIndex + +.1 tax + jsr Cmd.GetArgX + bcs .8 + + jsr CMD.IsSwitch + bcs .2 cmp #'X' bne .99 @@ -229,49 +244,67 @@ Cmd.INT.SETVAR jsr CMD.IsSwitch lda #$ff >EOR.G bSET.X sta (pData),y + >INC.G CMD.ArgIndex + tax + bra .1 + +.2 >LDA.G CMD.ArgIndex + >STA.G CMD.Varname + + >INC.G CMD.ArgIndex + tax + jsr Cmd.GetArgX + bcs Cmd.INT.SET.GET + + >STYA ZPPTR1 + + lda (ZPPTR1) + + cmp #'=' + bne .99 + + ldy #1 + lda (ZPPTR1),y + bne .99 + + >INC.G CMD.ArgIndex + tax + jsr Cmd.GetArgX + bcs Cmd.INT.SET.UNSET + + >PUSHYA + >LDA.G CMD.Varname + tax + jsr Cmd.GetArgX + >SYSCALL SetEnv + rts + .8 clc rts -.10 lda (ZPPTR1) set by CMD.IsSwitch - cmp #'=' string is '=value' ? - beq .99 syntax error - - ldy #0 - -.1 iny - lda (ZPPTR1),y - beq .3 no =, GetEnv - - cmp #'=' ARGS contains =, PutEnv - bne .1 - - iny - lda (ZPPTR1),y - beq .2 "VAR=" go UnsetEnv - - >LDYA ZPPTR1 String is VAR=VALUE... - >SYSCALL PutEnv - rts - -.2 dey String is "VAR=", Remove ending '=' - lda #0 - sta (ZPPTR1),y - - >LDYA ZPPTR1 String is "VAR"... - >SYSCALL UnsetEnv - rts - .99 lda #E.SYN sec rts -* Print requested VAR -.3 >LDYA ZPPTR1 +Cmd.INT.SET.UNSET + >LDA.G CMD.Varname + tax + jsr Cmd.GetArgX + >SYSCALL UnsetEnv + rts + +Cmd.INT.SET.GET + >LDA.G CMD.Varname + tax + jsr Cmd.GetArgX >SYSCALL GetEnv - bcs .8 + rts >PUSHYA push value - >PUSHW ZPPTR1 push name + >LDA.G CMD.Varname + tax + jsr Cmd.GetArgX + >PUSHYA push name *-------------------------------------- Cmd.INT.SET.PRINT >PUSHBI 4 @@ -753,6 +786,9 @@ Cmd.INT.FI jsr CMD.StkPull Cmd.INT.NEXT .9 jmp Cmd.Exec.ERRSYN *-------------------------------------- +Cmd.INT.BREAK +.9 jmp Cmd.Exec.ERRSYN +*-------------------------------------- Cmd.INT.LOOP jsr CMD.StkPull bcs .9 tax diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 02431b8f..53441211 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -13,27 +13,29 @@ History.MAX .EQ 256 CMD.STACK.MAX .EQ 64 *-------------------------------------- C.STARTPROC .EQ 0 -C.CD .EQ 2 -C.DATE .EQ 4 -C.ECHO .EQ 6 -C.EXIT .EQ 8 -C.FOR .EQ 10 -C.IF .EQ 12 -C.MD .EQ 14 -C.PAUSE .EQ 16 -C.PWD .EQ 18 -C.RD .EQ 20 -C.READ .EQ 22 -C.REN .EQ 24 -C.SET .EQ 26 -C.SLEEP .EQ 28 -C.TIME .EQ 30 -C.WHILE .EQ 32 -C.NEXT .EQ 34 -C.LOOP .EQ 36 +C.BREAK .EQ 2 +C.CD .EQ 4 +C.DATE .EQ 6 +C.ECHO .EQ 8 +C.EXIT .EQ 10 +C.FOR .EQ 12 +C.IF .EQ 14 +C.MD .EQ 16 +C.PAUSE .EQ 18 +C.PWD .EQ 20 +C.RD .EQ 22 +C.READ .EQ 24 +C.REN .EQ 26 +C.SET .EQ 28 +C.SLEEP .EQ 30 +C.SHIFT .EQ 32 +C.TIME .EQ 34 +C.WHILE .EQ 36 +C.NEXT .EQ 38 +C.LOOP .EQ 40 *-------------------------------------- -C.ELSE .EQ 38 -C.FI .EQ 40 +C.ELSE .EQ 42 +C.FI .EQ 44 *-------------------------------------- E.SYNTAX .EQ $C0 E.STKOVERFLOW .EQ $C1 @@ -116,6 +118,7 @@ J.CL.IO .DA CL.IO.AMP .DA CL.IO.2OUT L.CMD.INT .DA CMD.INT J.CMD.INT .DA Cmd.INT.STARTPROC + .DA Cmd.INT.BREAK .DA Cmd.INT.CD .DA Cmd.INT.DATE .DA Cmd.INT.ECHO @@ -130,6 +133,7 @@ J.CMD.INT .DA Cmd.INT.STARTPROC .DA Cmd.INT.REN .DA Cmd.INT.SET .DA Cmd.INT.SLEEP + .DA Cmd.INT.SHIFT .DA Cmd.INT.TIME .DA Cmd.INT.WHILE .DA Cmd.INT.NEXT @@ -168,6 +172,9 @@ CS.RUN jsr Cmd.INT.CD.HOME >SYSCALL GetMemPtr >STYA ZPFileBufPtr + lda #0 + jsr ShiftA Remove $0=/bin/shell + .DO CSH=1 jsr CSH.Init .FIN @@ -435,6 +442,49 @@ SetPWD.I >SYSCALL GetMemPtr >SYSCALL SetEnv rts *-------------------------------------- +ShiftA >SYSCALL ArgV + bcs .8 + + >STYA ZPPtr1 + >STYA ZPPtr2 + +.10 ldy #$ff + +.1 iny Compute ArgX len + lda (ZPPtr1),y + bne .1 + +.2 tya + sec + adc ZPPtr1 + sta ZPPtr1 + bcc .3 + inc ZPPtr1+1 + +.3 ldy #$ff + +.4 iny + lda (ZPPtr1),y + sta (ZPPtr2),y + bne .4 + tya + beq .7 + + sec + adc ZPPtr2 + sta ZPPtr2 + bcc .2 + inc ZPPtr2+1 + bra .2 + +.7 ldy #S.PS.ARGC + lda (pPS),y + dec + sta (pPS),y + +.8 clc + rts +*-------------------------------------- Lookup >STYA ZPPtr2 >PULLW ZPPtr1 @@ -489,7 +539,7 @@ MSG.TRACE .AS ">%s" MSG.ECHOCRLF .AZ "\r\n" MSG.BATCHERR .AZ "^\r\nLine #%D:" MSG.ERROR .AZ "[$%h]:%S.\r\n" -MSG.PRINTENV .AZ "%s=%s\r\n" +MSG.PRINTENV .AZ "%s = %s\r\n" MSG.PID .AZ "PID=%d\r\n" FMT.DATE .AZ "%A (%w), %B %d %Y" FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)" @@ -514,6 +564,7 @@ CL.IO .AZ "&" .HS 00 *-------------------------------------- CMD.INT .AZ "STARTPROC" + .AZ "BREAK" .AZ "CD" .AZ "DATE" .AZ "ECHO" @@ -528,6 +579,7 @@ CMD.INT .AZ "STARTPROC" .AZ "REN" .AZ "SET" .AZ "SLEEP" + .AZ "SHIFT" .AZ "TIME" .AZ "WHILE" .AZ "NEXT" @@ -605,6 +657,7 @@ CMD.hCmdLine .BS 1 CMD.hArgVBuf .BS 1 CMD.ArgIndex .BS 1 +CMD.Varname .BS 1 CMD.Test .BS 1 CMD.Operator .BS 1 CMD.NumArg1 .BS 4 diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index c9a34c14..de269ada 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -280,7 +280,7 @@ MSG.INCOMING .AZ "TELNETD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n" MSG.EXECERR .AZ "TELNETD:ExecL failed $%h." *-------------------------------------- NOD.Template .AZ "/DEV/TTY%h" -CMD.Template .AZ "${ROOT}SBIN/GETTY %s ${ROOT}SBIN/LOGIN" +CMD.Template .AZ "${ROOT}SBIN/GETTY -E %s ${ROOT}SBIN/LOGIN" *-------------------------------------- SA.LOCAL .DA #AF.INET S.SOCKADDR.AF .BS 1 diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index 17b7498a..a6564703 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -29,7 +29,7 @@ K.OpenDir jsr PFT.CheckPathYA sta (pFD),y ldy #1 - lda (ZPPtr2),y One char ? + lda K.Buf256,y One char ("/") ? beq .8 No, Go open dir.... >MLICALL MLIGETFILEINFO @@ -50,7 +50,7 @@ K.OpenDir jsr PFT.CheckPathYA sta (pFD),y .8 ldx #$ff Self Modified - >LDYA ZPPtr2 + >LDYAI K.Buf256 jsr STDIO.NewHFileYAX bcc .99 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 0ccf8993..18facffd 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -1148,7 +1148,7 @@ K.FSeek jsr PFT.CheckNodeA .9 rts -.98 lda #E.SYN +.98 lda #E.BADARG .HS 2C bit abs .99 lda #E.FTB sec diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 7896970f..9475e103 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -398,7 +398,7 @@ K.realpath.I clc >LDYAI K.Buf256 jmp K.NewStr -.90 lda #E.SYN +.90 lda #E.BADPATH sec rts