From 94eb2a2ed7574bc8d8e12e677ac104a2c902f96c Mon Sep 17 00:00:00 2001
From: Oliver Schmidt 
Date: Fri, 17 Jan 2014 21:09:15 +0100
Subject: [PATCH] Some fine tuning of the mouse driver interface harmonization.
---
 asminc/mouse-kernel.inc                 |  6 ++--
 include/mouse.h                         | 12 ++++++-
 libsrc/apple2/mcbdefault.s              |  4 +--
 libsrc/apple2/mou/a2.stdmou.s           |  4 +--
 libsrc/c128/mcbdefault.s                | 45 +++++++------------------
 libsrc/c128/mou/c128-1351.s             |  4 +--
 libsrc/c128/mou/c128-inkwell.s          |  4 +--
 libsrc/c128/mou/c128-joy.s              |  4 +--
 libsrc/c128/mou/c128-pot.s              |  4 +--
 libsrc/c64/mcbdefault.s                 | 41 ++++++----------------
 libsrc/c64/mou/c64-1351.s               |  4 +--
 libsrc/c64/mou/c64-inkwell.s            |  4 +--
 libsrc/c64/mou/c64-joy.s                |  4 +--
 libsrc/c64/mou/c64-pot.s                |  4 +--
 libsrc/cbm510/mcbdefault.s              | 42 +++++++----------------
 libsrc/cbm510/mou/cbm510-inkwl.s        |  4 +--
 libsrc/cbm510/mou/cbm510-joy.s          |  4 +--
 libsrc/geos-common/drivers/mcbdefault.s | 28 +++++++++------
 18 files changed, 91 insertions(+), 131 deletions(-)
diff --git a/asminc/mouse-kernel.inc b/asminc/mouse-kernel.inc
index 4ad9a733e..3eebca244 100644
--- a/asminc/mouse-kernel.inc
+++ b/asminc/mouse-kernel.inc
@@ -78,9 +78,9 @@
                         .byte
             CSHOW       .addr
                         .byte
-            CDRAW       .addr
+            CPREP       .addr
                         .byte
-            CMOVE       .addr
+            CDRAW       .addr
                         .byte
             CMOVEX      .addr
                         .byte
@@ -94,8 +94,8 @@
 .struct MOUSE_CALLBACKS
         HIDE    .addr                   ; Hide the mouse cursor
         SHOW    .addr                   ; Show the mouse cursor
+        PREP    .addr                   ; Prepare to move the mouse cursor
         DRAW    .addr                   ; Draw the mouse cursor
-        MOVE    .addr                   ; Prepare to move the mouse cursor
         MOVEX   .addr                   ; Move the mouse cursor to X coord
         MOVEY   .addr                   ; Move the mouse cursor to Y coord
 .endstruct
