]> git.sur5r.net Git - cc65/blobdiff - libsrc/c64/c64-joymouse.s
Changed the existing Commodore mouse drivers for the new API. UNTESTED!
[cc65] / libsrc / c64 / c64-joymouse.s
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