From 830c85a6ac812f6da0ed0bdfc86f971fa28bb6b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 30 Aug 2017 17:26:34 +0200 Subject: [PATCH] Kernel 0.9.1 : Code reorganization & move to CSTR (ENV) --- .Docs/KERNEL.md | 43 +++---- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/ASM.S.FIO.txt | 2 +- BIN/PS.S.txt | 2 +- INC/A2osX.I.txt | 17 +-- SYS/KERNEL.S.ARG.txt | 2 +- SYS/KERNEL.S.BIN.txt | 6 +- SYS/KERNEL.S.CORE.txt | 4 +- SYS/KERNEL.S.ENV.txt | 194 ++++++++++++++--------------- SYS/KERNEL.S.INIT.txt | 10 +- SYS/KERNEL.S.JMP.txt | 2 +- SYS/KERNEL.S.MEM.txt | 19 ++- SYS/KERNEL.S.PS.txt | 260 ++++++++++++++++++++------------------- SYS/KERNEL.S.txt | 2 +- 15 files changed, 271 insertions(+), 292 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index bb0f8e0e..2251da14 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -80,13 +80,13 @@ Returns argument count in the process command line. ## Out: + none, always succeed. -# ExpandPStr.YA +# ExpandStr.YA ## In: -+ Y,A = PTR to String to Expand (PSTR) ++ Y,A = PTR to String to Expand (C-String) ## Out: -+ X = hMem to Expanded String (PSTR) ++ X = hMem to Expanded String (C-String) + Y,A = PTR to Expanded String # PutEnv.YA @@ -139,11 +139,11 @@ And return, if found, the full path to it. # GetFullPath.YA ## In : -+ Y,A = Filename (PSTR) ++ Y,A = Filename (C-String) ## Out : + CC : success - + Y,A = FullPath (PSTR) + + Y,A = FullPath (C-String) + X = hMem of FullPath + CS : A = Error Code @@ -280,20 +280,6 @@ Create a new copy of PSTR ## Out: + Buffer filled with memory stats -# ExecProcessNewEnv.YA - -# ExecProcess.YA (Blocking Parent PID) - -# CreateProcessNewEnv.YA - -# CreateProcess.YA (Non Blocking) - -## In: - + Y,A = PTR To Cmd Line - -## Out: - + A = Child PSID - # GetPSByID.A ## In : @@ -311,18 +297,19 @@ Make current process suspend until next RUN ## Out : + (none) -# Str2StrArray.YA -Convert a CSTR (e.g. : command Line) to a Array of CSTRs (Args[]) +# ExecProcessNewEnv.YA -## In: -+ Y,A = PTR to String +# ExecProcess.YA (Blocking Parent PID) + +# CreateProcessNewEnv.YA + +# CreateProcess.YA (Non Blocking) + +## In: + + Y,A = PTR To Cmd Line ## Out: -+ CC : success - + Y,A = PTR to StrArray - + X = hMem -+ CS : error - + A = SYS error code + + A = Child PSID # Stat Return information about a file diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index b65ce80cf55d1011072d7514aeb634c220b5f64d..11ccf706739c678cf0f91416a4be6888aa46f6ec 100644 GIT binary patch delta 6069 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 PC~_!)$FR?WW$9# delta 6243 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 F{r_0ALlpo3 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 987a350f01b5c1d5e84be69e0e31e629d29b72c3..3dfeefcd090467a85cd6f855a8d979e22e014aeb 100644 GIT binary patch delta 20453 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 delta 20403 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 LRo>kSYSCALL GetMemPtr.A bcs .99 diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index 9559c551..4372fc79 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -50,7 +50,7 @@ CS.RUN >LDYAI TSKMGR.TABLE+S.PS .1 lda (ZPPTR1) bpl .4 - ldy #S.PS.hCMDLINE + ldy #S.PS.hARGS lda (ZPPTR1),y >SYSCALL GetMemPtr.A >PUSHYA diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index cfdd1103..1e488d6d 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -11,7 +11,7 @@ K.ENV.SIZE .EQ 256 K.FLT.MAX .EQ 4 K.EVT.MAX .EQ 8 K.DEV.MAX .EQ 32 -K.PS.MAX .EQ 64 +K.PS.MAX .EQ 32 *-------------------------------------- * Kernel ZP Aux *-------------------------------------- @@ -78,7 +78,7 @@ EvtMgr.Table .EQ $1180 K.EVT.MAX*S.EVT.SIZE=16*8=128b *-------------------------------------- DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b *-------------------------------------- -TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=64*16=1k +TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=32*32=1k *-------------------------------------- * MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes) *-------------------------------------- @@ -229,12 +229,12 @@ SYS.ChMod .EQ $6A SYS.ChOwn .EQ $6C SYS.ChGrp .EQ $6E *-------------------------------------- -* .EQ $70 +SYS.StrLen.YA .EQ $70 SYS.StrCpy .EQ $72 SYS.StrCat .EQ $74 SYS.StrMatch .EQ $76 -SYS.StrUprYA .EQ $78 -SYS.StrLwrYA .EQ $7A +SYS.StrUpr.YA .EQ $78 +SYS.StrLwr.YA .EQ $7A SYS.StrFTime .EQ $7C * .EQ $7E @@ -453,15 +453,18 @@ S.PS.hCS .EQ 4 S.PS.hDS .EQ 5 S.PS.hSS .EQ 6 S.PS.hENV .EQ 7 -S.PS.hCMDLINE .EQ 8 +* S.PS.hPREFIX .EQ 9 S.PS.hStdIn .EQ 10 S.PS.hStdOut .EQ 11 S.PS.hStdErr .EQ 12 S.PS.RC .EQ 13 S.PS.PC .EQ 14 + +S.PS.ARGC .EQ 16 +S.PS.hARGS .EQ 17 * -S.PS .EQ 16 +S.PS .EQ 32 *-------------------------------------- * LIB Function Indexes *-------------------------------------- diff --git a/SYS/KERNEL.S.ARG.txt b/SYS/KERNEL.S.ARG.txt index 7dd229e9..a8274175 100644 --- a/SYS/KERNEL.S.ARG.txt +++ b/SYS/KERNEL.S.ARG.txt @@ -58,7 +58,7 @@ K.GetArg.A sta .2+1 .9 sec rts *-------------------------------------- -ARG.InitArgPtr1 ldy #S.PS.hCMDLINE +ARG.InitArgPtr1 ldy #S.PS.hARGS lda (pPs),y jsr K.GetMemPtr.A >STYA ZPPtr1 diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 2f5debcd..a16bc80a 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -162,7 +162,7 @@ BIN.Load.YA >STYA BIN.CmdLine *-------------------------------------- BIN.Load.YA.1 >PUSHWI K.S.STAT >PUSHW BIN.CmdLine - jsr K.STAT Look for AUXTYPE + >SYSCALL STAT BANK1!!! Look for AUXTYPE bcs .9 >LDYA K.S.STAT+S.STAT.P.AUXTYPE @@ -173,7 +173,7 @@ BIN.Load.YA.1 >PUSHWI K.S.STAT >PUSHBI SYS.FOpen.R >PUSHW BIN.CmdLine - jsr K.LoadFile + >SYSCALL LoadFile BANK1!!! .9 bcs .99 Error Loading file stx BIN.hMem save hMem @@ -214,7 +214,7 @@ BIN.Load.YA.1 >PUSHWI K.S.STAT jsr BIN.RelocateEXE >LDYA BIN.CmdLine get back bin path - jsr K.NewPStr.YA make a copy of this string + jsr K.NewCStr.YA make a copy of this string bcs .98 lda BIN.hMem Keep X=hMem diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 0a0aee94..4144031b 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -28,7 +28,7 @@ CORE.Run jsr CORE.TskMgrRun bmi .2 Ignore & Discard any timer event - jsr RUN.DumpEvent + jsr CORE.DumpEvent .2 jsr CORE.DestroyEvent @@ -85,7 +85,7 @@ CORE.Run jsr CORE.TskMgrRun jsr pDevJmp jmp CORE.Run *-------------------------------------- -RUN.DumpEvent ldy #S.EVT-1 +CORE.DumpEvent ldy #S.EVT-1 .1 >PUSHB (pEvent),y dey diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 96de1f65..1ca596b9 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -14,7 +14,7 @@ AUTO 6 K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string... .1 >STYA ZPPtr2 - + >SYSCALL PrintF.YA stz K.ExpandStr.Len init Expanded String len=0 stz K.ExpandStr.bFound No var found yet @@ -22,7 +22,7 @@ K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string... ldy #0 -.10 stz K.ExpandStr.Name +.10 stz K.ExpandStr.VarLen stz K.ExpandStr.bInVar .11 lda (ZPPtr2),y End of CSTR? @@ -60,7 +60,7 @@ K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string... .3 cmp #'{' we are in var, "{" after "$"? bne .31 - ldx K.ExpandStr.Name No char in var yet ? + ldx K.ExpandStr.VarLen No char in var yet ? beq .11 normal, "${" syntax is ok,skip bne .5 not allowed char in varname, end of var @@ -71,35 +71,37 @@ K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string... jsr K.ExpandStrValidChar bcc .32 yes, add to varname - ldx K.ExpandStr.Name + ldx K.ExpandStr.VarLen bne .5 varname has already chars...end of var inx must be a $? or ?x.....go expand - stx K.ExpandStr.Name - sta K.ExpandStr.Name+1 + stx K.ExpandStr.VarLen + sta K.ExpandStr.VarName bra .51 go Expand.... -.32 ldx K.ExpandStr.Name - inx +.32 ldx K.ExpandStr.VarLen cpx #16 beq .11 varname longer than 15....ignore - sta K.ExpandStr.Name,x - stx K.ExpandStr.Name + sta K.ExpandStr.VarName,x + inx + stx K.ExpandStr.VarLen bra .11 .5 dey last char was invalid...move back -.50 ldx K.ExpandStr.Name +.50 ldx K.ExpandStr.VarLen beq .52 var name is empty...start over -.51 phy save current index +.51 stz K.ExpandStr.VarName,x + phy save current index jsr K.ExpandStrGetValue ply restore index in string... .52 jmp .10 reset start flag and continue -.8 ldx K.ExpandStr.Name end of PSTR,are we in a var? +.8 ldx K.ExpandStr.VarLen end of STR,are we in a var? beq .80 no...exit... + stz K.ExpandStr.VarName,x jsr K.ExpandStrGetValue yes, expand and add to STR .80 lda K.ExpandStr.hPStr working from our temp string ? @@ -115,7 +117,12 @@ K.ExpandStr.YA stz K.ExpandStr.hPStr Reset Intermediate string... beq .82 jmp .1 Yes, start over with hPStr -.82 ldx K.ExpandStr.hPStr +.82 phy + pha + >SYSCALL PrintF.YA + pla + ply + ldx K.ExpandStr.hPStr * or exit with Y,A from K.NewPStrYA .9 rts @@ -143,7 +150,7 @@ K.ExpandStrGetValue jsr ENV.ExpandSysVar bcc .9 - >LDYAI K.ExpandStr.Name + >LDYAI K.ExpandStr.VarName jsr K.GetEnv.YA bcs .9 @@ -158,57 +165,39 @@ K.ExpandStr.bNoExp .BS 1 K.ExpandStr.bInVar .BS 1 K.ExpandStr.bFound .BS 1 K.ExpandStr.hPStr .BS 1 -K.ExpandStr.Name .BS 16 +K.ExpandStr.VarLen .BS 1 +K.ExpandStr.VarName .BS 16 */-------------------------------------- * # PutEnv.YA * ## In: -* Y,A = PTR to String NAME=VALUE (PSTR) +* Y,A = PTR to String NAME=VALUE (C-String) * ## Out: *\-------------------------------------- K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE - lda (ZPPtr1) - beq .9 - sta K.Buf256 - tay - -.1 lda (ZPPtr1),y copy PSTR to K.Buf256 - sta K.Buf256,y - dey - bne .1 - ldy #0 -.2 iny - cpy K.Buf256 last char ? - beq .9 no "=" found - - lda K.Buf256,y - cmp #'=' - bne .2 - - cpy #1 String like "=value" ? +.1 lda (ZPPtr1),y copy STR to K.Buf256 beq .9 + cmp #'=' + beq .2 + sta K.Buf256,y + iny + bne .1 - cpy K.Buf256 last char ? - beq .9 we have "VAR=" +.2 lda #0 + sta K.Buf256,y - lda K.Buf256 get actual string len - - sty K.Buf256 set length of VAR string - dec K.Buf256 ...without "=" - - clc Substract VAR len+1 from whole len to get - sbc K.Buf256 VALUE len - sta K.Buf256,y save it at "=" POS - - stz ZPPtr1 #K.Buf256 - sty ZPPtr2 - - lda /K.Buf256 - sta ZPPtr1+1 + tya + clc + adc ZPPtr1 + sta ZPPtr2 + lda ZPPtr2+1 + adc #0 sta ZPPtr2+1 + >LDYAI K.Buf256 + >STYA ZPPtr1 bra K.SetEnvPtr1Ptr2 .9 sec @@ -330,19 +319,18 @@ S.UnsetEnvPtr1 jsr ENV.FindVarPtr1 *-------------------------------------- * ENV.ExpandSysVar * In: -* K.ExpandStr.Name +* K.ExpandStr.VarName * Out: * CC: Found * Append VALUE to K.Buf256 * CS: Not Found *-------------------------------------- ENV.ExpandSysVar - ldx K.ExpandStr.Name + ldx K.ExpandStr.VarLen cpx #1 is name 1 char? bne .9 - ldy #1 - lda K.ExpandStr.Name+1 + lda K.ExpandStr.VarName cmp #'0'-1 $0...$9 ?? bcc .1 cmp #'9'+1 @@ -464,26 +452,27 @@ ENV.SysVarsExit2 ENV.FindVarPtr1 jsr ENV.InitEnvPtr3 Store ENV bcs .99 - lda (ZPPtr3) +.1 lda (ZPPtr3) beq .9 end of ENV -.1 cmp (ZPPtr1) Same len as NAME? - bne .3 - - tay + ldy #0 .2 lda (ZPPtr1),y cmp (ZPPtr3),y bne .3 - dey + + ora #0 + beq .8 + + iny bne .2 - clc + +.8 clc rts .3 jsr ENV.NextEnvPtr3 Skip NAME jsr ENV.NextEnvPtr3 Skip VALUE - lda (ZPPtr3) - bne .1 + bra .1 .9 sec .99 rts @@ -493,31 +482,25 @@ ENV.FindVarPtr1 jsr ENV.InitEnvPtr3 Store ENV * ZPPtr3 -> ENV.NAME to Discard *-------------------------------------- ENV.DiscardVarPtr3 - lda ZPPtr3 Discard current NAME & VALUE definition - sec ZPPtr3 -> NAME - adc (ZPPtr3) add NAME+1 to ZPPtr3 - sta ZPPtr4 store it in ZPPtr4 - lda #0 - adc ZPPtr3+1 - sta ZPPtr4+1 - - lda ZPPtr4 add VALUE+1 to ZPPtr4 - sec - adc (ZPPtr4) - sta ZPPtr4 - bcc .1 - inc ZPPtr4+1 - -.1 ldy #0 + >LDYA ZPPtr3 save actual Ptr + >STYA ZPPtr4 + jsr ENV.NextEnvPtr3 Skip current NAME.... + jsr ENV.NextEnvPtr3 Skip current VALUE.... + + ldy #0 -.2 lda (ZPPtr4),y Move back tail... - sta (ZPPtr3),y - beq .8 ...until we move ending 0 +.1 lda (ZPPtr3),y Move back CSTRs... +.2 sta (ZPPtr4),y + beq .2 0 ended.... iny - bne .2 - inc ZPPtr3+1 - inc ZPPtr4+1 - bra .2 + bne .1 + inc ZPPtr3 + inc ZPPtr4 + bra .1 + +.3 iny + lda (ZPPtr3),y + bne .3 Until array ending 0 .8 rts *-------------------------------------- @@ -527,30 +510,37 @@ ENV.InitEnvPtr3 ldy #S.PS.hENV >STYA ZPPtr3 Store ENV rts *-------------------------------------- -ENV.NextEnvPtr3 lda ZPPtr3 +ENV.NextEnvPtr3 ldy #0 + +.1 lda (ZPPtr3),y + beq .2 + iny + bne .1 + +.2 tya sec - adc (ZPPtr3) + adc ZPPtr3 sta ZPPtr3 bcc .8 inc ZPPtr3+1 .8 rts *-------------------------------------- ENV.AppendPtr3ToBuf - ldy #0 - ldx K.Buf256 + ldx #$ff -.1 iny - lda (ZPPtr3),y - inx - beq .9 - sta K.Buf256,x - - tya - cmp (ZPPtr3) last char? +.1 inx + lda K.Buf256,x bne .1 - stx K.Buf256 -.9 rts + ldy #0 + +.2 lda (ZPPtr3),y + sta K.Buf256,x + bne .2 + + inx + stz K.Buf256,x + rts *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.ENV diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index fc17a367..5ec5082d 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -161,8 +161,6 @@ Kernel.Init3 sta SETALTZP >DEBUGOA - bit RRAMWRAMBNK2 - bit RRAMWRAMBNK2 jmp CORE.Run .9 >PUSHA @@ -846,10 +844,10 @@ MSG.KCREAD.OK >CSTR "OK\n" MSG.KCREAD.KO >CSTR "\nError While Reading Kernel Config File, Using Default.\n" *-------------------------------------- DEV.SYS >PSTR "SYS" -I.ENV.A2osX >PSTR "A2OSX" -I.ENV.PATH >PSTR "PATH=${A2OSX}SBIN/;${A2OSX}BIN/" -I.ENV.LIB >PSTR "LIB=${A2OSX}LIB/" -I.ENV.DRV >PSTR "DRV=${A2OSX}DRV/" +I.ENV.A2osX >CSTR "A2OSX" +I.ENV.PATH >CSTR "PATH=${A2OSX}SBIN/;${A2OSX}BIN/" +I.ENV.LIB >CSTR "LIB=${A2OSX}LIB/" +I.ENV.DRV >CSTR "DRV=${A2OSX}DRV/" STARTUP.CMDLINE >CSTR "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP" *-------------------------------------- MLIOPEN00 .DA #3 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 6c243b61..f04b8635 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -73,7 +73,7 @@ K.SYSCALL.JMP .DA 0 $00 *-------------------------------------- * Bank 2 *-------------------------------------- - .DA 0 $70 + .DA K.StrLen.YA $70 .DA K.StrCpy .DA K.StrCat .DA K.StrMatch diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index fa1e4fd8..b3daf690 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -491,7 +491,7 @@ K.GetMemStat.YA >STYA ZPMemMgrDstPtr rts *-------------------------------------- * In: -* Y,A = BINPATH (PSTR) +* Y,A = BINPATH (C-String) * Out: * Y,A = ZPMemMgrSPtr = PTR to S.MEM * X = hMem @@ -500,7 +500,7 @@ MEM.GetMemByNameYA ldx MemMgr.LastSlot beq .9 - >STYA ZPMemMgrSrcPtr SAVE BINPATH + >STYA .2+1 >LDYAI MemMgr.Table >STYA ZPMemMgrTmp1 @@ -514,18 +514,15 @@ MEM.GetMemByNameYA beq .6 jsr K.GetMemPtr.A get pathname - >STYA ZPMemMgrDstPtr - - lda (ZPMemMgrSrcPtr) - cmp (ZPMemMgrDstPtr) - bne .6 + >STYA .3+1 - tay + ldy #0 -.2 lda (ZPMemMgrSrcPtr),y - cmp (ZPMemMgrDstPtr),y +.2 lda $ffff,y +.3 cmp $ffff,y bne .6 - dey + iny + ora #0 bne .2 >LDYA ZPMemMgrTmp1 diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 49b11695..a41ce0e5 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -4,52 +4,6 @@ LOMEM $A00 INC 1 AUTO 6 */-------------------------------------- -* # ExecProcessNewEnv.YA -* # ExecProcess.YA (Blocking Parent PID) -* # CreateProcessNewEnv.YA -* # CreateProcess.YA (Non Blocking) -* ## In: -* Y,A = PTR To Cmd Line -* ## Out: -* A = Child PSID -*\-------------------------------------- -K.ExecProcessNewEnv.YA - ldx #S.PS.F.ENV+S.PS.F.HOLD - .HS 2C bit abs -K.ExecProcess.YA - ldx #S.PS.F.HOLD - .HS 2C bit abs -K.CreateProcessNewEnv.YA - ldx #S.PS.F.ENV - .HS 2C bit abs -K.CreateProcess.YA - ldx #0 - stx K.CreateProcess.Flags - >STYA K.CreateProcess.CmdLine - - jsr PS.CreateChild - bcs .9 - - sta .8+1 - - >DEBUG - - jsr PS.Init - bcc .8 - - pha save error code - lda .8+1 - jsr PS.Free.A - pla get back error code - sec - rts - -.8 lda #$ff self modified -.9 rts -*-------------------------------------- -K.CreateProcess.Flags .BS 1 -K.CreateProcess.CmdLine .BS 2 -*/-------------------------------------- * # GetPSByID.A * ## In : * A = PID @@ -114,6 +68,68 @@ K.Sleep pla get PC LO sta (pPs) clc No error, rts back to Kernel +*/-------------------------------------- +* # ExecProcessNewEnv.YA +* # ExecProcess.YA (Blocking Parent PID) +* # CreateProcessNewEnv.YA +* # CreateProcess.YA (Non Blocking) +* ## In: +* Y,A = PTR To Cmd Line +* ## Out: +* A = Child PSID +*\-------------------------------------- +K.ExecProcessNewEnv.YA + ldx #S.PS.F.ENV+S.PS.F.HOLD + .HS 2C bit abs +K.ExecProcess.YA + ldx #S.PS.F.HOLD + .HS 2C bit abs +K.CreateProcessNewEnv.YA + ldx #S.PS.F.ENV + .HS 2C bit abs +K.CreateProcess.YA + ldx #0 + stx K.CreateProcess.Flags + >STYA K.CreateProcess.CmdLine + + >DEBUG + >SYSCALL PrintF.YA + >DEBUG + + jsr PS.CreateChild + bcs .9 + + sta .8+1 + + >LDYA K.CreateProcess.CmdLine + jsr PS.CmdLine2Args + bcs .9 + + phy save PTR to Args[0]... + pha + + txa + ldy #S.PS.hARGS + sta (ZPPtr3),y + + pla Restore PTR... + ply + + jsr PS.Init + bcc .8 + + pha save error code + lda .8+1 + jsr PS.Free.A + pla get back error code + sec + rts + +.8 lda #$ff self modified +.9 rts +*-------------------------------------- +K.CreateProcess.Flags .BS 1 +K.CreateProcess.CmdLine .BS 2 *-------------------------------------- * PS.CreateChild * in : @@ -234,20 +250,76 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS clc Exit with A=PSID .9 rts *-------------------------------------- -PS.Init >LDYA K.CreateProcess.CmdLine - jsr PS.CmdLine2Args +PS.CmdLine2Args >STYA ZPPtr1 + + ldy #0 + +.1 lda (ZPPtr1),y compute strlen in Y,X + beq .2 + cmp #'"' skip "" in computation.... + beq .1 + iny + bne .1 max 255 + +.2 tya +2 for ending 0 for last string, and endig 0 for array + clc + adc #2 + tay + lda #0 + bcc .3 + inc + +.3 jsr K.GetMem.YA bcs .9 - - phy save PTR to Args[0]... - pha - - txa - ldy #S.PS.hCMDLINE - sta (ZPPtr3),y + phx save hMem + phy save PTR.LO + pha save PTR.HI + >STYA ZPPtr2 - pla Restore PTR... - ply - jsr BIN.Load.YA Y,A=filename full path + stz PS.CmdLine2Args.bInQuote + + ldy #0 + ldx #0 Arg Count + +.4 lda (ZPPtr1),y + beq .8 + + cmp #'"' found a quote ? + bne .5 + lda PS.CmdLine2Args.bInQuote + eor #$ff + sta PS.CmdLine2Args.bInQuote + bra .71 + +.5 cmp #' ' + bne .70 + + bit PS.CmdLine2Args.bInQuote + bmi .70 + + inx Found one arg !!! + lda #0 + +.70 sta (ZPPtr2) yes, set this token len +.71 inc ZPPtr2 + bne .72 + inc ZPPtr2+1 +.72 iny + bne .4 + +.8 lda #0 + sta (ZPPtr2) set Array Ending 0 + + pla get back PTR.HI + ply get back PTR.LO + plx get back hMem + clc +.9 rts + +PS.CmdLine2Args.bInQuote + .BS 1 +*-------------------------------------- +PS.Init jsr BIN.Load.YA Y,A=filename full path bcs .9 >STYA ZPPtr4 save PTR to Code Segment @@ -279,7 +351,7 @@ PS.Init >LDYA K.CreateProcess.CmdLine dey ora (ZPPtr4),y - beq * DS.SIZE=0!!!! + beq * SS.SIZE=0!!!! lda (ZPPtr4),y tay @@ -300,7 +372,7 @@ PS.Init >LDYA K.CreateProcess.CmdLine *-------------------------------------- PS.Free.A jsr K.GetPSByID.A PS in ZPPtr1 - ldy #S.PS.hCMDLINE + ldy #S.PS.hARGS jsr PS.Free.A.PsY lda (ZPPtr1) get S.PS.F @@ -383,74 +455,6 @@ PS.DupEnv.A jsr K.GetMemPtr.A clc .9 rts *-------------------------------------- -PS.CmdLine2Args >STYA ZPPtr1 - - ldy #0 - -.1 lda (ZPPtr1),y compute strlen in Y,X - beq .2 - cmp #'"' skip "" in computation.... - beq .1 - iny - bne .1 max 255 - -.2 tya +2 for ending 0 for last string, and endig 0 for array - clc - adc #2 - tay - lda #0 - bcc .3 - inc - -.3 jsr K.GetMem.YA - bcs .9 - phx save hMem - phy save PTR.LO - pha save PTR.HI - >STYA ZPPtr2 - - stz PS.CmdLine2Args.bInQuote - - ldy #0 - ldx #0 Arg Count - -.4 lda (ZPPtr1),y - beq .8 - - cmp #'"' found a quote ? - bne .5 - lda PS.CmdLine2Args.bInQuote - eor #$ff - sta PS.CmdLine2Args.bInQuote - bra .71 - -.5 cmp #' ' - bne .70 - - bit PS.CmdLine2Args.bInQuote - bmi .70 - - inx Found one arg !!! - lda #0 - -.70 sta (ZPPtr2) yes, set this token len -.71 inc ZPPtr2 - bne .72 - inc ZPPtr2+1 -.72 iny - bne .4 - -.8 lda #0 - sta (ZPPtr2) set Array Ending 0 - - pla get back PTR.HI - ply get back PTR.LO - plx get back hMem - clc -.9 rts - -PS.CmdLine2Args.bInQuote -*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.PS LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 964c620e..725a34e2 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -43,6 +43,7 @@ A2osX.D2 .PH $D000 .INB /A2OSX.SRC/SYS/KERNEL.S.PS .INB /A2OSX.SRC/SYS/KERNEL.S.ARG .INB /A2OSX.SRC/SYS/KERNEL.S.ENV + .INB /A2OSX.SRC/SYS/KERNEL.S.BIN .EP A2osX.E0 .PH $E000 .INB /A2OSX.SRC/SYS/KERNEL.S.JMP @@ -50,7 +51,6 @@ A2osX.E0 .PH $E000 .INB /A2OSX.SRC/SYS/KERNEL.S.DAT .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ .INB /A2OSX.SRC/SYS/KERNEL.S.MEM - .INB /A2OSX.SRC/SYS/KERNEL.S.BIN .INB /A2OSX.SRC/SYS/KERNEL.S.D01 .EP A2osX.E0.E .EQ *