From: Oliver Schmidt Date: Fri, 17 Jan 2014 20:09:15 +0000 (+0100) Subject: Some fine tuning of the mouse driver interface harmonization. X-Git-Tag: V2.15~199 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=94eb2a2ed7574bc8d8e12e677ac104a2c902f96c;p=cc65 Some fine tuning of the mouse driver interface harmonization. --- 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 #