From: uz Date: Mon, 15 Feb 2010 17:52:41 +0000 (+0000) Subject: Patches by Greg King to avoid crosstalk between mouse and keyboard. X-Git-Tag: V2.13.2~12 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=5f18ddbec9dcc234dc28e19e6065fe237f5fef30;p=cc65 Patches by Greg King to avoid crosstalk between mouse and keyboard. git-svn-id: svn://svn.cc65.org/cc65/trunk@4589 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/c64/c64-1351.s b/libsrc/c64/c64-1351.s index e6f57ca0d..c53940d7a 100644 --- a/libsrc/c64/c64-1351.s +++ b/libsrc/c64/c64-1351.s @@ -2,7 +2,8 @@ ; Driver for the 1351 proportional mouse. Parts of the code are from ; the Commodore 1351 mouse users guide. ; -; Ullrich von Bassewitz, 2003-12-29, 2009-09-26 +; 2009-09-26, Ullrich von Bassewitz +; 2010-02-06, Greg King ; .include "zeropage.inc" @@ -53,8 +54,8 @@ CMOVEY: jmp $0000 ; Move the cursor to Y coord ;---------------------------------------------------------------------------- ; Constants -SCREEN_HEIGHT = 200 -SCREEN_WIDTH = 320 +SCREEN_HEIGHT = YSIZE * 8 - 1 ; (origin is zero) +SCREEN_WIDTH = XSIZE * 8 - 1 ;---------------------------------------------------------------------------- ; Global variables. The bounding box values are sorted so that they can be @@ -67,12 +68,13 @@ Vars: OldPotX: .res 1 ; Old hw counter values OldPotY: .res 1 -YPos: .res 2 ; Current mouse position, Y XPos: .res 2 ; Current mouse position, X +YPos: .res 2 ; Current mouse position, Y XMin: .res 2 ; X1 value of bounding box YMin: .res 2 ; Y1 value of bounding box XMax: .res 2 ; X2 value of bounding box YMax: .res 2 ; Y2 value of bounding box +Buttons: .res 1 ; button status bits OldValue: .res 1 ; Temp for MoveCheck routine NewValue: .res 1 ; Temp for MoveCheck routine @@ -81,14 +83,17 @@ NewValue: .res 1 ; Temp for MoveCheck routine .rodata +; (We use ".proc" because we want to define both a label and a scope.) + .proc DefVars .byte 0, 0 ; OldPotX/OldPotY - .word SCREEN_HEIGHT/2 ; YPos .word SCREEN_WIDTH/2 ; XPos + .word SCREEN_HEIGHT/2 ; YPos .word 0 ; XMin .word 0 ; YMin .word SCREEN_WIDTH ; XMax .word SCREEN_HEIGHT ; YMax + .byte %00000000 ; Buttons .endproc .code @@ -126,7 +131,7 @@ INSTALL: ldx #$00 txa - rts ; Run into UNINSTALL instead + rts ;---------------------------------------------------------------------------- ; UNINSTALL routine. Is called before the driver is removed from memory. @@ -187,14 +192,10 @@ GETBOX: sta ptr1 stx ptr1+1 ; Save data pointer ldy #.sizeof (MOUSE_BOX)-1 - sei - @L1: lda XMin,y sta (ptr1),y dey bpl @L1 - - cli rts ;---------------------------------------------------------------------------- @@ -228,14 +229,9 @@ MOVE: sei ; No interrupts ; BUTTONS: Return the button mask in a/x. BUTTONS: - lda #$7F - sei - sta CIA1_PRA - lda CIA1_PRB ; Read joystick #0 - cli + lda Buttons ldx #0 and #$1F - eor #$1F rts ;---------------------------------------------------------------------------- @@ -297,14 +293,30 @@ IOCTL: lda # a/y) @@ -342,11 +354,11 @@ IRQ: lda SID_ADConv1 ; Get mouse X movement @SkipX: lda SID_ADConv2 ; Get mouse Y movement ldy OldPotY jsr MoveCheck ; Calculate movement - sty OldPotY ; Skip processing if nothing has changed bcc @SkipY + sty OldPotY ; Calculate the new Y coordinate (--> a/y) @@ -377,14 +389,14 @@ IRQ: lda SID_ADConv1 ; Get mouse X movement @L4: sty YPos stx YPos+1 -; Move the mouse pointer to the new X pos +; Move the mouse pointer to the new Y pos tya jsr CMOVEY ; Done - clc ; Interrupt not handled + clc ; Interrupt not "handled" @SkipY: rts ; -------------------------------------------------------------------------- @@ -412,7 +424,7 @@ MoveCheck: sec rts ; return -@L1: ora #%11000000 ; else or in high order bits +@L1: ora #%11000000 ; else, "or" in high-order bits cmp #$FF ; if (a != -1) beq @L2 sec diff --git a/libsrc/c64/c64-joymouse.s b/libsrc/c64/c64-joymouse.s index b264bacef..e99adac7a 100644 --- a/libsrc/c64/c64-joymouse.s +++ b/libsrc/c64/c64-joymouse.s @@ -2,6 +2,7 @@ ; Driver for a "joystick mouse". ; ; Ullrich von Bassewitz, 2004-03-29, 2009-09-26 +; 2010-02-08, Greg King ; .include "zeropage.inc" @@ -193,14 +194,12 @@ GETBOX: sta ptr1 stx ptr1+1 ; Save data pointer ldy #.sizeof (MOUSE_BOX)-1 - sei @L1: lda XMin,y sta (ptr1),y dey bpl @L1 - cli rts ;---------------------------------------------------------------------------- @@ -297,12 +296,18 @@ IOCTL: lda #