1
0
mirror of https://github.com/cc65/cc65.git synced 2025-02-09 02:30:42 +00:00

Apple2: Don't forcefully re-enable IRQ

Avoid enabling IRQ after disabling them in driver code, remember
previous state instead (in case user had them disabled already).
This commit is contained in:
Colin Leroy-Mira 2024-12-03 09:01:04 +01:00 committed by Oliver Schmidt
parent 162bc6b305
commit 852b622c43
3 changed files with 23 additions and 13 deletions

View File

@ -155,6 +155,7 @@ next: inc ptr1+1
; Disable interrupts now because setting the slot number makes
; the IRQ handler (maybe called due to some non-mouse IRQ) try
; calling the firmware which isn't correctly set up yet
php
sei
; Convert to and save slot number
@ -211,7 +212,7 @@ next: inc ptr1+1
common: jsr firmware
; Enable interrupts and return success
cli
plp
lda #<MOUSE_ERR_OK
ldx #>MOUSE_ERR_OK
rts
@ -220,6 +221,7 @@ common: jsr firmware
; No return code required (the driver is removed from memory on return).
UNINSTALL:
; Hide cursor
php
sei
jsr CHIDE
@ -249,7 +251,8 @@ SETBOX:
; Apple II Mouse TechNote #1, Interrupt Environment with the Mouse:
; "Disable interrupts before placing position information in the
; screen holes."
: sei
: php
sei
; Set low clamp
lda (ptr1),y
@ -298,6 +301,7 @@ GETBOX:
; the screen). No return code required.
MOVE:
ldy slot
php
sei
; Set y
@ -328,9 +332,10 @@ MOVE:
; no special action is required besides hiding the mouse cursor.
; No return code required.
HIDE:
php
sei
jsr CHIDE
cli
plp
rts
; SHOW: Is called to show the mouse cursor. The mouse kernel manages a
@ -339,9 +344,10 @@ HIDE:
; no special action is required besides enabling the mouse cursor.
; No return code required.
SHOW:
php
sei
jsr CSHOW
cli
plp
rts
; BUTTONS: Return the button mask in A/X.
@ -360,12 +366,13 @@ POS:
; struct pointed to by ptr1. No return code required.
INFO:
ldy #.sizeof(MOUSE_INFO)-1
copy: sei
copy: php
sei
: lda info,y
sta (ptr1),y
dey
bpl :-
cli
plp
rts
; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl

View File

@ -304,8 +304,9 @@ IIgs:
ldx Channel
; Deactivate interrupts
sei
php ; Deactivate interrupts
sei ; if enabled
ldy #WR_MASTER_IRQ_RST
lda #MASTER_IRQ_SHUTDOWN
jsr writeSCCReg
@ -334,7 +335,7 @@ IIgs:
ldx #$00
stx Opened ; Mark port as closed
cli
plp ; Reenable interrupts if needed
: txa ; Promote char return value
rts
@ -352,7 +353,8 @@ getClockSource:
; Must return an SER_ERR_xx code in a/x.
SER_OPEN:
sei
php ; Deactivate interrupts
sei ; if enabled
; Check if the handshake setting is valid
ldy #SER_PARAMS::HANDSHAKE ; Handshake
@ -497,9 +499,9 @@ BaudOK:
lda #SER_ERR_OK
SetupOut:
plp ; Reenable interrupts if needed
ldx #$00 ; Promote char return value
sty Opened
cli
rts
;----------------------------------------------------------------------------

View File

@ -29,7 +29,8 @@ iigs: bit RDVBLBAR
rts
; Apple IIc TechNote #9, Detecting VBL
iic: sei
iic: php
sei
sta IOUDISOFF
lda RDVBLMSK
bit ENVBL
@ -40,7 +41,7 @@ iic: sei
bcs :+ ; VBL interrupts were already enabled
bit DISVBL
: sta IOUDISON ; IIc Tech Ref Man: The firmware normally leaves IOUDIS on.
cli
plp
rts
.endif ; __APPLE2ENH__