1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-24 04:34:35 +00:00

Disable the high frequency mouse polling IRQ while the system does

time critical things (CRITICAL flag set).
This commit is contained in:
Christian Groessler 2014-01-29 23:38:31 +01:00
parent 1f64a13559
commit 0cf0ed5510

View File

@ -446,6 +446,14 @@ IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now
IRQ:
; Turn mouse polling IRQ back on in case it disabled itself due to CRITIC
; flag being set.
lda POKMSK
ora #%00000001 ; timer 1 enable
sta POKMSK
sta IRQEN
; Check for a pressed button and place the result into Buttons
ldx #0
@ -514,7 +522,12 @@ IRQ:
; T1Han: Local IRQ routine to poll mouse
;
T1Han: tya
T1Han: lda CRITIC ; if CRITIC flag is set, disable the
bne disable_me ; high frequency polling IRQ, in order
; not to interfere with SIO I/O (e.g.
; floppy access)
tya
pha
txa
pha
@ -695,3 +708,22 @@ mmexit: sty oldval
pla
rti
.endif
; Disable the interrupt source which caused us to be called.
; The interrupt will be enabled again by the "IRQ" routine.
; The "IRQ" routine, despite its name, is called from the
; vertical blank NMI interrupt *only* if the CRITIC flag has
; been cleared.
disable_me:
lda POKMSK
and #%11111110 ; timer 1 disable
sta IRQEN
sta POKMSK
.ifdef __ATARIXL__
rts
.else
pla
rti
.endif