diff --git a/.A2osX Issue List.xlsx b/.A2osX Issue List.xlsx index d22b6fb1..d39070c7 100644 Binary files a/.A2osX Issue List.xlsx and b/.A2osX Issue List.xlsx differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index f5b35f19..52dc0f93 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index 5d859bec..159d37cc 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -28,7 +28,7 @@ CS.START cld .DA #0 .DA CS.END-CS.START Code Size (without Constants) .DA DS.END-DS.START Data SegmentSize - .DA #16 Stack Size + .DA #32 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- @@ -47,7 +47,36 @@ L.MSG3 .DA MSG3 CS.INIT clc rts *-------------------------------------- -CS.RUN >LDYA L.MSG0 +CS.RUN lda #1 + >SYSCALL ArgV + bcs .10 + + >SYSCALL atoi + bcs .90 + + tax + bne .90 + + tya + +* ldx #0 + +.11 cmp PS.Table.PID,x + beq .12 + inx + cpx #K.PS.MAX + bne .11 + lda #E.NSP +* sec + rts + +.12 jsr CS.RUN.DUMP + bcs .9 + lda #0 + sec + rts + +.10 >LDYA L.MSG0 >SYSCALL puts >LDA.G PS.Index @@ -56,15 +85,26 @@ CS.RUN >LDYA L.MSG0 lda PS.Table.PID,x beq .7 - lda PS.Table.hPS,x + jsr CS.RUN.DUMP + + >SLEEP + +.7 >INC.G PS.Index + cmp #K.PS.MAX + bne .1 + +.8 lda #0 tell Kernel that all done ok, but + sec we do not want to stay in memory +.9 rts + +.90 lda #E.SYN + sec + rts +*-------------------------------------- +CS.RUN.DUMP lda PS.Table.hPS,x >SYSCALL GetMemPtr >STYA ZPPSPtr - ldy #S.PS.hARGV - lda (ZPPSPtr),y - >SYSCALL GetMemPtr - >STYA ZPArgV - ldy #S.PS.PPID lda (ZPPSPtr),y >PUSHA Parent PID @@ -86,23 +126,14 @@ CS.RUN >LDYA L.MSG0 ldy #S.PS.PID lda (ZPPSPtr),y >PUSHA - >PUSHBI 8 + >PUSHBI 6 >LDYA L.MSG1 >SYSCALL printf bcs .9 - jsr CS.RUN.PrintArgs - bcs .9 + jmp CS.RUN.PrintArgs - >SLEEP - -.7 >INC.G PS.Index - cmp #K.PS.MAX - bne .1 - -.8 lda #0 tell Kernel that all done ok, but - sec we do not want to stay in memory -.9 rts +.9 rts *-------------------------------------- CS.RUN.DecodeFlags lda (ZPPSPtr) Get flags @@ -124,9 +155,14 @@ CS.RUN.DecodeFlags rts *-------------------------------------- CS.RUN.PrintArgs + ldy #S.PS.hARGV + lda (ZPPSPtr),y + >SYSCALL GetMemPtr + >STYA ZPArgV + .1 lda (ZPArgV) beq .8 - + >PUSHW ZPArgV >PUSHBI 2 >LDYA L.MSG2 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 34f5e882..293a48f5 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -3,7 +3,7 @@ PREFIX AUTO 4,1 *-------------------------------------- K.VER .EQ $5C00 92.0 -K.ENV.SIZE .EQ 512 +K.ENV.SIZE .EQ 256 K.PIPE.SIZE .EQ 256 *-------------------------------------- K.MEM.ALIGN .EQ 16 @@ -491,7 +491,7 @@ S.PS.CPID .EQ 3 S.PS.hCS .EQ 4 S.PS.hDS .EQ 5 S.PS.hSS .EQ 6 -S.PS.UID .EQ 7 +S.PS.ENVPAGECNT .EQ 7 S.PS.hENV .EQ 8 S.PS.hPREFIX .EQ 9 S.PS.hStdIn .EQ 10 @@ -501,7 +501,7 @@ S.PS.RC .EQ 13 S.PS.ARGC .EQ 14 S.PS.hARGV .EQ 15 -* .EQ 16 +S.PS.UID .EQ 16 S.PS.A .EQ 17 S.PS.X .EQ 18 diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 31bca823..2427034d 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -180,16 +180,16 @@ ENV.Search.DRV ldx #2 .HS 2C BIT ABS ENV.Search.PATH ldx #4 - >STYA ZPPtr1 + >STYA ZPPtr2 >LDYA ENV.VARS,x - jsr ENV.FindVarP1 get value for Search Path + jsr K.GetEnv get value for Search Path bcs K.FileSearch.RTS >STYA ENV.SearchPath - >LDYA ZPPtr1 + >LDYA ZPPtr2 ENV.Search.YA >STYA .4+1 @@ -306,7 +306,7 @@ K.SetEnv jsr MEM.SPtr1PPtr2 K.SetEnv.I jsr K.UnsetEnv.I - jsr ENV.InitEnvP3 ZPPtr3 -> Env +.1 jsr ENV.InitEnvP3 ZPPtr3 -> Env ldy #0 ldx #0 @@ -356,20 +356,37 @@ K.SetEnv.I jsr K.UnsetEnv.I sec adc ZPPtr4 tax - bcc .21 + bcc .22 inc ZPPtr4+1 -.21 cpx #K.ENV.SIZE - lda ZPPtr4+1 - sbc /K.ENV.SIZE - bcs .99 + ldy #S.PS.ENVPAGECNT + lda (pPs),y + cmp ZPPtr4+1 + bcs .22 env is large enough + + jsr ENV.Dup + bcs .9 - ldy #$ff + pha -.22 iny + ldy #S.PS.hENV + lda (pPs),y + jsr K.Freemem + + pla + ldy #S.PS.hENV + sta (pPs),y + txa + dey S.PS.ENVPAGECNT + sta (pPs),y + bra .1 Start over + +.22 ldy #$ff + +.23 iny lda (ZPPtr1),y sta (ZPPtr3),y - bne .22 + bne .23 jsr ENV.NextEnvP3Y @@ -384,11 +401,7 @@ K.SetEnv.I jsr K.UnsetEnv.I sta (ZPPtr3),y don't forget array ending 0 clc - rts - -.99 lda #E.ENVF -* sec - rts +.9 rts */-------------------------------------- * # GetEnv * searches the environment list to find the environment variable name, @@ -728,6 +741,52 @@ ENV.AddAToBuf ldx ENV.BufLen inc ENV.BufLen rts *-------------------------------------- +* ENV.Dup +* In: +* A = ENV hMem To Duplicate +* Out: +* A = hMem to new ENV +* X = Page Count +*-------------------------------------- +ENV.Dup ldy #S.PS.ENVPAGECNT + lda (pPs),y + ldy #0 + + jsr K.GetMem + bcs .9 + + >STYA .2+1 Target Buffer + phx save hMem + + jsr PS.SetMemOwner Set Ownership + + ldy #S.PS.hENV + lda (pPs),y + jsr K.GetMemPtr + >STYA .1+1 + + ldy #S.PS.ENVPAGECNT + lda (pPs),y + pha + + tax + ldy #0 + +.1 lda $ffff,y SELF MODIFIED +.2 sta $ffff,y SELF MODIFIED + iny + bne .1 + inc .1+2 + inc .2+2 + dex + bne .1 + + plx Page Count + pla hMem + + clc +.9 rts +*-------------------------------------- ENV.VARS .DA .1 .DA .2 .DA .3 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index efaae82c..d5e3fe6c 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -990,13 +990,23 @@ TskMgrInit >LDYAI MSG.TSK >SYSCALL puts >LDYAI K.ENV.SIZE get a buffer for ENV - jsr K.GetMem0 make sure blank!! + jsr K.GetMem bcs .9 - txa - ldy #S.PS.hENV + >STYA ZPPtr1 + + ldy #S.PS.ENVPAGECNT + lda /K.ENV.SIZE sta (pPs),y + txa +* ldy #S.PS.hENV + iny + sta (pPs),y + + lda #0 + sta (ZPPtr1) make sure blank!! + >LDYAI K.Buf256 >STYA K.MLI.PARAMS+1 >MLICALL MLIGETPREFIX diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index dd89d3e7..c59db713 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -90,8 +90,6 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem * in : * out : * A = PSID -* we cannot use ZPPtrs1 & 2 -* because of calling K.StrDup & PS.DupEnv *-------------------------------------- PS.CreateChild ldx CORE.PSCount beq .3 @@ -161,18 +159,23 @@ PS.CreateChild ldx CORE.PSCount sta (PS.NewPSPtr) Mark this PS with DUPENV flag - ldy #S.PS.hENV dup hENV from parent PS - lda (pPs),y - jsr PS.DupEnv + jsr ENV.Dup dup hENV from parent PS bcs .9 - - ldy #S.PS.hENV - bra .8 - -.6 ldy #S.PS.hENV reuse hENV from parent PS - lda (pPs),y + ldy #S.PS.hENV + + bra .8 A = hMem, X = PageCnt + +.6 ldy #S.PS.ENVPAGECNT reuse hENV/pageCnt from parent PS + lda (pPs),y + tax + iny + lda (pPs),y + .8 sta (PS.NewPSPtr),y + txa + dey + sta (PS.NewPSPtr),y ldy #S.PS.hStdIn @@ -416,33 +419,6 @@ PS.LoadGetHeader PS.Load.ROOT .AZ "ROOT" PS.Load.HEADER .AZ "#!/" *-------------------------------------- -* PS.DupEnv -* In: -* A = ENV hMem To Duplicate -* Out: -* A = hMem to new ENV -* X = Count -*-------------------------------------- -PS.DupEnv jsr K.GetMemPtr - >STYA ZPPtr1 - - >LDYAI K.ENV.SIZE - - jsr K.GetMem - bcs .9 - - >STYA ZPPtr2 Target Buffer - phx save hMem - - jsr PS.SetMemOwner Set Ownership - - jsr PS.AddPtr1ToStrVUntil0 - - pla hMem - - clc -.9 rts -*-------------------------------------- * K.Buf256= /.../SHELL, K.IOBuf=/.../SCRIPT * - or - * K.Buf256=/.../BINFILE,K.IOBuf=0 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 3d520131..ede41d3b 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -56,7 +56,6 @@ A2osX.D2 .PH $D000 .INB USR/SRC/SYS/KERNEL.S.PS .INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.ENV - .INB USR/SRC/SYS/KERNEL.S.MATH .EP A2osX.E0 .PH $E000 .INB USR/SRC/SYS/KERNEL.S.JMP @@ -67,6 +66,7 @@ A2osX.E0 .PH $E000 .INB USR/SRC/SYS/KERNEL.S.IO .INB USR/SRC/SYS/KERNEL.S.PFT ********* TMP ***** go to A2osX.D2 + .INB USR/SRC/SYS/KERNEL.S.MATH .LIST ON DevMgr.FreeMem .EQ * .LIST OFF