mirror of
https://github.com/A2osX/A2osX.git
synced 2024-09-28 03:55:01 +00:00
Kernel 0.9.1 : KERNEL, Preemtive mode, task switching (wip)
This commit is contained in:
parent
c67f94ce08
commit
644992f281
Binary file not shown.
Binary file not shown.
10
BIN/PS.S.txt
10
BIN/PS.S.txt
@ -83,6 +83,10 @@ CS.RUN >LDYA pData
|
|||||||
|
|
||||||
>PUSHEA.G PS.FLAGS
|
>PUSHEA.G PS.FLAGS
|
||||||
|
|
||||||
|
ldy #S.PS.STATS
|
||||||
|
lda (ZPPtr),y
|
||||||
|
>PUSHA CPU%
|
||||||
|
|
||||||
ldy #S.PS.PID
|
ldy #S.PS.PID
|
||||||
lda (ZPPtr),y
|
lda (ZPPtr),y
|
||||||
>PUSHA PID
|
>PUSHA PID
|
||||||
@ -104,9 +108,9 @@ CS.QUIT clc
|
|||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
MSG0 .AZ "ID Flags PID Command Line\r\n"
|
MSG0 .AZ "ID CPU\% Flags PID Command Line\r\n"
|
||||||
MSG1 .AZ "%03d %s %03d %s\r\n"
|
MSG1 .AZ "%03d %03d\% %s %03d %s\r\n"
|
||||||
MSG.FLAGS .AS "-IHSED--"
|
MSG.FLAGS .AS "IRHSED--"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
.OR 0
|
.OR 0
|
||||||
|
@ -361,7 +361,8 @@ S.DSTAT .EQ 25
|
|||||||
* PS STRUCT
|
* PS STRUCT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.PS.F .EQ 0
|
S.PS.F .EQ 0
|
||||||
S.PS.F.INIT .EQ %01000000
|
S.PS.F.INIT .EQ %10000000
|
||||||
|
S.PS.F.RUN .EQ %01000000
|
||||||
S.PS.F.HOLD .EQ %00100000
|
S.PS.F.HOLD .EQ %00100000
|
||||||
S.PS.F.SLEEP .EQ %00010000
|
S.PS.F.SLEEP .EQ %00010000
|
||||||
S.PS.F.EVENT .EQ %00001000
|
S.PS.F.EVENT .EQ %00001000
|
||||||
@ -389,6 +390,8 @@ S.PS.P .EQ 19
|
|||||||
S.PS.PC .EQ 20 WORD
|
S.PS.PC .EQ 20 WORD
|
||||||
S.PS.S .EQ 22
|
S.PS.S .EQ 22
|
||||||
|
|
||||||
|
S.PS.STATS .EQ 23
|
||||||
|
|
||||||
S.PS.ZP .EQ 24
|
S.PS.ZP .EQ 24
|
||||||
|
|
||||||
S.PS.ZP.CODE .EQ 24
|
S.PS.ZP.CODE .EQ 24
|
||||||
|
@ -14,7 +14,7 @@ CORE.Run lda CORE.PSCount
|
|||||||
|
|
||||||
lda PS.Table.hMem-1,x
|
lda PS.Table.hMem-1,x
|
||||||
jsr K.GetMemPtr.A
|
jsr K.GetMemPtr.A
|
||||||
>STYA pPS
|
>STYA pPs
|
||||||
|
|
||||||
lda (pPs) get S.PS.F
|
lda (pPs) get S.PS.F
|
||||||
bit #S.PS.F.HOLD Waiting for Another Task to Terminate?
|
bit #S.PS.F.HOLD Waiting for Another Task to Terminate?
|
||||||
@ -47,6 +47,7 @@ CORE.Run lda CORE.PSCount
|
|||||||
beq .4
|
beq .4
|
||||||
|
|
||||||
and #$FF^S.PS.F.INIT unmark as INIT
|
and #$FF^S.PS.F.INIT unmark as INIT
|
||||||
|
ora #S.PS.F.RUN mark as RUN
|
||||||
sta (pPS)
|
sta (pPS)
|
||||||
|
|
||||||
ldx #TSKMGR.INIT
|
ldx #TSKMGR.INIT
|
||||||
@ -54,6 +55,7 @@ CORE.Run lda CORE.PSCount
|
|||||||
.4 ldx #TSKMGR.RUN
|
.4 ldx #TSKMGR.RUN
|
||||||
|
|
||||||
jsr pCodeJmp Call INIT/RUN function
|
jsr pCodeJmp Call INIT/RUN function
|
||||||
|
dec IRQ.InKernel
|
||||||
bcc .7 INIT/RUN/RESUME said CS=QUIT?
|
bcc .7 INIT/RUN/RESUME said CS=QUIT?
|
||||||
|
|
||||||
.5 tax save RC
|
.5 tax save RC
|
||||||
@ -76,7 +78,7 @@ CORE.Run lda CORE.PSCount
|
|||||||
|
|
||||||
.6 ldx #TSKMGR.QUIT Quit this process
|
.6 ldx #TSKMGR.QUIT Quit this process
|
||||||
jsr pCodeJmp Call QUIT function
|
jsr pCodeJmp Call QUIT function
|
||||||
|
dec IRQ.InKernel
|
||||||
ldy #S.PS.PID
|
ldy #S.PS.PID
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
jsr CORE.PSFree.A
|
jsr CORE.PSFree.A
|
||||||
@ -249,6 +251,7 @@ CORE.Dispatch lda CORE.PSCount
|
|||||||
|
|
||||||
ldx #TSKMGR.DOEVENT
|
ldx #TSKMGR.DOEVENT
|
||||||
jsr pCodeJmp Call DOEVENT function
|
jsr pCodeJmp Call DOEVENT function
|
||||||
|
dec IRQ.InKernel
|
||||||
bcs .3 not for this PS, try next event in list
|
bcs .3 not for this PS, try next event in list
|
||||||
|
|
||||||
jsr CORE.DestroyEvent this PS handled the EVT, destroy it...
|
jsr CORE.DestroyEvent this PS handled the EVT, destroy it...
|
||||||
@ -275,7 +278,16 @@ CORE.Dispatch lda CORE.PSCount
|
|||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
pCodeJmp jmp (pCode)
|
pCodeJmp lda pCode+1
|
||||||
|
pha
|
||||||
|
lda pCode
|
||||||
|
pha
|
||||||
|
php
|
||||||
|
sei
|
||||||
|
inc IRQ.InKernel
|
||||||
|
rti
|
||||||
|
|
||||||
|
jmp (pCode)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.Quit clc
|
CORE.Quit clc
|
||||||
rts
|
rts
|
||||||
@ -440,6 +452,8 @@ CORE.PSLeave ldy #S.PS.ZP+ZPBIN.SIZE-1
|
|||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.Sleep php
|
CORE.Sleep php
|
||||||
|
dec IRQ.InKernel
|
||||||
|
|
||||||
phy
|
phy
|
||||||
ldy #S.PS.A
|
ldy #S.PS.A
|
||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
@ -457,10 +471,13 @@ CORE.Sleep php
|
|||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
|
|
||||||
pla get PC LO
|
pla get PC LO
|
||||||
|
clc
|
||||||
|
adc #1 Advance one byte because of return by RTI
|
||||||
iny #S.PS.PC
|
iny #S.PS.PC
|
||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
|
|
||||||
pla get PC HI
|
pla get PC HI
|
||||||
|
adc #0
|
||||||
iny #S.PS.PC+1
|
iny #S.PS.PC+1
|
||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
|
|
||||||
@ -484,7 +501,6 @@ CORE.Sleep php
|
|||||||
ora #S.PS.F.SLEEP
|
ora #S.PS.F.SLEEP
|
||||||
sta (pPs)
|
sta (pPs)
|
||||||
|
|
||||||
|
|
||||||
clc exit to kernel with CC
|
clc exit to kernel with CC
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -523,8 +539,9 @@ CORE.Resume ldy #S.PS.S
|
|||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
|
|
||||||
ply
|
ply
|
||||||
plp
|
sei
|
||||||
rts
|
inc IRQ.InKernel
|
||||||
|
rti
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TSKMGR.EVENTCNT .BS 1
|
TSKMGR.EVENTCNT .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -547,7 +564,7 @@ CORE.Tick10t .BS 1
|
|||||||
CORE.Counter .BS 1
|
CORE.Counter .BS 1
|
||||||
CORE.PSCount .DA #0
|
CORE.PSCount .DA #0
|
||||||
CORE.LastPSID .DA #0
|
CORE.LastPSID .DA #0
|
||||||
CORE.S.PS0 .BS S.PS.PC+2
|
CORE.S.PS0 .BS S.PS.hARGS+1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE /A2OSX.SRC/SYS/KERNEL.S.CORE
|
SAVE /A2OSX.SRC/SYS/KERNEL.S.CORE
|
||||||
|
@ -49,16 +49,26 @@ AUTO 4,1
|
|||||||
GP.SysCall dec IRQ.InKernel
|
GP.SysCall dec IRQ.InKernel
|
||||||
|
|
||||||
bit K.SYSCALL.BANK,x
|
bit K.SYSCALL.BANK,x
|
||||||
bpl .8 in $E000, no BNK change
|
bmi .1
|
||||||
|
|
||||||
sta .7+1 save A (Func Arg)
|
jsr .8 in $E000, no BNK change
|
||||||
|
|
||||||
|
inc IRQ.InKernel
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 sta .7+1 save A (Func Arg)
|
||||||
|
|
||||||
lda K.SYSCALL.BANK,x Get Target BNK
|
lda K.SYSCALL.BANK,x Get Target BNK
|
||||||
|
|
||||||
cmp $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2
|
cmp $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2
|
||||||
beq .7 same as actual BNK...go restore A and JMP
|
bne .2
|
||||||
|
|
||||||
stx .6+1 save X (Func ID)
|
jsr .7 same as actual BNK...go restore A and JMP
|
||||||
|
|
||||||
|
inc IRQ.InKernel
|
||||||
|
rts
|
||||||
|
|
||||||
|
.2 stx .6+1 save X (Func ID)
|
||||||
|
|
||||||
tax set Target BNK in x
|
tax set Target BNK in x
|
||||||
lda $D000 get source BNK
|
lda $D000 get source BNK
|
||||||
|
@ -583,6 +583,8 @@ IrqMgrInit >LDYAI MSG.IRQ
|
|||||||
lda K.MLI.PARAMS+1
|
lda K.MLI.PARAMS+1
|
||||||
sta IRQ.INTNUM
|
sta IRQ.INTNUM
|
||||||
|
|
||||||
|
lda #$ff
|
||||||
|
sta IRQ.InKernel
|
||||||
plp
|
plp
|
||||||
|
|
||||||
jsr IrqMgrInit.TClock
|
jsr IrqMgrInit.TClock
|
||||||
|
@ -15,11 +15,13 @@ MSLOT .EQ $7f8
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.IrqHAuxLC cld
|
K.IrqHAuxLC cld
|
||||||
|
|
||||||
|
sec
|
||||||
|
|
||||||
sta K.IrqHAuxLC.6+1
|
sta K.IrqHAuxLC.6+1
|
||||||
pla
|
pla
|
||||||
pha
|
pha
|
||||||
and #$10 BRK?
|
and #$10 BRK?
|
||||||
bne K.IrqHAuxLC.7
|
bne K.IrqHAuxLC.6
|
||||||
|
|
||||||
stx K.IrqHAuxLC.5+1
|
stx K.IrqHAuxLC.5+1
|
||||||
sty K.IrqHAuxLC.4+1
|
sty K.IrqHAuxLC.4+1
|
||||||
@ -91,13 +93,11 @@ K.IrqHAuxLC.3 pla
|
|||||||
K.IrqHAuxLC.4 ldy #$ff Self Modified
|
K.IrqHAuxLC.4 ldy #$ff Self Modified
|
||||||
K.IrqHAuxLC.5 ldx #$ff Self Modified
|
K.IrqHAuxLC.5 ldx #$ff Self Modified
|
||||||
K.IrqHAuxLC.6 lda #$ff Self Modified
|
K.IrqHAuxLC.6 lda #$ff Self Modified
|
||||||
bcs K.IrqHAuxLC.8 not handled, pass to ProDOS
|
bcc K.IrqHAuxLC.8
|
||||||
rti
|
|
||||||
|
|
||||||
K.IrqHAuxLC.7 lda K.IrqHAuxLC.6+1
|
dec IRQ.SkipA2osX Make regular ProDOS IRQ manager skip A2osX
|
||||||
|
jmp (K.IRQ.OldFFFE) Not handled, pass to ProDOS
|
||||||
K.IrqHAuxLC.8 dec IRQ.SkipA2osX Make regular ProDOS IRQ manager skip A2osX
|
K.IrqHAuxLC.8 rti
|
||||||
jmp (K.IRQ.OldFFFE)
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Called by :
|
* Called by :
|
||||||
* - Kernel K.IrqHAuxLC
|
* - Kernel K.IrqHAuxLC
|
||||||
@ -132,7 +132,7 @@ K.IrqH.Switch inc IRQ.Tick
|
|||||||
bvc .8
|
bvc .8
|
||||||
|
|
||||||
lda IRQ.InKernel keep V flag set
|
lda IRQ.InKernel keep V flag set
|
||||||
bmi .8
|
bmi .9
|
||||||
|
|
||||||
lda #$A0+'S
|
lda #$A0+'S
|
||||||
eor SYS.BASL0+37
|
eor SYS.BASL0+37
|
||||||
@ -140,6 +140,10 @@ K.IrqH.Switch inc IRQ.Tick
|
|||||||
|
|
||||||
.8 clc exit with V flag set
|
.8 clc exit with V flag set
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.9 clv
|
||||||
|
clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.IrqH.DEV >LDYAI Dev.Table
|
K.IrqH.DEV >LDYAI Dev.Table
|
||||||
>STYA $fe
|
>STYA $fe
|
||||||
|
Loading…
Reference in New Issue
Block a user