From fa51d14fb81eee1a92fb69158615e3ae7547f4b4 Mon Sep 17 00:00:00 2001 From: Quinn Dunki Date: Sat, 11 Jul 2015 17:54:39 -0700 Subject: [PATCH] Mouse support is now compatible with the //c --- .gitignore | 1 + .../xcshareddata/WeeGUI.xccheckout | 41 --------- mouse.s | 80 +++++++++++++++--- weegui.dsk | Bin 143360 -> 143360 bytes 4 files changed, 69 insertions(+), 53 deletions(-) delete mode 100644 WeeGUI.xcodeproj/project.xcworkspace/xcshareddata/WeeGUI.xccheckout diff --git a/.gitignore b/.gitignore index 73bee82..160cc34 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ asmdemo.lst weegui.lst MouseText.xcf Documentation_HTMLtables.md +WeeGUI.xcodeproj/project.xcworkspace/xcshareddata/WeeGUI.xccheckout diff --git a/WeeGUI.xcodeproj/project.xcworkspace/xcshareddata/WeeGUI.xccheckout b/WeeGUI.xcodeproj/project.xcworkspace/xcshareddata/WeeGUI.xccheckout deleted file mode 100644 index 8b995da..0000000 --- a/WeeGUI.xcodeproj/project.xcworkspace/xcshareddata/WeeGUI.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ - - - - - IDESourceControlProjectFavoriteDictionaryKey - - IDESourceControlProjectIdentifier - CF799A61-C8B1-43FD-B9D1-A4282374D325 - IDESourceControlProjectName - project - IDESourceControlProjectOriginsDictionary - - F041408A2ABBA5E27FC164AE936A5C1AA13AD5FD - https://github.com/blondie7575/WeeGUI - - IDESourceControlProjectPath - WeeGUI.xcodeproj/project.xcworkspace - IDESourceControlProjectRelativeInstallPathDictionary - - F041408A2ABBA5E27FC164AE936A5C1AA13AD5FD - ../.. - - IDESourceControlProjectURL - https://github.com/blondie7575/WeeGUI - IDESourceControlProjectVersion - 111 - IDESourceControlProjectWCCIdentifier - F041408A2ABBA5E27FC164AE936A5C1AA13AD5FD - IDESourceControlProjectWCConfigurations - - - IDESourceControlRepositoryExtensionIdentifierKey - public.vcs.git - IDESourceControlWCCIdentifierKey - F041408A2ABBA5E27FC164AE936A5C1AA13AD5FD - IDESourceControlWCCName - WeeGUI - - - - diff --git a/mouse.s b/mouse.s index 8794ddf..aa2b579 100644 --- a/mouse.s +++ b/mouse.s @@ -36,8 +36,10 @@ MOUSE_XL = $0478 ; + Slot Num MOUSE_XH = $0578 ; + Slot Num MOUSE_YL = $04f8 ; + Slot Num MOUSE_YH = $05f8 ; + Slot Num -MOUSE_CLAMPL = $04f8 -MOUSE_CLAMPH = $05f8 +MOUSE_CLAMPL = $04f8 ; Upper mouse clamp (LSB). Slot independent. +MOUSE_CLAMPH = $05f8 ; Upper mouse clamp (MSB). Slot independent. +MOUSE_ZEROL = $0478 ; Zero value of mouse (LSB). Slot independent. +MOUSE_ZEROH = $0578 ; Zero value of mouse (MSB). Slot independent. MOUSTAT_MASK_BUTTONINT = %00000100 MOUSTAT_MASK_MOVEINT = %00000010 @@ -77,6 +79,16 @@ WGEnableMouse: jsr WGFindMouse bcs WGEnableMouse_Error + ; Note if we're a //e or //c, because mouse tracking and interrupts are different + lda $fbb3 + cmp #$06 + bne WGEnableMouse_Error ; II or II+? Sorry... + lda $fbc0 + bne WGEnableMouse_IIe + lda #1 + sta WG_APPLEIIC + +WGEnableMouse_IIe: ; Install our interrupt handler via ProDOS (play nice!) jsr PRODOS_MLI .byte ALLOC_INTERRUPT @@ -96,9 +108,21 @@ WGEnableMouse: lda #MOUSEMODE_COMBINT ; Enable combination interrupt mode CALLMOUSE SETMOUSE + ; Set the mouse's zero postion to (1,1), since we're in text screen space + stz MOUSE_ZEROH + lda #0 + sta MOUSE_ZEROL + lda #1 + CALLMOUSE CLAMPMOUSE + lda #0 + CALLMOUSE CLAMPMOUSE + ; Scale the mouse's range into something easy to do math with, ; while retaining as much range of motion and precision as possible - lda #$80 ; 640 horizontally + lda WG_APPLEIIC + bne WGEnableMouse_ConfigIIc + + lda #$7f ; 640 - 1 horizontally sta MOUSE_CLAMPL lda #$02 sta MOUSE_CLAMPH @@ -111,19 +135,37 @@ WGEnableMouse: sta MOUSE_CLAMPH lda #1 CALLMOUSE CLAMPMOUSE + bra WGEnableMouse_Activate +WGEnableMouse_Error: + stz WG_MOUSEACTIVE + +WGEnableMouse_done: ; Exit point here for branch range + pla + rts + +WGEnableMouse_ConfigIIc: ; //c's tracking is weird. Need to clamp to a much smaller range + lda #$4f ; 80 - 1 horizontally + sta MOUSE_CLAMPL + lda #$00 + sta MOUSE_CLAMPH + lda #0 + CALLMOUSE CLAMPMOUSE + + lda #$17 ; 24 - 1 vertically + sta MOUSE_CLAMPL + lda #$00 + sta MOUSE_CLAMPH + lda #1 + CALLMOUSE CLAMPMOUSE + +WGEnableMouse_Activate: lda #1 sta WG_MOUSEACTIVE cli ; Once all setup is done, it's safe to enable interrupts bra WGEnableMouse_done -WGEnableMouse_Error: - stz WG_MOUSEACTIVE - -WGEnableMouse_done: - pla - rts ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -275,6 +317,7 @@ WGMouseInterruptHandler: CALLMOUSE SERVEMOUSE bcs WGMouseInterruptHandler_disregard + php sei lda PAGE2 ; Need to preserve text bank, because we may interrupt rendering @@ -296,6 +339,9 @@ WGMouseInterruptHandler: lda MOUSTAT,x ; Movement/button status bits are now valid sta WG_MOUSE_STAT + lda WG_APPLEIIC + bne WGMouseInterruptHandler_IIc + ; Read mouse position and transform it into screen space lsr MOUSE_XH,x ror MOUSE_XL,x @@ -320,7 +366,15 @@ WGMouseInterruptHandler: lda MOUSE_YL,x sta WG_MOUSEPOS_Y + bra WGMouseInterruptHandler_draw +WGMouseInterruptHandler_IIc: ; IIc tracks much slower, so don't scale + lda MOUSE_XL,x + sta WG_MOUSEPOS_X + lda MOUSE_YL,x + sta WG_MOUSEPOS_Y + +WGMouseInterruptHandler_draw: jsr WGDrawPointer ; Redraw the pointer bra WGMouseInterruptHandler_intDone @@ -338,8 +392,9 @@ WGMouseInterruptHandler_button: bit WG_MOUSE_STAT ; Check for rising edge of button state bpl WGMouseInterruptHandler_intDone + bvs WGMouseInterruptHandler_intDone ; Held, so ignore (//c only, but more elegant code to leave in for both) - ; Button was clicked, so make a note of location for later + ; Button went down, so make a note of location for later lda WG_MOUSEPOS_X sta WG_MOUSECLICK_X lda WG_MOUSEPOS_Y @@ -357,7 +412,7 @@ WGMouseInterruptHandler_intDoneBankOff: WGMouseInterruptHandler_done: RESTORE_AXY - cli + plp clc ; Notify ProDOS this was our interrupt rts @@ -528,7 +583,8 @@ WG_MOUSE_STAT: .byte 0 WG_MOUSEBG: .byte 0 - +WG_APPLEIIC: +.byte 0 WG_MOUSE_JUMPL: .byte 0 WG_MOUSE_JUMPH: diff --git a/weegui.dsk b/weegui.dsk index e6954c0cbaa7cda59e6fd48c8cc2fb60784d770c..0bf5e85b2b31250198c9c9be0d0f4a9d8897a731 100644 GIT binary patch delta 4118 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 P{+YpOcs~4c*bw+PqzMd&