From df52e291962a67530901c8e5750be120cec107e6 Mon Sep 17 00:00:00 2001 From: cuz Date: Thu, 16 Nov 2000 23:50:38 +0000 Subject: [PATCH] Updated the mouse module git-svn-id: svn://svn.cc65.org/cc65/trunk@440 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/c64/mouse.s | 46 +++++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/libsrc/c64/mouse.s b/libsrc/c64/mouse.s index 206901e7c..64c442865 100644 --- a/libsrc/c64/mouse.s +++ b/libsrc/c64/mouse.s @@ -9,8 +9,9 @@ .export _mouse_hide, _mouse_show .export _mouse_box, _mouse_info .export _mouse_x, _mouse_y - .export _mouse_move - + .export _mouse_move, _mouse_buttons + + .import _readjoy .import popa, popsreg, addysp1 .importzp sp, sreg @@ -22,7 +23,9 @@ ; -------------------------------------------------------------------------- ; -; void __fastcall__ mouse_init (unsigned char port, unsigned char sprite, unsigned char type); +; unsigned char __fastcall__ mouse_init (unsigned char port, +; unsigned char sprite, +; unsigned char type); ; _mouse_init: @@ -31,7 +34,7 @@ _mouse_init: jsr popa ; Get the port number ldy OldIRQ+1 ; Already initialized? - bne Done ; Jump if yes + bne AlreadyInitialized ; Jump if yes stx MouseSprite ; Remember the sprite number sta MousePort ; Remember the port number @@ -66,11 +69,18 @@ _mouse_init: lda IRQVec+1 sta OldIRQ+1 -; Set our own IRQ vector +; Set our own IRQ vector. We cheat here to save a few bytes of code: +; The function is expected to return a value not equal to zero on success, +; and since we know that the high byte of the IRQ handler address is never +; zweo, we will return just this byte. - lda #MouseIRQ - bne SetIRQ + ldx #MouseIRQ + bne SetIRQ ; Branch always + +AlreadyInitialized: + lda #0 ; Error + rts ; -------------------------------------------------------------------------- ; @@ -78,14 +88,14 @@ _mouse_init: ; _mouse_done: - lda OldIRQ ; Initialized? - ldx OldIRQ+1 - beq Done ; Jump if no + ldx OldIRQ ; Initialized? + lda OldIRQ+1 + beq Done ; Jump if no ldy #0 sty OldIRQ+1 ; Reset the initialized flag SetIRQ: sei ; Disable interrupts - sta IRQVec ; Set the new/old vector - stx IRQVec+1 + stx IRQVec ; Set the new/old vector + sta IRQVec+1 cli ; Enable interrupts Done: rts @@ -229,6 +239,16 @@ _mouse_move: @L9: cli ; Enable interrupts rts + +; -------------------------------------------------------------------------- +; +; unsigned char mouse_buttons (void); +; + +_mouse_buttons: + lda MousePort ; Get the port + jmp _readjoy ; Same as joystick + ; -------------------------------------------------------------------------- ; ; Mouse interrupt handler