diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 7731affe..7bb4d0dc 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -1,14 +1,18 @@ *** Auto generated by docgen.cmd *** # Args2ArgV -int args2argv(char* args, char* argv[]) +Expand String and convert to ArgV List + +## C +short int args2argv(char* args, char* argv[]) ## ASM `>PUSHW argv` `>LDYA args` `>SYSCALL Args2ArgV -## RETURN VALUE +## RETURN VALUE +A = Arg count # ArgV @@ -540,7 +544,20 @@ Load a file in AUX memory (Stock Objects) Y,A = File Length X = hMem of Loaded Object in AUX mem -# Exec +# ExecL + +## C +`int execl(const char* cmdline, short int flags);` + +## ASM +`>PUSHB flags` +`>LDYA cmdline` +`>SYSCALL execl` + +## RETURN VALUE +A = Child PSID + +# ExecV ## C `int exec(const char* argv[], short int flags);` diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index da5d2ec1..57b914f2 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 d5beb8c9..514402c0 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 5d3b6c68..5cf83d99 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -215,8 +215,8 @@ SYS.UnloadLib .EQ $9A SYS.LoadDrv .EQ $9C SYS.InsDrv .EQ $9E *-------------------------------------- -SYS.Exec .EQ $A0 -* .EQ $A2 +SYS.ExecL .EQ $A0 +SYS.ExecV .EQ $A2 * .EQ $A4 * .EQ $A6 diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index 7dae6dc1..957feac7 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -117,14 +117,9 @@ CS.RUN.LOOP1 >SLEEP .2 >PUSHBI S.PS.F.DUPENV+S.PS.F.HOLD - lda #2 >SYSCALL ArgV - >SYSCALL puts - - lda #2 - >SYSCALL ArgV - >SYSCALL Exec + >SYSCALL ExecV bcs CS.RUN.9 >SLEEP diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index fa40e46b..c1387788 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -94,8 +94,7 @@ CS.RUN lda #0 >PUSHBI S.PS.F.HOLD >LDYA L.SHELL - >SYSCALL Exec - + >SYSCALL ExecL rts *-------------------------------------- CS.DOEVENT diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index c44ad845..86a6bb1c 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -29,18 +29,10 @@ Cmd.Parse >STZ.G CMD.bCmd lda #S.PS.F.HOLD+S.PS.F.DUPENV >STA.G CMD.PSFlags - >LDYA ZPCMDBuf - >SYSCALL ExpandStr - bcs .9 - - phx save expanded string - pha >PUSHW ZPCMDBuf - pla Y,A = expanded string + >LDYA ZPCMDBuf >SYSCALL Args2ArgV - pla Get Back expanded string - >SYSCALL FreeMem >LDYAI 256 >SYSCALL GetMem @@ -107,12 +99,17 @@ Cmd.CheckCmd ldy #$ff bra .6 go check type... .2 >LDYA L.CMD.INT - jsr CMD.SearchInt no / found, search internal... + jsr CMD.Search no / found, search internal... bcs .4 not internal, search PATH + phx + plx + beq .3 if STARTPROC, skip keyword + jsr CMD.AddYAToArgV X unmodified bcs .9 - txa + +.3 txa >STA.G CMD.bCmd clc @@ -212,7 +209,7 @@ Cmd.Exec lda (ZPArgVBuf) .1 >PUSHB.G CMD.PSFlags >LDYA ZPArgVBuf - >SYSCALL exec + >SYSCALL execv rts *-------------------------------------- * STARTPROC : intcmd = 0 @@ -453,7 +450,8 @@ Cmd.INT.ECHO ldx #1 .8 clc .9 rts *-------------------------------------- -Cmd.INT.READ lda (ZPCMDBuf) +Cmd.INT.READ ldx #1 + jsr Cmd.GetArgX beq .9 lda #0 @@ -667,7 +665,7 @@ CMD.AddYAToArgV >STYA ZPPtr1 sec rts *-------------------------------------- -CMD.SearchInt >STYA ZPPtr2 +CMD.Search >STYA ZPPtr2 ldx #0 @@ -680,7 +678,7 @@ CMD.SearchInt >STYA ZPPtr2 plx >LDYA ZPPtr2 - clc Found an internal Cmd... + clc rts .2 inc ZPPtr2 diff --git a/SYS/KERNEL.S.ARG.txt b/SYS/KERNEL.S.ARG.txt index 34eddee3..d793dd47 100644 --- a/SYS/KERNEL.S.ARG.txt +++ b/SYS/KERNEL.S.ARG.txt @@ -3,28 +3,39 @@ PREFIX /A2OSX.BUILD AUTO 4,1 */-------------------------------------- * # Args2ArgV -* int args2argv(char* args, char* argv[]) +* Expand String and convert to ArgV List +* ## C +* short int args2argv(char* args, char* argv[]) * ## ASM * `>PUSHW argv` * `>LDYA args` * `>SYSCALL Args2ArgV -* ## RETURN VALUE +* ## RETURN VALUE +* A = Arg count *\-------------------------------------- ARG.bInQuote .BS 1 *-------------------------------------- -K.Args2ArgV jsr MEM.SPtr1PPtr2 +K.Args2ArgV pha + >PULLW ZPPtr2 Get target buffer + pla + +K.Args2ArgV.I jsr K.ExpandStr + bcs .9 + + >STYA ZPPtr1 + stx .80+1 - ldx #0 Arg Count + ldx #0 Arg Count stz ARG.bInQuote -.1 jsr ARG.GetCharPtr1 +.1 jsr MEM.GetCharPtr1 beq .8 cmp #C.SPACE - beq .1 skip leading spaces + beq .1 skip leading spaces -.2 cmp #'"' found a quote ? +.2 cmp #'"' found a quote ? bne .3 lda ARG.bInQuote @@ -40,24 +51,28 @@ K.Args2ArgV jsr MEM.SPtr1PPtr2 inx Found one arg !!! lda #0 set this token End - jsr ARG.PutCharPtr2 + jsr MEM.PutCharPtr2 bra .1 -.6 jsr ARG.PutCharPtr2 +.6 jsr MEM.PutCharPtr2 -.7 jsr ARG.GetCharPtr1 +.7 jsr MEM.GetCharPtr1 bne .2 inx -.8 jsr ARG.PutCharPtr2 set Argv[x] Ending 0 +.8 jsr MEM.PutCharPtr2 set Argv[x] Ending 0 sta (ZPPtr2) set Array Ending 0 + phx - txa X=Arg Count +.80 lda #$FF SELF MODIFIED + jsr K.FreeMem Discard expanded string + + pla get back Arg Count - clc -.9 rts +* clc +.9 rts */-------------------------------------- * # ArgV * ## ASM @@ -83,10 +98,10 @@ K.ArgV tax save requested arg# dex bmi .7 -.3 jsr ARG.GetCharPtr1 skip str +.3 jsr MEM.GetCharPtr1 skip str bne .3 - jsr ARG.NextCharPtr1 skip \0 + jsr MEM.NextCharPtr1 skip \0 bra .1 .7 >LDYA ZPPtr1 @@ -97,21 +112,6 @@ K.ArgV tax save requested arg# .9 sec rts *-------------------------------------- -ARG.GetCharPtr1 lda (ZPPtr1) - beq ARG.GetCharPtr1.8 -ARG.NextCharPtr1 - inc ZPPtr1 - bne ARG.GetCharPtr1.8 - inc ZPPtr1+1 never Z -ARG.GetCharPtr1.8 - rts -*-------------------------------------- -ARG.PutCharPtr2 sta (ZPPtr2) - inc ZPPtr2 - bne .8 - inc ZPPtr2+1 -.8 rts -*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.ARG LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 50cb0a59..4785cc64 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -140,16 +140,17 @@ Kernel.Init3 sta SETALTZP >LDYAI MSG.Prefix >SYSCALL printf -* lda KBD -* bpl .1 -* sta KBDSTROBE -* cmp #$84 CTRL-D for Maintenace mode -* bne .1 + lda KBD + bpl .1 + sta KBDSTROBE + cmp #$84 CTRL-D for Maintenace mode + bne .1 >PUSHBI 0 >LDYAI MSG.MMode >SYSCALL printf + >PUSHBI 0 PS Flags >LDYAI STARTUP.SHELL bra .8 @@ -158,25 +159,14 @@ Kernel.Init3 sta SETALTZP >LDYAI MSG.Startup >SYSCALL printf + >PUSHBI 0 PS Flags >LDYAI STARTUP.CMDLINE -.8 >SYSCALL ExpandStr - phx - pha - >PUSHWI K.Buf256 - pla - >SYSCALL Args2ArgV - - pla - jsr K.FreeMem - - >PUSHBI 0 PS Flags - >LDYAI K.Buf256 - >SYSCALL Exec +.8 >SYSCALL ExecL bcs .9 - >PUSHBI 1 + >PUSHBI 0 >LDYAI MSG.Init3.OK >SYSCALL printf diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 44d00289..63fb4e55 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -98,8 +98,8 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.LoadDrv .DA K.InsDrv - .DA K.Exec $A0 - .DA 0 + .DA K.ExecL $A0 + .DA K.ExecV .DA 0 .DA 0 .DA 0 diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index dcba8b56..24ae518e 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -685,6 +685,21 @@ MEM.SPtr1PPtr2 >STYA ZPPtr1 >PULLW ZPPtr2 rts *-------------------------------------- +MEM.GetCharPtr1 lda (ZPPtr1) + beq MEM.GetCharPtr1.8 +MEM.NextCharPtr1 + inc ZPPtr1 + bne MEM.GetCharPtr1.8 + inc ZPPtr1+1 never Z +MEM.GetCharPtr1.8 + rts +*-------------------------------------- +MEM.PutCharPtr2 sta (ZPPtr2) + inc ZPPtr2 + bne .8 + inc ZPPtr2+1 +.8 rts +*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index e45e7ea2..6d84d493 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -5,7 +5,30 @@ AUTO 4,1 PS.Flags .BS 1 PS.Args .BS 2 */-------------------------------------- -* # Exec +* # ExecL +* ## C +* `int execl(const char* cmdline, short int flags);` +* ## ASM +* `>PUSHB flags` +* `>LDYA cmdline` +* `>SYSCALL execl` +* ## RETURN VALUE +* A = Child PSID +*\-------------------------------------- +K.ExecL pha + lda #K.Buf256 + sta ZPPtr2 + lda /K.Buf256 + sta ZPPtr2+1 + pla + jsr K.Args2ArgV.I + bcc .1 + + >RET 1 discard flags + +.1 >LDYAI K.Buf256 +*/-------------------------------------- +* # ExecV * ## C * `int exec(const char* argv[], short int flags);` * ## ASM @@ -15,9 +38,9 @@ PS.Args .BS 2 * ## RETURN VALUE * A = Child PSID *\-------------------------------------- -K.Exec >STYA PS.Args +K.ExecV >STYA PS.Args >PULLB PS.Flags - + jsr PS.CreateChild Child S.PS at ZPPtr3 bcs .9