mirror of
https://github.com/mi57730/a2d.git
synced 2025-02-07 22:30:59 +00:00
Calc: disentangle input params
This commit is contained in:
parent
dbc26c14c9
commit
96d7ccf9d8
@ -86,8 +86,10 @@ A2D_SHOW_CURSOR := $25
|
||||
A2D_HIDE_CURSOR := $26
|
||||
;; no parameters (pass $0000 as address)
|
||||
|
||||
A2D_GET_BUTTON := $2A
|
||||
;; .byte state (0=up, 1=pressed, 2=held???)
|
||||
A2D_GET_INPUT := $2A
|
||||
;; .byte state (0=up, 1=press, 2=release, 3=key, 4=held)
|
||||
;; .byte key (ASCII code; high bit clear)
|
||||
;; .byte modifiers (0=none, 1=open-apple, 2=closed-apple, 3=both)
|
||||
|
||||
A2D_UNK_2B := $2B ; Unknown
|
||||
;; no parameters (pass $0000 as address)
|
||||
@ -134,7 +136,7 @@ A2D_DESTROY_WINDOW := $39
|
||||
A2D_UNK_3C := $3C ; Unknown, used in calculator
|
||||
|
||||
A2D_GET_MOUSE := $40
|
||||
;; .word x
|
||||
;; .word x (relative to screen)
|
||||
;; .word y
|
||||
;; .byte element (A2D_ELEM_*)
|
||||
;; 0 = desktop
|
||||
@ -158,7 +160,12 @@ A2D_DRAG_RESIZE := $45
|
||||
|
||||
A2D_UNK_44 := $44 ; Unknown - used in calculator
|
||||
|
||||
A2D_UNK_46 := $46 ; Unknown - used in calculator
|
||||
A2D_MAP_COORDS := $46 ; Map screen coords to client coords
|
||||
;; .byte window_id
|
||||
;; .word screenx
|
||||
;; .word screeny
|
||||
;; .word clientx
|
||||
;; .word clienty
|
||||
|
||||
A2D_QUERY_CLIENT:= $48
|
||||
;; .word xcoord of query
|
||||
@ -181,6 +188,12 @@ A2D_UPDATE_SCROLL:= $4B
|
||||
;; .byte type (1 = vertical, 2 = horizontal)
|
||||
;; .byte pos (new position 0...250)
|
||||
|
||||
;;; Used in A2D_GET_INPUT
|
||||
A2D_INPUT_NONE := 0 ; No mouse or keypress
|
||||
A2D_INPUT_DOWN := 1 ; Mouse button was depressed
|
||||
A2D_INPUT_UP := 2 ; Mouse button was released
|
||||
A2D_INPUT_KEY := 3 ; Key was pressed
|
||||
A2D_INPUT_HELD := 4 ; Mouse button still down
|
||||
|
||||
;;; Used in A2D_GET_MOUSE
|
||||
A2D_ELEM_DESKTOP:= 0
|
||||
|
@ -153,16 +153,24 @@ L08C4: rts
|
||||
;;; ==================================================
|
||||
;;; Call Params (and other data)
|
||||
|
||||
.proc button_state_params
|
||||
state: .byte 0
|
||||
.endproc
|
||||
;; falls through?
|
||||
;; The following 3 params blocks overlap for data re-use
|
||||
|
||||
.proc map_coords_params
|
||||
id := *
|
||||
screen := * + 1
|
||||
screenx := * + 1 ; aligns with get_mouse_params::xcoord
|
||||
screeny := * + 3 ; aligns with get_mouse_params::ycoord
|
||||
client := * + 5
|
||||
clientx := * + 5
|
||||
clienty := * + 7
|
||||
.endproc
|
||||
|
||||
.proc input_state_params
|
||||
state: .byte 0
|
||||
key := *
|
||||
modifiers := * + 1
|
||||
.endproc
|
||||
|
||||
keychar: ; this params block is getting reused "creatively"
|
||||
keydown := * + 1
|
||||
tpp := * + 4
|
||||
clickx := * + 4
|
||||
clicky := * + 6
|
||||
.proc get_mouse_params
|
||||
xcoord: .word 0
|
||||
ycoord: .word 0
|
||||
@ -632,9 +640,9 @@ L0D18: sta ALTZPON
|
||||
A2D_CALL A2D_TEXT_BOX1, L0C6E
|
||||
A2D_CALL $2B, 0
|
||||
lda #$01
|
||||
sta button_state_params::state
|
||||
A2D_CALL $2D, button_state_params
|
||||
A2D_CALL A2D_GET_BUTTON, button_state_params
|
||||
sta input_state_params::state
|
||||
A2D_CALL $2D, input_state_params
|
||||
A2D_CALL A2D_GET_INPUT, input_state_params
|
||||
lda ROMIN2
|
||||
jsr reset_buffer2
|
||||
lda #window_id
|
||||
@ -697,16 +705,16 @@ loop: lda adjust_txtptr_copied-1,x
|
||||
;;; Input Loop
|
||||
|
||||
input_loop:
|
||||
A2D_CALL $2A, button_state_params
|
||||
lda button_state_params::state
|
||||
cmp #$01
|
||||
A2D_CALL A2D_GET_INPUT, input_state_params
|
||||
lda input_state_params::state
|
||||
cmp #A2D_INPUT_DOWN
|
||||
bne :+
|
||||
jsr on_click
|
||||
jmp input_loop
|
||||
|
||||
: cmp #$03
|
||||
: cmp #A2D_INPUT_KEY
|
||||
bne input_loop
|
||||
jsr L0E6F ; key
|
||||
jsr on_key_press
|
||||
jmp input_loop
|
||||
|
||||
;;; ==================================================
|
||||
@ -770,10 +778,10 @@ loop: lda routine,x
|
||||
: cmp #A2D_ELEM_TITLE ; Title bar?
|
||||
bne ignore_click
|
||||
lda #window_id
|
||||
sta button_state_params::state
|
||||
sta map_coords_params::id
|
||||
lda LCBANK1
|
||||
lda LCBANK1
|
||||
A2D_CALL $44, button_state_params
|
||||
A2D_CALL $44, map_coords_params ; window drag?
|
||||
lda ROMIN2
|
||||
jsr call_4015_main
|
||||
rts
|
||||
@ -781,10 +789,10 @@ loop: lda routine,x
|
||||
;;; ==================================================
|
||||
;;; On Key Press
|
||||
|
||||
.proc L0E6F
|
||||
lda keydown
|
||||
.proc on_key_press
|
||||
lda input_state_params::modifiers
|
||||
bne bail
|
||||
lda keychar ; check key
|
||||
lda input_state_params::key
|
||||
cmp #$1B ; Escape?
|
||||
bne trydel
|
||||
lda L0BC5
|
||||
@ -810,13 +818,13 @@ L0E94: rts ; used by prev/next proc
|
||||
|
||||
.proc map_click_to_button
|
||||
lda #window_id
|
||||
sta button_state_params::state
|
||||
A2D_CALL $46, button_state_params
|
||||
lda clickx+1 ; ensure high bits of coords are 0
|
||||
ora clicky+1
|
||||
sta map_coords_params::id
|
||||
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
||||
lda map_coords_params::clientx+1 ; ensure high bits of coords are 0
|
||||
ora map_coords_params::clienty+1
|
||||
bne L0E94
|
||||
lda clicky ; click y
|
||||
ldx clickx ; click x
|
||||
lda map_coords_params::clienty
|
||||
ldx map_coords_params::clientx
|
||||
|
||||
.proc find_button_row
|
||||
cmp #row1_top+border_lt - 1 ; row 1 ? (- 1 is bug in original?)
|
||||
@ -858,7 +866,7 @@ L0E94: rts ; used by prev/next proc
|
||||
|
||||
: cmp #row5_top-border_lt ; special case for tall + button
|
||||
bcs :+
|
||||
lda clickx
|
||||
lda map_coords_params::clientx
|
||||
cmp #col4_left-border_lt
|
||||
bcc miss
|
||||
cmp #col4_right+border_br-1 ; is -1 bug in original?
|
||||
@ -874,7 +882,7 @@ L0E94: rts ; used by prev/next proc
|
||||
lda row5_lookup,x
|
||||
rts
|
||||
|
||||
: lda clickx ; special case for wide 0 button
|
||||
: lda map_coords_params::clientx ; special case for wide 0 button
|
||||
cmp #col1_left-border_lt
|
||||
bcc miss
|
||||
cmp #col2_right+border_br
|
||||
@ -1309,14 +1317,14 @@ end: jsr display_buffer1
|
||||
ror $FC
|
||||
clear: A2D_CALL A2D_FILL_RECT, 0, invert_addr ; Inverts box
|
||||
check_button:
|
||||
A2D_CALL A2D_GET_BUTTON, button_state_params
|
||||
lda button_state_params::state
|
||||
cmp #$04 ; Button down?
|
||||
A2D_CALL A2D_GET_INPUT, input_state_params
|
||||
lda input_state_params::state
|
||||
cmp #A2D_INPUT_HELD ; Button down?
|
||||
bne done ; Nope, done immediately
|
||||
lda #window_id
|
||||
sta button_state_params::state
|
||||
A2D_CALL $46, button_state_params
|
||||
A2D_CALL A2D_SET_TEXT_POS, tpp
|
||||
sta map_coords_params::id
|
||||
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
||||
A2D_CALL A2D_SET_TEXT_POS, map_coords_params::client
|
||||
A2D_CALL $13, 0, c13_addr
|
||||
bne :+
|
||||
lda $FC
|
||||
|
@ -203,7 +203,7 @@ base: .word 0
|
||||
.endproc
|
||||
|
||||
|
||||
.proc button_params ; queried to track mouse-up
|
||||
.proc input_params ; queried to track mouse-up
|
||||
state: .byte $00
|
||||
.endproc
|
||||
|
||||
@ -380,8 +380,8 @@ end: rts
|
||||
;;; Main Input Loop
|
||||
|
||||
.proc input_loop
|
||||
A2D_CALL A2D_GET_BUTTON, button_params
|
||||
lda button_params::state
|
||||
A2D_CALL A2D_GET_INPUT, input_params
|
||||
lda input_params::state
|
||||
cmp #1 ; was clicked?
|
||||
bne input_loop ; nope, keep waiting
|
||||
|
||||
|
@ -245,7 +245,7 @@ track_scroll_delta:
|
||||
fixed_mode_flag:
|
||||
.byte $00 ; 0 = proportional, otherwise = fixed
|
||||
|
||||
button_state: ; queried to track mouse-up
|
||||
input_params: ; queried to track mouse-up
|
||||
.byte $00
|
||||
|
||||
.proc mouse_params ; queried by main input loop
|
||||
@ -510,8 +510,8 @@ loop: lda $8802,x
|
||||
;;; Main Input Loop
|
||||
|
||||
input_loop:
|
||||
A2D_CALL A2D_GET_BUTTON, button_state
|
||||
lda button_state
|
||||
A2D_CALL A2D_GET_INPUT, input_params
|
||||
lda input_params
|
||||
cmp #1 ; was clicked?
|
||||
bne input_loop ; nope, keep waiting
|
||||
|
||||
@ -869,8 +869,8 @@ store: sta window_params::hscroll_pos
|
||||
|
||||
;;; Checks button state; z clear if button was released, set otherwise
|
||||
.proc was_button_released
|
||||
A2D_CALL A2D_GET_BUTTON, button_state
|
||||
lda button_state
|
||||
A2D_CALL A2D_GET_INPUT, input_params
|
||||
lda input_params
|
||||
cmp #2
|
||||
rts
|
||||
.endproc
|
||||
|
Loading…
x
Reference in New Issue
Block a user