From fd0fa0241e6690987c63108f3432019f28285f8c Mon Sep 17 00:00:00 2001
From: "ol.sc"
Date: Sun, 27 Sep 2009 23:26:41 +0000
Subject: [PATCH] Adjusted driver to the recent kernel interface change (code
rearrange ment necessary to stay in 6502 branch reach).
git-svn-id: svn://svn.cc65.org/cc65/trunk@4251 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
libsrc/apple2/apple2-stdmou.s | 163 ++++++++++++++++++----------------
1 file changed, 87 insertions(+), 76 deletions(-)
diff --git a/libsrc/apple2/apple2-stdmou.s b/libsrc/apple2/apple2-stdmou.s
index 0cedfcac4..65d84a81a 100644
--- a/libsrc/apple2/apple2-stdmou.s
+++ b/libsrc/apple2/apple2-stdmou.s
@@ -39,7 +39,8 @@ status := $0778
.addr UNINSTALL
.addr HIDE
.addr SHOW
- .addr BOX
+ .addr SETBOX
+ .addr GETBOX
.addr MOVE
.addr BUTTONS
.addr POS
@@ -60,6 +61,7 @@ CMOVEY: jmp $0000 ; Move the cursor to Y coord
.bss
+box: .tag MOUSE_BOX
info: .tag MOUSE_INFO
slot: .res 1
visible:.res 1
@@ -80,6 +82,11 @@ values: .byte $38 ; Fixed
size = * - values
+inibox: .word 0 ; MinX
+ .word 0 ; MinY
+ .word 279 ; MaxX
+ .word 191 ; MaxY
+
; ------------------------------------------------------------------------
.data
@@ -135,9 +142,13 @@ next: inc ptr1+1
sta xparam+1
sta jump+2
+ ; Disable interrupts now because setting the slot number makes
+ ; the IRQ handler (maybe called due to some non-mouse IRQ) try
+ ; calling the firmware which isn't correctly set up yet
+ sei
+
; Convert to and save slot number
and #$0F
- sei
sta slot
; Convert to and patch I/O register index
@@ -164,22 +175,9 @@ next: inc ptr1+1
jsr firmware
; Set initial mouse clamps
- lda #<279
- ldx #>279
- sta pos2_lo
- stx pos2_hi
- lda #$00 ; Set x clamps
- sta pos1_lo
- sta pos1_hi
- ldx #CLAMPMOUSE
- jsr firmware
- lda #<191
- ldx #>191
- sta pos2_lo
- stx pos2_hi
- lda #$01 ; Set y clamps
- ldx #CLAMPMOUSE
- jsr firmware
+ lda #inibox
+ jsr SETBOX
; Set initial mouse position
ldx slot
@@ -220,74 +218,69 @@ UNINSTALL:
ldx #SETMOUSE
bne common ; Branch always
-; HIDE: Is called to hide the mouse cursor. The mouse kernel manages a
-; counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently visible and should get hidden. For most drivers,
-; no special action is required besides hiding the mouse cursor.
-; No return code required.
-HIDE:
- dec visible
- sei
- jsr CHIDE
- cli
- rts
-
-; SHOW: Is called to show the mouse cursor. The mouse kernel manages a
-; counter for calls to show/hide, and the driver entry point is only called
-; if the mouse is currently hidden and should become visible. For most drivers,
-; no special action is required besides enabling the mouse cursor.
-; No return code required.
-SHOW:
- inc visible
- 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:
- ; Apple II Mouse TechNote #1, Interrupt Environment with the Mouse:
- ; "Disable interrupts before placing position information in the screen holes."
- sei
-
- ; Set high clamp
- sta pos2_lo
- txa
-
- ldx #$01 ; Set y clamps
- ldy #$00 ; Start at top of stack
+SETBOX:
+ sta ptr1
+ stx ptr1+1
+
+ ; Set x clamps
+ ldx #$00
+ ldy #MOUSE_BOX::MINX
jsr :+
+
+ ; Set y clamps
+ ldx #$01
+ ldy #MOUSE_BOX::MINY
- ldx #$00 ; Set x clamps
- ldy #$00 ; Start at top of stack
+ ; Apple II Mouse TechNote #1, Interrupt Environment with the Mouse:
+ ; "Disable interrupts before placing position information in the
+ ; screen holes."
+: sei
- ; Set high clamp
- lda (sp),y
- iny
- sei
- sta pos2_lo
- lda (sp),y
+ ; Set low clamp
+ lda (ptr1),y
+ sta box,y
+ sta pos1_lo
iny
-: sta pos2_hi
+ lda (ptr1),y
+ sta box,y
+ sta pos1_hi
- ; Skip one parameter
+ ; Skip one word
iny
iny
- ; Set low clamp
- lda (sp),y
+ ; Set high clamp
iny
- sta pos1_lo
- lda (sp),y
- sta pos1_hi
+ lda (ptr1),y
+ sta box,y
+ sta pos2_lo
+ iny
+ lda (ptr1),y
+ sta box,y
+ sta pos2_hi
txa
ldx #CLAMPMOUSE
bne common ; Branch always
+; 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
+
+ ldy #.sizeof(MOUSE_BOX)-1
+: lda box,y
+ sta (ptr1),y
+ dey
+ bpl :-
+ rts
+
; MOVE: Move the mouse to a new position. The position is passed as it comes
; from the C program, that is: x on the stack and y in A/X. The C wrapper will
; remove the parameter from the stack on return.
@@ -319,6 +312,27 @@ MOVE:
ldx #POSMOUSE
bne common ; Branch always
+; HIDE: Is called to hide the mouse cursor. The mouse kernel manages a
+; counter for calls to show/hide, and the driver entry point is only called
+; if the mouse is currently visible and should get hidden. For most drivers,
+; no special action is required besides hiding the mouse cursor.
+; No return code required.
+HIDE:
+ dec visible
+ sei
+ jsr CHIDE
+ cli
+ rts
+
+; SHOW: Is called to show the mouse cursor. The mouse kernel manages a
+; counter for calls to show/hide, and the driver entry point is only called
+; if the mouse is currently hidden and should become visible. For most drivers,
+; no special action is required besides enabling the mouse cursor.
+; No return code required.
+SHOW:
+ inc visible
+ rts
+
; BUTTONS: Return the button mask in A/X.
BUTTONS:
lda info + MOUSE_INFO::BUTTONS
@@ -328,19 +342,16 @@ BUTTONS:
; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1.
; No return code required.
POS:
- ldx #.sizeof(MOUSE_POS)-1
+ ldy #.sizeof(MOUSE_POS)-1
bne copy ; Branch always
; INFO: Returns mouse position and current button mask in the MOUSE_INFO
; struct pointed to by ptr1. No return code required.
INFO:
- ldx #.sizeof(MOUSE_INFO)-1
-copy: txa
- tay
- sei
-: lda info,x
+ ldy #.sizeof(MOUSE_INFO)-1
+copy: sei
+: lda info,y
sta (ptr1),y
- dex
dey
bpl :-
cli
--
2.39.5