mirror of
https://github.com/cc65/cc65.git
synced 2025-01-11 11:30:13 +00:00
Adapt to new mouse driver interface ('prep' and 'draw')
This commit is contained in:
parent
09aa007191
commit
d61b8754fb
@ -21,6 +21,7 @@
|
||||
.bss
|
||||
|
||||
backup: .res 1
|
||||
visible:.res 1
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
|
||||
@ -36,6 +37,8 @@ scrptr: .res 2
|
||||
_mouse_def_callbacks:
|
||||
.addr hide
|
||||
.addr show
|
||||
.addr prep
|
||||
.addr draw
|
||||
.addr movex
|
||||
.addr movey
|
||||
|
||||
@ -66,6 +69,9 @@ done:
|
||||
|
||||
; Hide the mouse cursor.
|
||||
hide:
|
||||
dec visible
|
||||
|
||||
prep:
|
||||
jsr getcursor ; Get character at cursor position
|
||||
cmp #cursor ; "mouse" character
|
||||
bne overwr ; no, probably program has overwritten it
|
||||
@ -76,6 +82,11 @@ overwr: sta backup
|
||||
|
||||
; Show the mouse cursor.
|
||||
show:
|
||||
inc visible
|
||||
|
||||
draw:
|
||||
lda visible
|
||||
beq done
|
||||
jsr getcursor ; Cursor visible at current position?
|
||||
sta backup ; Save character at cursor position
|
||||
lda #cursor
|
||||
|
@ -50,6 +50,8 @@ HEADER:
|
||||
|
||||
CHIDE: jmp $0000 ; Hide the cursor
|
||||
CSHOW: jmp $0000 ; Show the cursor
|
||||
CPREP: jmp $0000 ; Prepare to move the cursor
|
||||
CDRAW: jmp $0000 ; Draw the cursor
|
||||
CMOVEX: jmp $0000 ; Move the cursor to X coord
|
||||
CMOVEY: jmp $0000 ; Move the cursor to Y coord
|
||||
|
||||
@ -85,7 +87,6 @@ Buttons: .res 1 ; Button mask
|
||||
|
||||
|
||||
Temp: .res 1 ; Temporary value used in the int handler
|
||||
visible: .res 1
|
||||
|
||||
; Default values for above variables
|
||||
|
||||
@ -120,9 +121,8 @@ INSTALL:
|
||||
dex
|
||||
bpl @L1
|
||||
|
||||
; Be sure the mouse cursor is invisible and at the default location.
|
||||
; Make sure the mouse cursor is at the default location.
|
||||
|
||||
jsr CHIDE
|
||||
lda XPos
|
||||
ldx XPos+1
|
||||
jsr CMOVEX
|
||||
@ -149,8 +149,7 @@ UNINSTALL = HIDE ; Hide cursor on exit
|
||||
; no special action is required besides hiding the mouse cursor.
|
||||
; No return code required.
|
||||
|
||||
HIDE: dec visible
|
||||
php
|
||||
HIDE: php
|
||||
sei
|
||||
jsr CHIDE
|
||||
plp
|
||||
@ -163,8 +162,7 @@ HIDE: dec visible
|
||||
; no special action is required besides enabling the mouse cursor.
|
||||
; No return code required.
|
||||
|
||||
SHOW: inc visible
|
||||
php
|
||||
SHOW: php
|
||||
sei
|
||||
jsr CSHOW
|
||||
plp
|
||||
@ -225,7 +223,7 @@ MOVE: php
|
||||
pha
|
||||
txa
|
||||
pha
|
||||
jsr CHIDE
|
||||
jsr CPREP
|
||||
pla
|
||||
tax
|
||||
pla
|
||||
@ -241,15 +239,11 @@ MOVE: php
|
||||
dey
|
||||
lda (sp),y
|
||||
sta XPos ; New X position
|
||||
|
||||
jsr CMOVEX ; Move the cursor
|
||||
|
||||
lda visible
|
||||
beq @Ret
|
||||
|
||||
jsr CSHOW
|
||||
jsr CDRAW
|
||||
|
||||
@Ret: plp ; Restore interrupt flag
|
||||
plp ; Restore interrupt flag
|
||||
rts
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
@ -335,7 +329,7 @@ IRQ:
|
||||
eor #15
|
||||
sta Temp
|
||||
|
||||
jsr CHIDE
|
||||
jsr CPREP
|
||||
|
||||
; Check left/right
|
||||
|
||||
@ -435,11 +429,7 @@ IRQ:
|
||||
|
||||
; Done
|
||||
|
||||
@SkipY: lda visible
|
||||
beq @Done
|
||||
|
||||
jsr CSHOW
|
||||
|
||||
@Done: clc ; Interrupt not "handled"
|
||||
@SkipY: jsr CDRAW
|
||||
clc ; Interrupt not "handled"
|
||||
rts
|
||||
|
||||
|
@ -60,6 +60,8 @@ libref: .addr $0000
|
||||
|
||||
CHIDE: jmp $0000 ; Hide the cursor
|
||||
CSHOW: jmp $0000 ; Show the cursor
|
||||
CPREP: jmp $0000 ; Prepare to move the cursor
|
||||
CDRAW: jmp $0000 ; Draw the cursor
|
||||
CMOVEX: jmp $0000 ; Move the cursor to X coord
|
||||
CMOVEY: jmp $0000 ; Move the cursor to Y coord
|
||||
|
||||
@ -96,8 +98,6 @@ Buttons: .res 1 ; Button mask
|
||||
XPosWrk: .res 2
|
||||
YPosWrk: .res 2
|
||||
|
||||
visible: .res 1
|
||||
|
||||
.if .defined (AMIGA_MOUSE) .or .defined (ST_MOUSE)
|
||||
dumx: .res 1
|
||||
dumy: .res 1
|
||||
@ -170,9 +170,8 @@ INSTALL:
|
||||
dex
|
||||
bpl @L1
|
||||
|
||||
; Be sure the mouse cursor is invisible and at the default location.
|
||||
; Make sure the mouse cursor is at the default location.
|
||||
|
||||
jsr CHIDE
|
||||
lda XPos
|
||||
sta XPosWrk
|
||||
ldx XPos+1
|
||||
@ -276,8 +275,7 @@ UNINSTALL:
|
||||
; no special action is required besides hiding the mouse cursor.
|
||||
; No return code required.
|
||||
|
||||
HIDE: dec visible
|
||||
php
|
||||
HIDE: php
|
||||
sei
|
||||
jsr CHIDE
|
||||
plp
|
||||
@ -290,8 +288,7 @@ HIDE: dec visible
|
||||
; no special action is required besides enabling the mouse cursor.
|
||||
; No return code required.
|
||||
|
||||
SHOW: inc visible
|
||||
php
|
||||
SHOW: php
|
||||
sei
|
||||
jsr CSHOW
|
||||
plp
|
||||
@ -352,13 +349,8 @@ MOVE: php
|
||||
pha
|
||||
txa
|
||||
pha
|
||||
|
||||
lda visible
|
||||
beq @L01
|
||||
|
||||
jsr CHIDE
|
||||
|
||||
@L01: pla
|
||||
jsr CPREP
|
||||
pla
|
||||
tax
|
||||
pla
|
||||
|
||||
@ -377,15 +369,11 @@ MOVE: php
|
||||
lda (sp),y
|
||||
sta XPos ; New X position
|
||||
sta XPosWrk
|
||||
|
||||
jsr CMOVEX ; Move the cursor
|
||||
|
||||
lda visible
|
||||
beq @Ret
|
||||
jsr CDRAW
|
||||
|
||||
jsr CSHOW
|
||||
|
||||
@Ret: plp ; Restore interrupt flag
|
||||
plp ; Restore interrupt flag
|
||||
rts
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
@ -466,13 +454,11 @@ IRQ:
|
||||
ldx #MOUSE_BTN_LEFT
|
||||
@L0: stx Buttons
|
||||
|
||||
ldx visible
|
||||
beq @L1
|
||||
jsr CHIDE
|
||||
jsr CPREP
|
||||
|
||||
; Limit the X coordinate to the bounding box
|
||||
|
||||
@L1: lda XPosWrk+1
|
||||
lda XPosWrk+1
|
||||
ldy XPosWrk
|
||||
tax
|
||||
cpy XMin
|
||||
@ -518,14 +504,12 @@ IRQ:
|
||||
tya
|
||||
jsr CMOVEY
|
||||
|
||||
ldx visible
|
||||
beq @Done
|
||||
jsr CDRAW
|
||||
|
||||
jsr CSHOW
|
||||
|
||||
@Done: clc
|
||||
clc
|
||||
rts
|
||||
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; T1Han: Local IRQ routine to poll mouse
|
||||
;
|
||||
|
Loading…
x
Reference in New Issue
Block a user