From d2580cdf5f3feac575178ff3c327a05209e0117d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 24 Jan 2019 13:53:29 +0000 Subject: [PATCH] Kernel 0.92 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/PS.S.txt | 8 +- INC/A2osX.I.txt | 7 +- SYS/KERNEL.S.CORE.txt | 238 ++++++++++++++++++++++----------------- SYS/KERNEL.S.GP.txt | 14 +-- SYS/KERNEL.S.INIT.txt | 7 +- SYS/KERNEL.S.IRQ.txt | 12 +- SYS/KERNEL.S.PS.txt | 8 +- 8 files changed, 166 insertions(+), 128 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 8c2021ae441dc701d720bb00e821fbc988d79b5a..8889f068b29e025dd0d0bfbdf313a3230f1ca0f2 100644 GIT binary patch delta 46378 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.G PS.Index -.1 tax +.1 tax + beq .2 PS0 + lda PS.Table.PID,x beq .7 - jsr CS.RUN.DUMP +.2 jsr CS.RUN.DUMP >SLEEP @@ -157,6 +159,8 @@ CS.RUN.DecodeFlags CS.RUN.PrintArgs ldy #S.PS.hARGV lda (ZPPSPtr),y + beq .8 NO ARGV in PS0 + >SYSCALL GetMemPtr >STYA ZPArgV diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 293a48f5..9ba20127 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -26,9 +26,14 @@ ZPLIB .EQ $40 32 bytes *-------------------------------------- * PS Context : 48 bytes MAX *-------------------------------------- +CORE.EvtIndex .EQ $D0 +CORE.EvtCount .EQ $D1 +CORE.PSIndex .EQ $D2 +CORE.PSCount .EQ $D3 + pEvent .EQ $D4 pPs .EQ $D6 - +*-------------------------------------- pCode .EQ $D8 pData .EQ $DA pStack .EQ $DC diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 719b51e0..3ea1ce1f 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -4,7 +4,7 @@ AUTO 4,1 *-------------------------------------- CORE.Run stz CORE.PSIndex - ldx #0 + bra .8 Skip PS0 .1 lda PS.Table.hPS,x beq .8 @@ -30,48 +30,28 @@ CORE.Run stz CORE.PSIndex .3 jsr CORE.PSExec INIT/RUN/QUIT/RESUME dec IRQ.InKernel - bcc .61 Error ? + bcc .4 INIT/RUN Exit ? -.5 tax Yes, From INIT or RUN,save RC - - ldy #S.PS.PPID Notify Parent Process for exit code... - lda (pPs),y - beq .6 no parent process + jsr CORE.UpdateParentPS - jsr CORE.GetPSByID X unmodified - bcs .6 parent is dead.....skipping... - - >STYA ZPPtr1 - - lda (ZPPtr1) Parent PS is HOLD? - bit #S.PS.F.HOLD - beq .6 no... - - eor #S.PS.F.HOLD yes, release hold... - sta (ZPPtr1) - - txa ...probably waiting for this PS to terminate.... - ldy #S.PS.RC give it RC - sta (ZPPtr1),y - -.6 lda (pPs) + lda (pPs) and #$3F $ff^S.PS.F.INIT+S.PS.F.RUN ora #S.PS.F.QUIT sta (pPs) bra .3 try executing QUIT now... -.61 lda (pPs) +.4 lda (pPs) bit #S.PS.F.SLEEP bne .7 bit #S.PS.F.INIT - beq .62 + beq .5 eor #S.PS.F.INIT+S.PS.F.RUN go from INIT to RUN sta (pPs) bra .7 -.62 bit #S.PS.F.QUIT +.5 bit #S.PS.F.QUIT beq .7 ldy #S.PS.PID @@ -93,8 +73,13 @@ CORE.Events jsr CORE.GetEvents jsr CORE.Dispatch bcc .4 CC=All Events Dispatched - jsr CORE.PSSelect0 - + lda PS.Table.PID Select PS0 + jsr K.GetMemPtr + >STYA pPs + + >LDYAI K.STACKTOP + >STYA pStack + lda #Evt.Table sta pEvent @@ -130,6 +115,69 @@ CORE.Events jsr CORE.GetEvents jsr CORE.ScrSel .8 jmp CORE.Run *-------------------------------------- +CORE.UpdateParentPS + tax save RC From INIT or RUN + + ldy #S.PS.PPID Notify Parent Process for exit code... + lda (pPs),y + beq .8 no parent process + + jsr CORE.GetPSByID X unmodified + bcs .8 parent is dead.....skipping... + + >STYA ZPPtr1 + + lda (ZPPtr1) Parent PS is HOLD? + bit #S.PS.F.HOLD + beq .8 no... + + ldy #S.PS.CPID + lda (ZPPtr1),y + dey #S.PS.PID + cmp (pPs),y + bne .8 Hold, but not waiting this PS + + txa waiting for this PS to terminate.... + ldy #S.PS.RC give it RC + sta (ZPPtr1),y + + lda (ZPPtr1) + eor #S.PS.F.HOLD release Parent PS HOLD... + sta (ZPPtr1) + + lda (pPs) + bit #S.PS.F.DUPENV + bne .8 + + ldy #S.PS.hENV no dup, check if updating Parent PS + + jsr .1 + + ldy #S.PS.hPREFIX +*-------------------------------------- +.1 lda (pPs),y hMEM... + cmp (ZPPtr1),y + beq .8 same, no update + + tax save new hMEM + lda #0 + sta (pPs),y reset + + lda (ZPPtr1),y get parent hMEM + phy + jsr K.freemem discard.... + ply + txa put new hMEM in parent + sta (ZPPtr1),y + cpy #S.PS.hENV + bne .8 + + dey #S.PS.ENVPAGECNT + lda (pPs),y + sta (ZPPtr1),y update page count + +.8 rts +*-------------------------------------- * CORE.GetEvents : * IN : * OUT : @@ -222,7 +270,7 @@ CORE.GetEvents lda #Evt.Table *-------------------------------------- CORE.Dispatch stz CORE.PSIndex - ldx #0 + bra .5 skip PS0 .1 lda PS.Table.hPS,x beq .5 @@ -288,70 +336,13 @@ CORE.Dispatch stz CORE.PSIndex .8 clc rts *-------------------------------------- -* CORE.PSFree -* In : A = PID to free -*-------------------------------------- -CORE.PSFree sta .10+1 Save PS ID - - jsr CORE.GetPSByID S.PS in ZPPtr1 - bcs .9 - >STYA ZPPtr1 - - ldy #S.PS.hSS - jsr .8 - - ldy #S.PS.hDS - jsr .8 - - ldy #S.PS.hCS - jsr .8 - - ldy #S.PS.hARGV - jsr .8 - - lda (ZPPtr1) get S.PS.F - and #S.PS.F.DUPENV do we have to discard duplicated env & prefix ? - beq .1 - - ldy #S.PS.hENV - jsr .8 - -.1 ldy #S.PS.hPREFIX - jsr .8 - -.10 lda #$ff Self Modified - - ldx #0 - -.2 cmp PS.Table.PID,x - beq .3 - inx - cpx CORE.PSCount - bne .2 - beq * - -.3 stz PS.Table.PID,x - lda PS.TABLE.hPS,x - stz PS.TABLE.hPS,x -.4 jmp K.FreeMem - -.8 lda (ZPPtr1),y - bne .4 -.9 rts -*-------------------------------------- * X unmodified *-------------------------------------- -CORE.GetPSByID tay - beq .8 - - jsr CORE.GetPS +CORE.GetPSByID jsr CORE.GetPS bcs CORE.GetPSByID.RTS lda PS.TABLE.hPS,y jmp K.GetMemPtr - -.8 lda CORE.hPS0 - jsr K.GetMemPtr CORE.GetPSByID.8 clc CORE.GetPSByID.RTS @@ -359,11 +350,15 @@ CORE.GetPSByID.RTS *-------------------------------------- * X,A unmodified *-------------------------------------- -CORE.GetPS ldy #0 +CORE.GetPS tay + beq CORE.GetPSByID.8 PS0 requested + + ldy #0 + bra .2 Skip PS0 .1 cmp PS.Table.PID,y beq CORE.GetPSByID.8 - iny +.2 iny cpy CORE.PSCount bne .1 @@ -423,14 +418,6 @@ CORE.DestroyEvent dec CORE.EvtCount .9 rts *-------------------------------------- -CORE.PSSelect0 lda CORE.hPS0 - jsr K.GetMemPtr - >STYA pPs - - >LDYAI K.STACKTOP - >STYA pStack - rts -*-------------------------------------- CORE.PSSelect ldy #S.PS.ZP+ZPBIN.SIZE-1 ldx #ZPBIN.SIZE-1 @@ -524,11 +511,56 @@ CORE.PSResume sei inc IRQ.InKernel rti *-------------------------------------- -DevMgr.Stat .DA DevMgr.FreeMem -DevMgr.Free .DA DevMgr.FreeMem - .DA DevMgr.HiMem -DevMgr.DevCnt .DA #0 -DevMgr.NodCnt .DA #0 +* CORE.PSFree +* In : A = PID to free +*-------------------------------------- +CORE.PSFree sta .10+1 Save PS ID + + jsr CORE.GetPSByID S.PS in ZPPtr1 + bcs .9 + >STYA ZPPtr1 + + ldy #S.PS.hSS + jsr .8 + + ldy #S.PS.hDS + jsr .8 + + ldy #S.PS.hCS + jsr .8 + + ldy #S.PS.hARGV + jsr .8 + + lda (ZPPtr1) get S.PS.F + and #S.PS.F.DUPENV do we have to discard duplicated env ? + beq .1 + + ldy #S.PS.hENV + jsr .8 + +.1 ldy #S.PS.hPREFIX + jsr .8 + +.10 lda #$ff Self Modified + + ldx #0 + +.2 cmp PS.Table.PID,x + beq .3 + inx + cpx CORE.PSCount + bne .2 + beq * + +.3 stz PS.Table.PID,x + lda PS.TABLE.hPS,x + stz PS.TABLE.hPS,x +.4 jmp K.FreeMem + +.8 lda (ZPPtr1),y + bne .4 +.9 rts *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.CORE diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 5dc43db8..bb595093 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -350,15 +350,13 @@ CORE.TickPer10t .BS 1 CORE.TickSec .BS 1 CORE.Tick10t .BS 1 CORE.CPUStatCnt .DA #100 -CORE.InKernelHits .BS 1 -CORE.InKernelStats .BS 1 -*-------------------------------------- -CORE.EvtIndex .BS 1 -CORE.EvtCount .BS 1 -CORE.PSIndex .BS 1 -CORE.PSCount .DA #0 CORE.LastPSID .DA #0 -CORE.hPS0 .BS 1 +*-------------------------------------- +DevMgr.Stat .DA DevMgr.FreeMem +DevMgr.Free .DA DevMgr.FreeMem + .DA DevMgr.HiMem +DevMgr.DevCnt .DA #0 +DevMgr.NodCnt .DA #0 *-------------------------------------- IRQ.Mode .BS 1 IRQ.SkipA2osX .BS 1 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index d5e3fe6c..26bd428e 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -115,8 +115,11 @@ Kernel.Init3 sta SETALTZP >LDYAI S.PS Select Process 0 (Kernel) jsr K.GetMem0 >STYA pPs - stx CORE.hPS0 + stx PS.Table.hPS + lda #1 + sta CORE.PSCount + >LDYAI K.STACKTOP >STYA pStack @@ -976,6 +979,8 @@ DevMgrInit.AddBDev EvtMgrInit >LDYAI MSG.EVT >SYSCALL puts + stz CORE.EvtCount + lda #$A5 sta A2osX.TIMER16 lda #$9B diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 18fd40b9..9caa339f 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -167,22 +167,18 @@ K.IrqH.Switch inc IRQ.Tick lda #100 sta CORE.CPUStatCnt - lda CORE.InKernelHits - stz CORE.InKernelHits - stz CORE.InKernelStats - ldx #K.PS.MAX-1 -.1 lda PS.Table.Hits-1,x - stz PS.Table.Hits-1,x - sta PS.Table.Stats-1,x +.1 lda PS.Table.Hits,x + stz PS.Table.Hits,x + sta PS.Table.Stats,x dex bpl .1 .2 lda IRQ.InKernel keep V flag set bpl .3 - inc CORE.InKernelHits + inc PS.Table.Hits .9 clv clc diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index c59db713..aa65f450 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -91,15 +91,13 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem * out : * A = PSID *-------------------------------------- -PS.CreateChild ldx CORE.PSCount - beq .3 - - ldx #0 +PS.CreateChild ldx #0 + bra .2 Skip PS0 .1 lda PS.Table.PID,x beq .4 Found an empty slot - inx +.2 inx cpx CORE.PSCount bne .1