A2osX/SYS/KERNEL.S.TSK.txt

171 lines
3.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* S.TskMgrRun
*--------------------------------------
S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE skip PS 0
>STYA pPs
lda TSKMGR.SIZE
dec skip PS 0
sta TSKMGR.COUNT
beq .8 no process....
.1 lda (pPs) get S.PS.F
bit #S.PS.F.INUSE In use ?
beq .7
bit #S.PS.F.HOLD Waiting for Another Task to Terminate?
beq .2
ldy #S.PS.CID
lda (pPs),y
jsr S.GetPSByIDA
bcc .7 yes, running....
lda (pPs) get S.PS.F
and #$FF^S.PS.F.HOLD unmark as HOLD
sta (pPs)
.2 jsr S.SelectProcess
lda (pPS)
bit #S.PS.F.INIT
beq .20
and #$FF^S.PS.F.INIT unmark as INIT
sta (pPS)
ldx #TSKMGR.INIT
bra .31
.20 bit #S.PS.F.SLEEP Is this PS sleeping?
beq .3 no, call TSKMGR.RUN
and #$FF^S.PS.F.SLEEP unmark as SLEEP
sta (pPS)
ldy #S.PS.PC
lda (pPs),y
sec Advance PC by one as it was saved by a JSR
adc pCode
sta .21+1
iny
lda (pPs),y
adc pCode+1
sta .21+2
.21 jsr $FFFF
bra .4
.3 ldx #TSKMGR.RUN
.31 jsr pCodeJmp Call INIT/RUN function
.4 bcc .7 INIT/RUN said CS=QUIT?
ldx #TSKMGR.QUIT yes, quit this process
jsr pCodeJmp Call QUIT function
ldy #S.PS.ID
lda (pPs),y
jsr S.FreeProcessA
bcs *
.7 lda pPs
clc
adc #S.PS.SIZE
sta pPs
bcc .71
inc pPs+1
.71 dec TSKMGR.COUNT
bne .1
.8 clc
rts
*--------------------------------------
* S.DispatchEvent
* IN:
* OUT:
* CS: Not Dispatched
* CC: Event Cleared
*--------------------------------------
S.DispatchEvents
>LDYAI TskMgr.Table+S.PS.SIZE
>STYA pPs
lda TSKMGR.SIZE
sta TSKMGR.COUNT
.1 dec TSKMGR.COUNT skip PS 0
beq .9
lda (pPs) get S.PS.F
bit #S.PS.F.INUSE In use ?
beq .4
bit #S.PS.F.HOLD Waiting for Another Task to Terminate?
bne .4
bit #S.PS.F.EVENT Accept Events ?
beq .4
jsr S.SelectProcess
stz pEvent
lda EVTMGR.SIZE
sta TSKMGR.EVENTCNT
.2 lda (pEvent)
beq .3
lda (pCode)
cmp #H.BIN.HEADER.BIN65
bne *
ldx #TSKMGR.DOEVENT
jsr pCodeJmp Call DOEVENT function
bcs .3
jsr S.DestroyEvent
lda EVTMGR.COUNT
beq .8
.3 dec TSKMGR.EVENTCNT
beq .4
lda pEvent
clc
adc #S.EVT
sta pEvent
bra .2
.4 lda pPs
clc
adc #S.PS.SIZE
sta pPs
bcc .1
inc pPs+1
bne .1 always
.8 clc
rts
.9 sec
rts
*--------------------------------------
S.TskMgrQuit clc
rts
*--------------------------------------
TSKMGR.SIZE .BS 1
TSKMGR.COUNT .BS 1
TSKMGR.EVENTCNT .BS 1
TSKMGR.LASTID .BS 1
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.TSK
LOAD SYS/KERNEL.S
ASM