diff --git a/include/mouse.h b/include/mouse.h
index 5e69c7ff6..64581eda7 100644
--- a/include/mouse.h
+++ b/include/mouse.h
@@ -88,7 +88,17 @@ struct mouse_callbacks {
     /* Hide the mouse cursor. */
 
     void (*show) (void);
-    /* Show the mouse cursor */
+    /* Show the mouse cursor. */
+
+    void (*prep) (void);
+    /* Prepare to move the mouse cursor. This function is called,
+     * even when the cursor is currently invisible.
+     */
+
+    void (*draw) (void);
+    /* Draw the mouse cursor. This function is called,
+     * even when the cursor is currently invisible.
+     */
 
     void __fastcall__ (*movex) (int x);
     /* Move the mouse cursor to the new X coordinate. This function is called,
diff --git a/libsrc/apple2/mcbdefault.s b/libsrc/apple2/mcbdefault.s
index 892e387e0..cada4173a 100644
--- a/libsrc/apple2/mcbdefault.s
+++ b/libsrc/apple2/mcbdefault.s
@@ -26,8 +26,8 @@ visible:.res    1
 _mouse_def_callbacks:
         .addr   hide
         .addr   show
+        .addr   prep
         .addr   draw
-        .addr   move
         .addr   movex
         .addr   movey
 
@@ -76,7 +76,7 @@ hide:
         ; Fall through
 
 ; Prepare to move the mouse cursor.
-move:
+prep:
         jsr     getcursor       ; Cursor visible at current position?
         bne     done            ; No, we're done
         lda     backup          ; Get character at cursor position
diff --git a/libsrc/apple2/mou/a2.stdmou.s b/libsrc/apple2/mou/a2.stdmou.s
index ecfb7da58..66869916a 100644
--- a/libsrc/apple2/mou/a2.stdmou.s
+++ b/libsrc/apple2/mou/a2.stdmou.s
@@ -57,8 +57,8 @@ status          := $0778
         ; Callback table, set by the kernel before INSTALL is called
 CHIDE:  jmp     $0000                   ; Hide the cursor
 CSHOW:  jmp     $0000                   ; Show the cursor
+CPREP:  jmp     $0000                   ; Prepare to move the cursor
 CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVE:  jmp     $0000                   ; Prepare to move the cursor
 CMOVEX: jmp     $0000                   ; Move the cursor to X coord
 CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
 
@@ -411,7 +411,7 @@ done:   rts
         beq     :+
 
         ; Remove the cursor at the old position
-update: jsr     CMOVE
+update: jsr     CPREP
 
         ; Get and set the new X position
         ldy     slot
diff --git a/libsrc/c128/mcbdefault.s b/libsrc/c128/mcbdefault.s
index fcf742d14..01c54efca 100644
--- a/libsrc/c128/mcbdefault.s
+++ b/libsrc/c128/mcbdefault.s
@@ -22,55 +22,41 @@ 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
-
 ; --------------------------------------------------------------------------
 ; Hide the mouse pointer. Always called with interrupts disabled.
 
-.proc   hide
-
+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
-
-.endproc
+        ; Fall through
 
 ; --------------------------------------------------------------------------
-; Draw the mouse pointer. Always called with interrupts disabled.
-
-.proc   draw
-
-        rts
+; Prepare to move the mouse pointer. Always called with interrupts disabled.
 
-.endproc
+prep:
+        ; Fall through
 
 ; --------------------------------------------------------------------------
-; Prepare to move the mouse pointer. Always called with interrupts disabled.
-
-.proc   move
+; Draw the mouse pointer. Always called with interrupts disabled.
 
+draw:
         rts
 
-.endproc
-
 ; --------------------------------------------------------------------------
 ; 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.
 
@@ -92,27 +78,22 @@ VIC_SPR_Y       = (VIC_SPR0_Y + 2*MOUSE_SPR)    ; Sprite Y register
         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
         rts
 
-@L1:    adc     #50                     ; Add PAL correction
+@L2:    adc     #50                     ; Add PAL correction
         sta     VIC_SPR_Y               ; Set Y position
         rts
 
-.endproc
-
 ; --------------------------------------------------------------------------
 ; Callback structure
 
@@ -121,7 +102,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   move
         .addr   movex
         .addr   movey
diff --git a/libsrc/c128/mou/c128-1351.s b/libsrc/c128/mou/c128-1351.s
index 881605d2d..b4d950cda 100644
--- a/libsrc/c128/mou/c128-1351.s
+++ b/libsrc/c128/mou/c128-1351.s
@@ -50,8 +50,8 @@ HEADER:
 
 CHIDE:  jmp     $0000                   ; Hide the cursor
 CSHOW:  jmp     $0000                   ; Show the cursor
+CPREP:  jmp     $0000                   ; Prepare to move the cursor
 CDRAW:  jmp     $0000                   ; Draw the cursor
-CMOVE:  jmp     $0000                   ; Prepare to move the cursor
 CMOVEX: jmp     $0000                   ; Move the cursor to X coord
 CMOVEY: jmp     $0000                   ; Move the cursor to Y coord
 
@@ -304,7 +304,7 @@ IOCTL:  lda     #