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 #