; the Commodore 1351 mouse users guide.
;
; 2009-09-26, Ullrich von Bassewitz
-; 2014-03-17, Greg King
+; 2014-04-26, Christian Groessler
+; 2014-04-30, Greg King
;
.include "zeropage.inc"
.macpack generic
-IRQInd = $2FD
-
; ------------------------------------------------------------------------
; Header. Includes jump table
; Library reference
-libref:
- .addr $0000
+libref: .addr $0000
; Jump table
sta IRQInd+1
lda old_irq+1
sta IRQInd+2
- cli
+ ;cli
jsr HIDE ; Hide cursor on exit
lda INIT_save
; Fill in the button state
- jsr BUTTONS ; Will not touch ptr1
+ lda Buttons
ldy #MOUSE_INFO::BUTTONS
sta (ptr1),y
; Must return an error code in a/x.
;
-IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now
+IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now
ldx #>MOUSE_ERR_INV_IOCTL
rts
; Driver for a "joystick mouse".
;
; 2009-09-26, Ullrich von Bassewitz
-; 2014-03-17, Greg King
+; 2014-04-26, Christian Groessler
+; 2014-05-01, Greg King
;
.include "zeropage.inc"
.macpack generic
-IRQInd = $2FD
-
; ------------------------------------------------------------------------
; Header. Includes jump table
; Library reference
-libref:
- .addr $0000
+libref: .addr $0000
; Jump table
INIT_save: .res 1
-; Temporary value used in the int handler
-
-Temp: .res 1
-
; Keyboard buffer fill level at start of interrupt
old_key_count: .res 1
sta IRQInd+1
lda old_irq+1
sta IRQInd+2
- cli
+ ;cli
jsr HIDE ; Hide cursor on exit
lda INIT_save
BUTTONS:
lda Buttons
ldx #$00
+ and #MOUSE_BTN_LEFT ; Left button -- same as JOY::FIRE
rts
;----------------------------------------------------------------------------
; Fill in the button state
- lda Buttons
+ jsr BUTTONS
ldy #MOUSE_INFO::BUTTONS
sta (ptr1),y
; Must return an error code in a/x.
;
-IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now
+IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls for now
ldx #>MOUSE_ERR_INV_IOCTL
rts
lda CIA1_PRB ; Read joystick #0
and #$1F
eor #$1F ; Make all bits active high
- sta Temp
-
-; Check for a pressed button and place the result into Buttons
-
- ldx #$00 ; Assume no button pressed
- and #JOY::FIRE ; Check fire button
- beq @L0 ; Jump if not pressed
- ldx #MOUSE_BTN_LEFT ; Left (only) button is pressed
-@L0: stx Buttons
+ sta Buttons
; Check left/right
- lda Temp ; Read joystick #0
and #(JOY::LEFT | JOY::RIGHT)
beq @SkipX ;
; Calculate the Y movement vector
-@SkipX: lda Temp ; Read joystick #0
+@SkipX: lda Buttons ; Read joystick #0
and #(JOY::UP | JOY::DOWN) ; Check up/down
beq @SkipY ;
clc ; Interrupt not "handled"
rts
-.define OLD_BUTTONS Temp ; tells callback.inc where the old port status is stored
+.define OLD_BUTTONS Buttons ; tells callback.inc where the old port status is stored
.include "callback.inc"
;
; Christian Groessler, 24.04.2014
;
-; Check if there was joystick activity before and/or after the ROM handler.
+; Check if there was button/joystick activity before and/or after the ROM handler.
; If there was activity, discard the key presses since they are most
; probably "phantom" key presses.
;
; Pointer for library references by device drivers.
;
+; Helper-routines for the interrupt handler that rejects bogus keypresses
+; that are caused by mouse-like devices.
+;
; 2013-07-25, Greg King
+; 2014-04-26, Christian Groessler
;
.include "c128.inc"
;
_pen_adjuster:
.addr $0000
+
.addr IRQStub2
callback: ; callback into mouse driver after ROM IRQ handler has been run
.addr $0000 ; (filled in by mouse driver)
rts ; jump to callback routine
@IRQCont2:
-
+
; return from interrupt
; We could just jump to $FF33, but since I don't know whether this address is valid in all
; ROM versions, duplicate that code here.