PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF *-------------------------------------- * TSK.TskMgrRun *-------------------------------------- TSK.TskMgrRun >LDYAI TskMgr.Table+S.PS 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 K.GetPSByIDA bcc .7 yes, running.... lda (pPs) get S.PS.F and #$FF^S.PS.F.HOLD unmark as HOLD sta (pPs) .2 jsr PS.Select 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 PS.FreeA bcs * .7 lda pPs clc adc #S.PS sta pPs bcc .71 inc pPs+1 .71 dec TSKMGR.COUNT bne .1 .8 clc rts *-------------------------------------- * TSK.DispatchEvents * IN: * OUT: * CS: Not Dispatched * CC: Event Cleared *-------------------------------------- TSK.DispatchEvents >LDYAI TskMgr.Table+S.PS >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 PS.Select 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 EVT.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 sta pPs bcc .1 inc pPs+1 bne .1 always .8 clc rts .9 sec rts *-------------------------------------- TSK.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