2 ; Default mouse callbacks for the C128
4 ; Ullrich von Bassewitz, 2004-03-20
6 ; All functions in this module should be interrupt safe, because they may
7 ; be called from an interrupt handler
10 .export _mouse_def_callbacks
12 .include "mouse-kernel.inc"
17 ; Sprite definitions. The first value can be changed to adjust the number
18 ; of the sprite used for the mouse.
19 MOUSE_SPR = 0 ; Sprite used for the mouse
20 MOUSE_SPR_MASK = $01 .shl MOUSE_SPR ; Positive mask
21 MOUSE_SPR_NMASK = .lobyte(.not MOUSE_SPR_MASK) ; Negative mask
22 VIC_SPR_X = (VIC_SPR0_X + 2*MOUSE_SPR) ; Sprite X register
23 VIC_SPR_Y = (VIC_SPR0_Y + 2*MOUSE_SPR) ; Sprite Y register
27 ; --------------------------------------------------------------------------
28 ; Hide the mouse pointer. Always called with interrupts disabled.
39 ; --------------------------------------------------------------------------
40 ; Show the mouse pointer. Always called with interrupts disabled.
51 ; --------------------------------------------------------------------------
52 ; Draw the mouse pointer. Always called with interrupts disabled.
60 ; --------------------------------------------------------------------------
61 ; Prepare to move the mouse pointer. Always called with interrupts disabled.
69 ; --------------------------------------------------------------------------
70 ; Move the mouse pointer X position to the value in a/x. Always called with
71 ; interrupts disabled.
75 ; Add the X correction and set the low byte. This frees A.
77 add #24 ; X correction
84 bne @L1 ; Branch if high byte not zero
85 lda VIC_SPR_HI_X ; Get high X bits of all sprites
86 and #MOUSE_SPR_NMASK ; Clear high bit for sprite
90 @L1: lda VIC_SPR_HI_X ; Get high X bits of all sprites
91 ora #MOUSE_SPR_MASK ; Set high bit for sprite
97 ; --------------------------------------------------------------------------
98 ; Move the mouse pointer Y position to the value in a/x. Always called with
99 ; interrupts disabled.
106 adc #50 ; FIXME: Should be NTSC, is PAL value
107 sta VIC_SPR_Y ; Set Y position
110 @L1: adc #50 ; Add PAL correction
111 sta VIC_SPR_Y ; Set Y position
116 ; --------------------------------------------------------------------------
121 _mouse_def_callbacks: