From 382be3306043babda5e3e63eb6ccbe8d133b7302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 25 Oct 2018 17:31:41 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Docs/KERNEL.md | 23 +++++++++++++-- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/A2osX.I.txt | 4 +-- SBIN/GETTY.S.txt | 7 +---- SBIN/LOGIN.S.txt | 3 +- SBIN/SHELL.S.CMD.txt | 28 ++++++++---------- SYS/KERNEL.S.ARG.txt | 62 +++++++++++++++++++-------------------- SYS/KERNEL.S.INIT.txt | 28 ++++++------------ SYS/KERNEL.S.JMP.txt | 4 +-- SYS/KERNEL.S.MEM.txt | 15 ++++++++++ SYS/KERNEL.S.PS.txt | 29 ++++++++++++++++-- 12 files changed, 120 insertions(+), 83 deletions(-) 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 da5d2ec1ca270449d859ff8e6b7354feff28aecb..57b914f2622d7a3d3a8adda3cd5f0a7f0fdc7267 100644 GIT binary patch delta 5491 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 delta 5472 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 ACjbBd diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index d5beb8c90d3c81379d378b3f4ed50fb913421422..514402c0de95f5dfa08380f9e0b651890a556c58 100644 GIT binary patch delta 29789 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 .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