1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-23 04:30:10 +00:00

Polished the mouse routines

git-svn-id: svn://svn.cc65.org/cc65/trunk@899 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2001-09-13 15:28:21 +00:00
parent 50ccc25f05
commit 6d4953870a

View File

@ -42,13 +42,14 @@ XCORR = SPRITE_WIDTH
_mouse_init:
jsr popa ; Ignore type and port
ldy OldIRQ+1 ; Already initialized?
lda OldIRQ+1 ; Already initialized?
bne AlreadyInitialized ; Jump if yes
; Initialize variables
ldx #0
stx XPos
lda #XCORR
sta XPos
stx XPos+1
stx YPos
stx YPos+1
@ -56,8 +57,10 @@ _mouse_init:
stx OldPotY
stx XMin
stx XMin+1 ; XMin = 0
lda #50 ; ## FIXME: This is the PAL value
lda #50 ; ## FIXME: This is the PAL value
sta YCorr
sta YPos
stx YPos+1
sec
sbc #SPRITE_HEIGHT ; Sprite height in pixels
sta YMin
@ -79,14 +82,13 @@ _mouse_init:
lda IRQVec+1
sta OldIRQ+1
; Set our own IRQ vector. We cheat here to save a few bytes of code:
; The function is expected to return a value not equal to zero on success,
; and since we know that the high byte of the IRQ handler address is never
; zero, we will return just this byte.
; Set our own IRQ vector.
ldx #<MouseIRQ
lda #>MouseIRQ
bne SetIRQ ; Branch always
ldx #<MouseIRQ
ldy #>MouseIRQ
jsr SetIRQ ; Set our IRQ vector, disable sprite 0
lda #1 ; Mouse successfully initialized
rts
AlreadyInitialized:
lda #0 ; Error
@ -98,17 +100,21 @@ AlreadyInitialized:
;
_mouse_done:
ldx OldIRQ ; Initialized?
lda OldIRQ+1
ldx OldIRQ
ldy OldIRQ+1 ; Initialized?
beq Done ; Jump if no
ldy #0
sty OldIRQ+1 ; Reset the initialized flag
SetIRQ: sei ; Disable interrupts
lda #0
sta OldIRQ+1 ; Reset the initialized flag
SetIRQ: sei ; Disable interrupts
stx IRQVec ; Set the new/old vector
sta IRQVec+1
cli ; Enable interrupts
sty IRQVec+1
lda VIC_SPR_ENA ; Get sprite enable register
and #$FE ; Disable sprite #0
sta VIC_SPR_ENA ; Write back
cli ; Enable interrupts
Done: rts
; --------------------------------------------------------------------------
;
; void mouse_hide (void);