1
0
mirror of https://github.com/cc65/cc65.git synced 2024-07-10 07:29:05 +00:00

Added new mouse functions

git-svn-id: svn://svn.cc65.org/cc65/trunk@888 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2001-09-10 18:42:50 +00:00
parent 44dfe5c73e
commit 1da6f339dc

View File

@ -8,18 +8,17 @@
.export _mouse_init, _mouse_done .export _mouse_init, _mouse_done
.export _mouse_hide, _mouse_show .export _mouse_hide, _mouse_show
.export _mouse_box, _mouse_info .export _mouse_box
.export _mouse_x, _mouse_y .export _mouse_pos, _mouse_info
.export _mouse_move, _mouse_buttons .export _mouse_move, _mouse_buttons
.import popax, popsreg, addysp1 .import popax, popsreg, addysp1
.importzp sp, sreg .importzp sp, sreg, ptr1
.include "../inc/const.inc" .include "../inc/const.inc"
.include "../inc/jumptab.inc" .include "../inc/jumptab.inc"
.include "../inc/geossym.inc" .include "../inc/geossym.inc"
; .macpack generic
.code .code
@ -75,10 +74,9 @@ _mouse_show = MouseUp
; ;
_mouse_box: _mouse_box:
ldy #0 ; Stack offset ldy #0 ; Stack offset
sta mouseBottom sta mouseBottom
; stx YMax+1 ; maxy
lda (sp),y lda (sp),y
sta mouseRight sta mouseRight
@ -89,9 +87,7 @@ _mouse_box:
iny iny
lda (sp),y lda (sp),y
sta mouseTop sta mouseTop
iny iny ; Skip high byte
; lda (sp),y
; sta YMin+1 ; miny
iny iny
lda (sp),y lda (sp),y
@ -104,32 +100,55 @@ _mouse_box:
; -------------------------------------------------------------------------- ; --------------------------------------------------------------------------
; ;
; int __fastcall__ mouse_x (void); ; void __fastcall__ mouse_pos (struct mouse_pos* pos);
; /* Return the current mouse position */
; ;
_mouse_x: _mouse_pos:
lda mouseXPos sta ptr1
ldx mouseXPos+1 stx ptr1+1 ; Remember the argument pointer
rts
ldy #0 ; Structure offset
sei ; Disable interrupts
lda mouseXPos ; Transfer the position
sta (ptr1),y
lda mouseXPos+1
iny
sta (ptr1),y
lda mouseYPos
iny
sta (ptr1),y
lda #$00
iny
sta (ptr1),y
cli ; Reenable interrupts
rts ; Done
; -------------------------------------------------------------------------- ; --------------------------------------------------------------------------
; ;
; int __fastcall__ mouse_y (void); ; void __fastcall__ mouse_info (struct mouse_info* info);
; ; /* Return the state of the mouse buttons and the position of the mouse */
_mouse_y:
lda mouseYPos
ldx #0
rts
; --------------------------------------------------------------------------
;
; void mouse_info (...);
; ;
_mouse_info: _mouse_info:
rts
; We're cheating here to keep the code smaller: The first fields of the
; mouse_info struct are identical to the mouse_pos struct, so we will just
; call _mouse_pos to initialize the struct pointer and fill the position
; fields.
jsr _mouse_pos
; Fill in the button state
jsr _mouse_buttons ; Will not touch ptr1
iny
sta (ptr1),y
rts
; -------------------------------------------------------------------------- ; --------------------------------------------------------------------------
; ;
@ -139,13 +158,12 @@ _mouse_info:
_mouse_move: _mouse_move:
jsr popsreg ; Get X jsr popsreg ; Get X
sei ; Disable interrupts sei ; Disable interrupts
sta mouseYPos sta mouseYPos
; stx YPos+1
lda sreg lda sreg
ldx sreg+1 ldx sreg+1
sta mouseXPos sta mouseXPos
stx mouseXPos+1 stx mouseXPos+1
cli ; Enable interrupts
rts rts
; -------------------------------------------------------------------------- ; --------------------------------------------------------------------------
@ -158,3 +176,4 @@ _mouse_buttons:
and #SET_MOUSE and #SET_MOUSE
lsr lsr
rts rts