mirror of
https://github.com/A2osX/A2osX.git
synced 2024-08-01 00:29:12 +00:00
Kernel 0.92
This commit is contained in:
parent
fdbf6c3a9d
commit
d2580cdf5f
Binary file not shown.
@ -82,10 +82,12 @@ CS.RUN lda #1
|
|||||||
>LDA.G PS.Index
|
>LDA.G PS.Index
|
||||||
|
|
||||||
.1 tax
|
.1 tax
|
||||||
|
beq .2 PS0
|
||||||
|
|
||||||
lda PS.Table.PID,x
|
lda PS.Table.PID,x
|
||||||
beq .7
|
beq .7
|
||||||
|
|
||||||
jsr CS.RUN.DUMP
|
.2 jsr CS.RUN.DUMP
|
||||||
|
|
||||||
>SLEEP
|
>SLEEP
|
||||||
|
|
||||||
@ -157,6 +159,8 @@ CS.RUN.DecodeFlags
|
|||||||
CS.RUN.PrintArgs
|
CS.RUN.PrintArgs
|
||||||
ldy #S.PS.hARGV
|
ldy #S.PS.hARGV
|
||||||
lda (ZPPSPtr),y
|
lda (ZPPSPtr),y
|
||||||
|
beq .8 NO ARGV in PS0
|
||||||
|
|
||||||
>SYSCALL GetMemPtr
|
>SYSCALL GetMemPtr
|
||||||
>STYA ZPArgV
|
>STYA ZPArgV
|
||||||
|
|
||||||
|
@ -26,9 +26,14 @@ ZPLIB .EQ $40 32 bytes
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PS Context : 48 bytes MAX
|
* PS Context : 48 bytes MAX
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CORE.EvtIndex .EQ $D0
|
||||||
|
CORE.EvtCount .EQ $D1
|
||||||
|
CORE.PSIndex .EQ $D2
|
||||||
|
CORE.PSCount .EQ $D3
|
||||||
|
|
||||||
pEvent .EQ $D4
|
pEvent .EQ $D4
|
||||||
pPs .EQ $D6
|
pPs .EQ $D6
|
||||||
|
*--------------------------------------
|
||||||
pCode .EQ $D8
|
pCode .EQ $D8
|
||||||
pData .EQ $DA
|
pData .EQ $DA
|
||||||
pStack .EQ $DC
|
pStack .EQ $DC
|
||||||
|
@ -4,7 +4,7 @@ AUTO 4,1
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.Run stz CORE.PSIndex
|
CORE.Run stz CORE.PSIndex
|
||||||
|
|
||||||
ldx #0
|
bra .8 Skip PS0
|
||||||
|
|
||||||
.1 lda PS.Table.hPS,x
|
.1 lda PS.Table.hPS,x
|
||||||
beq .8
|
beq .8
|
||||||
@ -30,48 +30,28 @@ CORE.Run stz CORE.PSIndex
|
|||||||
.3 jsr CORE.PSExec INIT/RUN/QUIT/RESUME
|
.3 jsr CORE.PSExec INIT/RUN/QUIT/RESUME
|
||||||
dec IRQ.InKernel
|
dec IRQ.InKernel
|
||||||
|
|
||||||
bcc .61 Error ?
|
bcc .4 INIT/RUN Exit ?
|
||||||
|
|
||||||
.5 tax Yes, From INIT or RUN,save RC
|
jsr CORE.UpdateParentPS
|
||||||
|
|
||||||
ldy #S.PS.PPID Notify Parent Process for exit code...
|
lda (pPs)
|
||||||
lda (pPs),y
|
|
||||||
beq .6 no parent process
|
|
||||||
|
|
||||||
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)
|
|
||||||
and #$3F $ff^S.PS.F.INIT+S.PS.F.RUN
|
and #$3F $ff^S.PS.F.INIT+S.PS.F.RUN
|
||||||
ora #S.PS.F.QUIT
|
ora #S.PS.F.QUIT
|
||||||
sta (pPs)
|
sta (pPs)
|
||||||
bra .3 try executing QUIT now...
|
bra .3 try executing QUIT now...
|
||||||
|
|
||||||
.61 lda (pPs)
|
.4 lda (pPs)
|
||||||
bit #S.PS.F.SLEEP
|
bit #S.PS.F.SLEEP
|
||||||
bne .7
|
bne .7
|
||||||
|
|
||||||
bit #S.PS.F.INIT
|
bit #S.PS.F.INIT
|
||||||
beq .62
|
beq .5
|
||||||
|
|
||||||
eor #S.PS.F.INIT+S.PS.F.RUN go from INIT to RUN
|
eor #S.PS.F.INIT+S.PS.F.RUN go from INIT to RUN
|
||||||
sta (pPs)
|
sta (pPs)
|
||||||
bra .7
|
bra .7
|
||||||
|
|
||||||
.62 bit #S.PS.F.QUIT
|
.5 bit #S.PS.F.QUIT
|
||||||
beq .7
|
beq .7
|
||||||
|
|
||||||
ldy #S.PS.PID
|
ldy #S.PS.PID
|
||||||
@ -93,7 +73,12 @@ CORE.Events jsr CORE.GetEvents
|
|||||||
jsr CORE.Dispatch
|
jsr CORE.Dispatch
|
||||||
bcc .4 CC=All Events Dispatched
|
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
|
lda #Evt.Table
|
||||||
sta pEvent
|
sta pEvent
|
||||||
@ -130,6 +115,69 @@ CORE.Events jsr CORE.GetEvents
|
|||||||
jsr CORE.ScrSel
|
jsr CORE.ScrSel
|
||||||
.8 jmp CORE.Run
|
.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 :
|
* CORE.GetEvents :
|
||||||
* IN :
|
* IN :
|
||||||
* OUT :
|
* OUT :
|
||||||
@ -222,7 +270,7 @@ CORE.GetEvents lda #Evt.Table
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.Dispatch stz CORE.PSIndex
|
CORE.Dispatch stz CORE.PSIndex
|
||||||
|
|
||||||
ldx #0
|
bra .5 skip PS0
|
||||||
|
|
||||||
.1 lda PS.Table.hPS,x
|
.1 lda PS.Table.hPS,x
|
||||||
beq .5
|
beq .5
|
||||||
@ -288,70 +336,13 @@ CORE.Dispatch stz CORE.PSIndex
|
|||||||
.8 clc
|
.8 clc
|
||||||
rts
|
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
|
* X unmodified
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.GetPSByID tay
|
CORE.GetPSByID jsr CORE.GetPS
|
||||||
beq .8
|
|
||||||
|
|
||||||
jsr CORE.GetPS
|
|
||||||
bcs CORE.GetPSByID.RTS
|
bcs CORE.GetPSByID.RTS
|
||||||
|
|
||||||
lda PS.TABLE.hPS,y
|
lda PS.TABLE.hPS,y
|
||||||
jmp K.GetMemPtr
|
jmp K.GetMemPtr
|
||||||
|
|
||||||
.8 lda CORE.hPS0
|
|
||||||
jsr K.GetMemPtr
|
|
||||||
CORE.GetPSByID.8
|
CORE.GetPSByID.8
|
||||||
clc
|
clc
|
||||||
CORE.GetPSByID.RTS
|
CORE.GetPSByID.RTS
|
||||||
@ -359,11 +350,15 @@ CORE.GetPSByID.RTS
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* X,A unmodified
|
* 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
|
.1 cmp PS.Table.PID,y
|
||||||
beq CORE.GetPSByID.8
|
beq CORE.GetPSByID.8
|
||||||
iny
|
.2 iny
|
||||||
cpy CORE.PSCount
|
cpy CORE.PSCount
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
@ -423,14 +418,6 @@ CORE.DestroyEvent
|
|||||||
dec CORE.EvtCount
|
dec CORE.EvtCount
|
||||||
.9 rts
|
.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
|
CORE.PSSelect ldy #S.PS.ZP+ZPBIN.SIZE-1
|
||||||
ldx #ZPBIN.SIZE-1
|
ldx #ZPBIN.SIZE-1
|
||||||
|
|
||||||
@ -524,11 +511,56 @@ CORE.PSResume sei
|
|||||||
inc IRQ.InKernel
|
inc IRQ.InKernel
|
||||||
rti
|
rti
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DevMgr.Stat .DA DevMgr.FreeMem
|
* CORE.PSFree
|
||||||
DevMgr.Free .DA DevMgr.FreeMem
|
* In : A = PID to free
|
||||||
.DA DevMgr.HiMem
|
*--------------------------------------
|
||||||
DevMgr.DevCnt .DA #0
|
CORE.PSFree sta .10+1 Save PS ID
|
||||||
DevMgr.NodCnt .DA #0
|
|
||||||
|
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
|
MAN
|
||||||
SAVE USR/SRC/SYS/KERNEL.S.CORE
|
SAVE USR/SRC/SYS/KERNEL.S.CORE
|
||||||
|
@ -350,15 +350,13 @@ CORE.TickPer10t .BS 1
|
|||||||
CORE.TickSec .BS 1
|
CORE.TickSec .BS 1
|
||||||
CORE.Tick10t .BS 1
|
CORE.Tick10t .BS 1
|
||||||
CORE.CPUStatCnt .DA #100
|
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.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.Mode .BS 1
|
||||||
IRQ.SkipA2osX .BS 1
|
IRQ.SkipA2osX .BS 1
|
||||||
|
@ -115,7 +115,10 @@ Kernel.Init3 sta SETALTZP
|
|||||||
>LDYAI S.PS Select Process 0 (Kernel)
|
>LDYAI S.PS Select Process 0 (Kernel)
|
||||||
jsr K.GetMem0
|
jsr K.GetMem0
|
||||||
>STYA pPs
|
>STYA pPs
|
||||||
stx CORE.hPS0
|
stx PS.Table.hPS
|
||||||
|
|
||||||
|
lda #1
|
||||||
|
sta CORE.PSCount
|
||||||
|
|
||||||
>LDYAI K.STACKTOP
|
>LDYAI K.STACKTOP
|
||||||
>STYA pStack
|
>STYA pStack
|
||||||
@ -976,6 +979,8 @@ DevMgrInit.AddBDev
|
|||||||
EvtMgrInit >LDYAI MSG.EVT
|
EvtMgrInit >LDYAI MSG.EVT
|
||||||
>SYSCALL puts
|
>SYSCALL puts
|
||||||
|
|
||||||
|
stz CORE.EvtCount
|
||||||
|
|
||||||
lda #$A5
|
lda #$A5
|
||||||
sta A2osX.TIMER16
|
sta A2osX.TIMER16
|
||||||
lda #$9B
|
lda #$9B
|
||||||
|
@ -167,22 +167,18 @@ K.IrqH.Switch inc IRQ.Tick
|
|||||||
lda #100
|
lda #100
|
||||||
sta CORE.CPUStatCnt
|
sta CORE.CPUStatCnt
|
||||||
|
|
||||||
lda CORE.InKernelHits
|
|
||||||
stz CORE.InKernelHits
|
|
||||||
stz CORE.InKernelStats
|
|
||||||
|
|
||||||
ldx #K.PS.MAX-1
|
ldx #K.PS.MAX-1
|
||||||
|
|
||||||
.1 lda PS.Table.Hits-1,x
|
.1 lda PS.Table.Hits,x
|
||||||
stz PS.Table.Hits-1,x
|
stz PS.Table.Hits,x
|
||||||
sta PS.Table.Stats-1,x
|
sta PS.Table.Stats,x
|
||||||
dex
|
dex
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
.2 lda IRQ.InKernel keep V flag set
|
.2 lda IRQ.InKernel keep V flag set
|
||||||
bpl .3
|
bpl .3
|
||||||
|
|
||||||
inc CORE.InKernelHits
|
inc PS.Table.Hits
|
||||||
|
|
||||||
.9 clv
|
.9 clv
|
||||||
clc
|
clc
|
||||||
|
@ -91,15 +91,13 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem
|
|||||||
* out :
|
* out :
|
||||||
* A = PSID
|
* A = PSID
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PS.CreateChild ldx CORE.PSCount
|
PS.CreateChild ldx #0
|
||||||
beq .3
|
bra .2 Skip PS0
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 lda PS.Table.PID,x
|
.1 lda PS.Table.PID,x
|
||||||
beq .4 Found an empty slot
|
beq .4 Found an empty slot
|
||||||
|
|
||||||
inx
|
.2 inx
|
||||||
cpx CORE.PSCount
|
cpx CORE.PSCount
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user