mirror of
https://github.com/mi57730/a2d.git
synced 2025-02-18 02:30:50 +00:00
Identify several window-related calls
This commit is contained in:
parent
2d33e2be0c
commit
7f5924f870
15
a2d.inc
15
a2d.inc
@ -321,6 +321,13 @@ A2D_QUERY_STATE := $3C ; get drawing state of window
|
||||
;; .byte id window
|
||||
;; .addr state state definition to populate, like A2D_SET_STATE
|
||||
|
||||
A2D_UPDATE_STATE := $3D ; Update drawing state by passed window id
|
||||
;; ** Implementation appears buggy - or maybe just really cryptic ??? **
|
||||
;; (input length 2 bytes)
|
||||
;; .byte id window
|
||||
;; .byte ???
|
||||
|
||||
|
||||
A2D_REDRAW_WINDOW := $3E ; Draws window border, background, title bar, scroll bars
|
||||
;; (input length 1 byte)
|
||||
;; .byte id
|
||||
@ -332,12 +339,14 @@ A2D_QUERY_TARGET := $40
|
||||
;; .byte element (out) A2D_ELEM_*
|
||||
;; .byte id (out) of window
|
||||
|
||||
;; $41 used in DeskTop but not DAs - icon in window drop
|
||||
A2D_QUERY_TOP := $41 ; Get id of top window
|
||||
;; (input length 0 bytes)
|
||||
;; (output length 1 byte)
|
||||
;; .byte id (out) window, or 0 if none
|
||||
|
||||
;; $42 ???
|
||||
A2D_RAISE_WINDOW := $42 ; Make window topmost
|
||||
;; (input length 1 byte)
|
||||
;; .byte id
|
||||
;; .byte id window
|
||||
|
||||
A2D_CLOSE_CLICK := $43
|
||||
;; (input length 0 bytes)
|
||||
|
@ -28,6 +28,9 @@
|
||||
|
||||
;; $A8 - Menu count
|
||||
|
||||
;; $A9-$AA - Address of current window
|
||||
;; $AB-... - Copy of current window params (first 12 bytes)
|
||||
|
||||
;; $D0-$F3 - Drawing state
|
||||
;; $D0-$DF - Box
|
||||
;; $D0-D1 - left
|
||||
@ -78,8 +81,11 @@
|
||||
state_tmask := $F1
|
||||
state_font := $F2
|
||||
|
||||
sizeof_state := 36
|
||||
sizeof_window_params := $3A
|
||||
|
||||
sizeof_state := 36
|
||||
state_offset_in_window_params := $14
|
||||
next_offset_in_window_params := $38
|
||||
|
||||
active := $F4
|
||||
active_state := $F4 ; address of live state block
|
||||
@ -340,12 +346,12 @@ a2d_jump_table:
|
||||
.addr L7836 ; $3A
|
||||
.addr QUERY_WINDOW_IMPL ; $3B QUERY_WINDOW
|
||||
.addr QUERY_STATE_IMPL ; $3C QUERY_STATE
|
||||
.addr L761F ; $3D
|
||||
.addr UPDATE_STATE_IMPL ; $3D UPDATE_STATE
|
||||
.addr REDRAW_WINDOW_IMPL ; $3E REDRAW_WINDOW
|
||||
.addr L758C ; $3F
|
||||
.addr QUERY_TARGET_IMPL ; $40 QUERY_TARGET
|
||||
.addr L7639 ; $41
|
||||
.addr L74AC ; $42
|
||||
.addr QUERY_TOP_IMPL ; $41 QUERY_TOP
|
||||
.addr RAISE_WINDOW_IMPL ; $42 RAISE_WINDOW
|
||||
.addr CLOSE_CLICK_IMPL ; $43 CLOSE_CLICK
|
||||
.addr DRAG_WINDOW_IMPL ; $44 DRAG_WINDOW
|
||||
.addr DRAG_RESIZE_IMPL ; $45 DRAG_RESIZE
|
||||
@ -428,12 +434,12 @@ param_lengths:
|
||||
PARAM_DEFN 0, $00, 0 ; $3A
|
||||
PARAM_DEFN 1, $82, 0 ; $3B QUERY_WINDOW
|
||||
PARAM_DEFN 3, $82, 0 ; $3C QUERY_STATE
|
||||
PARAM_DEFN 2, $82, 0 ; $3D
|
||||
PARAM_DEFN 2, $82, 0 ; $3D UPDATE_STATE
|
||||
PARAM_DEFN 1, $82, 0 ; $3E REDRAW_WINDOW
|
||||
PARAM_DEFN 1, $82, 0 ; $3F
|
||||
PARAM_DEFN 4, state_pos, 0 ; $40 QUERY_TARGET
|
||||
PARAM_DEFN 0, $00, 0 ; $41
|
||||
PARAM_DEFN 1, $82, 0 ; $42
|
||||
PARAM_DEFN 1, $82, 0 ; $42 RAISE_WINDOW
|
||||
PARAM_DEFN 0, $00, 0 ; $43 CLOSE_CLICK
|
||||
PARAM_DEFN 5, $82, 0 ; $44 DRAG_WINDOW
|
||||
PARAM_DEFN 5, $82, 0 ; $45 DRAG_RESIZE
|
||||
@ -5886,22 +5892,28 @@ L7010: .byte $00
|
||||
|
||||
L7011: .addr $6FD3
|
||||
|
||||
L7013: lda L7011
|
||||
;; Start window enumeration at top ???
|
||||
.proc top_window
|
||||
lda L7011
|
||||
sta $A7
|
||||
lda L7011+1
|
||||
sta $A7+1
|
||||
lda L700B
|
||||
ldx L700B+1
|
||||
bne L7038
|
||||
L7025: rts
|
||||
bne next_window_L7038
|
||||
end: rts
|
||||
.endproc
|
||||
|
||||
L7026: lda $A9
|
||||
;; Look up next window in chain. $A9/$AA will point at
|
||||
;; window params block (also returned in X,A).
|
||||
.proc next_window
|
||||
lda $A9
|
||||
sta $A7
|
||||
lda $A9+1
|
||||
sta $A7+1
|
||||
ldy #$39
|
||||
ldy #next_offset_in_window_params+1
|
||||
lda ($A9),y
|
||||
beq L7025
|
||||
beq top_window::end ; if high byte is 0, end of chain
|
||||
tax
|
||||
dey
|
||||
lda ($A9),y
|
||||
@ -5911,8 +5923,8 @@ L703E: lda L700E
|
||||
ldx L700E+1
|
||||
L7044: sta $A9
|
||||
stx $A9+1
|
||||
ldy #$0B
|
||||
L704A: lda ($A9),y
|
||||
ldy #$0B ; copy first 12 bytes of window defintion to
|
||||
L704A: lda ($A9),y ; to $AB
|
||||
sta $AB,y
|
||||
dey
|
||||
bpl L704A
|
||||
@ -5925,23 +5937,28 @@ L7054: lda ($A9),y
|
||||
L705E: lda $A9
|
||||
ldx $A9+1
|
||||
rts
|
||||
.endproc
|
||||
next_window_L7038 := next_window::L7038
|
||||
|
||||
.proc L7063
|
||||
jsr L7013
|
||||
;; Look up window state by id (in $82); $A9/$AA will point at
|
||||
;; window params (also X,A).
|
||||
.proc window_by_id
|
||||
jsr top_window
|
||||
beq end
|
||||
loop: lda $AB
|
||||
cmp $82
|
||||
beq L705E
|
||||
jsr L7026
|
||||
beq next_window::L705E
|
||||
jsr next_window
|
||||
bne loop
|
||||
end: rts
|
||||
.endproc
|
||||
|
||||
;; Look up window state by id (in $82)
|
||||
;; Look up window state by id (in $82); $A9/$AA will point at
|
||||
;; window params (also X,A).
|
||||
;; This will exit the A2D call directly (restoring stack, etc)
|
||||
;; if the window is not found.
|
||||
.proc window_by_id
|
||||
jsr L7063
|
||||
.proc window_by_id_or_exit
|
||||
jsr window_by_id
|
||||
beq nope
|
||||
rts
|
||||
nope: lda #$9F
|
||||
@ -6105,7 +6122,7 @@ L718E: jsr L70B7
|
||||
lda $AD
|
||||
ldx $AD+1
|
||||
jsr draw_text
|
||||
L71AA: jsr L703E
|
||||
L71AA: jsr next_window::L703E
|
||||
bit $B0
|
||||
bpl L71B7
|
||||
jsr L7104
|
||||
@ -6121,7 +6138,7 @@ L71C1: lda $AC
|
||||
jsr L707F
|
||||
jsr L7104
|
||||
jsr L707F
|
||||
L71D3: jsr L703E
|
||||
L71D3: jsr next_window::L703E
|
||||
lda $AB
|
||||
cmp L700D
|
||||
bne L71E3
|
||||
@ -6251,7 +6268,7 @@ L72A0: jsr FILL_RECT_IMPL ; Draw title bar stripes between close box and t
|
||||
sta $97
|
||||
jsr FILL_RECT_IMPL ; Draw title bar stripes to right of title
|
||||
A2D_CALL A2D_SET_PATTERN, screen_state::pattern
|
||||
L72C9: jsr L703E
|
||||
L72C9: jsr next_window::L703E
|
||||
bit $B0
|
||||
bpl L7319
|
||||
jsr L7104
|
||||
@ -6334,7 +6351,7 @@ L7363: lda #$00
|
||||
sta $8C
|
||||
lda L71E4
|
||||
jsr L79A0
|
||||
jsr L703E
|
||||
jsr next_window::L703E
|
||||
L737B: lda $AF
|
||||
and #$01
|
||||
beq L738E
|
||||
@ -6342,7 +6359,7 @@ L737B: lda $AF
|
||||
sta $8C
|
||||
lda L71E4
|
||||
jsr L79A0
|
||||
jsr L703E
|
||||
jsr next_window::L703E
|
||||
L738E: lda $AC
|
||||
and #$04
|
||||
beq L73BE
|
||||
@ -6425,12 +6442,12 @@ L7408: pha
|
||||
|
||||
L7416: lda #$00
|
||||
sta L747A
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
beq L7430
|
||||
L7420: jsr L70B7
|
||||
jsr L7086
|
||||
bne L7434
|
||||
jsr L7026
|
||||
jsr next_window
|
||||
stx L747A
|
||||
bne L7420
|
||||
L7430: lda #$00
|
||||
@ -6482,7 +6499,7 @@ CREATE_WINDOW_IMPL:
|
||||
jmp a2d_exit_with_a
|
||||
|
||||
L748E: sta $82
|
||||
jsr L7063
|
||||
jsr window_by_id
|
||||
beq L749A
|
||||
lda #$9D
|
||||
jmp a2d_exit_with_a
|
||||
@ -6499,13 +6516,12 @@ L749A: lda params_addr
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
;;; $42 IMPL
|
||||
;;; RAISE_WINDOW IMPL
|
||||
|
||||
;;; 1 byte of params, copied to $82
|
||||
|
||||
;; Seems to be called when window becomes top-most
|
||||
L74AC:
|
||||
jsr window_by_id
|
||||
RAISE_WINDOW_IMPL:
|
||||
jsr window_by_id_or_exit
|
||||
cmp L700B
|
||||
bne L74BA
|
||||
cpx L700C
|
||||
@ -6513,7 +6529,7 @@ L74AC:
|
||||
rts
|
||||
|
||||
L74BA: jsr L74F4
|
||||
L74BD: ldy #$38
|
||||
L74BD: ldy #next_offset_in_window_params ; Called from elsewhere
|
||||
lda L700B
|
||||
sta ($A9),y
|
||||
iny
|
||||
@ -6525,20 +6541,20 @@ L74BD: ldy #$38
|
||||
pha
|
||||
jsr L653C
|
||||
jsr L6588
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
beq L74DE
|
||||
jsr L7205
|
||||
L74DE: pla
|
||||
sta L700C
|
||||
pla
|
||||
sta L700B
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
lda $AB
|
||||
sta L700D
|
||||
jsr L718E
|
||||
jmp L6553
|
||||
|
||||
L74F4: ldy #$38
|
||||
L74F4: ldy #next_offset_in_window_params ; Called from elsewhere
|
||||
lda ($A9),y
|
||||
sta ($A7),y
|
||||
iny
|
||||
@ -6552,12 +6568,14 @@ L74F4: ldy #$38
|
||||
|
||||
;;; 1 byte of params, copied to $C7
|
||||
|
||||
QUERY_WINDOW_IMPL:
|
||||
jsr window_by_id
|
||||
lda $A9
|
||||
ldx $A9+1
|
||||
ldy #$01
|
||||
.proc QUERY_WINDOW_IMPL
|
||||
ptr := $A9
|
||||
jsr window_by_id_or_exit
|
||||
lda ptr
|
||||
ldx ptr+1
|
||||
ldy #1
|
||||
jmp store_xa_at_params_y
|
||||
.endproc
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
@ -6565,15 +6583,10 @@ QUERY_WINDOW_IMPL:
|
||||
|
||||
;;; 1 byte of params, copied to $82
|
||||
|
||||
L750C: .byte $00
|
||||
L750D: .byte $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.byte $00,$00,$00,$00,$00,$00,$00,$00
|
||||
.byte $00,$00,$00,$00,$00
|
||||
L750C: .res 38,0
|
||||
|
||||
REDRAW_WINDOW_IMPL:
|
||||
jsr window_by_id
|
||||
.proc REDRAW_WINDOW_IMPL
|
||||
jsr window_by_id_or_exit
|
||||
lda $AB
|
||||
cmp L7010
|
||||
bne L753F
|
||||
@ -6588,11 +6601,11 @@ L7550: jsr L718E
|
||||
lda L7871
|
||||
bne L7561
|
||||
A2D_CALL A2D_SET_BOX, set_box_params
|
||||
L7561: jsr L703E
|
||||
L7561: jsr next_window::L703E
|
||||
lda active_state
|
||||
sta L750C
|
||||
lda active_state+1
|
||||
sta L750D
|
||||
sta L750C+1
|
||||
jsr L75C6
|
||||
php
|
||||
lda L758A
|
||||
@ -6602,6 +6615,7 @@ L7561: jsr L703E
|
||||
plp
|
||||
bcc L7582
|
||||
rts
|
||||
.endproc
|
||||
|
||||
L7582: jsr L758C
|
||||
L7585: lda #$A3
|
||||
@ -6618,7 +6632,7 @@ L758B: .byte $75
|
||||
|
||||
L758C: jsr SHOW_CURSOR_IMPL
|
||||
lda L750C
|
||||
ldx L750D
|
||||
ldx L750C+1
|
||||
sta active_state
|
||||
stx active_state+1
|
||||
jmp L6567
|
||||
@ -6629,7 +6643,7 @@ L758C: jsr SHOW_CURSOR_IMPL
|
||||
|
||||
QUERY_STATE_IMPL:
|
||||
jsr apply_state_to_active_state
|
||||
jsr window_by_id
|
||||
jsr window_by_id_or_exit
|
||||
lda $83
|
||||
sta params_addr
|
||||
lda $84
|
||||
@ -6700,46 +6714,58 @@ L75EA: lda $92,x
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
;;; $3D IMPL
|
||||
;;; UPDATE_STATE IMPL
|
||||
|
||||
;;; 2 bytes of params, copied to $82
|
||||
|
||||
L761F:
|
||||
jsr window_by_id
|
||||
lda $A9
|
||||
;; This updates current state from params ???
|
||||
;; The math is weird; $82 is the window id so
|
||||
;; how does ($82),y do anything useful - is
|
||||
;; this buggy ???
|
||||
|
||||
;; It seems like it's trying to update a fraction
|
||||
;; of the drawing state (from |pattern| to |font|)
|
||||
|
||||
.proc UPDATE_STATE_IMPL
|
||||
ptr := $A9
|
||||
|
||||
jsr window_by_id_or_exit
|
||||
lda ptr
|
||||
clc
|
||||
adc #$14
|
||||
sta $A9
|
||||
bcc L762D
|
||||
inc $AA
|
||||
L762D: ldy #sizeof_state-1
|
||||
L762F: lda ($82),y
|
||||
adc #state_offset_in_window_params
|
||||
sta ptr
|
||||
bcc :+
|
||||
inc ptr+1
|
||||
: ldy #sizeof_state-1
|
||||
loop: lda ($82),y
|
||||
sta ($A9),y
|
||||
dey
|
||||
cpy #$10
|
||||
bcs L762F
|
||||
bcs loop
|
||||
rts
|
||||
.endproc
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
;;; $41 IMPL
|
||||
;;; QUERY_TOP IMPL
|
||||
|
||||
L7639:
|
||||
jsr L7013
|
||||
beq L7642
|
||||
.proc QUERY_TOP_IMPL
|
||||
jsr top_window
|
||||
beq nope
|
||||
lda $AB
|
||||
bne L7644
|
||||
L7642: lda #$00
|
||||
L7644: ldy #$00
|
||||
bne :+
|
||||
nope: lda #0
|
||||
: ldy #0
|
||||
sta (params_addr),y
|
||||
rts
|
||||
.endproc
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
in_close_box: .byte 0
|
||||
|
||||
.proc CLOSE_CLICK_IMPL
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
beq end
|
||||
jsr L7157
|
||||
jsr L653F
|
||||
@ -6809,7 +6835,7 @@ L76B6: lda $83,x
|
||||
sta L76A3,x
|
||||
dex
|
||||
bpl L76B6
|
||||
jsr window_by_id
|
||||
jsr window_by_id_or_exit
|
||||
bit L7D74
|
||||
bpl L76D1
|
||||
jsr L817C
|
||||
@ -6818,7 +6844,7 @@ L76D1: jsr L653C
|
||||
lda #$02
|
||||
jsr set_fill_mode
|
||||
A2D_CALL A2D_SET_PATTERN, checkerboard_pattern
|
||||
L76E2: jsr L703E
|
||||
L76E2: jsr next_window::L703E
|
||||
jsr L7749
|
||||
jsr L70B7
|
||||
jsr L707F
|
||||
@ -6972,8 +6998,8 @@ L7814: rts
|
||||
|
||||
;;; 1 byte of params, copied to $82
|
||||
|
||||
DESTROY_WINDOW_IMPL:
|
||||
jsr window_by_id
|
||||
.proc DESTROY_WINDOW_IMPL
|
||||
jsr window_by_id_or_exit
|
||||
jsr L653C
|
||||
jsr L784C
|
||||
jsr L74F4
|
||||
@ -6981,17 +7007,18 @@ DESTROY_WINDOW_IMPL:
|
||||
lda ($A9),y
|
||||
and #$7F
|
||||
sta ($A9),y
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
lda $AB
|
||||
sta L700D
|
||||
lda #$00
|
||||
jmp L7872
|
||||
.endproc
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
;;; $3A IMPL
|
||||
|
||||
L7836: jsr L7013
|
||||
L7836: jsr top_window
|
||||
beq L7849
|
||||
ldy #$0A
|
||||
lda ($A9),y
|
||||
@ -7031,12 +7058,12 @@ L7872: sta L7010
|
||||
A2D_CALL A2D_SET_PATTERN, checkerboard_pattern
|
||||
A2D_CALL A2D_FILL_RECT, set_box_params_box
|
||||
jsr L6553
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
beq L78CA
|
||||
php
|
||||
sei
|
||||
jsr CALL_2B_IMPL
|
||||
L789E: jsr L7026
|
||||
L789E: jsr next_window
|
||||
bne L789E
|
||||
L78A3: jsr L67E4
|
||||
bcs L78C9
|
||||
@ -7049,10 +7076,10 @@ L78A3: jsr L67E4
|
||||
cmp L700D
|
||||
beq L78C9
|
||||
sta $82
|
||||
jsr L7063
|
||||
jsr window_by_id
|
||||
lda $A7
|
||||
ldx $A8
|
||||
jsr L7044
|
||||
jsr next_window::L7044
|
||||
jmp L78A3
|
||||
|
||||
L78C9: plp
|
||||
@ -7080,10 +7107,13 @@ height: .word 0
|
||||
|
||||
;;; $47 IMPL
|
||||
|
||||
L78E1:
|
||||
jsr window_by_id
|
||||
ldx #$02
|
||||
L78E6: lda $83,x
|
||||
;; $83/$84 += $B7/$B8
|
||||
;; $85/$86 += $B9/$BA
|
||||
|
||||
.proc L78E1
|
||||
jsr window_by_id_or_exit
|
||||
ldx #2
|
||||
loop: lda $83,x
|
||||
clc
|
||||
adc $B7,x
|
||||
sta $83,x
|
||||
@ -7092,15 +7122,16 @@ L78E6: lda $83,x
|
||||
sta $84,x
|
||||
dex
|
||||
dex
|
||||
bpl L78E6
|
||||
bpl loop
|
||||
bmi L790F
|
||||
.endproc
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
;;; 5 bytes of params, copied to $82
|
||||
|
||||
MAP_COORDS_IMPL:
|
||||
jsr window_by_id
|
||||
jsr window_by_id_or_exit
|
||||
ldx #$02
|
||||
L78FE: lda $83,x
|
||||
sec
|
||||
@ -7183,7 +7214,7 @@ L7971: cmp #$02
|
||||
L797B: rts
|
||||
|
||||
L797C: jsr L653C
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
bit $8C
|
||||
bpl L798C
|
||||
lda $B0
|
||||
@ -7355,7 +7386,7 @@ L7AA4: pha
|
||||
|
||||
QUERY_CLIENT_IMPL:
|
||||
jsr L653F
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
bne L7ACE
|
||||
lda #$A0
|
||||
jmp a2d_exit_with_a
|
||||
@ -7459,7 +7490,7 @@ L7B81: cmp #$02
|
||||
L7B8B: lda #$A4
|
||||
jmp a2d_exit_with_a
|
||||
|
||||
L7B90: jsr L7013
|
||||
L7B90: jsr top_window
|
||||
bne L7B9A
|
||||
lda #$A0
|
||||
jmp a2d_exit_with_a
|
||||
@ -7500,7 +7531,7 @@ L7BCB: lda $83,x
|
||||
sta L769F,x
|
||||
dex
|
||||
bpl L7BCB
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
bne L7BE0
|
||||
lda #$A0
|
||||
jmp a2d_exit_with_a
|
||||
@ -7521,7 +7552,7 @@ L7BFD: jsr L691B
|
||||
beq L7BFD
|
||||
jsr HIDE_CURSOR_IMPL
|
||||
jsr L707F
|
||||
jsr L7013
|
||||
jsr top_window
|
||||
jsr L7A73
|
||||
ldx #$00
|
||||
lda #$14
|
||||
@ -7681,7 +7712,7 @@ L7D30: cmp #$02
|
||||
L7D3A: lda #$A4
|
||||
jmp a2d_exit_with_a
|
||||
|
||||
L7D3F: jsr L7013
|
||||
L7D3F: jsr top_window
|
||||
bne L7D49
|
||||
lda #$A0
|
||||
jmp a2d_exit_with_a
|
||||
|
Loading…
x
Reference in New Issue
Block a user