1
0
mirror of https://github.com/cc65/cc65.git synced 2025-01-11 11:30:13 +00:00

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
This commit is contained in:
uz 2009-09-26 11:35:32 +00:00
parent c70af3a36b
commit 634e84f12a
6 changed files with 244 additions and 130 deletions

View File

@ -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
sei
sta YMax
stx YMax+1
SETBOX: sta ptr1
stx ptr1+1 ; Save data pointer
@L1: lda (sp),y
sta XMax,y
ldy #.sizeof (MOUSE_BOX)-1
sei
@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

View File

@ -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
sei
sta YMax
stx YMax+1
SETBOX: sta ptr1
stx ptr1+1 ; Save data pointer
@L1: lda (sp),y
sta XMax,y
ldy #.sizeof (MOUSE_BOX)-1
sei
@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

View File

@ -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

View File

@ -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
sei
sta YMax
stx YMax+1
SETBOX: sta ptr1
stx ptr1+1 ; Save data pointer
@L1: lda (sp),y
sta XMax,y
ldy #.sizeof (MOUSE_BOX)-1
sei
@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

View File

@ -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
sei
sta YMax
stx YMax+1
SETBOX: sta ptr1
stx ptr1+1 ; Save data pointer
@L1: lda (sp),y
sta XMax,y
ldy #.sizeof (MOUSE_BOX)-1
sei
@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

View File

@ -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