diff --git a/desk.acc/show.text.file/a2d.inc b/desk.acc/show.text.file/a2d.inc index 4b0d9da..adcd953 100644 --- a/desk.acc/show.text.file/a2d.inc +++ b/desk.acc/show.text.file/a2d.inc @@ -6,10 +6,38 @@ A2D := $4000 UNKNOWN_CALL := $8E00 -A2D_TEXT := $19 ; { .addr data, .byte len } -A2D_GET_BUTTON := $2A ; { .byte state (0=up, 1=down?, 2=released?) } -A2D_GET_MOUSE := $40 ; { .word x, .word y, ????...} -A2D_BTN_CLICK := $43 ; { .byte clicked (0=cancelled, 1=clicked), .byte ??, byte ?? } +A2D_DRAW_TEXT := $19 + ;; .addr data + ;; .byte length + +A2D_GET_BUTTON := $2A + ;; .byte state (0=up, 1=down?, 2=released?) + +A2D_GET_MOUSE := $40 + ;; .word x + ;; .word y + ;; .word element + ;; 0 = ?? + ;; 1 = ?? + ;; 2 = client area/scroll bar + ;; 3 = title bar + ;; 4 = ??? (but tested for?) + ;; 5 = close box + ;; .word window + ;; $0 = outside window + ;; $64 = in window + +A2D_BTN_CLICK := $43 + ;; .byte clicked (0 = cancelled, 1 = clicked) + ;; .byte ?? + ;; .byte ?? + +A2D_QUERY_CLIENT:= $48 + ;; .word xcoord of query + ;; .word ycoord of query + ;; .byte part (0 = client, 1 = vertical scroll bar, 2 = ???) + ;; .byte scroll (1 = up, 2 = down, 3 = above, 4 = below, 5 = thumb) + ;;; Macros .macro A2D_CALL op, addr diff --git a/desk.acc/show.text.file/stf.list b/desk.acc/show.text.file/stf.list index c6896ca..39af6fb 100644 --- a/desk.acc/show.text.file/stf.list +++ b/desk.acc/show.text.file/stf.list @@ -76,10 +76,38 @@ Current file: stf.s 000800 2 A2D := $4000 000800 2 UNKNOWN_CALL := $8E00 000800 2 -000800 2 A2D_TEXT := $19 ; { .addr data, .byte len } -000800 2 A2D_GET_BUTTON := $2A ; { .byte state (0=up, 1=down?, 2=released?) } -000800 2 A2D_GET_MOUSE := $40 ; { .word x, .word y, ????...} -000800 2 A2D_BTN_CLICK := $43 ; { .byte clicked (0=cancelled, 1=clicked), .byte ??, byte ?? } +000800 2 A2D_DRAW_TEXT := $19 +000800 2 ;; .addr data +000800 2 ;; .byte length +000800 2 +000800 2 A2D_GET_BUTTON := $2A +000800 2 ;; .byte state (0=up, 1=down?, 2=released?) +000800 2 +000800 2 A2D_GET_MOUSE := $40 +000800 2 ;; .word x +000800 2 ;; .word y +000800 2 ;; .word element +000800 2 ;; 0 = ?? +000800 2 ;; 1 = ?? +000800 2 ;; 2 = client area/scroll bar +000800 2 ;; 3 = title bar +000800 2 ;; 4 = ??? (but tested for?) +000800 2 ;; 5 = close box +000800 2 ;; .word window +000800 2 ;; $0 = outside window +000800 2 ;; $64 = in window +000800 2 +000800 2 A2D_BTN_CLICK := $43 +000800 2 ;; .byte clicked (0 = cancelled, 1 = clicked) +000800 2 ;; .byte ?? +000800 2 ;; .byte ?? +000800 2 +000800 2 A2D_QUERY_CLIENT:= $48 +000800 2 ;; .word xcoord of query +000800 2 ;; .word ycoord of query +000800 2 ;; .byte part (0 = client, 1 = vertical scroll bar, 2 = ???) +000800 2 ;; .byte scroll (1 = up, 2 = down, 3 = above, 4 = below, 5 = thumb) +000800 2 000800 2 000800 2 ;;; Macros 000800 2 .macro A2D_CALL op, addr @@ -331,25 +359,29 @@ Current file: stf.s 000970 1 00 .byte $00 000971 1 000971 1 .proc mouse_data -000971 1 00 00 xcoord: .word 0 ; lo/hi of mouse x position -000973 1 00 00 ycoord: .word 0 ; lo of mouse y position (hi = unused?) ????? -000975 1 00 elem: .byte $00 ; 3 = title, 4 = ???, 5 = close -000976 1 00 win: .byte $00 ; $64 = mouse in window +000971 1 00 00 xcoord: .word 0 +000973 1 00 00 ycoord: .word 0 +000975 1 00 elem: .byte $00 +000976 1 00 win: .byte $00 000977 1 .endproc 000977 1 000977 1 64 L0977: .byte $64 -000978 1 00 L0978: .byte $00 -000979 1 00 L0979: .byte $00 -00097A 1 00 00 00 L097A: .byte $00,$00,$00 +000978 1 00 00 xcoord1:.word 0 ; ??? +00097A 1 00 00 ycoord1:.word 0 ; ??? +00097C 1 00 .byte 0 ; ??? 00097D 1 -00097D 1 close_btn_state: -00097D 1 00 00 00 .byte $00,$00,$00 +00097D 1 .proc close_btn +00097D 1 00 state: .byte 0 +00097E 1 00 00 .byte 0,0 +000980 1 .endproc 000980 1 -000980 1 00 L0980: .byte $00 -000981 1 00 L0981: .byte $00 -000982 1 00 00 L0982: .byte $00,$00 -000984 1 00 L0984: .byte $00 -000985 1 00 L0985: .byte $00 +000980 1 .proc query_client_params +000980 1 00 00 xcoord: .word 0 +000982 1 00 00 ycoord: .word 0 +000984 1 00 part: .byte 0 ; 0 = client, 1 = scroll bar, 2 = ????? +000985 1 00 scroll: .byte 0 ; 1 = up, 2 = down, 3 = above, 4 = below, 5 = thumb +000986 1 .endproc +000986 1 000986 1 00 L0986: .byte $00 000987 1 00 L0987: .byte $00 000988 1 00 L0988: .byte $00 @@ -522,35 +554,35 @@ Current file: stf.s 000ADE 1 000ADE 1 20 00 40 40 A2D_CALL A2D_GET_MOUSE, mouse_data 000AE2 1 71 09 -000AE4 1 AD 76 09 lda mouse_data::win ; click target?? -000AE7 1 C9 64 cmp #$64 ; is in window?? +000AE4 1 AD 76 09 lda mouse_data::win ; click target?? +000AE7 1 C9 64 cmp #$64 ; is in window?? 000AE9 1 D0 E6 bne input_loop -000AEB 1 AD 75 09 lda mouse_data::elem ; which UI element? -000AEE 1 C9 05 cmp #$05 ; 5 = close btn +000AEB 1 AD 75 09 lda mouse_data::elem ; which UI element? +000AEE 1 C9 05 cmp #$05 ; 5 = close btn 000AF0 1 F0 2F beq on_close_btn_down -000AF2 1 AE 71 09 ldx mouse_data::xcoord ; stash mouse location -000AF5 1 8E 78 09 stx L0978 -000AF8 1 8E 80 09 stx L0980 +000AF2 1 AE 71 09 ldx mouse_data::xcoord ; stash mouse location +000AF5 1 8E 78 09 stx xcoord1 +000AF8 1 8E 80 09 stx query_client_params::xcoord 000AFB 1 AE 72 09 ldx mouse_data::xcoord+1 -000AFE 1 8E 79 09 stx L0979 -000B01 1 8E 81 09 stx L0981 +000AFE 1 8E 79 09 stx xcoord1+1 +000B01 1 8E 81 09 stx query_client_params::xcoord+1 000B04 1 AE 73 09 ldx mouse_data::ycoord -000B07 1 8E 7A 09 stx L097A -000B0A 1 8E 82 09 stx L0982 -000B0D 1 C9 03 cmp #$03 ; 3 = title bar -000B0F 1 F0 0A beq L0B1B -000B11 1 C9 04 cmp #$04 ; 4 = ??? scroll track maybe?? +000B07 1 8E 7A 09 stx ycoord1 +000B0A 1 8E 82 09 stx query_client_params::ycoord +000B0D 1 C9 03 cmp #$03 ; 3 = title bar +000B0F 1 F0 0A beq :+ +000B11 1 C9 04 cmp #$04 ; 4 = ??? 000B13 1 F0 BC beq input_loop -000B15 1 20 B4 0B jsr L0BB4 +000B15 1 20 B4 0B jsr on_client_click 000B18 1 4C D1 0A jmp input_loop 000B1B 1 -000B1B 1 20 3A 11 L0B1B: jsr on_title_bar_click +000B1B 1 20 3A 11 : jsr on_title_bar_click 000B1E 1 4C D1 0A jmp input_loop 000B21 1 000B21 1 .proc on_close_btn_down -000B21 1 20 00 40 43 A2D_CALL A2D_BTN_CLICK, close_btn_state ; wait to see if the click completes +000B21 1 20 00 40 43 A2D_CALL A2D_BTN_CLICK, close_btn ; wait to see if the click completes 000B25 1 7D 09 -000B27 1 AD 7D 09 lda close_btn_state ; all the way? +000B27 1 AD 7D 09 lda close_btn::state ; did click complete? 000B2A 1 F0 A5 beq input_loop ; nope 000B2C 1 20 AF 08 jsr close_file 000B2F 1 20 00 40 39 A2D_CALL $39, L0994 @@ -562,6 +594,8 @@ Current file: stf.s 000B3B 1 60 rts ; exits input loop 000B3C 1 .endproc 000B3C 1 +000B3C 1 ;;; How would control get here???? Dead code??? +000B3C 1 .proc maybe_dead_code 000B3C 1 20 00 40 45 A2D_CALL $45, L0977 000B40 1 77 09 000B42 1 20 FD 10 jsr L10FD @@ -610,35 +644,39 @@ Current file: stf.s 000BAC 1 86 09 000BAE 1 20 98 11 jsr calc_and_draw_mode 000BB1 1 4C F9 0D jmp L0DF9 +000BB4 1 .endproc 000BB4 1 -000BB4 1 20 00 40 48 L0BB4: A2D_CALL $48, L0980 +000BB4 1 .proc on_client_click +000BB4 1 20 00 40 48 A2D_CALL A2D_QUERY_CLIENT, query_client_params 000BB8 1 80 09 -000BBA 1 AD 84 09 lda L0984 -000BBD 1 C9 01 cmp #$01 -000BBF 1 F0 08 beq L0BC9 -000BC1 1 C9 02 cmp #$02 -000BC3 1 D0 03 bne L0BC8 +000BBA 1 AD 84 09 lda query_client_params::part +000BBD 1 C9 01 cmp #1 ; 1 = vertical scroll bar +000BBF 1 F0 08 beq on_vertical_scroll_bar_click +000BC1 1 C9 02 cmp #2 ; 2 = ??? +000BC3 1 D0 03 bne L0BC8 ; 0 = client area 000BC5 1 4C 95 0C jmp L0C95 -000BC8 1 +000BC8 1 .endproc 000BC8 1 60 L0BC8: rts 000BC9 1 +000BC9 1 ;;; Handle scroll bar click +000BC9 1 .proc on_vertical_scroll_bar_click 000BC9 1 A9 01 L0BC9: lda #$01 000BCB 1 8D 8A 09 sta L098A 000BCE 1 8D 88 09 sta L0988 -000BD1 1 AD 85 09 lda L0985 -000BD4 1 C9 05 cmp #$05 +000BD1 1 AD 85 09 lda query_client_params::scroll +000BD4 1 C9 05 cmp #5 000BD6 1 F0 14 beq L0BEC -000BD8 1 C9 04 cmp #$04 +000BD8 1 C9 04 cmp #4 000BDA 1 F0 62 beq L0C3E -000BDC 1 C9 03 cmp #$03 +000BDC 1 C9 03 cmp #3 000BDE 1 F0 31 beq L0C11 -000BE0 1 C9 01 cmp #$01 +000BE0 1 C9 01 cmp #1 000BE2 1 F0 49 beq L0C2D -000BE4 1 C9 02 cmp #$02 -000BE6 1 D0 03 bne L0BEB +000BE4 1 C9 02 cmp #2 +000BE6 1 D0 03 bne end 000BE8 1 4C 60 0C jmp L0C60 -000BEB 1 -000BEB 1 60 L0BEB: rts +000BEB 1 60 end: rts +000BEC 1 .endproc 000BEC 1 000BEC 1 20 39 0D L0BEC: jsr L0D39 000BEF 1 AD 90 09 lda L0990 @@ -722,19 +760,21 @@ Current file: stf.s 000C91 1 8E 6E 09 stx L096E 000C94 1 60 rts 000C95 1 +000C95 1 ;;; Haven't been able to trigger this yet - click on ??? +000C95 1 ;;; Possibly horizontal scroll bar? (unused in this DA - generic code?) 000C95 1 A9 02 L0C95: lda #$02 000C97 1 8D 8A 09 sta L098A 000C9A 1 8D 88 09 sta L0988 -000C9D 1 AD 85 09 lda L0985 -000CA0 1 C9 05 cmp #$05 +000C9D 1 AD 85 09 lda query_client_params::scroll +000CA0 1 C9 05 cmp #5 000CA2 1 F0 11 beq L0CB5 -000CA4 1 C9 04 cmp #$04 +000CA4 1 C9 04 cmp #4 000CA6 1 F0 3F beq L0CE7 -000CA8 1 C9 03 cmp #$03 +000CA8 1 C9 03 cmp #3 000CAA 1 F0 43 beq L0CEF -000CAC 1 C9 01 cmp #$01 +000CAC 1 C9 01 cmp #1 000CAE 1 F0 4E beq L0CFE -000CB0 1 C9 02 cmp #$02 +000CB0 1 C9 02 cmp #2 000CB2 1 F0 42 beq L0CF6 000CB4 1 60 rts 000CB5 1 @@ -1106,7 +1146,7 @@ Current file: stf.s 000FF9 1 F0 10 beq L100B 000FFB 1 AD 93 09 lda text_string_len 000FFE 1 F0 0B beq L100B -001000 1 20 00 40 19 L1000: A2D_CALL A2D_TEXT, text_string +001000 1 20 00 40 19 L1000: A2D_CALL A2D_DRAW_TEXT, text_string 001004 1 91 09 001006 1 A9 01 lda #$01 001008 1 8D 49 09 sta L0949 @@ -1328,10 +1368,10 @@ Current file: stf.s 0011C7 1 94 11 0011C9 1 AD 6F 09 lda fixed_mode_flag 0011CC 1 F0 09 beq else ; is proportional? -0011CE 1 20 00 40 19 A2D_CALL A2D_TEXT, fixed_str +0011CE 1 20 00 40 19 A2D_CALL A2D_DRAW_TEXT, fixed_str 0011D2 1 65 11 0011D4 1 4C DD 11 jmp endif -0011D7 1 20 00 40 19 else: A2D_CALL A2D_TEXT, prop_str +0011D7 1 20 00 40 19 else: A2D_CALL A2D_DRAW_TEXT, prop_str 0011DB 1 75 11 0011DD 1 endif: 0011DD 1 A2 0F ldx #$0F diff --git a/desk.acc/show.text.file/stf.o b/desk.acc/show.text.file/stf.o index 3c78178..966763b 100644 Binary files a/desk.acc/show.text.file/stf.o and b/desk.acc/show.text.file/stf.o differ diff --git a/desk.acc/show.text.file/stf.s b/desk.acc/show.text.file/stf.s index 8fa3d0d..2f893b6 100644 --- a/desk.acc/show.text.file/stf.s +++ b/desk.acc/show.text.file/stf.s @@ -226,25 +226,29 @@ button_state: .byte $00 .proc mouse_data -xcoord: .word 0 ; lo/hi of mouse x position -ycoord: .word 0 ; lo of mouse y position (hi = unused?) ????? -elem: .byte $00 ; 3 = title, 4 = ???, 5 = close -win: .byte $00 ; $64 = mouse in window +xcoord: .word 0 +ycoord: .word 0 +elem: .byte $00 +win: .byte $00 .endproc L0977: .byte $64 -L0978: .byte $00 -L0979: .byte $00 -L097A: .byte $00,$00,$00 +xcoord1:.word 0 ; ??? +ycoord1:.word 0 ; ??? + .byte 0 ; ??? -close_btn_state: - .byte $00,$00,$00 +.proc close_btn +state: .byte 0 + .byte 0,0 +.endproc + +.proc query_client_params +xcoord: .word 0 +ycoord: .word 0 +part: .byte 0 ; 0 = client, 1 = scroll bar, 2 = ????? +scroll: .byte 0 ; 1 = up, 2 = down, 3 = above, 4 = below, 5 = thumb +.endproc -L0980: .byte $00 -L0981: .byte $00 -L0982: .byte $00,$00 -L0984: .byte $00 -L0985: .byte $00 L0986: .byte $00 L0987: .byte $00 L0988: .byte $00 @@ -405,34 +409,34 @@ input_loop: bne input_loop ; nope, keep waiting A2D_CALL A2D_GET_MOUSE, mouse_data - lda mouse_data::win ; click target?? - cmp #$64 ; is in window?? + lda mouse_data::win ; click target?? + cmp #$64 ; is in window?? bne input_loop - lda mouse_data::elem ; which UI element? - cmp #$05 ; 5 = close btn + lda mouse_data::elem ; which UI element? + cmp #$05 ; 5 = close btn beq on_close_btn_down - ldx mouse_data::xcoord ; stash mouse location - stx L0978 - stx L0980 + ldx mouse_data::xcoord ; stash mouse location + stx xcoord1 + stx query_client_params::xcoord ldx mouse_data::xcoord+1 - stx L0979 - stx L0981 + stx xcoord1+1 + stx query_client_params::xcoord+1 ldx mouse_data::ycoord - stx L097A - stx L0982 - cmp #$03 ; 3 = title bar - beq L0B1B - cmp #$04 ; 4 = ??? scroll track maybe?? + stx ycoord1 + stx query_client_params::ycoord + cmp #$03 ; 3 = title bar + beq :+ + cmp #$04 ; 4 = ??? beq input_loop - jsr L0BB4 + jsr on_client_click jmp input_loop -L0B1B: jsr on_title_bar_click +: jsr on_title_bar_click jmp input_loop .proc on_close_btn_down - A2D_CALL A2D_BTN_CLICK, close_btn_state ; wait to see if the click completes - lda close_btn_state ; all the way? + A2D_CALL A2D_BTN_CLICK, close_btn ; wait to see if the click completes + lda close_btn::state ; did click complete? beq input_loop ; nope jsr close_file A2D_CALL $39, L0994 @@ -443,6 +447,8 @@ L0B1B: jsr on_title_bar_click rts ; exits input loop .endproc +;;; How would control get here???? Dead code??? +.proc maybe_dead_code A2D_CALL $45, L0977 jsr L10FD jsr L1088 @@ -489,34 +495,38 @@ L0B8B: sta L0998 A2D_CALL $49, L0986 jsr calc_and_draw_mode jmp L0DF9 +.endproc -L0BB4: A2D_CALL $48, L0980 - lda L0984 - cmp #$01 - beq L0BC9 - cmp #$02 - bne L0BC8 +.proc on_client_click + A2D_CALL A2D_QUERY_CLIENT, query_client_params + lda query_client_params::part + cmp #1 ; 1 = vertical scroll bar + beq on_vertical_scroll_bar_click + cmp #2 ; 2 = ??? + bne L0BC8 ; 0 = client area jmp L0C95 - +.endproc L0BC8: rts +;;; Handle scroll bar click +.proc on_vertical_scroll_bar_click L0BC9: lda #$01 sta L098A sta L0988 - lda L0985 - cmp #$05 + lda query_client_params::scroll + cmp #5 beq L0BEC - cmp #$04 + cmp #4 beq L0C3E - cmp #$03 + cmp #3 beq L0C11 - cmp #$01 + cmp #1 beq L0C2D - cmp #$02 - bne L0BEB + cmp #2 + bne end jmp L0C60 - -L0BEB: rts +end: rts +.endproc L0BEC: jsr L0D39 lda L0990 @@ -600,19 +610,21 @@ L0C89: inx stx L096E rts +;;; Haven't been able to trigger this yet - click on ??? +;;; Possibly horizontal scroll bar? (unused in this DA - generic code?) L0C95: lda #$02 sta L098A sta L0988 - lda L0985 - cmp #$05 + lda query_client_params::scroll + cmp #5 beq L0CB5 - cmp #$04 + cmp #4 beq L0CE7 - cmp #$03 + cmp #3 beq L0CEF - cmp #$01 + cmp #1 beq L0CFE - cmp #$02 + cmp #2 beq L0CF6 rts @@ -973,7 +985,7 @@ L0FF6: lda L0948 beq L100B lda text_string_len beq L100B -L1000: A2D_CALL A2D_TEXT, text_string +L1000: A2D_CALL A2D_DRAW_TEXT, text_string lda #$01 sta L0949 L100B: rts @@ -1186,9 +1198,9 @@ L1194: .byte $00,$00,$0A,$00 A2D_CALL $0E, L1194 lda fixed_mode_flag beq else ; is proportional? - A2D_CALL A2D_TEXT, fixed_str + A2D_CALL A2D_DRAW_TEXT, fixed_str jmp endif -else: A2D_CALL A2D_TEXT, prop_str +else: A2D_CALL A2D_DRAW_TEXT, prop_str endif: ldx #$0F loop: lda L09CE,x