From 24efef7d3b369a535368d47abbc7def763b82de4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 19 Sep 2017 17:34:01 +0200 Subject: [PATCH] Kernel 0.9.1 : Code reorganization & move to CSTR (CORE: PS Context switching) --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/A2osX.I.txt | 29 ++- README.md | 3 +- SBIN/GETTY.S.txt | 6 +- SYS/KERNEL.S.CORE.txt | 480 ++++++++++++++++++--------------------- SYS/KERNEL.S.ENV.txt | 75 +++--- SYS/KERNEL.S.INIT.txt | 25 +- SYS/KERNEL.S.MEM.txt | 3 +- SYS/KERNEL.S.PS.txt | 61 ++--- 10 files changed, 329 insertions(+), 353 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index de80f1f8faf15f36d8c9bb833ab5a89c0b1dcc39..7193274ed9dd3fb0663132373220a1f14ae0dea8 100644 GIT binary patch delta 16614 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%0A+2TX}>R~NF+TjYC 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 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 941528d7b063b158ba03ecb8e537c31a94b00bc1..ab02b74215be35db99ab67d7f00451e31b3aa1d0 100644 GIT binary patch delta 17541 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 delta 18284 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 P@W!JkJe@vNY2WaF+Qgy@ diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 844eda14..81e148df 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -19,17 +19,20 @@ ZPKERNEL .EQ $0 *-------------------------------------- ZPMEMMGR .EQ $8 *-------------------------------------- -pCode .EQ $10 -pData .EQ $12 -pLocal .EQ $14 -pStack .EQ $16 - -pDrv .EQ $18 -pPs .EQ $1A -pDev .EQ $1C -pEvent .EQ $1E +pDrv .EQ $10 +pDev .EQ $12 +pEvent .EQ $14 +pPs .EQ $16 *-------------------------------------- +* PS Context : 24 bytes +*-------------------------------------- +pCode .EQ $18 +pData .EQ $1A +pStack .EQ $1C +pLocal .EQ $1E + ZPBIN .EQ $20 +*-------------------------------------- ZPDRV .EQ $30 ZPLIB .EQ $40 32 bytes for TCPIP *-------------------------------------- @@ -58,6 +61,8 @@ K.MLI.PATH .EQ $03B0 64+1 -> $03D0 * Main/Aux $400 -> $7FF : Console Screen * Main/Aux $800 -> $BFF : System Screen *-------------------------------------- +PS.Table.PID .EQ $0C00 K.PS.MAX +PS.Table.hMem .EQ $0C00+K.PS.MAX K.Buf256 .EQ $0E00 Main *-------------------------------------- K.STACK .EQ $0F20 down to $0f00 @@ -73,8 +78,6 @@ 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=32*32=1k -*-------------------------------------- * MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes) *-------------------------------------- MemMgr.Table .EQ $1800 Slot 0 is Reserved @@ -460,8 +463,10 @@ S.PS.PC .EQ 14 S.PS.ARGC .EQ 16 S.PS.hARGS .EQ 17 + +S.PS.Context .EQ 24 24 Bytes * -S.PS .EQ 32 +S.PS .EQ 48 *-------------------------------------- * LIB Function Indexes *-------------------------------------- diff --git a/README.md b/README.md index 22585b78..25ada64e 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. ## SBIN,Daemons/Commands: | Name | Status | Comment | K.Ver | -| ---- | ------ | ------- | -----:| +| ---- | ------ | ------- | ------| | INSDRV | Working | | 0.9 | | GETTY | Working | | 0.9 | | LOGIN | In Progress | no auth using /etc/passd yet | 0.9 | @@ -126,6 +126,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | | | -P : "prompt message" | | TIME | Working | | | SET | Working | | +| SLEEP | Working | | | STARTPROC | Working | Used in A2osX.startup | ## Shell variables: diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index 5ffbbd0c..fe55e9ba 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -67,8 +67,7 @@ CS.INIT ldy #S.PS.ARGC txa - ldy #hBinName - sta (pData),y + >STA.G hBinName lda (pPs) ora #S.PS.F.EVENT Now accept events @@ -239,7 +238,6 @@ Wait.TimeOut sec .9 rts *-------------------------------------- CS.END -PRINT.DEBUG.CHAR .AS "0123456789ABCDEF" MSG.USAGE >CSTR "Usage : GETTY \r\n" MSG.TELNET.OPT * .DA #IAC,#WILL,#TELOPT.BINARY @@ -254,7 +252,7 @@ MSG.TELNET.OPT .DA #IAC,#SB,#TELOPT.TTYPE,#SB.SEND,#IAC,#SE .DA #0 MSG.GREETINGS >CSTR "\r\nA2osX-GeTTY\r\n" -TERM >PSTR "TERM" +TERM >CSTR "TERM" * \e[12h *-------------------------------------- .DUMMY diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index b8bda417..003736ec 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -6,117 +6,18 @@ AUTO 6 *-------------------------------------- SYS.BASL0 .EQ $800 *-------------------------------------- -CORE.Run jsr CORE.PSRun - stx A2osX.RANDOM16 - jsr CORE.GetEvents - txa - eor KBD - sta A2osX.RANDOM16+1 - bcs .4 CS=no event - - jsr CORE.DispatchEvents - bcc .4 CC=All Events Dispatched - - jsr CORE.PSSelect0 - - lda #EvtMgr.Table - sta pEvent +CORE.Run lda CORE.PSCount + sta CORE.Counter + beq CORE.Events -.1 lda (pEvent) - beq .3 +.1 ldx CORE.Counter - bmi .2 Ignore & Discard any timer event + lda PS.Table.PID-1,x + beq .7 - jsr CORE.DumpEvent - -.2 jsr CORE.DestroyEvent - -.3 lda pEvent - clc - adc #S.EVT - sta pEvent - lda EVTMGR.COUNT - bne .1 - -.4 lda A2osX.ASCREEN - cmp #2 is SYS active? - bne .6 - - ldx CORE.CPULOADI - lda CORE.CPULOADC,x - sta SYS.BASL0+38 - dex - bpl .5 - - ldx #3 - -.5 stx CORE.CPULOADI - -.6 bit OPENAPPLE - bpl CORE.Run - - lda KBD - - bpl CORE.Run - - cmp #"1" - bcc CORE.Run - cmp #"5" - bcs CORE.Run - - jsr CORE.ScreenSelect - bra CORE.Run -*-------------------------------------- -CORE.DumpEvent ldy #S.EVT-1 - -.1 >PUSHB (pEvent),y - dey - bpl .1 - - >LDYAI .2 - jmp K.PrintF.YA - -.2 >CSTR "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n" -*-------------------------------------- -CORE.ScreenSelect - sta KBDSTROBE - - and #$0F - cmp A2osX.ASCREEN Same as active screen...nothing to do - beq .8 - - tax - - lda A2osX.SCRNDEVS-1,x - beq .8 No device claimed this screen - - jsr K.GetDevByID.A x unmodified..... - bcs .8 ??? - - stx A2osX.ASCREEN - - >STYA pDev - - ldx #DEVMGR.CONTROL - jmp pDevJmp - -.8 rts -*-------------------------------------- -CORE.PSRun >LDYAI TskMgr.Table+S.PS skip PS 0 - >STYA pPs - - lda TskMgr.Count - sta TskMgr.Idx - -.1 dec TskMgr.Idx skip PS 0 - beq .8 - - lda (pPs) get S.PS.F - -* bit #S.PS.F.INUSE In use ? -* beq .7 - - bpl .7 + lda PS.Table.hMem-1,x + jsr K.GetMemPtr.A + >STYA pPS bit #S.PS.F.HOLD Waiting for Another Task to Terminate? beq .2 @@ -156,9 +57,9 @@ CORE.PSRun >LDYAI TskMgr.Table+S.PS skip PS 0 pha save RC ldy #S.PS.PPID Notify Parent Process for exit code... lda (pPs),y - jsr CORE.GetPSByID.A will set ZPPtr1 if success + jsr CORE.GetPSByID.A bcs .5 parent is dead.....skipping... - + >STYA ZPPtr1 lda (ZPPtr1) Parent PS is HOLD? bit #S.PS.F.HOLD beq .5 no... @@ -180,123 +81,70 @@ CORE.PSRun >LDYAI TskMgr.Table+S.PS skip PS 0 lda (pPs),y jsr CORE.PSFree.A -.7 lda pPs - clc - adc #S.PS - sta pPs - bcc .1 - inc pPs+1 - bcs .1 Always - -.8 clc - rts +.7 dec CORE.Counter + bne .1 *-------------------------------------- -CORE.GetPSByID.A - pha - >LDYAI TskMgr.Table - >STYA ZPPtr1 +CORE.Events stx A2osX.RANDOM16 - pla - beq .8 - sta .20+1 - ldx #0 + jsr CORE.GetEvents -.1 inx - lda ZPPtr1 - clc - adc #S.PS - sta ZPPtr1 - bcc .2 - inc ZPPtr1+1 + txa + eor KBD + sta A2osX.RANDOM16+1 + bcs .4 CS=no event -.2 lda (ZPPtr1) - bpl .3 + jsr CORE.DispatchEvents + bcc .4 CC=All Events Dispatched + + jsr CORE.PSSelect0 + + lda #EvtMgr.Table + sta pEvent - ldy #S.PS.PID - lda (ZPPtr1),y -.20 cmp #$ff Self Modified - beq .8 +.1 lda (pEvent) + beq .3 -.3 cpx TskMgr.Count + bmi .2 Ignore & Discard any timer event + + jsr CORE.DumpEvent + +.2 jsr CORE.DestroyEvent + +.3 lda pEvent + clc + adc #S.EVT + sta pEvent + lda EVTMGR.COUNT bne .1 -.9 lda #TSKMGR.ERRNSP - sec - rts - -.8 >LDYA ZPPtr1 - clc - rts -*-------------------------------------- -CORE.PSSelect0 >LDYAI TskMgr.Table Select PS0 - >STYA pPs - - >LDYA K.STACK - >STYA pStack - rts -*-------------------------------------- -CORE.PSSelect ldy #S.PS.hCS - lda (pPs),y +.4 lda A2osX.ASCREEN + cmp #2 is SYS active? + bne .6 - jsr K.GetMemPtr.A - >STYA pCode - - ldy #S.PS.hDS - lda (pPs),y - beq .1 - - jsr K.GetMemPtr.A - >STYA pData + ldx CORE.CPULoadI + lda CORE.CPULoadC,x + sta SYS.BASL0+38 + dex + bpl .5 -.1 ldy #S.PS.hSS - lda (pPs),y - jsr K.GetMemPtr.A - sta pStack+1 - - ldy #S.PS.SP - lda (pPs),y - sta pStack + ldx #3 - clc - rts -*-------------------------------------- -CORE.PSLeave rts -*-------------------------------------- -* PS.Free.A -* In : A = PID to free -*-------------------------------------- -CORE.PSFree.A jsr CORE.GetPSByID.A PS in ZPPtr1 +.5 stx CORE.CPULoadI - ldy #S.PS.hARGS - jsr .2 - - lda (ZPPtr1) get S.PS.F - and #S.PS.F.ENV do we have to discard duplicated env & prefix ? - beq .1 +.6 bit OPENAPPLE + bpl .8 - ldy #S.PS.hENV - jsr .2 + lda KBD - ldy #S.PS.hPREFIX - jsr .2 + bpl .8 -.1 ldy #S.PS.hSS - jsr .2 + cmp #"1" + bcc .8 + cmp #"5" + bcs .8 - ldy #S.PS.hDS - jsr .2 - - ldy #S.PS.hCS - jsr .2 - - lda #0 - sta (ZPPtr1) Mark TSKSLOT as free - clc -.9 rts - -.2 lda (ZPPtr1),y - beq .9 - jmp K.FreeMem.A + jsr CORE.ScreenSelect +.8 jmp CORE.Run *-------------------------------------- * CORE.GetEvents : * IN : @@ -369,21 +217,20 @@ CORE.GetEvents lda #EvtMgr.Table * CC: Event Cleared *-------------------------------------- CORE.DispatchEvents - >LDYAI TskMgr.Table+S.PS - >STYA pPs - - lda TskMgr.Count Number of actual processes... - sta TskMgr.Idx ...to give event list - -.1 dec TskMgr.Idx skip PS 0 + lda CORE.PSCount + sta CORE.Counter beq .9 - lda (pPs) get S.PS.F - bpl .4 +.1 ldx CORE.Counter -* bit #S.PS.F.INUSE In use ? -* beq .4 - + lda PS.Table.PID-1,x + beq .4 + + lda PS.Table.hMem-1,x + jsr K.GetMemPtr.A + >STYA pPS + + lda (pPs) get S.PS.F bit #S.PS.F.INIT+S.PS.F.HOLD Init or Waiting for Another Task to Terminate? bne .4 @@ -422,21 +269,105 @@ CORE.DispatchEvents sta pEvent bra .2 -.4 lda pPs go to next PS in PS list - clc - adc #S.PS - sta pPs - bcc .1 - inc pPs+1 - bne .1 always +.4 dec CORE.Counter + bne .1 + +.9 dec + rts .8 clc rts - -.9 sec - rts *-------------------------------------- -CORE.TskMgrQuit clc +CORE.DumpEvent ldy #S.EVT-1 + +.1 >PUSHB (pEvent),y + dey + bpl .1 + + >LDYAI .2 + jmp K.PrintF.YA + +.2 >CSTR "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n" +*-------------------------------------- +CORE.ScreenSelect + sta KBDSTROBE + + and #$0F + cmp A2osX.ASCREEN Same as active screen...nothing to do + beq .8 + + tax + + lda A2osX.SCRNDEVS-1,x + beq .8 No device claimed this screen + + jsr K.GetDevByID.A x unmodified..... + bcs .8 ??? + + stx A2osX.ASCREEN + + >STYA pDev + + ldx #DEVMGR.CONTROL + jmp pDevJmp + +.8 rts +*-------------------------------------- +CORE.GetPSByID.A + ldx CORE.PSCount + beq .9 + +.1 cmp PS.Table.PID-1,x + beq .2 + dex + bne .1 + +.9 lda #TSKMGR.ERRNSP + sec + rts + +.2 lda PS.TABLE.hMem-1,x + jmp K.GetMemPtr.A +*-------------------------------------- +* PS.Free.A +* In : A = PID to free +*-------------------------------------- +CORE.PSFree.A jsr CORE.GetPSByID.A PS in ZPPtr1 + >STYA ZPPtr1 + stx .1+1 Save Offset in PS.Table + + ldy #S.PS.hSS + jsr .8 + + ldy #S.PS.hDS + jsr .8 + + ldy #S.PS.hCS + jsr .8 + + ldy #S.PS.hARGS + jsr .8 + + lda (ZPPtr1) get S.PS.F + and #S.PS.F.ENV do we have to discard duplicated env & prefix ? + beq .1 + + ldy #S.PS.hENV + jsr .8 + + ldy #S.PS.hPREFIX + jsr .8 + +.1 ldx #$ff Self Modified + stz PS.Table.PID-1,x + lda PS.TABLE.hMem-1,x +.7 jmp K.FreeMem.A + +.8 lda (ZPPtr1),y + bne .9 +.9 rts +*-------------------------------------- +CORE.Quit clc rts *-------------------------------------- CORE.DestroyEvent @@ -463,6 +394,38 @@ CORE.DestroyEvent sta (pEvent) dec EvtMgr.Count .9 rts +*-------------------------------------- +CORE.PSSelect0 >LDYAI CORE.S.PS0 Select PS0 + >STYA pPs + + >LDYA K.STACK + >STYA pStack + rts +*-------------------------------------- +CORE.PSSelect ldy #S.PS.hCS + lda (pPs),y + + jsr K.GetMemPtr.A + >STYA pCode + + ldy #S.PS.hDS + lda (pPs),y + beq .1 + + jsr K.GetMemPtr.A + >STYA pData + +.1 ldy #S.PS.hSS + lda (pPs),y + jsr K.GetMemPtr.A + sta pStack+1 + + ldy #S.PS.SP + lda (pPs),y + sta pStack + + clc + rts */-------------------------------------- * # Sleep * Make current process suspend until next RUN @@ -481,41 +444,48 @@ K.Sleep pla get PC LO sbc pCode+1 iny sta (pPs),y - - lda pStack Save DATA Stack Pointer - ldy #S.PS.SP - sta (pPs),y - + lda (pPs) ora #S.PS.F.SLEEP sta (pPs) + +CORE.PSLeave ldy #S.PS.Context+23 + ldx #23 + +.1 lda pPs,x + sta (pPs),y + dey + dex + bpl .1 clc No error, rts back to Kernel *-------------------------------------- -CORE.PSWakeUp and #$FF^S.PS.F.SLEEP unmark as SLEEP +CORE.PSWakeUp lda (pPs) + and #$FF^S.PS.F.SLEEP unmark as SLEEP sta (pPS) - ldy #S.PS.SP - lda (pPs),y - sta pStack - ldy #S.PS.PC lda (pPs),y sec Advance PC by one as it was saved by a JSR adc pCode setup by PS.Select - sta .1+1 + sta .8+1 iny lda (pPs),y adc pCode+1 - sta .1+2 + sta .8+2 + + ldy #S.PS.Context+23 + ldx #23 -.1 jmp $FFFF +.1 lda (pPs),y + sta pPs,x + dey + dex + bpl .1 + +.8 jmp $FFFF *-------------------------------------- -CORE.CPULOADI .BS 1 -CORE.CPULOADC .AS -"/-\|" -*-------------------------------------- -TskMgr.Idx .BS 1 TSKMGR.EVENTCNT .BS 1 *-------------------------------------- DevMgr.Stat .DA DevMgr.NUL.Code @@ -528,8 +498,12 @@ EvtMgr.10TH.CNT .BS 1 EvtMgr.HZ.CNT .BS 1 EvtMgr.Count .BS 1 *-------------------------------------- -TskMgr.Count .DA #1 One Slot Busy (Kernel PS=0) -TskMgr.LastID .DA #0 +CORE.CPULoadI .BS 1 +CORE.CPULoadC .AS -"/-\|" +CORE.Counter .BS 1 +CORE.PSCount .DA #0 +CORE.LastPSID .DA #0 +CORE.S.PS0 .BS S.PS *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.CORE diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 66ba20c9..8a1b70ae 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -391,26 +391,29 @@ ENV.SysVarsJmp .DA ENV.SysVarsArgs *-------------------------------------- ENV.SysVarsArgs lda #1 jsr K.GetArg.A - bcs ENV.SysVarsExit2 + bcs .8 >STYA ZPPtr3 .1 lda (ZPPtr3) - beq ENV.SysVarsExit2 + beq .8 jsr ENV.AppendPtr3ToBuf .2 jsr ENV.NextEnvPtr3 lda (ZPPtr3) - beq ENV.SysVarsExit2 + beq .8 inx - beq ENV.SysVarsExit2 make sure not overlapping buf 256 + beq .8 make sure not overlapping buf 256 lda #' ' sta K.Buf256,x stx K.ExpandStr.BufLen jsr ENV.AppendPtr3ToBuf bra .2 + +.8 clc + rts *-------------------------------------- ENV.AppendPtr3ToBuf ldx K.ExpandStr.BufLen @@ -426,9 +429,8 @@ ENV.AppendPtr3ToBuf stx K.ExpandStr.BufLen rts *-------------------------------------- -ENV.SysVarsArgC jsr K.GetArgC Trash Ptr1 - bra ENV.SysVarsA - +ENV.SysVarsArgC ldy #S.PS.ARGC + .HS 2C ENV.SysVarsRC ldy #S.PS.RC .HS 2C ENV.SysVarsPPID ldy #S.PS.PPID @@ -438,37 +440,52 @@ ENV.SysVarsPID ldy #S.PS.PID ENV.SysVarsCPID ldy #S.PS.CPID lda (pPS),y -ENV.SysVarsA sta HEXBUF - stz HEXBUF+1 - stz HEXBUF+2 - stz HEXBUF+3 - jsr HEX2DEC + stz .2+1 + stz .3+1 - ldy #6 Start at 0000000xxx + ldx #8 + sed -.1 iny - lda ASCBUF,y - cmp #'0' - bne .2 +.1 asl + pha +.2 lda #$ff Self Modified + adc .2+1 + sta .2+1 - cpy #9 Print always last char +.3 lda #$ff Self Modified + adc .3+1 + sta .3+1 + + pla + dex bne .1 -.2 ldx K.Buf256 + cld -.3 inx - beq ENV.SysVarsExit2 - + ldx K.ExpandStr.BufLen + lda .3+1 + beq .4 sta K.Buf256,x - iny - cpy #10 - beq ENV.SysVarsExit + inx - lda ASCBUF,y - bra .3 +.4 lda .2+1 + lsr + lsr + lsr + lsr + beq .5 + + ora #$30 + sta K.Buf256,x + inx + +.5 lda .2+1 + and #$0f + ora #$30 + sta K.Buf256,x + inx -ENV.SysVarsExit stx K.Buf256 -ENV.SysVarsExit2 + stx K.ExpandStr.BufLen clc rts *-------------------------------------- diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 93bea27e..eff08a42 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -406,7 +406,7 @@ PS0Init ldx #S.DEV*2 NUL,SYS lda #2 sta DevMgr.Count - >LDYAI TskMgr.Table Select Process 0 (Kernel) + >LDYAI CORE.S.PS0 Select Process 0 (Kernel) >STYA pPs ldy #S.PS-1 @@ -744,28 +744,9 @@ FltMgrInit >LDYAI MSG.FLT *-------------------------------------- TskMgrInit >LDYAI MSG.TSK >SYSCALL PrintF.YA - >LDYAI TskMgr.Table+S.PS Clear whole process table except PS0 - >STYA .2+1 - - ldx #K.PS.MAX-1 - -.1 lda #0 - ldy #S.PS-1 - -.2 sta $ffff,y Self Modified - dey - bpl .2 - - lda .2+1 - clc - adc #S.PS - sta .2+1 - bcc .3 - - inc .2+2 -.3 dex - bne .1 + jsr CORE.PSSelect0 + >LDYAI K.ENV.SIZE get a buffer for ENV >SYSCALL GetMem0.YA make sure blank!! bcs .9 diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index c70e42b4..ae71533d 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -351,8 +351,7 @@ K.FreeMem.A phy bit RRAMWRAMBNK2 bit RRAMWRAMBNK2 - >LDYAI TskMgr.Table Select PS0 for proper I/O devices - >STYA pPs + jsr CORE.PSSelect0 Select PS0 for proper I/O devices jsr DevMgr.SYS.Control diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 0144ec02..00d69b5d 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -57,26 +57,16 @@ K.CreateProcess.CmdLine .BS 2 * out : * A = PSID * we cannot use ZPPtrs1 & 2 -* because of calling K.NewStrY.A & S.DupEnv.A +* because of calling K.NewStr.YA & S.DupEnv.A *-------------------------------------- -PS.CreateChild >LDYAI TskMgr.Table+S.PS - >STYA ZPPtr3 +PS.CreateChild ldx #0 - ldx #0 - -.1 inx - cpx TskMgr.Count +.1 cpx CORE.PSCount beq .2 - lda (ZPPtr3) Found an empty slot - bpl .3 - lda ZPPtr3 - clc - adc #S.PS - sta ZPPtr3 - bcc .1 - inc ZPPtr3+1 - + lda PS.Table.PID,x + beq .3 Found an empty slot + inx bra .1 .2 cpx #K.PS.MAX @@ -86,31 +76,39 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS sec rts -.3 inc TskMgr.Count +.3 inc CORE.PSCount -.4 inc TSKMGR.LASTID Get a PSID not alredy running + phx save PS inex + +.4 inc CORE.LastPSID Get a PSID not alredy running beq .4 not = 0 - lda TSKMGR.LASTID + lda CORE.LastPSID jsr CORE.GetPSByID.A bcc .4 + plx + lda CORE.LastPSID + sta PS.Table.PID,x + phx + + >LDYAI S.PS + jsr K.GetMem0.YA Blank Everything in this S.PS + bcs .99 + + >STYA ZPPtr3 + txa + plx + sta PS.Table.hMem,x + ldy #S.PS.PID - lda TSKMGR.LASTID + lda CORE.LastPSID sta (ZPPtr3),y - - lda #0 - ldy #S.PS.hCS - -.5 sta (ZPPtr3),y Blank Everything in this S.PS - iny - cpy #S.PS - bne .5 lda #S.PS.F.ENV bit K.CreateProcess.Flags need to create ENV & Prefix ? beq .6 no... - sta (ZPPtr3) Mark this PS with ENV flag + sta (ZPPtr3) Mark this PS with ENV flag ldy #S.PS.hPREFIX copy hPREFIX... lda (pPs),y @@ -165,10 +163,13 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS sta (ZPPtr3) Make this PS Init.... ldy #S.PS.CPID - lda TSKMGR.LASTID + lda CORE.LastPSID sta (pPs),y clc Exit with A=PSID + rts + +.99 plx .9 rts *-------------------------------------- PS.CmdLine2Args >STYA ZPPtr1