]> git.sur5r.net Git - cc65/blobdiff - libsrc/c128/mcbdefault.s
Fixed gcc compiler warning (#867)
[cc65] / libsrc / c128 / mcbdefault.s
index d5a91f923b1d7f63acf44451f5b1b3f1cbc6568e..eb521eb3abe53aefd63ff6305c2e6ad4548ec92b 100644 (file)
@@ -1,5 +1,5 @@
 ;
-; Default mouse callbacks for the C64
+; Default mouse callbacks for the C128
 ;
 ; Ullrich von Bassewitz, 2004-03-20
 ;
@@ -7,7 +7,10 @@
 ; be called from an interrupt handler
 ;
 
+        .constructor    initmcb
         .export         _mouse_def_callbacks
+        .import         _mouse_def_pointershape
+        .import         _mouse_def_pointercolor
 
         .include        "mouse-kernel.inc"
         .include        "c128.inc"
         .macpack        generic
 
 ; Sprite definitions. The first value can be changed to adjust the number
-; of the sprite used for the mouse.
+; of the sprite used for the mouse. All others depend on this value.
 MOUSE_SPR       = 0                             ; Sprite used for the mouse
+MOUSE_SPR_MEM   = $0E00                         ; Memory location
 MOUSE_SPR_MASK  = $01 .shl MOUSE_SPR            ; Positive mask
 MOUSE_SPR_NMASK = .lobyte(.not MOUSE_SPR_MASK)  ; Negative mask
 VIC_SPR_X       = (VIC_SPR0_X + 2*MOUSE_SPR)    ; Sprite X register
 VIC_SPR_Y       = (VIC_SPR0_Y + 2*MOUSE_SPR)    ; Sprite Y register
 
-.code
+; --------------------------------------------------------------------------
+; Initialize the mouse sprite.
+
+.segment        "ONCE"
+
+initmcb:
+
+; Copy the mouse sprite data
+
+        ldx     #64 - 1
+@L0:    lda     _mouse_def_pointershape,x
+        sta     MOUSE_SPR_MEM,x
+        dex
+        bpl     @L0
+
+; Set the mouse sprite pointer
+
+        lda     #<(MOUSE_SPR_MEM / 64)
+        sta     $07F8 + MOUSE_SPR
+
+; Set the mouse sprite color
+
+        lda     _mouse_def_pointercolor
+        sta     VIC_SPR0_COLOR + MOUSE_SPR
+        rts
 
 ; --------------------------------------------------------------------------
 ; Hide the mouse pointer. Always called with interrupts disabled.
 
-.proc   hide
+.code
 
+hide:
         lda     #MOUSE_SPR_NMASK
         and     VIC_SPR_ENA
         sta     VIC_SPR_ENA
         rts
 
-.endproc
-
 ; --------------------------------------------------------------------------
 ; Show the mouse pointer. Always called with interrupts disabled.
 
-.proc   show
-
+show:
         lda     #MOUSE_SPR_MASK
         ora     VIC_SPR_ENA
         sta     VIC_SPR_ENA
-        rts
+        ; Fall through
+
+; --------------------------------------------------------------------------
+; Prepare to move the mouse pointer. Always called with interrupts disabled.
 
-.endproc
+prep:
+        ; Fall through
+
+; --------------------------------------------------------------------------
+; Draw the mouse pointer. Always called with interrupts disabled.
+
+draw:
+        rts
 
 ; --------------------------------------------------------------------------
 ; Move the mouse pointer X position to the value in a/x. Always called with
 ; interrupts disabled.
 
-.proc   movex
+movex:
 
 ; Add the X correction and set the low byte. This frees A.
 
@@ -64,37 +100,32 @@ VIC_SPR_Y       = (VIC_SPR0_Y + 2*MOUSE_SPR)    ; Sprite Y register
         txa
         adc     #0
         bne     @L1                     ; Branch if high byte not zero
-       lda     VIC_SPR_HI_X            ; Get high X bits of all sprites
-       and     #MOUSE_SPR_NMASK        ; Clear high bit for sprite
+        lda     VIC_SPR_HI_X            ; Get high X bits of all sprites
+        and     #MOUSE_SPR_NMASK        ; Clear high bit for sprite
         sta     VIC_SPR_HI_X
         rts
 
-@L1:    lda    VIC_SPR_HI_X            ; Get high X bits of all sprites
-               ora     #MOUSE_SPR_MASK         ; Set high bit for sprite
+@L1:    lda     VIC_SPR_HI_X            ; Get high X bits of all sprites
+        ora     #MOUSE_SPR_MASK         ; Set high bit for sprite
         sta     VIC_SPR_HI_X
         rts
 
-.endproc
-
 ; --------------------------------------------------------------------------
 ; Move the mouse pointer Y position to the value in a/x. Always called with
 ; interrupts disabled.
 
-.proc   movey
-
+movey:
         clc
         ldx     PALFLAG
-        bne     @L1
+        bne     @L2
         adc     #50                     ; FIXME: Should be NTSC, is PAL value
-               sta     VIC_SPR_Y               ; Set Y position
+        sta     VIC_SPR_Y               ; Set Y position
         rts
 
-@L1:    adc     #50                     ; Add PAL correction
-               sta     VIC_SPR_Y               ; Set Y position
+@L2:    adc     #50                     ; Add PAL correction
+        sta     VIC_SPR_Y               ; Set Y position
         rts
 
-.endproc
-
 ; --------------------------------------------------------------------------
 ; Callback structure
 
@@ -103,7 +134,7 @@ VIC_SPR_Y       = (VIC_SPR0_Y + 2*MOUSE_SPR)    ; Sprite Y register
 _mouse_def_callbacks:
         .addr   hide
         .addr   show
+        .addr   prep
+        .addr   draw
         .addr   movex
         .addr   movey
-
-