A2osX/SYS/KERNEL.S.TSK.txt

179 lines
3.5 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
2015-06-03 18:30:57 +00:00
PREFIX /A2OSX.SRC
2015-03-14 21:48:35 +00:00
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
2016-09-29 15:30:15 +00:00
* TSK.TskMgrRun
2015-03-14 21:48:35 +00:00
*--------------------------------------
TSK.TskMgrRun >LDYAI TskMgr.Table+S.PS skip PS 0
2015-06-03 18:30:57 +00:00
>STYA pPs
2015-03-14 21:48:35 +00:00
lda TSKMGR.SIZE
dec skip PS 0
2015-03-14 21:48:35 +00:00
sta TSKMGR.COUNT
beq .8 no process....
2015-03-14 21:48:35 +00:00
.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?
2015-06-03 18:30:57 +00:00
beq .2
2015-03-14 21:48:35 +00:00
ldy #S.PS.CID
2015-06-03 18:30:57 +00:00
lda (pPs),y
2016-09-21 15:20:37 +00:00
jsr K.GetPSByIDA
bcc .7 yes, running....
2015-06-03 18:30:57 +00:00
lda (pPs) get S.PS.F
2015-03-14 21:48:35 +00:00
and #$FF^S.PS.F.HOLD unmark as HOLD
2015-06-03 18:30:57 +00:00
sta (pPs)
2015-03-14 21:48:35 +00:00
.2 jsr PS.Select
2015-06-03 18:30:57 +00:00
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?
2015-06-03 18:30:57 +00:00
beq .3 no, call TSKMGR.RUN
and #$FF^S.PS.F.SLEEP unmark as SLEEP
sta (pPS)
2015-03-14 21:48:35 +00:00
2015-06-03 18:30:57 +00:00
ldy #S.PS.PC
lda (pPs),y
sec Advance PC by one as it was saved by a JSR
adc pCode
sta .21+1
2015-06-03 18:30:57 +00:00
iny
lda (pPs),y
adc pCode+1
sta .21+2
2015-03-14 21:48:35 +00:00
.21 jsr $FFFF
2015-06-03 18:30:57 +00:00
bra .4
.3 ldx #TSKMGR.RUN
.31 jsr pCodeJmp Call INIT/RUN function
.4 bcc .7 INIT/RUN said CS=QUIT?
2015-03-14 21:48:35 +00:00
ldx #TSKMGR.QUIT yes, quit this process
2015-06-03 18:30:57 +00:00
jsr pCodeJmp Call QUIT function
2015-03-14 21:48:35 +00:00
ldy #S.PS.ID
2015-06-03 18:30:57 +00:00
lda (pPs),y
2016-09-29 15:30:15 +00:00
jsr PS.FreeA
bcs *
2015-03-14 21:48:35 +00:00
.7 lda pPs
2015-03-14 21:48:35 +00:00
clc
adc #S.PS
2015-06-03 18:30:57 +00:00
sta pPs
bcc .71
2015-06-03 18:30:57 +00:00
inc pPs+1
.71 dec TSKMGR.COUNT
2015-03-14 21:48:35 +00:00
bne .1
.8 clc
2015-03-14 21:48:35 +00:00
rts
2015-06-03 18:30:57 +00:00
*--------------------------------------
2016-09-29 15:30:15 +00:00
* TSK.DispatchEvents
2015-03-14 21:48:35 +00:00
* IN:
* OUT:
* CS: Not Dispatched
* CC: Event Cleared
*--------------------------------------
2016-09-29 15:30:15 +00:00
TSK.DispatchEvents
lda EVTMGR.COUNT
beq *
>LDYAI TskMgr.Table+S.PS
2015-06-03 18:30:57 +00:00
>STYA pPs
2015-03-14 21:48:35 +00:00
lda TSKMGR.SIZE Number of actual processes...
sta TSKMGR.COUNT ...to give event list
2015-03-14 21:48:35 +00:00
.1 dec TSKMGR.COUNT skip PS 0
beq .9
lda (pPs) get S.PS.F
bit #S.PS.F.INUSE In use ?
2016-03-13 21:47:19 +00:00
beq .4
2015-03-14 21:48:35 +00:00
bit #S.PS.F.INIT+S.PS.F.SLEEP+S.PS.F.HOLD Init,Sleep or Waiting for Another Task to Terminate?
2016-03-13 21:47:19 +00:00
bne .4
2015-03-14 21:48:35 +00:00
bit #S.PS.F.EVENT Accept Events ?
2016-03-13 21:47:19 +00:00
beq .4
2015-06-03 18:30:57 +00:00
jsr PS.Select
2016-03-13 21:47:19 +00:00
stz pEvent Select first event in list
2016-03-13 21:47:19 +00:00
lda EVTMGR.COUNT
2016-03-13 21:47:19 +00:00
sta TSKMGR.EVENTCNT
.2 lda (pEvent) Empty event, select next
2016-03-13 21:47:19 +00:00
beq .3
lda (pCode)
cmp #H.BIN.HEADER.BIN65
bne *
2015-03-14 21:48:35 +00:00
ldx #TSKMGR.DOEVENT
2015-06-03 18:30:57 +00:00
jsr pCodeJmp Call DOEVENT function
bcs .3 not for this PS, try next event in list
jsr EVT.DestroyEvent this PS handled the EVT, destroy it...
2016-03-13 21:47:19 +00:00
lda EVTMGR.COUNT
beq .8 no more event, exit
2016-03-13 21:47:19 +00:00
.3 dec TSKMGR.EVENTCNT
beq .4 all EVT submitted to this PS, try other PS
lda pEvent try next EVT to this PS
2016-03-13 21:47:19 +00:00
clc
adc #S.EVT
sta pEvent
bra .2
2015-03-14 21:48:35 +00:00
.4 lda pPs go to next PS in PS list
2015-03-14 21:48:35 +00:00
clc
adc #S.PS
2015-06-03 18:30:57 +00:00
sta pPs
bcc .1
2015-06-03 18:30:57 +00:00
inc pPs+1
bne .1 always
2015-06-03 18:30:57 +00:00
2016-03-13 21:47:19 +00:00
.8 clc
2015-06-03 18:30:57 +00:00
rts
.9 sec
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
2016-09-29 15:30:15 +00:00
TSK.TskMgrQuit clc
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
TSKMGR.SIZE .BS 1
2015-03-14 21:48:35 +00:00
TSKMGR.COUNT .BS 1
2016-03-13 21:47:19 +00:00
TSKMGR.EVENTCNT .BS 1
2015-03-14 21:48:35 +00:00
TSKMGR.LASTID .BS 1
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.TSK
LOAD SYS/KERNEL.S
ASM