]> git.sur5r.net Git - cc65/commitdiff
Changed the existing Commodore mouse drivers for the new API. UNTESTED!
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 26 Sep 2009 11:35:32 +0000 (11:35 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 26 Sep 2009 11:35:32 +0000 (11:35 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4232 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c128/c128-1351.s
libsrc/c128/c128-joymouse.s
libsrc/c128/c128-potmouse.s
libsrc/c64/c64-1351.s
libsrc/c64/c64-joymouse.s
libsrc/c64/c64-potmouse.s

index 1efbf7a01307e6a56be1044c449f6a6b563ff3fe..999c57090cdcbe73ae7e3d885a460ec7adf57b54 100644 (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
+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
 
index e1263ec77dd34576c00dede887d7101c2c1d1257..0cceaa7f1e5add370b30baa76a37ff5e5ef9ff58 100644 (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
+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
 
index fdb45763b3cfbe3d80ab16c46732b445649609fa..c6f7a1f86243b2a0ebc18b1e6eb2d2c8d751b31d 100644 (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
index 132b69f9f3a3225c38aa996fcf289bccb720e1cf..e6f57ca0d61ca2f6c3eb0155ab561aa9ac4f942a 100644 (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
+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
 
index 44844fe6c6e2c1e3874f8f4d0d3fc37d92e29362..b264bacef1464f0ac8bec4238a4b92188bcea520 100644 (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
+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
 
index cd2bc9543fbf622eaf92edc06ee67d7d215fc830..b49552ae865160d45cb054aaaa15694ddf9bd3c7 100644 (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