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