PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
				.LIST OFF
*--------------------------------------
* EVT.GetEvents :
*  IN :
*  OUT : 
*   CS = no event, A = ERROR
*   CC * event in YA
*   (pEvent)
*--------------------------------------
EVT.GetEvents	stz	pEvent				point to start of event list
				stz EVTMGR.COUNT		reset Size
				
				lda VBL					get VLINE status
				tax
				eor EVTMGR.VBLSTATE			
				bpl EVT.GetEvents.DEV		no change,no tick
				txa
				sta EVTMGR.VBLSTATE		save new
				bpl EVT.GetEvents.DEV		Up2down transition,no tick
				
*				sta PDLTRIG				clr VBL (IIc)
*				lda RDIOUDIS			clr VBL (IIc)
				
				inc A2osX.TIMER16
				bne .1
				inc A2osX.TIMER16+1

.1				dec EVTMGR.HZ.CNT
				bne EVT.GetEvents.DEV		not yet 100ms

				ldx A2osX.HZ
				stx EVTMGR.HZ.CNT

				lda #S.EVT.F.T10TH

				dec EVTMGR.10TH.CNT
				bne .2
				
				ldx #10
				stx EVTMGR.10TH.CNT

				ora #S.EVT.F.T1SEC
				
.2				sta (pEvent)
				jsr EVT.GetEvents.Add
*--------------------------------------				
EVT.GetEvents.DEV	
				>LDYAI DevMgr.Table
				>STYA pDev

				stz EvtMgr.DevID
								
.1				ldy #S.DEV.F
				lda (pDev),y			get S.DEV.F
				bit #S.DEV.F.EVENT
				beq .2					EVENT enabled ?

				lda (pDev)
				cmp #H.BIN.HEADER.DRV65
				bne *
				
				ldx #DEVMGR.GETEVENT
				
				jsr pDevJmp				Call DRV GetEvent function
				bcs .2					no event

				ldy #S.EVT.hDEV
				lda EvtMgr.DevID
				sta (pEvent),y
				
				jsr EVT.GetEvents.Add
				
				bcs .8					Event Q is full, exit now with CC
				
.2				lda pDev
				clc
				adc #S.DEV
				sta pDev
				bcc .3
				inc pDev+1
				
.3				lda EvtMgr.DevID
				inc EvtMgr.DevID
				cmp DevMgr.LastDevID
				bne .1
				
				lda EVTMGR.COUNT		if 0, exit with CS (from cmp), and A=0 "no event"
				beq .9
				
.8				clc
.9				rts
*--------------------------------------
EVT.GetEvents.Add
				inc EVTMGR.COUNT		Add one event to Queue

				lda pEvent
				clc
				adc #S.EVT
				sta pEvent
				rts						if CS, EVT queue full!!! ($100)
*--------------------------------------
EVT.DestroyEvent
				lda (pEvent)
				beq .9
			
				bit #S.EVT.F.hMEM1
				beq .1
				
				pha
				ldy #S.EVT.DATALO
				lda (pEvent),y
				jsr K.FreeMemA
				pla
				
.1				bit #S.EVT.F.hMEM2
				beq .2
				
				ldy #S.EVT.DATAHI
				lda (pEvent),y
				jsr K.FreeMemA
				
.2				lda #0
				sta (pEvent)
				dec EVTMGR.COUNT
.9				rts
*--------------------------------------
EVTMGR.VBLSTATE	.BS 1
EVTMGR.10TH.CNT	.BS 1
EVTMGR.HZ.CNT	.BS 1
EVTMGR.COUNT	.BS 1
EvtMgr.DevID	.BS 1
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.EVT
LOAD SYS/KERNEL.S
ASM
