From 634e84f12a64516203b0bb9cd244bf2474f37402 Mon Sep 17 00:00:00 2001 From: uz Date: Sat, 26 Sep 2009 11:35:32 +0000 Subject: [PATCH] Changed the existing Commodore mouse drivers for the new API. UNTESTED! git-svn-id: svn://svn.cc65.org/cc65/trunk@4232 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/c128/c128-1351.s | 55 ++++++++++++++++++--------- libsrc/c128/c128-joymouse.s | 59 +++++++++++++++++++---------- libsrc/c128/c128-potmouse.s | 65 ++++++++++++++++++++------------ libsrc/c64/c64-1351.s | 55 ++++++++++++++++++--------- libsrc/c64/c64-joymouse.s | 57 ++++++++++++++++++---------- libsrc/c64/c64-potmouse.s | 75 +++++++++++++++++++++++-------------- 6 files changed, 240 insertions(+), 126 deletions(-) diff --git a/libsrc/c128/c128-1351.s b/libsrc/c128/c128-1351.s index 1efbf7a01..999c57090 100644 --- a/libsrc/c128/c128-1351.s +++ b/libsrc/c128/c128-1351.s @@ -2,7 +2,7 @@ ; Driver for the 1351 proportional mouse. Parts of the code are from ; the Commodore 1351 mouse users guide. ; -; Ullrich von Bassewitz, 2003-12-29 +; Ullrich von Bassewitz, 2003-12-29, 2009-09-26 ; .include "zeropage.inc" @@ -29,7 +29,8 @@ HEADER: .addr UNINSTALL .addr HIDE .addr SHOW - .addr BOX + .addr SETBOX + .addr GETBOX .addr MOVE .addr BUTTONS .addr POS @@ -57,7 +58,8 @@ SCREEN_WIDTH = 320 ;---------------------------------------------------------------------------- ; Global variables. The bounding box values are sorted so that they can be -; written with the least effort in the BOX routine, so don't reorder them. +; written with the least effort in the SETBOX and GETBOX routines, so don't +; reorder them. .bss @@ -67,10 +69,10 @@ OldPotY: .res 1 YPos: .res 2 ; Current mouse position, Y XPos: .res 2 ; Current mouse position, X -YMax: .res 2 ; Y2 value of bounding box -XMax: .res 2 ; X2 value of bounding box -YMin: .res 2 ; Y1 value of bounding box 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 OldValue: .res 1 ; Temp for MoveCheck routine NewValue: .res 1 ; Temp for MoveCheck routine @@ -83,10 +85,10 @@ NewValue: .res 1 ; Temp for MoveCheck routine .byte 0, 0 ; OldPotX/OldPotY .word SCREEN_HEIGHT/2 ; YPos .word SCREEN_WIDTH/2 ; XPos - .word SCREEN_HEIGHT ; YMax - .word SCREEN_WIDTH ; XMax - .word 0 ; YMin .word 0 ; XMin + .word 0 ; YMin + .word SCREEN_WIDTH ; XMax + .word SCREEN_HEIGHT ; YMax .endproc .code @@ -157,21 +159,38 @@ SHOW: sei rts ;---------------------------------------------------------------------------- -; BOX: Set the mouse bounding box. The parameters are passed as they come from -; the C program, that is, maxy in a/x and the other parameters on the stack. -; The C wrapper will remove the parameters from the stack when the driver -; routine returns. +; SETBOX: Set the mouse bounding box. The parameters are passed as they come +; from the C program, that is, a pointer to a mouse_box struct in a/x. ; No checks are done if the mouse is currently inside the box, this is the job ; of the caller. It is not necessary to validate the parameters, trust the ; caller and save some code here. No return code required. -BOX: ldy #5 +SETBOX: sta ptr1 + stx ptr1+1 ; Save data pointer + + ldy #.sizeof (MOUSE_BOX)-1 sei - sta YMax - stx YMax+1 -@L1: lda (sp),y - sta XMax,y +@L1: lda (ptr1),y + sta XMin,y + dey + bpl @L1 + + cli + rts + +;---------------------------------------------------------------------------- +; GETBOX: Return the mouse bounding box. The parameters are passed as they +; come from the C program, that is, a pointer to a mouse_box struct in a/x. + +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 diff --git a/libsrc/c128/c128-joymouse.s b/libsrc/c128/c128-joymouse.s index e1263ec77..0cceaa7f1 100644 --- a/libsrc/c128/c128-joymouse.s +++ b/libsrc/c128/c128-joymouse.s @@ -1,7 +1,7 @@ ; ; Driver for a "joystick mouse". ; -; Ullrich von Bassewitz, 2004-04-05 +; Ullrich von Bassewitz, 2004-04-05, 2009-09-26 ; .include "zeropage.inc" @@ -28,7 +28,8 @@ HEADER: .addr UNINSTALL .addr HIDE .addr SHOW - .addr BOX + .addr SETBOX + .addr GETBOX .addr MOVE .addr BUTTONS .addr POS @@ -64,18 +65,19 @@ SCREEN_WIDTH = 320 ;---------------------------------------------------------------------------- ; Global variables. The bounding box values are sorted so that they can be -; written with the least effort in the BOX routine, so don't reorder them. +; written with the least effort in the SETBOX and GETBOX routines, so don't +; reorder them. .bss Vars: YPos: .res 2 ; Current mouse position, Y XPos: .res 2 ; Current mouse position, X -YMax: .res 2 ; Y2 value of bounding box -XMax: .res 2 ; X2 value of bounding box -YMin: .res 2 ; Y1 value of bounding box -XMin: .res 2 ; X1 value of bounding box -Buttons: .res 1 ; Button mask +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 mask ; Temporary value used in the int handler @@ -88,10 +90,10 @@ Temp: .res 1 .proc DefVars .word SCREEN_HEIGHT/2 ; YPos .word SCREEN_WIDTH/2 ; XPos - .word SCREEN_HEIGHT ; YMax - .word SCREEN_WIDTH ; XMax - .word 0 ; YMin .word 0 ; XMin + .word 0 ; YMin + .word SCREEN_WIDTH ; XMax + .word SCREEN_HEIGHT ; YMax .byte 0 ; Buttons .endproc @@ -163,21 +165,38 @@ SHOW: sei rts ;---------------------------------------------------------------------------- -; BOX: Set the mouse bounding box. The parameters are passed as they come from -; the C program, that is, maxy in a/x and the other parameters on the stack. -; The C wrapper will remove the parameters from the stack when the driver -; routine returns. +; SETBOX: Set the mouse bounding box. The parameters are passed as they come +; from the C program, that is, a pointer to a mouse_box struct in a/x. ; No checks are done if the mouse is currently inside the box, this is the job ; of the caller. It is not necessary to validate the parameters, trust the ; caller and save some code here. No return code required. -BOX: ldy #5 +SETBOX: sta ptr1 + stx ptr1+1 ; Save data pointer + + ldy #.sizeof (MOUSE_BOX)-1 sei - sta YMax - stx YMax+1 -@L1: lda (sp),y - sta XMax,y +@L1: lda (ptr1),y + sta XMin,y + dey + bpl @L1 + + cli + rts + +;---------------------------------------------------------------------------- +; GETBOX: Return the mouse bounding box. The parameters are passed as they +; come from the C program, that is, a pointer to a mouse_box struct in a/x. + +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 diff --git a/libsrc/c128/c128-potmouse.s b/libsrc/c128/c128-potmouse.s index fdb45763b..c6f7a1f86 100644 --- a/libsrc/c128/c128-potmouse.s +++ b/libsrc/c128/c128-potmouse.s @@ -1,7 +1,7 @@ ; ; Driver for a potentiometer "mouse" e.g. Koala Pad ; -; Ullrich von Bassewitz, 2004-03-29 +; Ullrich von Bassewitz, 2004-03-29, 2009-09-26 ; Stefan Haubenthal, 2006-08-20 ; @@ -29,7 +29,8 @@ HEADER: .addr UNINSTALL .addr HIDE .addr SHOW - .addr BOX + .addr SETBOX + .addr GETBOX .addr MOVE .addr BUTTONS .addr POS @@ -61,17 +62,18 @@ SCREEN_WIDTH = 320 ;---------------------------------------------------------------------------- ; Global variables. The bounding box values are sorted so that they can be -; written with the least effort in the BOX routine, so don't reorder them. +; written with the least effort in the SETBOX and GETBOX routines, so don't +; reorder them. .bss Vars: YPos: .res 2 ; Current mouse position, Y XPos: .res 2 ; Current mouse position, X -YMax: .res 2 ; Y2 value of bounding box -XMax: .res 2 ; X2 value of bounding box -YMin: .res 2 ; Y1 value of bounding box 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 mask ; Temporary value used in the int handler @@ -85,10 +87,10 @@ Temp: .res 1 .proc DefVars .word SCREEN_HEIGHT/2 ; YPos .word SCREEN_WIDTH/2 ; XPos - .word SCREEN_HEIGHT ; YMax - .word SCREEN_WIDTH ; XMax - .word 0 ; YMin .word 0 ; XMin + .word 0 ; YMin + .word SCREEN_WIDTH ; XMax + .word SCREEN_HEIGHT ; YMax .byte 0 ; Buttons .endproc @@ -160,26 +162,43 @@ SHOW: sei rts ;---------------------------------------------------------------------------- -; BOX: Set the mouse bounding box. The parameters are passed as they come from -; the C program, that is, maxy in a/x and the other parameters on the stack. -; The C wrapper will remove the parameters from the stack when the driver -; routine returns. +; SETBOX: Set the mouse bounding box. The parameters are passed as they come +; from the C program, that is, a pointer to a mouse_box struct in a/x. ; No checks are done if the mouse is currently inside the box, this is the job ; of the caller. It is not necessary to validate the parameters, trust the ; caller and save some code here. No return code required. -BOX: ldy #5 - sei - sta YMax - stx YMax+1 +SETBOX: sta ptr1 + stx ptr1+1 ; Save data pointer -@L1: lda (sp),y - sta XMax,y - dey - bpl @L1 + ldy #.sizeof (MOUSE_BOX)-1 + sei - cli - rts +@L1: lda (ptr1),y + sta XMin,y + dey + bpl @L1 + + cli + rts + +;---------------------------------------------------------------------------- +; GETBOX: Return the mouse bounding box. The parameters are passed as they +; come from the C program, that is, a pointer to a mouse_box struct in a/x. + +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 ;---------------------------------------------------------------------------- ; MOVE: Move the mouse to a new position. The position is passed as it comes diff --git a/libsrc/c64/c64-1351.s b/libsrc/c64/c64-1351.s index 132b69f9f..e6f57ca0d 100644 --- a/libsrc/c64/c64-1351.s +++ b/libsrc/c64/c64-1351.s @@ -2,7 +2,7 @@ ; Driver for the 1351 proportional mouse. Parts of the code are from ; the Commodore 1351 mouse users guide. ; -; Ullrich von Bassewitz, 2003-12-29 +; Ullrich von Bassewitz, 2003-12-29, 2009-09-26 ; .include "zeropage.inc" @@ -29,7 +29,8 @@ HEADER: .addr UNINSTALL .addr HIDE .addr SHOW - .addr BOX + .addr SETBOX + .addr GETBOX .addr MOVE .addr BUTTONS .addr POS @@ -57,7 +58,8 @@ SCREEN_WIDTH = 320 ;---------------------------------------------------------------------------- ; Global variables. The bounding box values are sorted so that they can be -; written with the least effort in the BOX routine, so don't reorder them. +; written with the least effort in the SETBOX and GETBOX routines, so don't +; reorder them. .bss @@ -67,10 +69,10 @@ OldPotY: .res 1 YPos: .res 2 ; Current mouse position, Y XPos: .res 2 ; Current mouse position, X -YMax: .res 2 ; Y2 value of bounding box -XMax: .res 2 ; X2 value of bounding box -YMin: .res 2 ; Y1 value of bounding box 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 OldValue: .res 1 ; Temp for MoveCheck routine NewValue: .res 1 ; Temp for MoveCheck routine @@ -83,10 +85,10 @@ NewValue: .res 1 ; Temp for MoveCheck routine .byte 0, 0 ; OldPotX/OldPotY .word SCREEN_HEIGHT/2 ; YPos .word SCREEN_WIDTH/2 ; XPos - .word SCREEN_HEIGHT ; YMax - .word SCREEN_WIDTH ; XMax - .word 0 ; YMin .word 0 ; XMin + .word 0 ; YMin + .word SCREEN_WIDTH ; XMax + .word SCREEN_HEIGHT ; YMax .endproc .code @@ -157,21 +159,38 @@ SHOW: sei rts ;---------------------------------------------------------------------------- -; BOX: Set the mouse bounding box. The parameters are passed as they come from -; the C program, that is, maxy in a/x and the other parameters on the stack. -; The C wrapper will remove the parameters from the stack when the driver -; routine returns. +; SETBOX: Set the mouse bounding box. The parameters are passed as they come +; from the C program, that is, a pointer to a mouse_box struct in a/x. ; No checks are done if the mouse is currently inside the box, this is the job ; of the caller. It is not necessary to validate the parameters, trust the ; caller and save some code here. No return code required. -BOX: ldy #5 +SETBOX: sta ptr1 + stx ptr1+1 ; Save data pointer + + ldy #.sizeof (MOUSE_BOX)-1 sei - sta YMax - stx YMax+1 -@L1: lda (sp),y - sta XMax,y +@L1: lda (ptr1),y + sta XMin,y + dey + bpl @L1 + + cli + rts + +;---------------------------------------------------------------------------- +; GETBOX: Return the mouse bounding box. The parameters are passed as they +; come from the C program, that is, a pointer to a mouse_box struct in a/x. + +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 diff --git a/libsrc/c64/c64-joymouse.s b/libsrc/c64/c64-joymouse.s index 44844fe6c..b264bacef 100644 --- a/libsrc/c64/c64-joymouse.s +++ b/libsrc/c64/c64-joymouse.s @@ -1,7 +1,7 @@ ; ; Driver for a "joystick mouse". ; -; Ullrich von Bassewitz, 2004-03-29 +; Ullrich von Bassewitz, 2004-03-29, 2009-09-26 ; .include "zeropage.inc" @@ -28,7 +28,8 @@ HEADER: .addr UNINSTALL .addr HIDE .addr SHOW - .addr BOX + .addr SETBOX + .addr GETBOX .addr MOVE .addr BUTTONS .addr POS @@ -64,18 +65,19 @@ SCREEN_WIDTH = 320 ;---------------------------------------------------------------------------- ; Global variables. The bounding box values are sorted so that they can be -; written with the least effort in the BOX routine, so don't reorder them. +; written with the least effort in the SETBOX and GETBOX routines, so don't +; reorder them. .bss Vars: YPos: .res 2 ; Current mouse position, Y XPos: .res 2 ; Current mouse position, X +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 -XMax: .res 2 ; X2 value of bounding box -YMin: .res 2 ; Y1 value of bounding box -XMin: .res 2 ; X1 value of bounding box -Buttons: .res 1 ; Button mask +Buttons: .res 1 ; Button mask ; Temporary value used in the int handler @@ -88,10 +90,10 @@ Temp: .res 1 .proc DefVars .word SCREEN_HEIGHT/2 ; YPos .word SCREEN_WIDTH/2 ; XPos - .word SCREEN_HEIGHT ; YMax - .word SCREEN_WIDTH ; XMax - .word 0 ; YMin .word 0 ; XMin + .word 0 ; YMin + .word SCREEN_WIDTH ; XMax + .word SCREEN_HEIGHT ; YMax .byte 0 ; Buttons .endproc @@ -163,21 +165,38 @@ SHOW: sei rts ;---------------------------------------------------------------------------- -; BOX: Set the mouse bounding box. The parameters are passed as they come from -; the C program, that is, maxy in a/x and the other parameters on the stack. -; The C wrapper will remove the parameters from the stack when the driver -; routine returns. +; SETBOX: Set the mouse bounding box. The parameters are passed as they come +; from the C program, that is, a pointer to a mouse_box struct in a/x. ; No checks are done if the mouse is currently inside the box, this is the job ; of the caller. It is not necessary to validate the parameters, trust the ; caller and save some code here. No return code required. -BOX: ldy #5 +SETBOX: sta ptr1 + stx ptr1+1 ; Save data pointer + + ldy #.sizeof (MOUSE_BOX)-1 sei - sta YMax - stx YMax+1 -@L1: lda (sp),y - sta XMax,y +@L1: lda (ptr1),y + sta XMin,y + dey + bpl @L1 + + cli + rts + +;---------------------------------------------------------------------------- +; GETBOX: Return the mouse bounding box. The parameters are passed as they +; come from the C program, that is, a pointer to a mouse_box struct in a/x. + +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 diff --git a/libsrc/c64/c64-potmouse.s b/libsrc/c64/c64-potmouse.s index cd2bc9543..b49552ae8 100644 --- a/libsrc/c64/c64-potmouse.s +++ b/libsrc/c64/c64-potmouse.s @@ -1,7 +1,7 @@ ; ; Driver for a potentiometer "mouse" e.g. Koala Pad ; -; Ullrich von Bassewitz, 2004-03-29 +; Ullrich von Bassewitz, 2004-03-29, 2009-09-26 ; Stefan Haubenthal, 2006-08-20 ; @@ -29,7 +29,8 @@ HEADER: .addr UNINSTALL .addr HIDE .addr SHOW - .addr BOX + .addr SETBOX + .addr GETBOX .addr MOVE .addr BUTTONS .addr POS @@ -61,22 +62,23 @@ SCREEN_WIDTH = 320 ;---------------------------------------------------------------------------- ; Global variables. The bounding box values are sorted so that they can be -; written with the least effort in the BOX routine, so don't reorder them. +; written with the least effort in the SETBOX and GETBOX routines, so don't +; reorder them. .bss Vars: -YPos: .res 2 ; Current mouse position, Y -XPos: .res 2 ; Current mouse position, X -YMax: .res 2 ; Y2 value of bounding box -XMax: .res 2 ; X2 value of bounding box -YMin: .res 2 ; Y1 value of bounding box -XMin: .res 2 ; X1 value of bounding box -Buttons: .res 1 ; Button mask +YPos: .res 2 ; Current mouse position, Y +XPos: .res 2 ; Current mouse position, X +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 mask ; Temporary value used in the int handler -Temp: .res 1 +Temp: .res 1 ; Default values for above variables @@ -85,10 +87,10 @@ Temp: .res 1 .proc DefVars .word SCREEN_HEIGHT/2 ; YPos .word SCREEN_WIDTH/2 ; XPos - .word SCREEN_HEIGHT ; YMax - .word SCREEN_WIDTH ; XMax - .word 0 ; YMin .word 0 ; XMin + .word 0 ; YMin + .word SCREEN_WIDTH ; XMax + .word SCREEN_HEIGHT ; YMax .byte 0 ; Buttons .endproc @@ -160,26 +162,43 @@ SHOW: sei rts ;---------------------------------------------------------------------------- -; BOX: Set the mouse bounding box. The parameters are passed as they come from -; the C program, that is, maxy in a/x and the other parameters on the stack. -; The C wrapper will remove the parameters from the stack when the driver -; routine returns. +; SETBOX: Set the mouse bounding box. The parameters are passed as they come +; from the C program, that is, a pointer to a mouse_box struct in a/x. ; No checks are done if the mouse is currently inside the box, this is the job ; of the caller. It is not necessary to validate the parameters, trust the ; caller and save some code here. No return code required. -BOX: ldy #5 - sei - sta YMax - stx YMax+1 +SETBOX: sta ptr1 + stx ptr1+1 ; Save data pointer -@L1: lda (sp),y - sta XMax,y - dey - bpl @L1 + ldy #.sizeof (MOUSE_BOX)-1 + sei - cli - rts +@L1: lda (ptr1),y + sta XMin,y + dey + bpl @L1 + + cli + rts + +;---------------------------------------------------------------------------- +; GETBOX: Return the mouse bounding box. The parameters are passed as they +; come from the C program, that is, a pointer to a mouse_box struct in a/x. + +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 ;---------------------------------------------------------------------------- ; MOVE: Move the mouse to a new position. The position is passed as it comes -- 2.39.5