mirror of
https://github.com/mi57730/a2d.git
synced 2025-02-18 02:30:50 +00:00
Rename A2D to MGTK
This commit is contained in:
parent
2e61ed294d
commit
1ae615fb20
@ -13,7 +13,7 @@ New desk accessories:
|
|||||||
|
|
||||||
* Loaded at $800 through (at least) $14FF
|
* Loaded at $800 through (at least) $14FF
|
||||||
* Copy themselves from Main into Aux memory (same location)
|
* Copy themselves from Main into Aux memory (same location)
|
||||||
* Can call into ProDOS MLI and A2D entry points ($4000, etc)
|
* Can call into ProDOS MLI and MGTK/A2D entry points ($4000, etc)
|
||||||
|
|
||||||
## Files
|
## Files
|
||||||
|
|
||||||
|
@ -1,32 +1,32 @@
|
|||||||
# A2D API
|
# MGTK API
|
||||||
|
|
||||||
There are three distinct API classes that need to be used:
|
There are three distinct API classes that need to be used:
|
||||||
|
|
||||||
* Main A2D API - entry point $4000 AUX, called MLI-style (JSR followed by command type and address of param block)
|
* Main MGTK API - entry point $4000 AUX, called MLI-style (JSR followed by command type and address of param block)
|
||||||
* DeskTop Jump Table - simple JSR calls starting at $4003 MAIN, no arguments
|
* DeskTop Jump Table - simple JSR calls starting at $4003 MAIN, no arguments
|
||||||
* DeskTop API - another MLI-style interface starting at $8E00 AUX
|
* DeskTop API - another MLI-style interface starting at $8E00 AUX
|
||||||
|
|
||||||
## Main A2D API
|
## Main MGTK API
|
||||||
|
|
||||||
### Concepts
|
### Concepts
|
||||||
|
|
||||||
#### Box
|
#### GrafPort
|
||||||
|
|
||||||
The _box_ block is reused in several places. It has the following structure:
|
The _port_ block is reused in several places. It has the following structure:
|
||||||
|
|
||||||
```
|
```
|
||||||
.word left pixels from screen left edge
|
.word left pixels from screen left edge
|
||||||
.word top pixels from screen top edge
|
.word top pixels from screen top edge
|
||||||
.addr addr A2D_SCREEN_ADDR ($2000)
|
.addr addr screen address $2000
|
||||||
.word stride A2D_SCREEN_STRIDE ($80)
|
.word stride screen stride $80
|
||||||
.word hoff pixels scrolled left
|
.word hoff pixels scrolled left
|
||||||
.word voff pixels scrolled up
|
.word voff pixels scrolled up
|
||||||
.word width pixels wide
|
.word width pixels wide
|
||||||
.word height pixels tall
|
.word height pixels tall
|
||||||
```
|
```
|
||||||
|
|
||||||
Drawing state can be set to a box (A2D_SET_BOX) and then subsequent operations will occur
|
Drawing state can be set to a port (SetPort) and then subsequent operations will occur
|
||||||
within the box: they will be clipped to the bounds and the offset will be taken into account.
|
within the port: they will be clipped to the bounds and the offset will be taken into account.
|
||||||
For example, if hoffset is 15 and voffset is 5 then a pixel plotted at 40, 40 will appear
|
For example, if hoffset is 15 and voffset is 5 then a pixel plotted at 40, 40 will appear
|
||||||
at 40 - 15 = 25 pixels from the left edge and 40 - 5 = 35 pixels from the top edge.
|
at 40 - 15 = 25 pixels from the left edge and 40 - 5 = 35 pixels from the top edge.
|
||||||
|
|
||||||
@ -48,12 +48,12 @@ optional _resize box_ and optional _scroll bars_.
|
|||||||
* Copy DA code from MAIN to AUX (e.g. using AUXMOVE)
|
* Copy DA code from MAIN to AUX (e.g. using AUXMOVE)
|
||||||
* Transfer control to AUX
|
* Transfer control to AUX
|
||||||
* Turn on ALTZP and LCBANK1
|
* Turn on ALTZP and LCBANK1
|
||||||
* Create window (A2D_CREATE_WINDOW)
|
* Create window (OpenWindow)
|
||||||
* Draw everything
|
* Draw everything
|
||||||
* Call $2B (no idea what this does!)
|
* Call $2B (no idea what this does!)
|
||||||
* Enter [input loop](#input-loop)
|
* Enter [input loop](#input-loop)
|
||||||
* ...
|
* ...
|
||||||
* Destroy window (A2D_DESTROY_WINDOW)
|
* Destroy window (CloseWindow)
|
||||||
* Redraw desktop icons (DESKTOP_REDRAW_ICONS)
|
* Redraw desktop icons (DESKTOP_REDRAW_ICONS)
|
||||||
* Switch control back to MAIN (RAMRDOFF/RAMWRTOFF)
|
* Switch control back to MAIN (RAMRDOFF/RAMWRTOFF)
|
||||||
* Ensure ALTZP and LCBANK1 are on
|
* Ensure ALTZP and LCBANK1 are on
|
||||||
@ -66,26 +66,26 @@ optional _resize box_ and optional _scroll bars_.
|
|||||||
|
|
||||||
#### Input Loop
|
#### Input Loop
|
||||||
|
|
||||||
* Call A2D_GET_INPUT.
|
* Call GetEvent.
|
||||||
* If a key (A2D_INPUT_KEY), then check modifiers (Open/Closed Apple) and key code, ignore or take action.
|
* If a key, then check modifiers (Open/Closed Apple) and key code, ignore or take action.
|
||||||
* If a click, call A2D_QUERY_TARGET.
|
* If a click, call FindWindow.
|
||||||
* If target id not the window id, ignore.
|
* If target id not the window id, ignore.
|
||||||
* If target element is desktop (A2D_ELEM_DESKTOP) or menu (A2D_ELEM_MENU) then ignore.
|
* If target element is desktop or menu then ignore.
|
||||||
* If target element is close box (A2D_ELEM_CLOSE) then initiate [window close](#window-close).
|
* If target element is close box then initiate [window close](#window-close).
|
||||||
* If target element is title bar (A2D_ELEM_TITLE) then initiate [window drag](#window-drag).
|
* If target element is title bar then initiate [window drag](#window-drag).
|
||||||
* If target element is resize box (A2D_ELEM_RESIZE) then initiate [window resize](#window-resize).
|
* If target element is resize box then initiate [window resize](#window-resize).
|
||||||
* Otherwise, it is client area (A2D_ELEM_CLIENT); call A2D_QUERY_CLIENT.
|
* Otherwise, it is client area; call FindControl.
|
||||||
* If client part is a scrollbar (A2D_VSCROLL or A2D_HSCROLL) then initiate a [scroll](#window-scroll).
|
* If client part is a scrollbar then initiate a [scroll](#window-scroll).
|
||||||
* Otherwise, handle a client click using custom logic (e.g. hit testing buttons, etc)
|
* Otherwise, handle a client click using custom logic (e.g. hit testing buttons, etc)
|
||||||
|
|
||||||
#### Window Close
|
#### Window Close
|
||||||
|
|
||||||
* Call A2D_CLOSE_CLICK, which enters a modal loop to handle the mouse moving out/in the box.
|
* Call TrackGoAway, which enters a modal loop to handle the mouse moving out/in the box.
|
||||||
* Result indicates clicked or canceled; if clicked, exit the DA, otherwise ignore.
|
* Result indicates clicked or canceled; if clicked, exit the DA, otherwise ignore.
|
||||||
|
|
||||||
#### Window Drag
|
#### Window Drag
|
||||||
|
|
||||||
* Call A2D_DRAG_WINDOW.
|
* Call DragWindow.
|
||||||
* Call JUMP_TABLE_REDRAW_ALL.
|
* Call JUMP_TABLE_REDRAW_ALL.
|
||||||
* If _offscreen flag_ was not set, redraw desktop icons (DESKTOP_REDRAW_ICONS).
|
* If _offscreen flag_ was not set, redraw desktop icons (DESKTOP_REDRAW_ICONS).
|
||||||
* Set _offscreen flag_ if window's `top` is greater than or equal to the screen bottom (191), clear otherwise.
|
* Set _offscreen flag_ if window's `top` is greater than or equal to the screen bottom (191), clear otherwise.
|
||||||
@ -93,10 +93,10 @@ optional _resize box_ and optional _scroll bars_.
|
|||||||
|
|
||||||
#### Window Resize
|
#### Window Resize
|
||||||
|
|
||||||
* Call A2D_DRAG_RESIZE.
|
* Call GrowWindow.
|
||||||
* Call JUMP_TABLE_REDRAW_ALL.
|
* Call JUMP_TABLE_REDRAW_ALL.
|
||||||
* Call DESKTOP_REDRAW_ICONS.
|
* Call DESKTOP_REDRAW_ICONS.
|
||||||
* Call A2D_RESIZE_WINDOW if needed to adjust scroll bar settings. (Details TBD).
|
* Call UpdateThumb if needed to adjust scroll bar settings. (Details TBD).
|
||||||
* Redraw window.
|
* Redraw window.
|
||||||
|
|
||||||
#### Window Scroll
|
#### Window Scroll
|
||||||
@ -155,6 +155,6 @@ Parameters: none (pass $0000 as address)
|
|||||||
|
|
||||||
Redraws the icons on the desktop (mounted volumes, trash). This call is required in these cases:
|
Redraws the icons on the desktop (mounted volumes, trash). This call is required in these cases:
|
||||||
|
|
||||||
* After destroying a window (A2D_DESTROY_WINDOW)
|
* After destroying a window (CloseWindow)
|
||||||
* After repainting the desktop (JUMP_TABLE_REDRAW_ALL) following a drag (A2D_DRAG_WINDOW)
|
* After repainting the desktop (JUMP_TABLE_REDRAW_ALL) following a drag (DragWindow)
|
||||||
* After repainting the desktop (JUMP_TABLE_REDRAW_ALL) following a resize (A2D_DRAG_RESIZE/A2D_RESIZE_WINDOW)
|
* After repainting the desktop (JUMP_TABLE_REDRAW_ALL) following a resize (GrowWindow)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
.include "../inc/applesoft.inc"
|
.include "../inc/applesoft.inc"
|
||||||
.include "../inc/prodos.inc"
|
.include "../inc/prodos.inc"
|
||||||
|
|
||||||
.include "../a2d.inc"
|
.include "../mgtk.inc"
|
||||||
.include "../desktop.inc" ; redraw icons after window move; font
|
.include "../desktop.inc" ; redraw icons after window move; font
|
||||||
|
|
||||||
.org $800
|
.org $800
|
||||||
@ -104,8 +104,8 @@ call_init:
|
|||||||
lda #window_id
|
lda #window_id
|
||||||
jsr check_visibility_and_draw_window
|
jsr check_visibility_and_draw_window
|
||||||
|
|
||||||
A2D_CALL A2D_QUERY_STATE, query_state_params
|
MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params
|
MGTK_CALL MGTK::SetPort, state_params
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.proc routine
|
.proc routine
|
||||||
@ -142,8 +142,8 @@ offscreen_flag:
|
|||||||
|
|
||||||
;; Is skipping this responsible for display redraw bug?
|
;; Is skipping this responsible for display redraw bug?
|
||||||
;; https://github.com/inexorabletash/a2d/issues/34
|
;; https://github.com/inexorabletash/a2d/issues/34
|
||||||
A2D_CALL A2D_QUERY_STATE, query_state_params
|
MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params
|
MGTK_CALL MGTK::SetPort, state_params
|
||||||
lda query_state_params_id
|
lda query_state_params_id
|
||||||
cmp #window_id
|
cmp #window_id
|
||||||
bne :+
|
bne :+
|
||||||
@ -202,11 +202,11 @@ id: .byte 0
|
|||||||
query_state_params_id := query_state_params::id
|
query_state_params_id := query_state_params::id
|
||||||
|
|
||||||
.proc preserve_zp_params
|
.proc preserve_zp_params
|
||||||
flag: .byte A2D_CZP_PRESERVE
|
flag: .byte MGTK::zp_preserve
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc overwrite_zp_params
|
.proc overwrite_zp_params
|
||||||
flag: .byte A2D_CZP_OVERWRITE
|
flag: .byte MGTK::zp_overwrite
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
@ -660,9 +660,9 @@ text_buffer2:
|
|||||||
.res text_buffer_size+2, 0
|
.res text_buffer_size+2, 0
|
||||||
|
|
||||||
spaces_string:
|
spaces_string:
|
||||||
A2D_DEFSTRING " "
|
DEFINE_STRING " "
|
||||||
error_string:
|
error_string:
|
||||||
A2D_DEFSTRING "Error "
|
DEFINE_STRING "Error "
|
||||||
|
|
||||||
;; used when clearing display; params to a $18 call
|
;; used when clearing display; params to a $18 call
|
||||||
.proc measure_text_params
|
.proc measure_text_params
|
||||||
@ -694,7 +694,7 @@ base: .word 16
|
|||||||
|
|
||||||
farg: .byte $00,$00,$00,$00,$00,$00
|
farg: .byte $00,$00,$00,$00,$00,$00
|
||||||
|
|
||||||
.proc title_bar_decoration ; Params for A2D_DRAW_BITMAP
|
.proc title_bar_decoration ; Params for MGTK::PaintBits
|
||||||
left: .word 115 ; overwritten
|
left: .word 115 ; overwritten
|
||||||
top: .word $FFF7 ; overwritten
|
top: .word $FFF7 ; overwritten
|
||||||
bitmap:.addr pixels
|
bitmap:.addr pixels
|
||||||
@ -740,25 +740,25 @@ font: .addr 0
|
|||||||
screen_width := 560
|
screen_width := 560
|
||||||
screen_height := 192
|
screen_height := 192
|
||||||
|
|
||||||
;; params for A2D_SET_BOX when decorating title bar
|
;; params for MGTK::SetPortSite when decorating title bar
|
||||||
.proc screen_box
|
.proc screen_box
|
||||||
.word 0
|
.word 0
|
||||||
.word menu_bar_height
|
.word menu_bar_height
|
||||||
.word A2D_SCREEN_ADDR
|
.word MGTK::screen_mapbits
|
||||||
.word A2D_SCREEN_STRIDE
|
.word MGTK::screen_mapwidth
|
||||||
.word 0, 0 ; hoff/voff
|
.word 0, 0 ; hoff/voff
|
||||||
.word screen_width - 1
|
.word screen_width - 1
|
||||||
.word screen_height - menu_bar_height - 2
|
.word screen_height - menu_bar_height - 2
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc fill_mode_normal
|
.proc fill_mode_normal
|
||||||
mode: .byte A2D_SFM_NORMAL
|
mode: .byte MGTK::pencopy
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.byte $01,$02 ; ??
|
.byte $01,$02 ; ??
|
||||||
|
|
||||||
.proc fill_mode_xor
|
.proc fill_mode_xor
|
||||||
mode: .byte A2D_SFM_XOR
|
mode: .byte MGTK::notpenXOR
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
window_width := 130
|
window_width := 130
|
||||||
@ -768,10 +768,10 @@ mode: .byte A2D_SFM_XOR
|
|||||||
|
|
||||||
.proc create_window_params
|
.proc create_window_params
|
||||||
id: .byte window_id
|
id: .byte window_id
|
||||||
flags: .byte A2D_CWF_ADDCLOSE
|
flags: .byte MGTK::option_go_away_box
|
||||||
title: .addr window_title
|
title: .addr window_title
|
||||||
hscroll:.byte A2D_CWS_NOSCROLL
|
hscroll:.byte MGTK::scroll_option_none
|
||||||
vscroll:.byte A2D_CWS_NOSCROLL
|
vscroll:.byte MGTK::scroll_option_none
|
||||||
hs_max: .byte 0
|
hs_max: .byte 0
|
||||||
hs_pos: .byte 0
|
hs_pos: .byte 0
|
||||||
vs_max: .byte 0
|
vs_max: .byte 0
|
||||||
@ -783,15 +783,15 @@ w2: .word window_width
|
|||||||
h2: .word window_height
|
h2: .word window_height
|
||||||
left: .word default_left
|
left: .word default_left
|
||||||
top: .word default_top
|
top: .word default_top
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word window_width
|
width: .word window_width
|
||||||
height: .word window_height
|
height: .word window_height
|
||||||
pattern:.res 8, $FF
|
pattern:.res 8, $FF
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 1
|
hthick: .byte 1
|
||||||
@ -812,11 +812,11 @@ window_title:
|
|||||||
init: sta ALTZPON
|
init: sta ALTZPON
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
A2D_CALL A2D_CONFIGURE_ZP_USE, preserve_zp_params
|
MGTK_CALL MGTK::SetZP1, preserve_zp_params
|
||||||
A2D_CALL A2D_CREATE_WINDOW, create_window_params
|
MGTK_CALL MGTK::OpenWindow, create_window_params
|
||||||
A2D_CALL A2D_QUERY_SCREEN, state_params
|
MGTK_CALL MGTK::InitPort, state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params
|
MGTK_CALL MGTK::SetPort, state_params
|
||||||
A2D_CALL $2B ; reset drawing state?
|
MGTK_CALL $2B ; reset drawing state?
|
||||||
|
|
||||||
jsr reset_buffer2
|
jsr reset_buffer2
|
||||||
|
|
||||||
@ -880,14 +880,14 @@ loop: lda adjust_txtptr_copied-1,x
|
|||||||
;;; Input Loop
|
;;; Input Loop
|
||||||
|
|
||||||
input_loop:
|
input_loop:
|
||||||
A2D_CALL A2D_GET_INPUT, input_state_params
|
MGTK_CALL MGTK::GetEvent, input_state_params
|
||||||
lda input_state_params::state
|
lda input_state_params::state
|
||||||
cmp #A2D_INPUT_DOWN
|
cmp #MGTK::button_down
|
||||||
bne :+
|
bne :+
|
||||||
jsr on_click
|
jsr on_click
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
|
|
||||||
: cmp #A2D_INPUT_KEY
|
: cmp #MGTK::key_down
|
||||||
bne input_loop
|
bne input_loop
|
||||||
jsr on_key_press
|
jsr on_key_press
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
@ -896,9 +896,9 @@ input_loop:
|
|||||||
;;; On Click
|
;;; On Click
|
||||||
|
|
||||||
on_click:
|
on_click:
|
||||||
A2D_CALL A2D_QUERY_TARGET, target_params
|
MGTK_CALL MGTK::FindWindow, target_params
|
||||||
lda target_params::elem
|
lda target_params::elem
|
||||||
cmp #A2D_ELEM_CLIENT ; Less than CLIENT is MENU or DESKTOP
|
cmp #MGTK::area_content ; Less than CLIENT is MENU or DESKTOP
|
||||||
bcc ignore_click
|
bcc ignore_click
|
||||||
lda target_params::id
|
lda target_params::id
|
||||||
cmp #window_id ; This window?
|
cmp #window_id ; This window?
|
||||||
@ -908,21 +908,21 @@ ignore_click:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
: lda target_params::elem
|
: lda target_params::elem
|
||||||
cmp #A2D_ELEM_CLIENT ; Client area?
|
cmp #MGTK::area_content ; Client area?
|
||||||
bne :+
|
bne :+
|
||||||
jsr map_click_to_button ; try to translate click into key
|
jsr map_click_to_button ; try to translate click into key
|
||||||
bcc ignore_click
|
bcc ignore_click
|
||||||
jmp process_key
|
jmp process_key
|
||||||
|
|
||||||
: cmp #A2D_ELEM_CLOSE ; Close box?
|
: cmp #MGTK::area_close_box ; Close box?
|
||||||
bne :+
|
bne :+
|
||||||
A2D_CALL A2D_CLOSE_CLICK, close_click_params
|
MGTK_CALL MGTK::TrackGoAway, close_click_params
|
||||||
lda close_click_params::state
|
lda close_click_params::state
|
||||||
beq ignore_click
|
beq ignore_click
|
||||||
exit: A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params
|
exit: MGTK_CALL MGTK::CloseWindow, destroy_window_params
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
A2D_CALL A2D_CONFIGURE_ZP_USE, overwrite_zp_params
|
MGTK_CALL MGTK::SetZP1, overwrite_zp_params
|
||||||
|
|
||||||
.proc do_close
|
.proc do_close
|
||||||
;; Copy following routine to ZP and invoke it
|
;; Copy following routine to ZP and invoke it
|
||||||
@ -943,11 +943,11 @@ loop: lda routine,x
|
|||||||
sizeof_routine := * - routine ; Can't use .sizeof before the .proc definition
|
sizeof_routine := * - routine ; Can't use .sizeof before the .proc definition
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
: cmp #A2D_ELEM_TITLE ; Title bar?
|
: cmp #MGTK::area_dragbar ; Title bar?
|
||||||
bne ignore_click
|
bne ignore_click
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta drag_params::id
|
sta drag_params::id
|
||||||
A2D_CALL A2D_DRAG_WINDOW, drag_params
|
MGTK_CALL MGTK::DragWindow, drag_params
|
||||||
jsr redraw_screen_and_window
|
jsr redraw_screen_and_window
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -985,7 +985,7 @@ rts1: rts ; used by next proc
|
|||||||
.proc map_click_to_button
|
.proc map_click_to_button
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta map_coords_params::id
|
sta map_coords_params::id
|
||||||
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
MGTK_CALL MGTK::ScreenToWindow, map_coords_params
|
||||||
lda map_coords_params::clientx+1 ; ensure high bits of coords are 0
|
lda map_coords_params::clientx+1 ; ensure high bits of coords are 0
|
||||||
ora map_coords_params::clienty+1
|
ora map_coords_params::clienty+1
|
||||||
bne rts1
|
bne rts1
|
||||||
@ -1483,24 +1483,24 @@ end: jsr display_buffer1
|
|||||||
sty invert_addr+1
|
sty invert_addr+1
|
||||||
sty c13_addr+1
|
sty c13_addr+1
|
||||||
sty restore_addr+1
|
sty restore_addr+1
|
||||||
A2D_CALL A2D_SET_PATTERN, black_pattern
|
MGTK_CALL MGTK::SetPattern, black_pattern
|
||||||
A2D_CALL A2D_SET_FILL_MODE, fill_mode_xor
|
MGTK_CALL MGTK::SetPenMode, fill_mode_xor
|
||||||
sec
|
sec
|
||||||
ror button_state
|
ror button_state
|
||||||
|
|
||||||
invert: A2D_CALL A2D_FILL_RECT, 0, invert_addr ; Inverts box
|
invert: MGTK_CALL MGTK::PaintRect, 0, invert_addr ; Inverts box
|
||||||
|
|
||||||
check_button:
|
check_button:
|
||||||
A2D_CALL A2D_GET_INPUT, input_state_params
|
MGTK_CALL MGTK::GetEvent, input_state_params
|
||||||
lda input_state_params::state
|
lda input_state_params::state
|
||||||
cmp #A2D_INPUT_HELD ; Button down?
|
cmp #MGTK::drag ; Button down?
|
||||||
bne done ; Nope, done immediately
|
bne done ; Nope, done immediately
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta map_coords_params::id
|
sta map_coords_params::id
|
||||||
|
|
||||||
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
MGTK_CALL MGTK::ScreenToWindow, map_coords_params
|
||||||
A2D_CALL A2D_SET_POS, map_coords_params::client
|
MGTK_CALL MGTK::MoveTo, map_coords_params::client
|
||||||
A2D_CALL A2D_TEST_BOX, 0, c13_addr
|
MGTK_CALL MGTK::InRect, 0, c13_addr
|
||||||
bne inside
|
bne inside
|
||||||
|
|
||||||
lda button_state ; outside, not down
|
lda button_state ; outside, not down
|
||||||
@ -1519,8 +1519,8 @@ inside: lda button_state ; inside, and down
|
|||||||
|
|
||||||
done: lda button_state ; high bit set if button down
|
done: lda button_state ; high bit set if button down
|
||||||
beq :+
|
beq :+
|
||||||
A2D_CALL A2D_FILL_RECT, 0, restore_addr ; Inverts back to normal
|
MGTK_CALL MGTK::PaintRect, 0, restore_addr ; Inverts back to normal
|
||||||
: A2D_CALL A2D_SET_FILL_MODE, fill_mode_normal ; Normal draw mode??
|
: MGTK_CALL MGTK::SetPenMode, fill_mode_normal ; Normal draw mode??
|
||||||
lda button_state
|
lda button_state
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
@ -1561,7 +1561,7 @@ loop: lda #' '
|
|||||||
ldx #<text_buffer1
|
ldx #<text_buffer1
|
||||||
ldy #>text_buffer1
|
ldy #>text_buffer1
|
||||||
jsr pre_display_buffer
|
jsr pre_display_buffer
|
||||||
A2D_CALL A2D_DRAW_TEXT, draw_text_params1
|
MGTK_CALL MGTK::DrawText, draw_text_params1
|
||||||
end: rts
|
end: rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -1571,21 +1571,21 @@ end: rts
|
|||||||
ldx #<text_buffer2
|
ldx #<text_buffer2
|
||||||
ldy #>text_buffer2
|
ldy #>text_buffer2
|
||||||
jsr pre_display_buffer
|
jsr pre_display_buffer
|
||||||
A2D_CALL A2D_DRAW_TEXT, draw_text_params2
|
MGTK_CALL MGTK::DrawText, draw_text_params2
|
||||||
end: rts
|
end: rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc pre_display_buffer
|
.proc pre_display_buffer
|
||||||
stx measure_text_params::addr ; text buffer address in x,y
|
stx measure_text_params::addr ; text buffer address in x,y
|
||||||
sty measure_text_params::addr+1
|
sty measure_text_params::addr+1
|
||||||
A2D_CALL A2D_MEASURE_TEXT, measure_text_params
|
MGTK_CALL MGTK::TextWidth, measure_text_params
|
||||||
lda #display_width-15 ; ???
|
lda #display_width-15 ; ???
|
||||||
sec
|
sec
|
||||||
sbc measure_text_params::width
|
sbc measure_text_params::width
|
||||||
sta text_pos_params3::left
|
sta text_pos_params3::left
|
||||||
A2D_CALL A2D_SET_POS, text_pos_params2 ; clear with spaces
|
MGTK_CALL MGTK::MoveTo, text_pos_params2 ; clear with spaces
|
||||||
A2D_CALL A2D_DRAW_TEXT, spaces_string
|
MGTK_CALL MGTK::DrawText, spaces_string
|
||||||
A2D_CALL A2D_SET_POS, text_pos_params3 ; set up for display
|
MGTK_CALL MGTK::MoveTo, text_pos_params3 ; set up for display
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -1594,14 +1594,14 @@ end: rts
|
|||||||
|
|
||||||
.proc draw_background
|
.proc draw_background
|
||||||
;; Frame
|
;; Frame
|
||||||
A2D_CALL A2D_HIDE_CURSOR
|
MGTK_CALL MGTK::HideCursor
|
||||||
A2D_CALL A2D_SET_PATTERN, background_pattern
|
MGTK_CALL MGTK::SetPattern, background_pattern
|
||||||
A2D_CALL A2D_FILL_RECT, background_box_params
|
MGTK_CALL MGTK::PaintRect, background_box_params
|
||||||
A2D_CALL A2D_SET_PATTERN, black_pattern
|
MGTK_CALL MGTK::SetPattern, black_pattern
|
||||||
A2D_CALL A2D_DRAW_RECT, frame_display_params
|
MGTK_CALL MGTK::FrameRect, frame_display_params
|
||||||
A2D_CALL A2D_SET_PATTERN, white_pattern
|
MGTK_CALL MGTK::SetPattern, white_pattern
|
||||||
A2D_CALL A2D_FILL_RECT, clear_display_params
|
MGTK_CALL MGTK::PaintRect, clear_display_params
|
||||||
A2D_CALL A2D_SET_TEXT_MASK, text_mask_params
|
MGTK_CALL MGTK::SetTextBG, text_mask_params
|
||||||
;; fall through
|
;; fall through
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -1633,9 +1633,9 @@ loop: ldy #0
|
|||||||
lda (ptr),y
|
lda (ptr),y
|
||||||
sta label
|
sta label
|
||||||
|
|
||||||
A2D_CALL A2D_DRAW_BITMAP, 0, bitmap_addr ; draw shadowed rect
|
MGTK_CALL MGTK::PaintBits, 0, bitmap_addr ; draw shadowed rect
|
||||||
A2D_CALL A2D_SET_POS, 0, text_addr ; button label pos
|
MGTK_CALL MGTK::MoveTo, 0, text_addr ; button label pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, draw_text_params_label ; button label text
|
MGTK_CALL MGTK::DrawText, draw_text_params_label ; button label text
|
||||||
|
|
||||||
lda ptr ; advance to next record
|
lda ptr ; advance to next record
|
||||||
clc
|
clc
|
||||||
@ -1668,13 +1668,13 @@ draw_title_bar:
|
|||||||
bcs :+
|
bcs :+
|
||||||
dex
|
dex
|
||||||
: stx title_bar_decoration::top+1
|
: stx title_bar_decoration::top+1
|
||||||
A2D_CALL A2D_SET_BOX, screen_box ; set clipping rect to whole screen
|
MGTK_CALL MGTK::SetPortSite, screen_box ; set clipping rect to whole screen
|
||||||
A2D_CALL A2D_DRAW_BITMAP, title_bar_decoration ; Draws decoration in title bar
|
MGTK_CALL MGTK::PaintBits, title_bar_decoration ; Draws decoration in title bar
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta query_state_params::id
|
sta query_state_params::id
|
||||||
A2D_CALL A2D_QUERY_STATE, query_state_params
|
MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params
|
MGTK_CALL MGTK::SetPort, state_params
|
||||||
A2D_CALL A2D_SHOW_CURSOR
|
MGTK_CALL MGTK::ShowCursor
|
||||||
jsr display_buffer2
|
jsr display_buffer2
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -1686,8 +1686,8 @@ draw_title_bar:
|
|||||||
jsr reset_buffers_and_display
|
jsr reset_buffers_and_display
|
||||||
bit offscreen_flag
|
bit offscreen_flag
|
||||||
bmi :+
|
bmi :+
|
||||||
A2D_CALL A2D_SET_POS, error_pos
|
MGTK_CALL MGTK::MoveTo, error_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, error_string
|
MGTK_CALL MGTK::DrawText, error_string
|
||||||
: jsr reset_buffer1_and_state
|
: jsr reset_buffer1_and_state
|
||||||
lda #'='
|
lda #'='
|
||||||
sta calc_op
|
sta calc_op
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
.include "../inc/applesoft.inc"
|
.include "../inc/applesoft.inc"
|
||||||
.include "../inc/prodos.inc"
|
.include "../inc/prodos.inc"
|
||||||
|
|
||||||
.include "../a2d.inc"
|
.include "../mgtk.inc"
|
||||||
.include "../desktop.inc" ; redraw icons after window move, font
|
.include "../desktop.inc" ; redraw icons after window move, font
|
||||||
|
|
||||||
.org $800
|
.org $800
|
||||||
@ -111,8 +111,8 @@ call_init:
|
|||||||
skip: lda #0
|
skip: lda #0
|
||||||
sta offscreen_flag
|
sta offscreen_flag
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
A2D_CALL A2D_QUERY_STATE, query_state_params
|
MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params
|
MGTK_CALL MGTK::SetPort, state_params
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.proc routine
|
.proc routine
|
||||||
@ -147,8 +147,8 @@ offscreen_flag:
|
|||||||
|
|
||||||
;; Is skipping this responsible for display redraw bug?
|
;; Is skipping this responsible for display redraw bug?
|
||||||
;; https://github.com/inexorabletash/a2d/issues/34
|
;; https://github.com/inexorabletash/a2d/issues/34
|
||||||
: A2D_CALL A2D_QUERY_STATE, query_state_params
|
: MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params
|
MGTK_CALL MGTK::SetPort, state_params
|
||||||
lda query_state_params_id
|
lda query_state_params_id
|
||||||
cmp #window_id
|
cmp #window_id
|
||||||
bne :+
|
bne :+
|
||||||
@ -207,11 +207,11 @@ id: .byte 0
|
|||||||
query_state_params_id := query_state_params::id
|
query_state_params_id := query_state_params::id
|
||||||
|
|
||||||
.proc preserve_zp_params
|
.proc preserve_zp_params
|
||||||
flag: .byte A2D_CZP_PRESERVE
|
flag: .byte MGTK::zp_preserve
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc overwrite_zp_params
|
.proc overwrite_zp_params
|
||||||
flag: .byte A2D_CZP_OVERWRITE
|
flag: .byte MGTK::zp_overwrite
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
@ -665,9 +665,9 @@ text_buffer2:
|
|||||||
.res text_buffer_size+2, 0
|
.res text_buffer_size+2, 0
|
||||||
|
|
||||||
spaces_string:
|
spaces_string:
|
||||||
A2D_DEFSTRING " "
|
DEFINE_STRING " "
|
||||||
error_string:
|
error_string:
|
||||||
A2D_DEFSTRING "Error "
|
DEFINE_STRING "Error "
|
||||||
|
|
||||||
;; used when clearing display; params to a $18 call
|
;; used when clearing display; params to a $18 call
|
||||||
.proc measure_text_params
|
.proc measure_text_params
|
||||||
@ -699,7 +699,7 @@ base: .word 16
|
|||||||
|
|
||||||
farg: .byte $00,$00,$00,$00,$00,$00
|
farg: .byte $00,$00,$00,$00,$00,$00
|
||||||
|
|
||||||
.proc title_bar_decoration ; Params for A2D_DRAW_BITMAP
|
.proc title_bar_decoration ; Params for MGTK::PaintBits
|
||||||
left: .word 115 ; overwritten
|
left: .word 115 ; overwritten
|
||||||
top: .word $FFF7 ; overwritten
|
top: .word $FFF7 ; overwritten
|
||||||
bitmap:.addr pixels
|
bitmap:.addr pixels
|
||||||
@ -747,12 +747,12 @@ font: .addr 0
|
|||||||
screen_width := 560
|
screen_width := 560
|
||||||
screen_height := 192
|
screen_height := 192
|
||||||
|
|
||||||
;; params for A2D_SET_BOX when decorating title bar
|
;; params for MGTK::SetPortSite when decorating title bar
|
||||||
.proc screen_box
|
.proc screen_box
|
||||||
left: .word 0
|
left: .word 0
|
||||||
top: .word menu_bar_height
|
top: .word menu_bar_height
|
||||||
addr: .word A2D_SCREEN_ADDR
|
addr: .word MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word screen_width - 1
|
width: .word screen_width - 1
|
||||||
@ -760,13 +760,13 @@ height: .word screen_height - menu_bar_height - 2
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc fill_mode_normal
|
.proc fill_mode_normal
|
||||||
mode: .byte A2D_SFM_NORMAL
|
mode: .byte MGTK::pencopy
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.byte $01,$02 ; ??
|
.byte $01,$02 ; ??
|
||||||
|
|
||||||
.proc fill_mode_xor
|
.proc fill_mode_xor
|
||||||
mode: .byte A2D_SFM_XOR
|
mode: .byte MGTK::notpenXOR
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
window_width := 130
|
window_width := 130
|
||||||
@ -776,10 +776,10 @@ mode: .byte A2D_SFM_XOR
|
|||||||
|
|
||||||
.proc create_window_params
|
.proc create_window_params
|
||||||
id: .byte window_id
|
id: .byte window_id
|
||||||
flags: .byte A2D_CWF_ADDCLOSE
|
flags: .byte MGTK::option_go_away_box
|
||||||
title: .addr window_title
|
title: .addr window_title
|
||||||
hscroll:.byte A2D_CWS_NOSCROLL
|
hscroll:.byte MGTK::scroll_option_none
|
||||||
vscroll:.byte A2D_CWS_NOSCROLL
|
vscroll:.byte MGTK::scroll_option_none
|
||||||
hs_max: .byte 0
|
hs_max: .byte 0
|
||||||
hs_pos: .byte 0
|
hs_pos: .byte 0
|
||||||
vs_max: .byte 0
|
vs_max: .byte 0
|
||||||
@ -791,15 +791,15 @@ w2: .word window_width
|
|||||||
h2: .word window_height
|
h2: .word window_height
|
||||||
left: .word default_left
|
left: .word default_left
|
||||||
top: .word default_top
|
top: .word default_top
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word window_width
|
width: .word window_width
|
||||||
height: .word window_height
|
height: .word window_height
|
||||||
pattern:.res 8, $FF
|
pattern:.res 8, $FF
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 1
|
hthick: .byte 1
|
||||||
@ -848,15 +848,15 @@ cursor: .byte px(%0000000),px(%0000000) ; cursor
|
|||||||
init: sta ALTZPON
|
init: sta ALTZPON
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
A2D_CALL A2D_CONFIGURE_ZP_USE, preserve_zp_params
|
MGTK_CALL MGTK::SetZP1, preserve_zp_params
|
||||||
A2D_CALL A2D_CREATE_WINDOW, create_window_params
|
MGTK_CALL MGTK::OpenWindow, create_window_params
|
||||||
A2D_CALL A2D_QUERY_SCREEN, state_params
|
MGTK_CALL MGTK::InitPort, state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params ; set clipping bounds?
|
MGTK_CALL MGTK::SetPort, state_params ; set clipping bounds?
|
||||||
A2D_CALL $2B ; reset drawing state?
|
MGTK_CALL $2B ; reset drawing state?
|
||||||
lda #$01
|
lda #$01
|
||||||
sta input_state_params::state
|
sta input_state_params::state
|
||||||
A2D_CALL A2D_SET_INPUT, input_state_params
|
MGTK_CALL MGTK::PostEvent, input_state_params
|
||||||
A2D_CALL A2D_GET_INPUT, input_state_params
|
MGTK_CALL MGTK::GetEvent, input_state_params
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
jsr reset_buffer2
|
jsr reset_buffer2
|
||||||
lda #window_id
|
lda #window_id
|
||||||
@ -916,21 +916,21 @@ loop: lda adjust_txtptr_copied-1,x
|
|||||||
jsr process_key
|
jsr process_key
|
||||||
|
|
||||||
;; previous draws mangle the cursor (why???)
|
;; previous draws mangle the cursor (why???)
|
||||||
A2D_CALL A2D_SET_CURSOR, cursor ; Why not use JUMP_TABLE_CUR_POINTER ?
|
MGTK_CALL MGTK::SetCursor, cursor ; Why not use JUMP_TABLE_CUR_POINTER ?
|
||||||
;; fall through
|
;; fall through
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; Input Loop
|
;;; Input Loop
|
||||||
|
|
||||||
input_loop:
|
input_loop:
|
||||||
A2D_CALL A2D_GET_INPUT, input_state_params
|
MGTK_CALL MGTK::GetEvent, input_state_params
|
||||||
lda input_state_params::state
|
lda input_state_params::state
|
||||||
cmp #A2D_INPUT_DOWN
|
cmp #MGTK::button_down
|
||||||
bne :+
|
bne :+
|
||||||
jsr on_click
|
jsr on_click
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
|
|
||||||
: cmp #A2D_INPUT_KEY
|
: cmp #MGTK::key_down
|
||||||
bne input_loop
|
bne input_loop
|
||||||
jsr on_key_press
|
jsr on_key_press
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
@ -941,10 +941,10 @@ input_loop:
|
|||||||
on_click:
|
on_click:
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
A2D_CALL A2D_QUERY_TARGET, target_params
|
MGTK_CALL MGTK::FindWindow, target_params
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
lda target_params::elem
|
lda target_params::elem
|
||||||
cmp #A2D_ELEM_CLIENT ; Less than CLIENT is MENU or DESKTOP
|
cmp #MGTK::area_content ; Less than CLIENT is MENU or DESKTOP
|
||||||
bcc ignore_click
|
bcc ignore_click
|
||||||
lda target_params::id
|
lda target_params::id
|
||||||
cmp #window_id ; This window?
|
cmp #window_id ; This window?
|
||||||
@ -954,23 +954,23 @@ ignore_click:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
: lda target_params::elem
|
: lda target_params::elem
|
||||||
cmp #A2D_ELEM_CLIENT ; Client area?
|
cmp #MGTK::area_content ; Client area?
|
||||||
bne :+
|
bne :+
|
||||||
jsr map_click_to_button ; try to translate click into key
|
jsr map_click_to_button ; try to translate click into key
|
||||||
bcc ignore_click
|
bcc ignore_click
|
||||||
jmp process_key
|
jmp process_key
|
||||||
|
|
||||||
: cmp #A2D_ELEM_CLOSE ; Close box?
|
: cmp #MGTK::area_close_box ; Close box?
|
||||||
bne :+
|
bne :+
|
||||||
A2D_CALL A2D_CLOSE_CLICK, close_click_params
|
MGTK_CALL MGTK::TrackGoAway, close_click_params
|
||||||
lda close_click_params::state
|
lda close_click_params::state
|
||||||
beq ignore_click
|
beq ignore_click
|
||||||
exit: lda LCBANK1
|
exit: lda LCBANK1
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params
|
MGTK_CALL MGTK::CloseWindow, destroy_window_params
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
A2D_CALL A2D_CONFIGURE_ZP_USE, overwrite_zp_params
|
MGTK_CALL MGTK::SetZP1, overwrite_zp_params
|
||||||
|
|
||||||
.proc do_close
|
.proc do_close
|
||||||
;; Copy following routine to ZP and invoke it
|
;; Copy following routine to ZP and invoke it
|
||||||
@ -991,13 +991,13 @@ loop: lda routine,x
|
|||||||
sizeof_routine := * - routine ; Can't use .sizeof before the .proc definition
|
sizeof_routine := * - routine ; Can't use .sizeof before the .proc definition
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
: cmp #A2D_ELEM_TITLE ; Title bar?
|
: cmp #MGTK::area_dragbar ; Title bar?
|
||||||
bne ignore_click
|
bne ignore_click
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta drag_params::id
|
sta drag_params::id
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
A2D_CALL A2D_DRAG_WINDOW, drag_params
|
MGTK_CALL MGTK::DragWindow, drag_params
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
jsr redraw_screen_and_window
|
jsr redraw_screen_and_window
|
||||||
rts
|
rts
|
||||||
@ -1036,7 +1036,7 @@ rts1: rts ; used by next proc
|
|||||||
.proc map_click_to_button
|
.proc map_click_to_button
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta map_coords_params::id
|
sta map_coords_params::id
|
||||||
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
MGTK_CALL MGTK::ScreenToWindow, map_coords_params
|
||||||
lda map_coords_params::clientx+1 ; ensure high bits of coords are 0
|
lda map_coords_params::clientx+1 ; ensure high bits of coords are 0
|
||||||
ora map_coords_params::clienty+1
|
ora map_coords_params::clienty+1
|
||||||
bne rts1
|
bne rts1
|
||||||
@ -1534,24 +1534,24 @@ end: jsr display_buffer1
|
|||||||
sty invert_addr+1
|
sty invert_addr+1
|
||||||
sty c13_addr+1
|
sty c13_addr+1
|
||||||
sty restore_addr+1
|
sty restore_addr+1
|
||||||
A2D_CALL A2D_SET_PATTERN, black_pattern
|
MGTK_CALL MGTK::SetPattern, black_pattern
|
||||||
A2D_CALL A2D_SET_FILL_MODE, fill_mode_xor
|
MGTK_CALL MGTK::SetPenMode, fill_mode_xor
|
||||||
sec
|
sec
|
||||||
ror button_state
|
ror button_state
|
||||||
|
|
||||||
invert: A2D_CALL A2D_FILL_RECT, 0, invert_addr ; Inverts box
|
invert: MGTK_CALL MGTK::PaintRect, 0, invert_addr ; Inverts box
|
||||||
|
|
||||||
check_button:
|
check_button:
|
||||||
A2D_CALL A2D_GET_INPUT, input_state_params
|
MGTK_CALL MGTK::GetEvent, input_state_params
|
||||||
lda input_state_params::state
|
lda input_state_params::state
|
||||||
cmp #A2D_INPUT_HELD ; Button down?
|
cmp #MGTK::drag ; Button down?
|
||||||
bne done ; Nope, done immediately
|
bne done ; Nope, done immediately
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta map_coords_params::id
|
sta map_coords_params::id
|
||||||
|
|
||||||
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
MGTK_CALL MGTK::ScreenToWindow, map_coords_params
|
||||||
A2D_CALL A2D_SET_POS, map_coords_params::client
|
MGTK_CALL MGTK::MoveTo, map_coords_params::client
|
||||||
A2D_CALL A2D_TEST_BOX, 0, c13_addr
|
MGTK_CALL MGTK::InRect, 0, c13_addr
|
||||||
bne inside
|
bne inside
|
||||||
|
|
||||||
lda button_state ; outside, not down
|
lda button_state ; outside, not down
|
||||||
@ -1570,8 +1570,8 @@ inside: lda button_state ; inside, and down
|
|||||||
|
|
||||||
done: lda button_state ; high bit set if button down
|
done: lda button_state ; high bit set if button down
|
||||||
beq :+
|
beq :+
|
||||||
A2D_CALL A2D_FILL_RECT, 0, restore_addr ; Inverts back to normal
|
MGTK_CALL MGTK::PaintRect, 0, restore_addr ; Inverts back to normal
|
||||||
: A2D_CALL A2D_SET_FILL_MODE, fill_mode_normal ; Normal draw mode??
|
: MGTK_CALL MGTK::SetPenMode, fill_mode_normal ; Normal draw mode??
|
||||||
lda button_state
|
lda button_state
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
@ -1610,7 +1610,7 @@ loop: lda #' '
|
|||||||
ldx #<text_buffer1
|
ldx #<text_buffer1
|
||||||
ldy #>text_buffer1
|
ldy #>text_buffer1
|
||||||
jsr pre_display_buffer
|
jsr pre_display_buffer
|
||||||
A2D_CALL A2D_DRAW_TEXT, draw_text_params1
|
MGTK_CALL MGTK::DrawText, draw_text_params1
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -1618,21 +1618,21 @@ loop: lda #' '
|
|||||||
ldx #<text_buffer2
|
ldx #<text_buffer2
|
||||||
ldy #>text_buffer2
|
ldy #>text_buffer2
|
||||||
jsr pre_display_buffer
|
jsr pre_display_buffer
|
||||||
A2D_CALL A2D_DRAW_TEXT, draw_text_params2
|
MGTK_CALL MGTK::DrawText, draw_text_params2
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc pre_display_buffer
|
.proc pre_display_buffer
|
||||||
stx measure_text_params::addr ; text buffer address in x,y
|
stx measure_text_params::addr ; text buffer address in x,y
|
||||||
sty measure_text_params::addr+1
|
sty measure_text_params::addr+1
|
||||||
A2D_CALL A2D_MEASURE_TEXT, measure_text_params
|
MGTK_CALL MGTK::TextWidth, measure_text_params
|
||||||
lda #display_width-15 ; ???
|
lda #display_width-15 ; ???
|
||||||
sec
|
sec
|
||||||
sbc measure_text_params::width
|
sbc measure_text_params::width
|
||||||
sta text_pos_params3::left
|
sta text_pos_params3::left
|
||||||
A2D_CALL A2D_SET_POS, text_pos_params2 ; clear with spaces
|
MGTK_CALL MGTK::MoveTo, text_pos_params2 ; clear with spaces
|
||||||
A2D_CALL A2D_DRAW_TEXT, spaces_string
|
MGTK_CALL MGTK::DrawText, spaces_string
|
||||||
A2D_CALL A2D_SET_POS, text_pos_params3 ; set up for display
|
MGTK_CALL MGTK::MoveTo, text_pos_params3 ; set up for display
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -1641,14 +1641,14 @@ loop: lda #' '
|
|||||||
|
|
||||||
.proc draw_background
|
.proc draw_background
|
||||||
;; Frame
|
;; Frame
|
||||||
A2D_CALL A2D_HIDE_CURSOR
|
MGTK_CALL MGTK::HideCursor
|
||||||
A2D_CALL A2D_SET_PATTERN, background_pattern
|
MGTK_CALL MGTK::SetPattern, background_pattern
|
||||||
A2D_CALL A2D_FILL_RECT, background_box_params
|
MGTK_CALL MGTK::PaintRect, background_box_params
|
||||||
A2D_CALL A2D_SET_PATTERN, black_pattern
|
MGTK_CALL MGTK::SetPattern, black_pattern
|
||||||
A2D_CALL A2D_DRAW_RECT, frame_display_params
|
MGTK_CALL MGTK::FrameRect, frame_display_params
|
||||||
A2D_CALL A2D_SET_PATTERN, white_pattern
|
MGTK_CALL MGTK::SetPattern, white_pattern
|
||||||
A2D_CALL A2D_FILL_RECT, clear_display_params
|
MGTK_CALL MGTK::PaintRect, clear_display_params
|
||||||
A2D_CALL A2D_SET_TEXT_MASK, text_mask_params
|
MGTK_CALL MGTK::SetTextBG, text_mask_params
|
||||||
;; fall through
|
;; fall through
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -1680,9 +1680,9 @@ loop: ldy #0
|
|||||||
lda (ptr),y
|
lda (ptr),y
|
||||||
sta label
|
sta label
|
||||||
|
|
||||||
A2D_CALL A2D_DRAW_BITMAP, 0, bitmap_addr ; draw shadowed rect
|
MGTK_CALL MGTK::PaintBits, 0, bitmap_addr ; draw shadowed rect
|
||||||
A2D_CALL A2D_SET_POS, 0, text_addr ; button label pos
|
MGTK_CALL MGTK::MoveTo, 0, text_addr ; button label pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, draw_text_params_label ; button label text
|
MGTK_CALL MGTK::DrawText, draw_text_params_label ; button label text
|
||||||
|
|
||||||
lda ptr ; advance to next record
|
lda ptr ; advance to next record
|
||||||
clc
|
clc
|
||||||
@ -1715,13 +1715,13 @@ draw_title_bar:
|
|||||||
bcs :+
|
bcs :+
|
||||||
dex
|
dex
|
||||||
: stx title_bar_decoration::top+1
|
: stx title_bar_decoration::top+1
|
||||||
A2D_CALL A2D_SET_BOX, screen_box ; set clipping rect to whole screen
|
MGTK_CALL MGTK::SetPortSite, screen_box ; set clipping rect to whole screen
|
||||||
A2D_CALL A2D_DRAW_BITMAP, title_bar_decoration ; Draws decoration in title bar
|
MGTK_CALL MGTK::PaintBits, title_bar_decoration ; Draws decoration in title bar
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta query_state_params::id
|
sta query_state_params::id
|
||||||
A2D_CALL A2D_QUERY_STATE, query_state_params
|
MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params
|
MGTK_CALL MGTK::SetPort, state_params
|
||||||
A2D_CALL A2D_SHOW_CURSOR
|
MGTK_CALL MGTK::ShowCursor
|
||||||
jsr display_buffer2
|
jsr display_buffer2
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -1729,8 +1729,8 @@ draw_title_bar:
|
|||||||
;; and returns to the input loop.
|
;; and returns to the input loop.
|
||||||
.proc error_hook
|
.proc error_hook
|
||||||
jsr reset_buffers_and_display
|
jsr reset_buffers_and_display
|
||||||
A2D_CALL A2D_SET_POS, error_pos
|
MGTK_CALL MGTK::MoveTo, error_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, error_string
|
MGTK_CALL MGTK::DrawText, error_string
|
||||||
jsr reset_buffer1_and_state
|
jsr reset_buffer1_and_state
|
||||||
lda #'='
|
lda #'='
|
||||||
sta calc_op
|
sta calc_op
|
||||||
|
142
desk.acc/date.s
142
desk.acc/date.s
@ -5,7 +5,7 @@
|
|||||||
.include "../inc/prodos.inc"
|
.include "../inc/prodos.inc"
|
||||||
.include "../inc/auxmem.inc"
|
.include "../inc/auxmem.inc"
|
||||||
|
|
||||||
.include "../a2d.inc"
|
.include "../mgtk.inc"
|
||||||
.include "../desktop.inc" ; redraw icons after window move; font; glyphs
|
.include "../desktop.inc" ; redraw icons after window move; font; glyphs
|
||||||
|
|
||||||
.org $800
|
.org $800
|
||||||
@ -197,22 +197,22 @@ month: .byte 2 ; The date this was written?
|
|||||||
year: .byte 85
|
year: .byte 85
|
||||||
|
|
||||||
spaces_string:
|
spaces_string:
|
||||||
A2D_DEFSTRING " "
|
DEFINE_STRING " "
|
||||||
|
|
||||||
day_pos:
|
day_pos:
|
||||||
.word 43, 30
|
.word 43, 30
|
||||||
day_string:
|
day_string:
|
||||||
A2D_DEFSTRING " "
|
DEFINE_STRING " "
|
||||||
|
|
||||||
month_pos:
|
month_pos:
|
||||||
.word 87, 30
|
.word 87, 30
|
||||||
month_string:
|
month_string:
|
||||||
A2D_DEFSTRING " "
|
DEFINE_STRING " "
|
||||||
|
|
||||||
year_pos:
|
year_pos:
|
||||||
.word 133, 30
|
.word 133, 30
|
||||||
year_string:
|
year_string:
|
||||||
A2D_DEFSTRING " "
|
DEFINE_STRING " "
|
||||||
|
|
||||||
.proc get_input_params
|
.proc get_input_params
|
||||||
state: .byte 0
|
state: .byte 0
|
||||||
@ -256,10 +256,10 @@ mode: .byte $02 ; this should be normal, but we do inverts ???
|
|||||||
|
|
||||||
.proc create_window_params
|
.proc create_window_params
|
||||||
id: .byte window_id
|
id: .byte window_id
|
||||||
flags: .byte A2D_CWF_NOTITLE
|
flags: .byte MGTK::option_dialog_box
|
||||||
title: .addr 0
|
title: .addr 0
|
||||||
hscroll:.byte A2D_CWS_NOSCROLL
|
hscroll:.byte MGTK::scroll_option_none
|
||||||
vscroll:.byte A2D_CWS_NOSCROLL
|
vscroll:.byte MGTK::scroll_option_none
|
||||||
hsmax: .byte 0
|
hsmax: .byte 0
|
||||||
hspos: .byte 0
|
hspos: .byte 0
|
||||||
vsmax: .byte 0
|
vsmax: .byte 0
|
||||||
@ -272,16 +272,16 @@ h2: .word $1F4
|
|||||||
.proc box
|
.proc box
|
||||||
left: .word 180
|
left: .word 180
|
||||||
top: .word 50
|
top: .word 50
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word $C7
|
width: .word $C7
|
||||||
height: .word $40
|
height: .word $40
|
||||||
.endproc
|
.endproc
|
||||||
pattern:.res 8,$00
|
pattern:.res 8,$00
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 4
|
hthick: .byte 4
|
||||||
@ -321,25 +321,25 @@ init_window:
|
|||||||
lsr a
|
lsr a
|
||||||
sta month
|
sta month
|
||||||
|
|
||||||
A2D_CALL A2D_CREATE_WINDOW, create_window_params
|
MGTK_CALL MGTK::OpenWindow, create_window_params
|
||||||
lda #0
|
lda #0
|
||||||
sta selected_field
|
sta selected_field
|
||||||
jsr draw_window
|
jsr draw_window
|
||||||
A2D_CALL $2B
|
MGTK_CALL $2B
|
||||||
;; fall through
|
;; fall through
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; Input loop
|
;;; Input loop
|
||||||
|
|
||||||
.proc input_loop
|
.proc input_loop
|
||||||
A2D_CALL A2D_GET_INPUT, get_input_params
|
MGTK_CALL MGTK::GetEvent, get_input_params
|
||||||
lda get_input_params::state
|
lda get_input_params::state
|
||||||
cmp #A2D_INPUT_DOWN
|
cmp #MGTK::button_down
|
||||||
bne :+
|
bne :+
|
||||||
jsr on_click
|
jsr on_click
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
|
|
||||||
: cmp #A2D_INPUT_KEY
|
: cmp #MGTK::key_down
|
||||||
bne input_loop
|
bne input_loop
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -364,19 +364,19 @@ init_window:
|
|||||||
bne input_loop
|
bne input_loop
|
||||||
|
|
||||||
on_key_up:
|
on_key_up:
|
||||||
A2D_CALL A2D_FILL_RECT, up_arrow_rect
|
MGTK_CALL MGTK::PaintRect, up_arrow_rect
|
||||||
lda #up_rect_index
|
lda #up_rect_index
|
||||||
sta hit_rect_index
|
sta hit_rect_index
|
||||||
jsr do_inc_or_dec
|
jsr do_inc_or_dec
|
||||||
A2D_CALL A2D_FILL_RECT, up_arrow_rect
|
MGTK_CALL MGTK::PaintRect, up_arrow_rect
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
|
|
||||||
on_key_down:
|
on_key_down:
|
||||||
A2D_CALL A2D_FILL_RECT, down_arrow_rect
|
MGTK_CALL MGTK::PaintRect, down_arrow_rect
|
||||||
lda #down_rect_index
|
lda #down_rect_index
|
||||||
sta hit_rect_index
|
sta hit_rect_index
|
||||||
jsr do_inc_or_dec
|
jsr do_inc_or_dec
|
||||||
A2D_CALL A2D_FILL_RECT, down_arrow_rect
|
MGTK_CALL MGTK::PaintRect, down_arrow_rect
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
|
|
||||||
on_key_left:
|
on_key_left:
|
||||||
@ -403,9 +403,9 @@ update_selection:
|
|||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
.proc on_click
|
.proc on_click
|
||||||
A2D_CALL A2D_QUERY_TARGET, get_input_params::xcoord
|
MGTK_CALL MGTK::FindWindow, get_input_params::xcoord
|
||||||
A2D_CALL A2D_SET_FILL_MODE, fill_mode_params
|
MGTK_CALL MGTK::SetPenMode, fill_mode_params
|
||||||
A2D_CALL A2D_SET_PATTERN, white_pattern
|
MGTK_CALL MGTK::SetPattern, white_pattern
|
||||||
lda query_target_params::id
|
lda query_target_params::id
|
||||||
cmp #window_id
|
cmp #window_id
|
||||||
bne miss
|
bne miss
|
||||||
@ -413,7 +413,7 @@ update_selection:
|
|||||||
bne hit
|
bne hit
|
||||||
miss: rts
|
miss: rts
|
||||||
|
|
||||||
hit: cmp #A2D_ELEM_CLIENT
|
hit: cmp #MGTK::area_content
|
||||||
bne miss
|
bne miss
|
||||||
jsr find_hit_target
|
jsr find_hit_target
|
||||||
cpx #0
|
cpx #0
|
||||||
@ -437,7 +437,7 @@ hit_target_jump_table:
|
|||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
.proc on_ok
|
.proc on_ok
|
||||||
A2D_CALL A2D_FILL_RECT, ok_button_rect
|
MGTK_CALL MGTK::PaintRect, ok_button_rect
|
||||||
|
|
||||||
;; Pack the date bytes and store
|
;; Pack the date bytes and store
|
||||||
sta RAMWRTOFF
|
sta RAMWRTOFF
|
||||||
@ -460,7 +460,7 @@ hit_target_jump_table:
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
on_cancel:
|
on_cancel:
|
||||||
A2D_CALL A2D_FILL_RECT, cancel_button_rect
|
MGTK_CALL MGTK::PaintRect, cancel_button_rect
|
||||||
lda #0
|
lda #0
|
||||||
sta dialog_result
|
sta dialog_result
|
||||||
jmp destroy
|
jmp destroy
|
||||||
@ -468,7 +468,7 @@ on_cancel:
|
|||||||
on_up:
|
on_up:
|
||||||
txa
|
txa
|
||||||
pha
|
pha
|
||||||
A2D_CALL A2D_FILL_RECT, up_arrow_rect
|
MGTK_CALL MGTK::PaintRect, up_arrow_rect
|
||||||
pla
|
pla
|
||||||
tax
|
tax
|
||||||
jsr on_up_or_down
|
jsr on_up_or_down
|
||||||
@ -477,7 +477,7 @@ on_up:
|
|||||||
on_down:
|
on_down:
|
||||||
txa
|
txa
|
||||||
pha
|
pha
|
||||||
A2D_CALL A2D_FILL_RECT, down_arrow_rect
|
MGTK_CALL MGTK::PaintRect, down_arrow_rect
|
||||||
pla
|
pla
|
||||||
tax
|
tax
|
||||||
jsr on_up_or_down
|
jsr on_up_or_down
|
||||||
@ -491,9 +491,9 @@ on_field_click:
|
|||||||
|
|
||||||
.proc on_up_or_down
|
.proc on_up_or_down
|
||||||
stx hit_rect_index
|
stx hit_rect_index
|
||||||
loop: A2D_CALL A2D_GET_INPUT, get_input_params ; Repeat while mouse is down
|
loop: MGTK_CALL MGTK::GetEvent, get_input_params ; Repeat while mouse is down
|
||||||
lda get_input_params::state
|
lda get_input_params::state
|
||||||
cmp #A2D_INPUT_UP
|
cmp #MGTK::button_up
|
||||||
beq :+
|
beq :+
|
||||||
jsr do_inc_or_dec
|
jsr do_inc_or_dec
|
||||||
jmp loop
|
jmp loop
|
||||||
@ -502,10 +502,10 @@ loop: A2D_CALL A2D_GET_INPUT, get_input_params ; Repeat while mouse is down
|
|||||||
cmp #up_rect_index
|
cmp #up_rect_index
|
||||||
beq :+
|
beq :+
|
||||||
|
|
||||||
A2D_CALL A2D_FILL_RECT, down_arrow_rect
|
MGTK_CALL MGTK::PaintRect, down_arrow_rect
|
||||||
rts
|
rts
|
||||||
|
|
||||||
: A2D_CALL A2D_FILL_RECT, up_arrow_rect
|
: MGTK_CALL MGTK::PaintRect, up_arrow_rect
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -538,7 +538,7 @@ go: lda selected_field
|
|||||||
sta gosub+2
|
sta gosub+2
|
||||||
|
|
||||||
gosub: jsr $1000 ; self modified
|
gosub: jsr $1000 ; self modified
|
||||||
A2D_CALL A2D_SET_TEXT_MASK, text_mask_params
|
MGTK_CALL MGTK::SetTextBG, text_mask_params
|
||||||
jmp draw_selected_field
|
jmp draw_selected_field
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -666,7 +666,7 @@ month_name_table:
|
|||||||
dialog_result: .byte 0
|
dialog_result: .byte 0
|
||||||
|
|
||||||
.proc destroy
|
.proc destroy
|
||||||
A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params
|
MGTK_CALL MGTK::CloseWindow, destroy_window_params
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
|
|
||||||
;; Copy the relay routine to the zero page
|
;; Copy the relay routine to the zero page
|
||||||
@ -717,8 +717,8 @@ skip: jmp dest
|
|||||||
sta map_coords_params::screeny
|
sta map_coords_params::screeny
|
||||||
lda get_input_params::ycoord+1
|
lda get_input_params::ycoord+1
|
||||||
sta map_coords_params::screeny+1
|
sta map_coords_params::screeny+1
|
||||||
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
MGTK_CALL MGTK::ScreenToWindow, map_coords_params
|
||||||
A2D_CALL A2D_SET_POS, map_coords_params::client
|
MGTK_CALL MGTK::MoveTo, map_coords_params::client
|
||||||
ldx #1
|
ldx #1
|
||||||
lda #<first_hit_rect
|
lda #<first_hit_rect
|
||||||
sta test_addr
|
sta test_addr
|
||||||
@ -727,7 +727,7 @@ skip: jmp dest
|
|||||||
|
|
||||||
loop: txa
|
loop: txa
|
||||||
pha
|
pha
|
||||||
A2D_CALL A2D_TEST_BOX, $1000, test_addr
|
MGTK_CALL MGTK::InRect, $1000, test_addr
|
||||||
bne done
|
bne done
|
||||||
|
|
||||||
clc
|
clc
|
||||||
@ -760,13 +760,13 @@ date_rect:
|
|||||||
.word $20,$0F,$9A,$23
|
.word $20,$0F,$9A,$23
|
||||||
|
|
||||||
label_ok:
|
label_ok:
|
||||||
A2D_DEFSTRING {"OK ",GLYPH_RETURN} ;
|
DEFINE_STRING {"OK ",GLYPH_RETURN} ;
|
||||||
label_cancel:
|
label_cancel:
|
||||||
A2D_DEFSTRING "Cancel ESC"
|
DEFINE_STRING "Cancel ESC"
|
||||||
label_uparrow:
|
label_uparrow:
|
||||||
A2D_DEFSTRING GLYPH_UARROW
|
DEFINE_STRING GLYPH_UARROW
|
||||||
label_downarrow:
|
label_downarrow:
|
||||||
A2D_DEFSTRING GLYPH_DARROW
|
DEFINE_STRING GLYPH_DARROW
|
||||||
|
|
||||||
label_cancel_pos:
|
label_cancel_pos:
|
||||||
.word $15,$38
|
.word $15,$38
|
||||||
@ -787,26 +787,26 @@ vthick: .byte 1
|
|||||||
;;; Render the window contents
|
;;; Render the window contents
|
||||||
|
|
||||||
draw_window:
|
draw_window:
|
||||||
A2D_CALL A2D_SET_STATE, create_window_params::box
|
MGTK_CALL MGTK::SetPort, create_window_params::box
|
||||||
A2D_CALL A2D_DRAW_RECT, border_rect
|
MGTK_CALL MGTK::FrameRect, border_rect
|
||||||
A2D_CALL A2D_SET_THICKNESS, thickness_params
|
MGTK_CALL MGTK::SetPenSize, thickness_params
|
||||||
A2D_CALL A2D_DRAW_RECT, date_rect
|
MGTK_CALL MGTK::FrameRect, date_rect
|
||||||
A2D_CALL A2D_DRAW_RECT, ok_button_rect
|
MGTK_CALL MGTK::FrameRect, ok_button_rect
|
||||||
A2D_CALL A2D_DRAW_RECT, cancel_button_rect
|
MGTK_CALL MGTK::FrameRect, cancel_button_rect
|
||||||
|
|
||||||
A2D_CALL A2D_SET_POS, label_ok_pos
|
MGTK_CALL MGTK::MoveTo, label_ok_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, label_ok
|
MGTK_CALL MGTK::DrawText, label_ok
|
||||||
|
|
||||||
A2D_CALL A2D_SET_POS, label_cancel_pos
|
MGTK_CALL MGTK::MoveTo, label_cancel_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, label_cancel
|
MGTK_CALL MGTK::DrawText, label_cancel
|
||||||
|
|
||||||
A2D_CALL A2D_SET_POS, label_uparrow_pos
|
MGTK_CALL MGTK::MoveTo, label_uparrow_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, label_uparrow
|
MGTK_CALL MGTK::DrawText, label_uparrow
|
||||||
A2D_CALL A2D_DRAW_RECT, up_arrow_rect
|
MGTK_CALL MGTK::FrameRect, up_arrow_rect
|
||||||
|
|
||||||
A2D_CALL A2D_SET_POS, label_downarrow_pos
|
MGTK_CALL MGTK::MoveTo, label_downarrow_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, label_downarrow
|
MGTK_CALL MGTK::DrawText, label_downarrow
|
||||||
A2D_CALL A2D_DRAW_RECT, down_arrow_rect
|
MGTK_CALL MGTK::FrameRect, down_arrow_rect
|
||||||
|
|
||||||
jsr prepare_day_string
|
jsr prepare_day_string
|
||||||
jsr prepare_month_string
|
jsr prepare_month_string
|
||||||
@ -815,8 +815,8 @@ draw_window:
|
|||||||
jsr draw_day
|
jsr draw_day
|
||||||
jsr draw_month
|
jsr draw_month
|
||||||
jsr draw_year
|
jsr draw_year
|
||||||
A2D_CALL A2D_SET_FILL_MODE, fill_mode_params
|
MGTK_CALL MGTK::SetPenMode, fill_mode_params
|
||||||
A2D_CALL A2D_SET_PATTERN, white_pattern
|
MGTK_CALL MGTK::SetPattern, white_pattern
|
||||||
lda #1
|
lda #1
|
||||||
jmp highlight_selected_field
|
jmp highlight_selected_field
|
||||||
|
|
||||||
@ -830,22 +830,22 @@ draw_window:
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc draw_day
|
.proc draw_day
|
||||||
A2D_CALL A2D_SET_POS, day_pos
|
MGTK_CALL MGTK::MoveTo, day_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, day_string
|
MGTK_CALL MGTK::DrawText, day_string
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc draw_month
|
.proc draw_month
|
||||||
A2D_CALL A2D_SET_POS, month_pos
|
MGTK_CALL MGTK::MoveTo, month_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, spaces_string ; variable width, so clear first
|
MGTK_CALL MGTK::DrawText, spaces_string ; variable width, so clear first
|
||||||
A2D_CALL A2D_SET_POS, month_pos
|
MGTK_CALL MGTK::MoveTo, month_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, month_string
|
MGTK_CALL MGTK::DrawText, month_string
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc draw_year
|
.proc draw_year
|
||||||
A2D_CALL A2D_SET_POS, year_pos
|
MGTK_CALL MGTK::MoveTo, year_pos
|
||||||
A2D_CALL A2D_DRAW_TEXT, year_string
|
MGTK_CALL MGTK::DrawText, year_string
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -878,15 +878,15 @@ update: pla ; update selection
|
|||||||
beq fill_month
|
beq fill_month
|
||||||
|
|
||||||
fill_year:
|
fill_year:
|
||||||
A2D_CALL A2D_FILL_RECT, year_rect
|
MGTK_CALL MGTK::PaintRect, year_rect
|
||||||
rts
|
rts
|
||||||
|
|
||||||
fill_day:
|
fill_day:
|
||||||
A2D_CALL A2D_FILL_RECT, day_rect
|
MGTK_CALL MGTK::PaintRect, day_rect
|
||||||
rts
|
rts
|
||||||
|
|
||||||
fill_month:
|
fill_month:
|
||||||
A2D_CALL A2D_FILL_RECT, month_rect
|
MGTK_CALL MGTK::PaintRect, month_rect
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
.include "../inc/auxmem.inc"
|
.include "../inc/auxmem.inc"
|
||||||
.include "../inc/prodos.inc"
|
.include "../inc/prodos.inc"
|
||||||
|
|
||||||
.include "../a2d.inc"
|
.include "../mgtk.inc"
|
||||||
.include "../desktop.inc" ; redraw icons after window move, font
|
.include "../desktop.inc" ; redraw icons after window move, font
|
||||||
|
|
||||||
.org $800
|
.org $800
|
||||||
@ -135,8 +135,8 @@ check_window_pos:
|
|||||||
sta window_pos_flag
|
sta window_pos_flag
|
||||||
rts
|
rts
|
||||||
|
|
||||||
: A2D_CALL A2D_QUERY_STATE, query_state_params
|
: MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, set_state_params
|
MGTK_CALL MGTK::SetPort, set_state_params
|
||||||
lda query_state_params_id
|
lda query_state_params_id
|
||||||
cmp #window_id
|
cmp #window_id
|
||||||
bne :+
|
bne :+
|
||||||
@ -593,10 +593,10 @@ set_state_params:
|
|||||||
|
|
||||||
.proc create_window_params
|
.proc create_window_params
|
||||||
id: .byte window_id
|
id: .byte window_id
|
||||||
flags: .byte A2D_CWF_ADDCLOSE
|
flags: .byte MGTK::option_go_away_box
|
||||||
title: .addr name
|
title: .addr name
|
||||||
hscroll:.byte A2D_CWS_NOSCROLL
|
hscroll:.byte MGTK::scroll_option_none
|
||||||
vscroll:.byte A2D_CWS_NOSCROLL
|
vscroll:.byte MGTK::scroll_option_none
|
||||||
hsmax: .byte 0
|
hsmax: .byte 0
|
||||||
hspos: .byte 0
|
hspos: .byte 0
|
||||||
vsmax: .byte 0
|
vsmax: .byte 0
|
||||||
@ -609,16 +609,16 @@ h2: .word default_height
|
|||||||
|
|
||||||
left: .word default_left
|
left: .word default_left
|
||||||
top: .word default_top
|
top: .word default_top
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word default_width
|
width: .word default_width
|
||||||
height: .word default_height
|
height: .word default_height
|
||||||
|
|
||||||
pattern:.res 8, $FF
|
pattern:.res 8, $FF
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 1
|
hthick: .byte 1
|
||||||
@ -633,15 +633,15 @@ next: .addr 0
|
|||||||
.proc box_cruft ; Unknown usage
|
.proc box_cruft ; Unknown usage
|
||||||
left: .word default_left
|
left: .word default_left
|
||||||
top: .word default_top
|
top: .word default_top
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word default_width
|
width: .word default_width
|
||||||
height: .word default_height
|
height: .word default_height
|
||||||
pattern:.res 8, $FF
|
pattern:.res 8, $FF
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 1
|
hthick: .byte 1
|
||||||
@ -661,7 +661,7 @@ name: PASCAL_STRING "Puzzle"
|
|||||||
|
|
||||||
.proc create_window
|
.proc create_window
|
||||||
jsr save_zp
|
jsr save_zp
|
||||||
A2D_CALL A2D_CREATE_WINDOW, create_window_params
|
MGTK_CALL MGTK::OpenWindow, create_window_params
|
||||||
|
|
||||||
;; init pieces
|
;; init pieces
|
||||||
ldy #15
|
ldy #15
|
||||||
@ -672,7 +672,7 @@ loop: tya
|
|||||||
|
|
||||||
lda #window_id
|
lda #window_id
|
||||||
jsr check_window_pos
|
jsr check_window_pos
|
||||||
A2D_CALL $2B ; ???
|
MGTK_CALL $2B ; ???
|
||||||
|
|
||||||
;; Scramble?
|
;; Scramble?
|
||||||
.proc scramble
|
.proc scramble
|
||||||
@ -698,7 +698,7 @@ ploop: lda position_table+1,y
|
|||||||
stx position_table+1
|
stx position_table+1
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
A2D_CALL A2D_GET_INPUT, get_input_params
|
MGTK_CALL MGTK::GetEvent, get_input_params
|
||||||
lda get_input_params::state
|
lda get_input_params::state
|
||||||
beq scramble
|
beq scramble
|
||||||
jsr check_victory
|
jsr check_victory
|
||||||
@ -712,22 +712,22 @@ ploop: lda position_table+1,y
|
|||||||
;;; Input loop and processing
|
;;; Input loop and processing
|
||||||
|
|
||||||
.proc input_loop
|
.proc input_loop
|
||||||
A2D_CALL A2D_GET_INPUT, get_input_params
|
MGTK_CALL MGTK::GetEvent, get_input_params
|
||||||
lda get_input_params::state
|
lda get_input_params::state
|
||||||
cmp #A2D_INPUT_DOWN
|
cmp #MGTK::button_down
|
||||||
bne :+
|
bne :+
|
||||||
jsr on_click
|
jsr on_click
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
|
|
||||||
;; key?
|
;; key?
|
||||||
: cmp #A2D_INPUT_KEY
|
: cmp #MGTK::key_down
|
||||||
bne input_loop
|
bne input_loop
|
||||||
jsr check_key
|
jsr check_key
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
|
|
||||||
;; click - where?
|
;; click - where?
|
||||||
on_click:
|
on_click:
|
||||||
A2D_CALL A2D_QUERY_TARGET, query_target_params
|
MGTK_CALL MGTK::FindWindow, query_target_params
|
||||||
lda query_target_params::id
|
lda query_target_params::id
|
||||||
cmp #window_id
|
cmp #window_id
|
||||||
bne bail
|
bne bail
|
||||||
@ -736,20 +736,20 @@ on_click:
|
|||||||
bail: rts
|
bail: rts
|
||||||
|
|
||||||
;; client area?
|
;; client area?
|
||||||
: cmp #A2D_ELEM_CLIENT
|
: cmp #MGTK::area_content
|
||||||
bne :+
|
bne :+
|
||||||
jsr find_click_piece
|
jsr find_click_piece
|
||||||
bcc bail
|
bcc bail
|
||||||
jmp process_click
|
jmp process_click
|
||||||
|
|
||||||
;; close box?
|
;; close box?
|
||||||
: cmp #A2D_ELEM_CLOSE
|
: cmp #MGTK::area_close_box
|
||||||
bne check_title
|
bne check_title
|
||||||
A2D_CALL A2D_CLOSE_CLICK, close_click_params
|
MGTK_CALL MGTK::TrackGoAway, close_click_params
|
||||||
lda close_click_params::clicked
|
lda close_click_params::clicked
|
||||||
beq bail
|
beq bail
|
||||||
destroy:
|
destroy:
|
||||||
A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params
|
MGTK_CALL MGTK::CloseWindow, destroy_window_params
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
|
|
||||||
target = $20 ; copy following to ZP and run it
|
target = $20 ; copy following to ZP and run it
|
||||||
@ -769,11 +769,11 @@ loop: lda routine,x
|
|||||||
|
|
||||||
;; title bar?
|
;; title bar?
|
||||||
check_title:
|
check_title:
|
||||||
cmp #A2D_ELEM_TITLE
|
cmp #MGTK::area_dragbar
|
||||||
bne bail
|
bne bail
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta drag_window_params::id
|
sta drag_window_params::id
|
||||||
A2D_CALL A2D_DRAG_WINDOW, drag_window_params
|
MGTK_CALL MGTK::DragWindow, drag_window_params
|
||||||
ldx #$23
|
ldx #$23
|
||||||
jsr redraw_screen
|
jsr redraw_screen
|
||||||
rts
|
rts
|
||||||
@ -794,7 +794,7 @@ check_key:
|
|||||||
.proc find_click_piece
|
.proc find_click_piece
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta map_coords_params::id
|
sta map_coords_params::id
|
||||||
A2D_CALL A2D_MAP_COORDS, map_coords_params
|
MGTK_CALL MGTK::ScreenToWindow, map_coords_params
|
||||||
lda map_coords_params::clientx+1
|
lda map_coords_params::clientx+1
|
||||||
ora map_coords_params::clienty+1
|
ora map_coords_params::clienty+1
|
||||||
bne nope ; ensure high bytes are 0
|
bne nope ; ensure high bytes are 0
|
||||||
@ -988,19 +988,19 @@ after_click:
|
|||||||
;;; Clear the background
|
;;; Clear the background
|
||||||
|
|
||||||
draw_window:
|
draw_window:
|
||||||
A2D_CALL A2D_SET_PATTERN, pattern_speckles
|
MGTK_CALL MGTK::SetPattern, pattern_speckles
|
||||||
A2D_CALL A2D_FILL_RECT, fill_rect_params
|
MGTK_CALL MGTK::PaintRect, fill_rect_params
|
||||||
A2D_CALL A2D_SET_PATTERN, pattern_black
|
MGTK_CALL MGTK::SetPattern, pattern_black
|
||||||
|
|
||||||
A2D_CALL A2D_SET_POS, set_pos_params
|
MGTK_CALL MGTK::MoveTo, set_pos_params
|
||||||
A2D_CALL A2D_DRAW_LINE, draw_line_params
|
MGTK_CALL MGTK::Line, draw_line_params
|
||||||
|
|
||||||
jsr draw_all
|
jsr draw_all
|
||||||
|
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta query_state_params::id
|
sta query_state_params::id
|
||||||
A2D_CALL A2D_QUERY_STATE, query_state_params
|
MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, set_state_params
|
MGTK_CALL MGTK::SetPort, set_state_params
|
||||||
rts
|
rts
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
@ -1062,11 +1062,11 @@ saved_zp:
|
|||||||
.proc draw_selected
|
.proc draw_selected
|
||||||
tya
|
tya
|
||||||
pha
|
pha
|
||||||
A2D_CALL A2D_HIDE_CURSOR
|
MGTK_CALL MGTK::HideCursor
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta query_state_params::id
|
sta query_state_params::id
|
||||||
A2D_CALL A2D_QUERY_STATE, query_state_params
|
MGTK_CALL MGTK::GetWinPort, query_state_params
|
||||||
A2D_CALL A2D_SET_STATE, set_state_params
|
MGTK_CALL MGTK::SetPort, set_state_params
|
||||||
pla
|
pla
|
||||||
tay
|
tay
|
||||||
|
|
||||||
@ -1090,14 +1090,14 @@ loop: tya
|
|||||||
sta draw_bitmap_params::addr
|
sta draw_bitmap_params::addr
|
||||||
lda bitmap_table+1,x
|
lda bitmap_table+1,x
|
||||||
sta draw_bitmap_params::addr+1
|
sta draw_bitmap_params::addr+1
|
||||||
A2D_CALL A2D_DRAW_BITMAP, draw_bitmap_params
|
MGTK_CALL MGTK::PaintBits, draw_bitmap_params
|
||||||
pla
|
pla
|
||||||
clc
|
clc
|
||||||
adc draw_inc
|
adc draw_inc
|
||||||
tay
|
tay
|
||||||
cpy draw_end
|
cpy draw_end
|
||||||
bcc loop
|
bcc loop
|
||||||
A2D_CALL A2D_SHOW_CURSOR
|
MGTK_CALL MGTK::ShowCursor
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
# Input: HCRG-style Font (768 bytes)
|
# Input: HCRG-style Font (768 bytes)
|
||||||
# Output: A2D font definition
|
# Output: MGTK font definition
|
||||||
|
|
||||||
# Usage: perl convert.pl < font_data > font.inc
|
# Usage: perl convert.pl < font_data > font.inc
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env perl
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
# Convert $xx into px(bbbbbbb) - input to A2D_DRAW_PATTERN
|
# Convert $xx into px(bbbbbbb) - MGTK pattern/bits
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
.include "../inc/prodos.inc"
|
.include "../inc/prodos.inc"
|
||||||
.include "../inc/auxmem.inc"
|
.include "../inc/auxmem.inc"
|
||||||
|
|
||||||
.include "../a2d.inc"
|
.include "../mgtk.inc"
|
||||||
.include "../desktop.inc" ; get selection, font
|
.include "../desktop.inc" ; get selection, font
|
||||||
|
|
||||||
.org $800
|
.org $800
|
||||||
@ -173,7 +173,7 @@ base: .word 0
|
|||||||
.proc input_params ; queried to track mouse-up
|
.proc input_params ; queried to track mouse-up
|
||||||
state: .byte $00
|
state: .byte $00
|
||||||
|
|
||||||
;;; if state is A2D_INPUT_KEY
|
;;; if state is MGTK::key_down
|
||||||
key := *
|
key := *
|
||||||
modifiers := *+1
|
modifiers := *+1
|
||||||
|
|
||||||
@ -195,10 +195,10 @@ ycoord := *+2
|
|||||||
|
|
||||||
.proc window_params
|
.proc window_params
|
||||||
id: .byte window_id ; window identifier
|
id: .byte window_id ; window identifier
|
||||||
flags: .byte A2D_CWF_NOTITLE
|
flags: .byte MGTK::option_dialog_box
|
||||||
title: .addr window_title
|
title: .addr window_title
|
||||||
hscroll:.byte A2D_CWS_NOSCROLL
|
hscroll:.byte MGTK::scroll_option_none
|
||||||
vscroll:.byte A2D_CWS_NOSCROLL
|
vscroll:.byte MGTK::scroll_option_none
|
||||||
hsmax: .byte 32
|
hsmax: .byte 32
|
||||||
hspos: .byte 0
|
hspos: .byte 0
|
||||||
vsmax: .byte 32
|
vsmax: .byte 32
|
||||||
@ -212,8 +212,8 @@ h2: .word default_height
|
|||||||
.proc box
|
.proc box
|
||||||
left: .word default_left
|
left: .word default_left
|
||||||
top: .word default_top
|
top: .word default_top
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word default_width
|
width: .word default_width
|
||||||
@ -221,8 +221,8 @@ height: .word default_height
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
pattern:.res 8, 0
|
pattern:.res 8, 0
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 1
|
hthick: .byte 1
|
||||||
@ -342,14 +342,14 @@ end: rts
|
|||||||
sta read_params::ref_num
|
sta read_params::ref_num
|
||||||
sta close_params::ref_num
|
sta close_params::ref_num
|
||||||
|
|
||||||
A2D_CALL A2D_HIDE_CURSOR
|
MGTK_CALL MGTK::HideCursor
|
||||||
jsr stash_menu
|
jsr stash_menu
|
||||||
A2D_CALL A2D_CREATE_WINDOW, window_params
|
MGTK_CALL MGTK::OpenWindow, window_params
|
||||||
A2D_CALL A2D_SET_STATE, window_params::box
|
MGTK_CALL MGTK::SetPort, window_params::box
|
||||||
jsr show_file
|
jsr show_file
|
||||||
A2D_CALL A2D_SHOW_CURSOR
|
MGTK_CALL MGTK::ShowCursor
|
||||||
|
|
||||||
A2D_CALL $2B ; ???
|
MGTK_CALL $2B ; ???
|
||||||
;; fall through
|
;; fall through
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -357,11 +357,11 @@ end: rts
|
|||||||
;;; Main Input Loop
|
;;; Main Input Loop
|
||||||
|
|
||||||
.proc input_loop
|
.proc input_loop
|
||||||
A2D_CALL A2D_GET_INPUT, input_params
|
MGTK_CALL MGTK::GetEvent, input_params
|
||||||
lda input_params::state
|
lda input_params::state
|
||||||
cmp #A2D_INPUT_DOWN ; was clicked?
|
cmp #MGTK::button_down ; was clicked?
|
||||||
beq exit
|
beq exit
|
||||||
cmp #A2D_INPUT_KEY ; any key?
|
cmp #MGTK::key_down ; any key?
|
||||||
beq on_key
|
beq on_key
|
||||||
bne input_loop
|
bne input_loop
|
||||||
|
|
||||||
@ -374,11 +374,11 @@ on_key:
|
|||||||
bne input_loop
|
bne input_loop
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
A2D_CALL A2D_HIDE_CURSOR
|
MGTK_CALL MGTK::HideCursor
|
||||||
A2D_CALL A2D_DESTROY_WINDOW, window_params
|
MGTK_CALL MGTK::CloseWindow, window_params
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
jsr unstash_menu
|
jsr unstash_menu
|
||||||
A2D_CALL A2D_SHOW_CURSOR
|
MGTK_CALL MGTK::ShowCursor
|
||||||
|
|
||||||
rts ; exits input loop
|
rts ; exits input loop
|
||||||
.endproc
|
.endproc
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
.include "../inc/prodos.inc"
|
.include "../inc/prodos.inc"
|
||||||
.include "../inc/auxmem.inc"
|
.include "../inc/auxmem.inc"
|
||||||
|
|
||||||
.include "../a2d.inc"
|
.include "../mgtk.inc"
|
||||||
.include "../desktop.inc" ; get/clear selection, font
|
.include "../desktop.inc" ; get/clear selection, font
|
||||||
|
|
||||||
.org $800
|
.org $800
|
||||||
@ -304,10 +304,10 @@ len: .byte 0 ; length
|
|||||||
|
|
||||||
.proc window_params
|
.proc window_params
|
||||||
id: .byte window_id ; window identifier
|
id: .byte window_id ; window identifier
|
||||||
flags: .byte A2D_CWF_ADDCLOSE; window flags (2=include close box)
|
flags: .byte MGTK::option_go_away_box; window flags (2=include close box)
|
||||||
title: .addr $1000 ; overwritten to point at filename
|
title: .addr $1000 ; overwritten to point at filename
|
||||||
hscroll:.byte A2D_CWS_NOSCROLL
|
hscroll:.byte MGTK::scroll_option_none
|
||||||
vscroll:.byte A2D_CWS_SCROLL_NORMAL
|
vscroll:.byte MGTK::scroll_option_normal
|
||||||
hsmax: .byte 32
|
hsmax: .byte 32
|
||||||
hspos: .byte 0
|
hspos: .byte 0
|
||||||
vsmax: .byte 255
|
vsmax: .byte 255
|
||||||
@ -321,17 +321,17 @@ h2: .word default_height
|
|||||||
.proc box
|
.proc box
|
||||||
left: .word default_left
|
left: .word default_left
|
||||||
top: .word default_top
|
top: .word default_top
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0 ; Also used for A2D_FILL_RECT
|
hoff: .word 0 ; Also used for MGTK::PaintRect
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word default_width
|
width: .word default_width
|
||||||
height: .word default_height
|
height: .word default_height
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
pattern:.res 8, $00
|
pattern:.res 8, $00
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 1
|
hthick: .byte 1
|
||||||
@ -346,8 +346,8 @@ next: .addr 0
|
|||||||
.proc default_box
|
.proc default_box
|
||||||
left: .word default_left
|
left: .word default_left
|
||||||
top: .word default_top
|
top: .word default_top
|
||||||
addr: .word A2D_SCREEN_ADDR
|
addr: .word MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word default_width
|
width: .word default_width
|
||||||
@ -497,12 +497,12 @@ loop: lda font_width_table - 1,x
|
|||||||
jsr get_file_eof
|
jsr get_file_eof
|
||||||
|
|
||||||
;; create window
|
;; create window
|
||||||
A2D_CALL A2D_CREATE_WINDOW, window_params
|
MGTK_CALL MGTK::OpenWindow, window_params
|
||||||
A2D_CALL A2D_SET_STATE, window_params::box
|
MGTK_CALL MGTK::SetPort, window_params::box
|
||||||
jsr calc_window_size
|
jsr calc_window_size
|
||||||
jsr calc_and_draw_mode
|
jsr calc_and_draw_mode
|
||||||
jsr draw_content
|
jsr draw_content
|
||||||
A2D_CALL $2B ; ???
|
MGTK_CALL $2B ; ???
|
||||||
;; fall through
|
;; fall through
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -510,19 +510,19 @@ loop: lda font_width_table - 1,x
|
|||||||
;;; Main Input Loop
|
;;; Main Input Loop
|
||||||
|
|
||||||
input_loop:
|
input_loop:
|
||||||
A2D_CALL A2D_GET_INPUT, input_params
|
MGTK_CALL MGTK::GetEvent, input_params
|
||||||
lda input_params
|
lda input_params
|
||||||
cmp #1 ; was clicked?
|
cmp #1 ; was clicked?
|
||||||
bne input_loop ; nope, keep waiting
|
bne input_loop ; nope, keep waiting
|
||||||
|
|
||||||
A2D_CALL A2D_QUERY_TARGET, input_params::coords
|
MGTK_CALL MGTK::FindWindow, input_params::coords
|
||||||
lda target_params::win ; in our window?
|
lda target_params::win ; in our window?
|
||||||
cmp #window_id
|
cmp #window_id
|
||||||
bne input_loop
|
bne input_loop
|
||||||
|
|
||||||
;; which part of the window?
|
;; which part of the window?
|
||||||
lda target_params::elem
|
lda target_params::elem
|
||||||
cmp #A2D_ELEM_CLOSE
|
cmp #MGTK::area_close_box
|
||||||
beq on_close_click
|
beq on_close_click
|
||||||
|
|
||||||
;; title and resize clicks need mouse location
|
;; title and resize clicks need mouse location
|
||||||
@ -536,9 +536,9 @@ input_loop:
|
|||||||
stx resize_drag_params::ycoord
|
stx resize_drag_params::ycoord
|
||||||
stx query_client_params::ycoord
|
stx query_client_params::ycoord
|
||||||
|
|
||||||
cmp #A2D_ELEM_TITLE
|
cmp #MGTK::area_dragbar
|
||||||
beq title
|
beq title
|
||||||
cmp #A2D_ELEM_RESIZE ; not enabled, so this will never match
|
cmp #MGTK::area_grow_box ; not enabled, so this will never match
|
||||||
beq input_loop
|
beq input_loop
|
||||||
jsr on_client_click
|
jsr on_client_click
|
||||||
jmp input_loop
|
jmp input_loop
|
||||||
@ -550,11 +550,11 @@ title: jsr on_title_bar_click
|
|||||||
;;; Close Button
|
;;; Close Button
|
||||||
|
|
||||||
.proc on_close_click
|
.proc on_close_click
|
||||||
A2D_CALL A2D_CLOSE_CLICK, close_btn_params ; wait to see if the click completes
|
MGTK_CALL MGTK::TrackGoAway, close_btn_params ; wait to see if the click completes
|
||||||
lda close_btn_params::state ; did click complete?
|
lda close_btn_params::state ; did click complete?
|
||||||
beq input_loop ; nope
|
beq input_loop ; nope
|
||||||
jsr close_file
|
jsr close_file
|
||||||
A2D_CALL A2D_DESTROY_WINDOW, window_params
|
MGTK_CALL MGTK::CloseWindow, window_params
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
rts ; exits input loop
|
rts ; exits input loop
|
||||||
.endproc
|
.endproc
|
||||||
@ -564,7 +564,7 @@ title: jsr on_title_bar_click
|
|||||||
|
|
||||||
;;; This is dead code (no resize handle!) and may be buggy
|
;;; This is dead code (no resize handle!) and may be buggy
|
||||||
.proc on_resize_click
|
.proc on_resize_click
|
||||||
A2D_CALL A2D_DRAG_RESIZE, resize_drag_params
|
MGTK_CALL MGTK::GrowWindow, resize_drag_params
|
||||||
jsr redraw_screen
|
jsr redraw_screen
|
||||||
jsr calc_window_size
|
jsr calc_window_size
|
||||||
|
|
||||||
@ -594,10 +594,10 @@ wider: lda window_params::hscroll
|
|||||||
ldx window_width+1
|
ldx window_width+1
|
||||||
cpx #>max_width
|
cpx #>max_width
|
||||||
bne enable
|
bne enable
|
||||||
and #(<~A2D_CWS_SCROLL_TRACK) ; disable scroll
|
and #(<~MGTK::scroll_option_active) ; disable scroll
|
||||||
jmp :+
|
jmp :+
|
||||||
|
|
||||||
enable: ora #A2D_CWS_SCROLL_TRACK ; enable scroll
|
enable: ora #MGTK::scroll_option_active ; enable scroll
|
||||||
|
|
||||||
: sta window_params::hscroll
|
: sta window_params::hscroll
|
||||||
sec
|
sec
|
||||||
@ -609,9 +609,9 @@ enable: ora #A2D_CWS_SCROLL_TRACK ; enable scroll
|
|||||||
sta $07
|
sta $07
|
||||||
jsr div_by_16
|
jsr div_by_16
|
||||||
sta resize_window_params::L0987
|
sta resize_window_params::L0987
|
||||||
lda #A2D_HSCROLL
|
lda #MGTK::ctl_horizontal_scroll_bar
|
||||||
sta resize_window_params::part
|
sta resize_window_params::part
|
||||||
A2D_CALL A2D_RESIZE_WINDOW, resize_window_params ; change to clamped size ???
|
MGTK_CALL MGTK::SetCtlMax, resize_window_params ; change to clamped size ???
|
||||||
jsr calc_and_draw_mode
|
jsr calc_and_draw_mode
|
||||||
jmp finish_resize
|
jmp finish_resize
|
||||||
.endproc
|
.endproc
|
||||||
@ -622,11 +622,11 @@ enable: ora #A2D_CWS_SCROLL_TRACK ; enable scroll
|
|||||||
;;; Non-title (client) area clicked
|
;;; Non-title (client) area clicked
|
||||||
.proc on_client_click
|
.proc on_client_click
|
||||||
;; On one of the scroll bars?
|
;; On one of the scroll bars?
|
||||||
A2D_CALL A2D_QUERY_CLIENT, query_client_params
|
MGTK_CALL MGTK::FindControl, query_client_params
|
||||||
lda query_client_params::part
|
lda query_client_params::part
|
||||||
cmp #A2D_VSCROLL
|
cmp #MGTK::ctl_vertical_scroll_bar
|
||||||
beq on_vscroll_click
|
beq on_vscroll_click
|
||||||
cmp #A2D_HSCROLL
|
cmp #MGTK::ctl_horizontal_scroll_bar
|
||||||
bne end
|
bne end
|
||||||
jmp on_hscroll_click
|
jmp on_hscroll_click
|
||||||
end: rts
|
end: rts
|
||||||
@ -636,19 +636,19 @@ end: rts
|
|||||||
;;; Vertical Scroll Bar
|
;;; Vertical Scroll Bar
|
||||||
|
|
||||||
.proc on_vscroll_click
|
.proc on_vscroll_click
|
||||||
lda #A2D_VSCROLL
|
lda #MGTK::ctl_vertical_scroll_bar
|
||||||
sta thumb_drag_params::type
|
sta thumb_drag_params::type
|
||||||
sta update_scroll_params::type
|
sta update_scroll_params::type
|
||||||
lda query_client_params::scroll
|
lda query_client_params::scroll
|
||||||
cmp #A2D_SCROLL_PART_THUMB
|
cmp #MGTK::part_thumb
|
||||||
beq on_vscroll_thumb_click
|
beq on_vscroll_thumb_click
|
||||||
cmp #A2D_SCROLL_PART_BELOW
|
cmp #MGTK::part_page_down
|
||||||
beq on_vscroll_below_click
|
beq on_vscroll_below_click
|
||||||
cmp #A2D_SCROLL_PART_ABOVE
|
cmp #MGTK::part_page_up
|
||||||
beq on_vscroll_above_click
|
beq on_vscroll_above_click
|
||||||
cmp #A2D_SCROLL_PART_UP
|
cmp #MGTK::part_up_arrow
|
||||||
beq on_vscroll_up_click
|
beq on_vscroll_up_click
|
||||||
cmp #A2D_SCROLL_PART_DOWN
|
cmp #MGTK::part_down_arrow
|
||||||
bne end
|
bne end
|
||||||
jmp on_vscroll_down_click
|
jmp on_vscroll_down_click
|
||||||
end: rts
|
end: rts
|
||||||
@ -758,19 +758,19 @@ loop: inx
|
|||||||
;;; (Unused in STF DA, so most of this is speculation)
|
;;; (Unused in STF DA, so most of this is speculation)
|
||||||
|
|
||||||
.proc on_hscroll_click
|
.proc on_hscroll_click
|
||||||
lda #A2D_HSCROLL
|
lda #MGTK::ctl_horizontal_scroll_bar
|
||||||
sta thumb_drag_params::type
|
sta thumb_drag_params::type
|
||||||
sta update_scroll_params::type
|
sta update_scroll_params::type
|
||||||
lda query_client_params::scroll
|
lda query_client_params::scroll
|
||||||
cmp #A2D_SCROLL_PART_THUMB
|
cmp #MGTK::part_thumb
|
||||||
beq on_hscroll_thumb_click
|
beq on_hscroll_thumb_click
|
||||||
cmp #A2D_SCROLL_PART_AFTER
|
cmp #MGTK::part_page_right
|
||||||
beq on_hscroll_after_click
|
beq on_hscroll_after_click
|
||||||
cmp #A2D_SCROLL_PART_BEFORE
|
cmp #MGTK::part_page_left
|
||||||
beq on_hscroll_before_click
|
beq on_hscroll_before_click
|
||||||
cmp #A2D_SCROLL_PART_LEFT
|
cmp #MGTK::part_left_arrow
|
||||||
beq on_hscroll_left_click
|
beq on_hscroll_left_click
|
||||||
cmp #A2D_SCROLL_PART_RIGHT
|
cmp #MGTK::part_right_arrow
|
||||||
beq on_hscroll_right_click
|
beq on_hscroll_right_click
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
@ -860,13 +860,13 @@ store: sta window_params::hspos
|
|||||||
sta thumb_drag_params::xcoord+1
|
sta thumb_drag_params::xcoord+1
|
||||||
lda input_params::ycoord
|
lda input_params::ycoord
|
||||||
sta thumb_drag_params::ycoord
|
sta thumb_drag_params::ycoord
|
||||||
A2D_CALL A2D_DRAG_SCROLL, thumb_drag_params
|
MGTK_CALL MGTK::TrackThumb, thumb_drag_params
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; Checks button state; z clear if button was released, set otherwise
|
;;; Checks button state; z clear if button was released, set otherwise
|
||||||
.proc was_button_released
|
.proc was_button_released
|
||||||
A2D_CALL A2D_GET_INPUT, input_params
|
MGTK_CALL MGTK::GetEvent, input_params
|
||||||
lda input_params
|
lda input_params
|
||||||
cmp #2
|
cmp #2
|
||||||
rts
|
rts
|
||||||
@ -938,20 +938,20 @@ end: rts
|
|||||||
sta $07
|
sta $07
|
||||||
jsr div_by_16
|
jsr div_by_16
|
||||||
sta update_scroll_params::pos
|
sta update_scroll_params::pos
|
||||||
A2D_CALL A2D_UPDATE_SCROLL, update_scroll_params
|
MGTK_CALL MGTK::UpdateThumb, update_scroll_params
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc update_vscroll ; update_scroll_params::pos set by caller
|
.proc update_vscroll ; update_scroll_params::pos set by caller
|
||||||
lda #1
|
lda #1
|
||||||
sta update_scroll_params::type
|
sta update_scroll_params::type
|
||||||
A2D_CALL A2D_UPDATE_SCROLL, update_scroll_params
|
MGTK_CALL MGTK::UpdateThumb, update_scroll_params
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc finish_resize ; only called from dead code
|
.proc finish_resize ; only called from dead code
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
A2D_CALL A2D_SET_STATE, window_params::box
|
MGTK_CALL MGTK::SetPort, window_params::box
|
||||||
lda window_params::hscroll
|
lda window_params::hscroll
|
||||||
ror a ; check if low bit (track enabled) is set
|
ror a ; check if low bit (track enabled) is set
|
||||||
bcc :+
|
bcc :+
|
||||||
@ -964,9 +964,9 @@ end: rts
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc clear_window
|
.proc clear_window
|
||||||
A2D_CALL A2D_SET_PATTERN, white_pattern
|
MGTK_CALL MGTK::SetPattern, white_pattern
|
||||||
A2D_CALL A2D_FILL_RECT, window_params::box::hoff
|
MGTK_CALL MGTK::PaintRect, window_params::box::hoff
|
||||||
A2D_CALL A2D_SET_PATTERN, black_pattern
|
MGTK_CALL MGTK::SetPattern, black_pattern
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -1005,7 +1005,7 @@ do_line:
|
|||||||
bne :+
|
bne :+
|
||||||
jsr clear_window
|
jsr clear_window
|
||||||
inc L0948
|
inc L0948
|
||||||
: A2D_CALL A2D_SET_POS, line_pos
|
: MGTK_CALL MGTK::MoveTo, line_pos
|
||||||
sec
|
sec
|
||||||
lda #250
|
lda #250
|
||||||
sbc line_pos::left
|
sbc line_pos::left
|
||||||
@ -1194,7 +1194,7 @@ times70:.word 70
|
|||||||
beq end
|
beq end
|
||||||
lda text_string::len
|
lda text_string::len
|
||||||
beq end
|
beq end
|
||||||
A2D_CALL A2D_DRAW_TEXT, text_string
|
MGTK_CALL MGTK::DrawText, text_string
|
||||||
lda #1
|
lda #1
|
||||||
sta L0949
|
sta L0949
|
||||||
end: rts
|
end: rts
|
||||||
@ -1426,15 +1426,15 @@ ignore: clc ; Click ignored
|
|||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
fixed_str: A2D_DEFSTRING "Fixed "
|
fixed_str: DEFINE_STRING "Fixed "
|
||||||
prop_str: A2D_DEFSTRING "Proportional"
|
prop_str: DEFINE_STRING "Proportional"
|
||||||
label_width := 50
|
label_width := 50
|
||||||
title_bar_height := 12
|
title_bar_height := 12
|
||||||
.proc mode_box ; bounding box for mode label
|
.proc mode_box ; bounding box for mode label
|
||||||
left: .word 0
|
left: .word 0
|
||||||
top: .word 0
|
top: .word 0
|
||||||
addr: .word A2D_SCREEN_ADDR
|
addr: .word MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word 80
|
width: .word 80
|
||||||
@ -1471,19 +1471,19 @@ base: .word 10 ; vertical text offset (to baseline)
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc draw_mode
|
.proc draw_mode
|
||||||
A2D_CALL A2D_SET_BOX, mode_box
|
MGTK_CALL MGTK::SetPortSite, mode_box
|
||||||
A2D_CALL A2D_SET_POS, mode_pos
|
MGTK_CALL MGTK::MoveTo, mode_pos
|
||||||
lda fixed_mode_flag
|
lda fixed_mode_flag
|
||||||
beq else ; is proportional?
|
beq else ; is proportional?
|
||||||
A2D_CALL A2D_DRAW_TEXT, fixed_str
|
MGTK_CALL MGTK::DrawText, fixed_str
|
||||||
jmp endif
|
jmp endif
|
||||||
else: A2D_CALL A2D_DRAW_TEXT, prop_str
|
else: MGTK_CALL MGTK::DrawText, prop_str
|
||||||
|
|
||||||
endif: ldx #$0F
|
endif: ldx #$0F
|
||||||
loop: lda default_box,x
|
loop: lda default_box,x
|
||||||
sta window_params::box,x
|
sta window_params::box,x
|
||||||
dex
|
dex
|
||||||
bpl loop
|
bpl loop
|
||||||
A2D_CALL A2D_SET_BOX, window_params::box
|
MGTK_CALL MGTK::SetPortSite, window_params::box
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
@ -11,7 +11,7 @@ DA_MAX_SIZE := $1C00 - DA_LOAD_ADDRESS
|
|||||||
;;; * = Used by Desk Accessories
|
;;; * = Used by Desk Accessories
|
||||||
|
|
||||||
JUMP_TABLE_00 := $4000 ; ???
|
JUMP_TABLE_00 := $4000 ; ???
|
||||||
JUMP_TABLE_A2D_RELAY := $4003 ; A2D relay call (main>aux)
|
JUMP_TABLE_MGTK_RELAY := $4003 ; MGTK relay call (main>aux)
|
||||||
JUMP_TABLE_06 := $4006 ; ???
|
JUMP_TABLE_06 := $4006 ; ???
|
||||||
JUMP_TABLE_09 := $4009 ; ???
|
JUMP_TABLE_09 := $4009 ; ???
|
||||||
JUMP_TABLE_0C := $400C ; ???
|
JUMP_TABLE_0C := $400C ; ???
|
||||||
@ -39,7 +39,7 @@ JUMP_TABLE_RESTORE_SEG := $403F ; Restore from dynamic routine
|
|||||||
;;; NOTE: Some of these are used by Desk Accessories
|
;;; NOTE: Some of these are used by Desk Accessories
|
||||||
|
|
||||||
DESKTOP := $8E00
|
DESKTOP := $8E00
|
||||||
;; MLI-style call (jsr A2D ; .byte call ; .addr params)
|
;; MLI-style call (jsr DEKSTOP ; .byte call ; .addr params)
|
||||||
;; Call from AUX (RAMRDON/RAMWRTON)
|
;; Call from AUX (RAMRDON/RAMWRTON)
|
||||||
|
|
||||||
;; Implementation bounces to $93BC, uses jump table at $939E
|
;; Implementation bounces to $93BC, uses jump table at $939E
|
||||||
|
@ -3,7 +3,7 @@ CC65 = ~/dev/cc65/bin
|
|||||||
CAFLAGS = --target apple2enh --list-bytes 0
|
CAFLAGS = --target apple2enh --list-bytes 0
|
||||||
CCFLAGS = --config asm.cfg
|
CCFLAGS = --config asm.cfg
|
||||||
|
|
||||||
TARGETS = loader.built a2d.built desktop.built invoker.built
|
TARGETS = loader.built mgtk.built desktop.built invoker.built
|
||||||
|
|
||||||
.PHONY: clean all
|
.PHONY: clean all
|
||||||
all: $(TARGETS)
|
all: $(TARGETS)
|
||||||
@ -22,6 +22,6 @@ clean:
|
|||||||
|
|
||||||
check:
|
check:
|
||||||
diff loader.built orig/DESKTOP2_loader
|
diff loader.built orig/DESKTOP2_loader
|
||||||
diff a2d.built orig/DESKTOP2_a2d
|
diff mgtk.built orig/DESKTOP2_mgtk
|
||||||
diff desktop.built orig/DESKTOP2_desktop
|
diff desktop.built orig/DESKTOP2_desktop
|
||||||
diff invoker.built orig/DESKTOP2_invoker
|
diff invoker.built orig/DESKTOP2_invoker
|
||||||
|
@ -16,7 +16,7 @@ segments swapped in dynamically.
|
|||||||
The file is broken down into multiple segments:
|
The file is broken down into multiple segments:
|
||||||
|
|
||||||
* segment 0: load - A$2000-$257F, L$0580, mark $000000 (Loader)
|
* segment 0: load - A$2000-$257F, L$0580, mark $000000 (Loader)
|
||||||
* segment 1: aux - A$4000-$BFFF, L$8000, mark $000580 (A2D, DeskTop)
|
* segment 1: aux - A$4000-$BFFF, L$8000, mark $000580 (MGTK, DeskTop)
|
||||||
* segment 2: auxlc - A$D000-$ECFF, L$1D00, mark $008580 (DeskTop)
|
* segment 2: auxlc - A$D000-$ECFF, L$1D00, mark $008580 (DeskTop)
|
||||||
* segment 3: auxlc - A$FB00-$FFFF, L$0500, mark $00A280 (DeskTop)
|
* segment 3: auxlc - A$FB00-$FFFF, L$0500, mark $00A280 (DeskTop)
|
||||||
* segment 4: main - A$4000-$BEFF, L$7F00, mark $00A780 (DeskTop)
|
* segment 4: main - A$4000-$BEFF, L$7F00, mark $00A780 (DeskTop)
|
||||||
@ -77,7 +77,7 @@ Loaded at $800-$FFF, this does one-time initialization of the
|
|||||||
DeskTop. It is later overwritten when any desk accessories are
|
DeskTop. It is later overwritten when any desk accessories are
|
||||||
run.
|
run.
|
||||||
|
|
||||||
### GUI Library "A2D"
|
### Mouse Graphics Tool Kit (MGTK)
|
||||||
|
|
||||||
`a2d.s`
|
`a2d.s`
|
||||||
|
|
||||||
@ -140,8 +140,8 @@ $9000 | +------+ | |
|
|||||||
$8800 | | | Font |
|
$8800 | | | Font |
|
||||||
| | | |
|
| | | |
|
||||||
$851F | | +-------------+
|
$851F | | +-------------+
|
||||||
| | | A2D GUI |
|
| | | MGTK |
|
||||||
| | | Library |
|
| | | |
|
||||||
| | | |
|
| | | |
|
||||||
| | | |
|
| | | |
|
||||||
$7800 | +------+ | |
|
$7800 | +------+ | |
|
||||||
|
1102
desktop/desktop.s
1102
desktop/desktop.s
File diff suppressed because it is too large
Load Diff
@ -286,7 +286,7 @@ pathname:
|
|||||||
;;; then relocated to |dest| according to |type|.
|
;;; then relocated to |dest| according to |type|.
|
||||||
|
|
||||||
;;; Segments are:
|
;;; Segments are:
|
||||||
;;; $4000 aux - A2D GUI library and DeskTop code
|
;;; $4000 aux - MGTK and DeskTop code
|
||||||
;;; $D000 aux/banked - DeskTop code callable from main, and resources
|
;;; $D000 aux/banked - DeskTop code callable from main, and resources
|
||||||
;;; $FB00 aux/banked - more DeskTop resources (icons, strings, etc)
|
;;; $FB00 aux/banked - more DeskTop resources (icons, strings, etc)
|
||||||
;;; $4000 main - more DeskTop code
|
;;; $4000 main - more DeskTop code
|
||||||
|
@ -5,14 +5,14 @@
|
|||||||
.include "../inc/auxmem.inc"
|
.include "../inc/auxmem.inc"
|
||||||
.include "../inc/prodos.inc"
|
.include "../inc/prodos.inc"
|
||||||
.include "../inc/mouse.inc"
|
.include "../inc/mouse.inc"
|
||||||
.include "../a2d.inc"
|
.include "../mgtk.inc"
|
||||||
.include "../desktop.inc"
|
.include "../desktop.inc"
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; A2D - the GUI library
|
;;; Mouse Graphics Tool Kit
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
.proc a2d
|
.proc mgtk
|
||||||
.org $4000
|
.org $4000
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
@ -96,10 +96,10 @@
|
|||||||
glyph_height_p := $FF ; glyph height
|
glyph_height_p := $FF ; glyph height
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; A2D
|
;;; MGTK
|
||||||
|
|
||||||
.proc a2d_dispatch
|
.proc mgtk_dispatch
|
||||||
.assert * = A2D, error, "A2D entry point must be at $4000"
|
.assert * = MGTK::MLI, error, "Entry point must be at $4000"
|
||||||
|
|
||||||
lda LOWSCR
|
lda LOWSCR
|
||||||
sta SET80COL
|
sta SET80COL
|
||||||
@ -107,7 +107,7 @@
|
|||||||
bit preserve_zp_flag ; save ZP?
|
bit preserve_zp_flag ; save ZP?
|
||||||
bpl adjust_stack
|
bpl adjust_stack
|
||||||
|
|
||||||
;; Save $80...$FF, swap in what A2D needs at $F4...$FF
|
;; Save $80...$FF, swap in what MGTK needs at $F4...$FF
|
||||||
ldx #$7F
|
ldx #$7F
|
||||||
: lda $80,x
|
: lda $80,x
|
||||||
sta zp_saved,x
|
sta zp_saved,x
|
||||||
@ -140,9 +140,9 @@ adjust_stack: ; Adjust stack to account for params
|
|||||||
lda (params_addr),y
|
lda (params_addr),y
|
||||||
asl a
|
asl a
|
||||||
tax
|
tax
|
||||||
lda a2d_jump_table,x
|
lda mgtk_jump_table,x
|
||||||
sta jump+1
|
sta jump+1
|
||||||
lda a2d_jump_table+1,x
|
lda mgtk_jump_table+1,x
|
||||||
sta jump+2
|
sta jump+2
|
||||||
|
|
||||||
iny ; Point params_addr at params
|
iny ; Point params_addr at params
|
||||||
@ -225,9 +225,9 @@ rts1: rts
|
|||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; Routines can jmp here to exit with A set
|
;;; Routines can jmp here to exit with A set
|
||||||
|
|
||||||
a2d_exit_with_a:
|
mgtk_exit_with_a:
|
||||||
pha
|
pha
|
||||||
jsr a2d_dispatch::cleanup
|
jsr mgtk_dispatch::cleanup
|
||||||
pla
|
pla
|
||||||
ldx stack_ptr_stash
|
ldx stack_ptr_stash
|
||||||
txs
|
txs
|
||||||
@ -275,17 +275,25 @@ hide_cursor_count:
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; Jump table for A2D entry point calls
|
;;; Jump table for MGTK entry point calls
|
||||||
|
|
||||||
;; jt_rts can be used if the only thing the
|
;; jt_rts can be used if the only thing the
|
||||||
;; routine needs to do is copy params into
|
;; routine needs to do is copy params into
|
||||||
;; the zero page (state)
|
;; the zero page (state)
|
||||||
jt_rts := a2d_dispatch::rts1
|
jt_rts := mgtk_dispatch::rts1
|
||||||
|
|
||||||
a2d_jump_table:
|
mgtk_jump_table:
|
||||||
.addr jt_rts ; $00 NOOP
|
.addr jt_rts ; $00 NOOP
|
||||||
|
|
||||||
|
;; ----------------------------------------
|
||||||
|
;; Graphics Primitives
|
||||||
|
|
||||||
|
|
||||||
|
;; Initialization Commands
|
||||||
.addr L5E51 ; $01
|
.addr L5E51 ; $01
|
||||||
.addr CFG_DISPLAY_IMPL ; $02 CFG_DISPLAY
|
.addr CFG_DISPLAY_IMPL ; $02 CFG_DISPLAY
|
||||||
|
|
||||||
|
;; GrafPort Commands
|
||||||
.addr QUERY_SCREEN_IMPL ; $03 QUERY_SCREEN
|
.addr QUERY_SCREEN_IMPL ; $03 QUERY_SCREEN
|
||||||
.addr SET_STATE_IMPL ; $04 SET_STATE
|
.addr SET_STATE_IMPL ; $04 SET_STATE
|
||||||
.addr GET_STATE_IMPL ; $05 GET_STATE
|
.addr GET_STATE_IMPL ; $05 GET_STATE
|
||||||
@ -296,6 +304,8 @@ a2d_jump_table:
|
|||||||
.addr jt_rts ; $0A SET_THICKNESS
|
.addr jt_rts ; $0A SET_THICKNESS
|
||||||
.addr SET_FONT_IMPL ; $0B SET_FONT
|
.addr SET_FONT_IMPL ; $0B SET_FONT
|
||||||
.addr jt_rts ; $0C SET_TEXT_MASK
|
.addr jt_rts ; $0C SET_TEXT_MASK
|
||||||
|
|
||||||
|
;; Drawing Commands
|
||||||
.addr OFFSET_POS_IMPL ; $0D OFFSET_POS
|
.addr OFFSET_POS_IMPL ; $0D OFFSET_POS
|
||||||
.addr jt_rts ; $0E SET_POS
|
.addr jt_rts ; $0E SET_POS
|
||||||
.addr DRAW_LINE_IMPL ; $0F DRAW_LINE
|
.addr DRAW_LINE_IMPL ; $0F DRAW_LINE
|
||||||
@ -307,11 +317,20 @@ a2d_jump_table:
|
|||||||
.addr L537E ; $15
|
.addr L537E ; $15
|
||||||
.addr DRAW_POLYGONS_IMPL ; $16 DRAW_POLYGONS
|
.addr DRAW_POLYGONS_IMPL ; $16 DRAW_POLYGONS
|
||||||
.addr L537A ; $17
|
.addr L537A ; $17
|
||||||
|
|
||||||
|
;; Text Commands
|
||||||
.addr MEASURE_TEXT_IMPL ; $18 MEASURE_TEXT
|
.addr MEASURE_TEXT_IMPL ; $18 MEASURE_TEXT
|
||||||
.addr DRAW_TEXT_IMPL ; $19 DRAW_TEXT
|
.addr DRAW_TEXT_IMPL ; $19 DRAW_TEXT
|
||||||
|
|
||||||
|
;; Utility Commands
|
||||||
.addr CONFIGURE_ZP_IMPL ; $1A CONFIGURE_ZP_USE
|
.addr CONFIGURE_ZP_IMPL ; $1A CONFIGURE_ZP_USE
|
||||||
.addr LOW_ZP_STASH_IMPL ; $1B LOW_ZP_STASH
|
.addr LOW_ZP_STASH_IMPL ; $1B LOW_ZP_STASH
|
||||||
.addr L5F0A ; $1C
|
.addr L5F0A ; $1C
|
||||||
|
|
||||||
|
;; ----------------------------------------
|
||||||
|
;; Mouse Graphics Tool Kit
|
||||||
|
|
||||||
|
;; Initialization Calls
|
||||||
.addr INIT_SCREEN_AND_MOUSE_IMPL ; $1D INIT_SCREEN_AND_MOUSE
|
.addr INIT_SCREEN_AND_MOUSE_IMPL ; $1D INIT_SCREEN_AND_MOUSE
|
||||||
.addr DISABLE_MOUSE_IMPL ; $1E DISABLE_MOUSE
|
.addr DISABLE_MOUSE_IMPL ; $1E DISABLE_MOUSE
|
||||||
.addr L64D2 ; $1F
|
.addr L64D2 ; $1F
|
||||||
@ -319,17 +338,23 @@ a2d_jump_table:
|
|||||||
.addr L8427 ; $21
|
.addr L8427 ; $21
|
||||||
.addr L7D61 ; $22
|
.addr L7D61 ; $22
|
||||||
.addr GET_INT_HANDLER_IMPL; $23 GET_INT_HANDLER
|
.addr GET_INT_HANDLER_IMPL; $23 GET_INT_HANDLER
|
||||||
|
|
||||||
|
;; Cursor Manager Calls
|
||||||
.addr SET_CURSOR_IMPL ; $24 SET_CURSOR
|
.addr SET_CURSOR_IMPL ; $24 SET_CURSOR
|
||||||
.addr SHOW_CURSOR_IMPL ; $25 SHOW_CURSOR
|
.addr SHOW_CURSOR_IMPL ; $25 SHOW_CURSOR
|
||||||
.addr HIDE_CURSOR_IMPL ; $26 HIDE_CURSOR
|
.addr HIDE_CURSOR_IMPL ; $26 HIDE_CURSOR
|
||||||
.addr ERASE_CURSOR_IMPL ; $27 ERASE_CURSOR
|
.addr ERASE_CURSOR_IMPL ; $27 ERASE_CURSOR
|
||||||
.addr GET_CURSOR_IMPL ; $28 GET_CURSOR
|
.addr GET_CURSOR_IMPL ; $28 GET_CURSOR
|
||||||
.addr L6663 ; $29
|
.addr L6663 ; $29
|
||||||
|
|
||||||
|
;; Event Manager Calls
|
||||||
.addr GET_INPUT_IMPL ; $2A GET_INPUT
|
.addr GET_INPUT_IMPL ; $2A GET_INPUT
|
||||||
.addr CALL_2B_IMPL ; $2B
|
.addr CALL_2B_IMPL ; $2B
|
||||||
.addr L65D4 ; $2C
|
.addr L65D4 ; $2C
|
||||||
.addr SET_INPUT_IMPL ; $2D SET_INPUT
|
.addr SET_INPUT_IMPL ; $2D SET_INPUT
|
||||||
.addr SET_KBD_FLAG_IMPL ; $2E SET_KBD_FLAG
|
.addr SET_KBD_FLAG_IMPL ; $2E SET_KBD_FLAG
|
||||||
|
|
||||||
|
;; Menu Manager Calls
|
||||||
.addr L6ECD ; $2F
|
.addr L6ECD ; $2F
|
||||||
.addr SET_MENU_IMPL ; $30 SET_MENU
|
.addr SET_MENU_IMPL ; $30 SET_MENU
|
||||||
.addr MENU_CLICK_IMPL ; $31 MENU_CLICK
|
.addr MENU_CLICK_IMPL ; $31 MENU_CLICK
|
||||||
@ -339,6 +364,8 @@ a2d_jump_table:
|
|||||||
.addr L6BA9 ; $35
|
.addr L6BA9 ; $35
|
||||||
.addr L6BB5 ; $36
|
.addr L6BB5 ; $36
|
||||||
.addr L6F1C ; $37
|
.addr L6F1C ; $37
|
||||||
|
|
||||||
|
;; Window Manager Calls
|
||||||
.addr CREATE_WINDOW_IMPL ; $38 CREATE_WINDOW
|
.addr CREATE_WINDOW_IMPL ; $38 CREATE_WINDOW
|
||||||
.addr DESTROY_WINDOW_IMPL ; $39 DESTROY_WINDOW
|
.addr DESTROY_WINDOW_IMPL ; $39 DESTROY_WINDOW
|
||||||
.addr L7836 ; $3A
|
.addr L7836 ; $3A
|
||||||
@ -355,6 +382,8 @@ a2d_jump_table:
|
|||||||
.addr DRAG_RESIZE_IMPL ; $45 DRAG_RESIZE
|
.addr DRAG_RESIZE_IMPL ; $45 DRAG_RESIZE
|
||||||
.addr MAP_COORDS_IMPL ; $46 MAP_COORDS
|
.addr MAP_COORDS_IMPL ; $46 MAP_COORDS
|
||||||
.addr L78E1 ; $47
|
.addr L78E1 ; $47
|
||||||
|
|
||||||
|
;; Control Manager Calls
|
||||||
.addr QUERY_CLIENT_IMPL ; $48 QUERY_CLIENT
|
.addr QUERY_CLIENT_IMPL ; $48 QUERY_CLIENT
|
||||||
.addr RESIZE_WINDOW_IMPL ; $49 RESIZE_WINDOW
|
.addr RESIZE_WINDOW_IMPL ; $49 RESIZE_WINDOW
|
||||||
.addr DRAG_SCROLL_IMPL ; $4A DRAG_SCROLL
|
.addr DRAG_SCROLL_IMPL ; $4A DRAG_SCROLL
|
||||||
@ -1531,7 +1560,7 @@ L5043: jsr L50A9
|
|||||||
bcc :+
|
bcc :+
|
||||||
bne fail
|
bne fail
|
||||||
: lda #$80 ; success!
|
: lda #$80 ; success!
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
fail: rts
|
fail: rts
|
||||||
.endproc
|
.endproc
|
||||||
@ -1663,7 +1692,7 @@ L514C: sec
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
L5163: lda #$81
|
L5163: lda #$81
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
@ -2005,7 +2034,7 @@ L5390: jsr L5354
|
|||||||
jmp L546F
|
jmp L546F
|
||||||
|
|
||||||
L5398: lda #$82
|
L5398: lda #$82
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L539D: ldy #1
|
L539D: ldy #1
|
||||||
sty $AF
|
sty $AF
|
||||||
@ -2739,7 +2768,7 @@ loop: sta glyph_row_lo,y
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
end: lda #$83
|
end: lda #$83
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
glyph_row_lo:
|
glyph_row_lo:
|
||||||
@ -3547,7 +3576,7 @@ rts3: rts
|
|||||||
beq rts3
|
beq rts3
|
||||||
sta preserve_zp_flag
|
sta preserve_zp_flag
|
||||||
bcc rts3
|
bcc rts3
|
||||||
jmp a2d_dispatch::cleanup
|
jmp mgtk_dispatch::cleanup
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
@ -3615,7 +3644,7 @@ table: .byte $01,$00,$00,$46,$01,$00
|
|||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
preserve_zp_flag: ; if high bit set, ZP saved during A2D calls
|
preserve_zp_flag: ; if high bit set, ZP saved during MGTK calls
|
||||||
.byte $80
|
.byte $80
|
||||||
|
|
||||||
low_zp_stash_flag:
|
low_zp_stash_flag:
|
||||||
@ -3631,15 +3660,15 @@ stack_ptr_stash:
|
|||||||
.proc screen_state
|
.proc screen_state
|
||||||
left: .word 0
|
left: .word 0
|
||||||
top: .word 0
|
top: .word 0
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word 560-1
|
width: .word 560-1
|
||||||
height: .word 192-1
|
height: .word 192-1
|
||||||
pattern:.res 8, $FF
|
pattern:.res 8, $FF
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 1
|
hthick: .byte 1
|
||||||
@ -3655,15 +3684,15 @@ font: .addr 0
|
|||||||
.proc saved_state
|
.proc saved_state
|
||||||
left: .word 0
|
left: .word 0
|
||||||
top: .word 0
|
top: .word 0
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoff: .word 0
|
hoff: .word 0
|
||||||
voff: .word 0
|
voff: .word 0
|
||||||
width: .word 560-1
|
width: .word 560-1
|
||||||
height: .word 192-1
|
height: .word 192-1
|
||||||
pattern:.res 8, $FF
|
pattern:.res 8, $FF
|
||||||
mskand: .byte A2D_DEFAULT_MSKAND
|
mskand: .byte MGTK::colormask_and
|
||||||
mskor: .byte A2D_DEFAULT_MSKOR
|
mskor: .byte MGTK::colormask_or
|
||||||
xpos: .word 0
|
xpos: .word 0
|
||||||
ypos: .word 0
|
ypos: .word 0
|
||||||
hthick: .byte 1
|
hthick: .byte 1
|
||||||
@ -4213,7 +4242,7 @@ L63D1: ldx L6338
|
|||||||
cpx #$00
|
cpx #$00
|
||||||
bne L63E5
|
bne L63E5
|
||||||
lda #$92
|
lda #$92
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L63E5: lda L6338
|
L63E5: lda L6338
|
||||||
and #$7F
|
and #$7F
|
||||||
@ -4221,7 +4250,7 @@ L63E5: lda L6338
|
|||||||
cpx L6338
|
cpx L6338
|
||||||
beq L63F6
|
beq L63F6
|
||||||
lda #$91
|
lda #$91
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L63F6: stx L6338
|
L63F6: stx L6338
|
||||||
lda #$80
|
lda #$80
|
||||||
@ -4264,8 +4293,8 @@ L643F: jsr call_mouse
|
|||||||
L6454: jsr L653F
|
L6454: jsr L653F
|
||||||
jsr L6588
|
jsr L6588
|
||||||
;; Fills the desktop background on startup (menu left black)
|
;; Fills the desktop background on startup (menu left black)
|
||||||
A2D_CALL A2D_SET_PATTERN, checkerboard_pattern
|
MGTK_CALL MGTK::SetPattern, checkerboard_pattern
|
||||||
A2D_CALL A2D_FILL_RECT, fill_rect_params
|
MGTK_CALL MGTK::PaintRect, fill_rect_params
|
||||||
jmp L6556
|
jmp L6556
|
||||||
|
|
||||||
.proc alloc_interrupt_params
|
.proc alloc_interrupt_params
|
||||||
@ -4295,7 +4324,7 @@ L6486: lda #$80
|
|||||||
L648B: rts
|
L648B: rts
|
||||||
|
|
||||||
L648C: lda #$93
|
L648C: lda #$93
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L6491:
|
L6491:
|
||||||
lda L6337
|
lda L6337
|
||||||
@ -4303,7 +4332,7 @@ L6491:
|
|||||||
cmp #$01
|
cmp #$01
|
||||||
beq L64A4
|
beq L64A4
|
||||||
lda #$90
|
lda #$90
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L649F: lda #$80
|
L649F: lda #$80
|
||||||
sta L6337
|
sta L6337
|
||||||
@ -4371,7 +4400,7 @@ L64FF: lda #$00
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
L6508: lda #$94
|
L6508: lda #$94
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L650D: lda L6522
|
L650D: lda L6522
|
||||||
beq L651D
|
beq L651D
|
||||||
@ -4495,7 +4524,7 @@ checkerboard_pattern:
|
|||||||
jmp store_xa_at_params_y
|
jmp store_xa_at_params_y
|
||||||
|
|
||||||
fail: lda #$95
|
fail: lda #$95
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
mouse_state_addr:
|
mouse_state_addr:
|
||||||
.addr mouse_state
|
.addr mouse_state
|
||||||
@ -4577,7 +4606,7 @@ L663B: lda #$98
|
|||||||
bmi L6641
|
bmi L6641
|
||||||
L663F: lda #$99
|
L663F: lda #$99
|
||||||
L6641: plp
|
L6641: plp
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L6645: lda #0
|
L6645: lda #0
|
||||||
bit mouse_status
|
bit mouse_status
|
||||||
@ -4615,7 +4644,7 @@ modifiers := * + 3
|
|||||||
bit L6339
|
bit L6339
|
||||||
bpl L666D
|
bpl L666D
|
||||||
lda #$97
|
lda #$97
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L666D:
|
L666D:
|
||||||
sec ; called from interrupt handler
|
sec ; called from interrupt handler
|
||||||
@ -4652,20 +4681,20 @@ L666D:
|
|||||||
|
|
||||||
lda input::modifiers
|
lda input::modifiers
|
||||||
sta input::kmods
|
sta input::kmods
|
||||||
lda #A2D_INPUT_KEY
|
lda #MGTK::key_down
|
||||||
sta input::state
|
sta input::state
|
||||||
bne L66D8
|
bne L66D8
|
||||||
|
|
||||||
L66B9: bcc up
|
L66B9: bcc up
|
||||||
lda input::modifiers
|
lda input::modifiers
|
||||||
beq :+
|
beq :+
|
||||||
lda #A2D_INPUT_DOWN_MOD
|
lda #MGTK::apple_key
|
||||||
bne set_state
|
bne set_state
|
||||||
|
|
||||||
: lda #A2D_INPUT_DOWN
|
: lda #MGTK::button_down
|
||||||
bne set_state
|
bne set_state
|
||||||
|
|
||||||
up: lda #A2D_INPUT_UP
|
up: lda #MGTK::button_up
|
||||||
|
|
||||||
set_state:
|
set_state:
|
||||||
sta input::state
|
sta input::state
|
||||||
@ -4702,7 +4731,7 @@ int_stash_rd80store:
|
|||||||
.proc interrupt_handler
|
.proc interrupt_handler
|
||||||
cld ; required for interrupt handlers
|
cld ; required for interrupt handlers
|
||||||
|
|
||||||
body: ; returned by A2D_GET_INT_HANDLER
|
body: ; returned by MGTK_GET_INT_HANDLER
|
||||||
|
|
||||||
lda RDPAGE2 ; record softswitch state
|
lda RDPAGE2 ; record softswitch state
|
||||||
sta int_stash_rdpage2
|
sta int_stash_rdpage2
|
||||||
@ -5012,7 +5041,7 @@ L6910: sta $A1
|
|||||||
sta $A3
|
sta $A3
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L691B: A2D_CALL A2D_GET_INPUT, $82
|
L691B: MGTK_CALL MGTK::GetEvent, $82
|
||||||
lda $82
|
lda $82
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -5170,7 +5199,7 @@ L6A3C: lda #$00
|
|||||||
sbc L633E
|
sbc L633E
|
||||||
bpl L6A5B
|
bpl L6A5B
|
||||||
lda #$9C
|
lda #$9C
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L6A5B: rts
|
L6A5B: rts
|
||||||
|
|
||||||
@ -5187,17 +5216,17 @@ L6A5C: ldx $A7
|
|||||||
stx draw_params+1
|
stx draw_params+1
|
||||||
lda #0
|
lda #0
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
A2D_CALL A2D_FILL_RECT, 0, fill_params
|
MGTK_CALL MGTK::PaintRect, 0, fill_params
|
||||||
lda #4
|
lda #4
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
A2D_CALL A2D_DRAW_RECT, 0, draw_params
|
MGTK_CALL MGTK::FrameRect, 0, draw_params
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
L6A89: jsr L6A94
|
L6A89: jsr L6A94
|
||||||
bne L6A93
|
bne L6A93
|
||||||
lda #$9A
|
lda #$9A
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L6A93: rts
|
L6A93: rts
|
||||||
|
|
||||||
@ -5305,7 +5334,7 @@ loop: lda $B7,x
|
|||||||
bpl loop
|
bpl loop
|
||||||
lda #$02
|
lda #$02
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
A2D_CALL A2D_FILL_RECT, fill_rect_params2
|
MGTK_CALL MGTK::PaintRect, fill_rect_params2
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -5353,7 +5382,7 @@ L6B9E: rts
|
|||||||
L6B9F: jsr L6B96
|
L6B9F: jsr L6B96
|
||||||
bne L6B9E
|
bne L6B9E
|
||||||
lda #$9B
|
lda #$9B
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
@ -5425,12 +5454,12 @@ L6BFD: bit L7D81
|
|||||||
bpl L6C05
|
bpl L6C05
|
||||||
jmp L8149
|
jmp L8149
|
||||||
|
|
||||||
L6C05: A2D_CALL A2D_SET_POS, $83
|
L6C05: MGTK_CALL MGTK::MoveTo, $83
|
||||||
A2D_CALL A2D_TEST_BOX, test_box_params
|
MGTK_CALL MGTK::InRect, test_box_params
|
||||||
bne L6C58
|
bne L6C58
|
||||||
lda L6BD9
|
lda L6BD9
|
||||||
beq L6C23
|
beq L6C23
|
||||||
A2D_CALL A2D_TEST_BOX, test_box_params2
|
MGTK_CALL MGTK::InRect, test_box_params2
|
||||||
bne L6C73
|
bne L6C73
|
||||||
jsr L6EA1
|
jsr L6EA1
|
||||||
L6C23: jsr L691B
|
L6C23: jsr L691B
|
||||||
@ -5702,11 +5731,11 @@ L6E36: ldx $A9
|
|||||||
lda $BE
|
lda $BE
|
||||||
sbc #$00
|
sbc #$00
|
||||||
sta fill_rect_params3_right+1
|
sta fill_rect_params3_right+1
|
||||||
A2D_CALL A2D_SET_PATTERN, light_speckle_pattern
|
MGTK_CALL MGTK::SetPattern, light_speckle_pattern
|
||||||
lda #$01
|
lda #$01
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
A2D_CALL A2D_FILL_RECT, fill_rect_params3
|
MGTK_CALL MGTK::PaintRect, fill_rect_params3
|
||||||
A2D_CALL A2D_SET_PATTERN, screen_state::pattern
|
MGTK_CALL MGTK::SetPattern, screen_state::pattern
|
||||||
lda #$02
|
lda #$02
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
rts
|
rts
|
||||||
@ -5756,7 +5785,7 @@ L6EAA: ldx L6BDA
|
|||||||
jsr HIDE_CURSOR_IMPL
|
jsr HIDE_CURSOR_IMPL
|
||||||
lda #$02
|
lda #$02
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
A2D_CALL A2D_FILL_RECT, fill_rect_params4
|
MGTK_CALL MGTK::PaintRect, fill_rect_params4
|
||||||
jmp SHOW_CURSOR_IMPL
|
jmp SHOW_CURSOR_IMPL
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
@ -6020,20 +6049,20 @@ end: rts
|
|||||||
|
|
||||||
;; Look up window state by id (in $82); $A9/$AA will point at
|
;; Look up window state by id (in $82); $A9/$AA will point at
|
||||||
;; window params (also X,A).
|
;; window params (also X,A).
|
||||||
;; This will exit the A2D call directly (restoring stack, etc)
|
;; This will exit the MGTK call directly (restoring stack, etc)
|
||||||
;; if the window is not found.
|
;; if the window is not found.
|
||||||
.proc window_by_id_or_exit
|
.proc window_by_id_or_exit
|
||||||
jsr window_by_id
|
jsr window_by_id
|
||||||
beq nope
|
beq nope
|
||||||
rts
|
rts
|
||||||
nope: lda #$9F
|
nope: lda #$9F
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
L707F: A2D_CALL A2D_DRAW_RECT, $C7
|
L707F: MGTK_CALL MGTK::FrameRect, $C7
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L7086: A2D_CALL A2D_TEST_BOX, $C7
|
L7086: MGTK_CALL MGTK::InRect, $C7
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L708D: ldx #$03
|
L708D: ldx #$03
|
||||||
@ -6230,10 +6259,10 @@ L71EE: jsr L7157
|
|||||||
lda $C9
|
lda $C9
|
||||||
and #$01
|
and #$01
|
||||||
beq L71FE
|
beq L71FE
|
||||||
A2D_CALL A2D_SET_PATTERN, stripes_pattern
|
MGTK_CALL MGTK::SetPattern, stripes_pattern
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L71FE: A2D_CALL A2D_SET_PATTERN, stripes_pattern_alt
|
L71FE: MGTK_CALL MGTK::SetPattern, stripes_pattern_alt
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L7205: lda #$01
|
L7205: lda #$01
|
||||||
@ -6332,7 +6361,7 @@ L72A0: jsr FILL_RECT_IMPL ; Draw title bar stripes between close box and t
|
|||||||
sbc #$00
|
sbc #$00
|
||||||
sta $97
|
sta $97
|
||||||
jsr FILL_RECT_IMPL ; Draw title bar stripes to right of title
|
jsr FILL_RECT_IMPL ; Draw title bar stripes to right of title
|
||||||
A2D_CALL A2D_SET_PATTERN, screen_state::pattern
|
MGTK_CALL MGTK::SetPattern, screen_state::pattern
|
||||||
L72C9: jsr next_window::L703E
|
L72C9: jsr next_window::L703E
|
||||||
bit $B0
|
bit $B0
|
||||||
bpl L7319
|
bpl L7319
|
||||||
@ -6491,7 +6520,7 @@ L73F0: sta state_ypos
|
|||||||
|
|
||||||
QUERY_TARGET_IMPL:
|
QUERY_TARGET_IMPL:
|
||||||
jsr L653F
|
jsr L653F
|
||||||
A2D_CALL A2D_TEST_BOX, test_box_params
|
MGTK_CALL MGTK::InRect, test_box_params
|
||||||
beq L7416
|
beq L7416
|
||||||
lda #$01
|
lda #$01
|
||||||
L7406: ldx #$00
|
L7406: ldx #$00
|
||||||
@ -6561,13 +6590,13 @@ CREATE_WINDOW_IMPL:
|
|||||||
lda ($A9),y
|
lda ($A9),y
|
||||||
bne L748E
|
bne L748E
|
||||||
lda #$9E
|
lda #$9E
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L748E: sta $82
|
L748E: sta $82
|
||||||
jsr window_by_id
|
jsr window_by_id
|
||||||
beq L749A
|
beq L749A
|
||||||
lda #$9D
|
lda #$9D
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L749A: lda params_addr
|
L749A: lda params_addr
|
||||||
sta $A9
|
sta $A9
|
||||||
@ -6661,12 +6690,12 @@ L750C: .res 38,0
|
|||||||
jsr L6588
|
jsr L6588
|
||||||
lda L7871
|
lda L7871
|
||||||
bne :+
|
bne :+
|
||||||
A2D_CALL A2D_SET_BOX, set_box_params
|
MGTK_CALL MGTK::SetPortSite, set_box_params
|
||||||
: jsr L718E
|
: jsr L718E
|
||||||
jsr L6588
|
jsr L6588
|
||||||
lda L7871
|
lda L7871
|
||||||
bne :+
|
bne :+
|
||||||
A2D_CALL A2D_SET_BOX, set_box_params
|
MGTK_CALL MGTK::SetPortSite, set_box_params
|
||||||
: jsr next_window::L703E
|
: jsr next_window::L703E
|
||||||
lda active_state
|
lda active_state
|
||||||
sta L750C
|
sta L750C
|
||||||
@ -6686,7 +6715,7 @@ L750C: .res 38,0
|
|||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
L7585: lda #$A3
|
L7585: lda #$A3
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
@ -6841,12 +6870,12 @@ toggle: sta in_close_box
|
|||||||
lda #$02
|
lda #$02
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
jsr HIDE_CURSOR_IMPL
|
jsr HIDE_CURSOR_IMPL
|
||||||
A2D_CALL A2D_FILL_RECT, $C7
|
MGTK_CALL MGTK::PaintRect, $C7
|
||||||
jsr SHOW_CURSOR_IMPL
|
jsr SHOW_CURSOR_IMPL
|
||||||
loop: jsr L691B
|
loop: jsr L691B
|
||||||
cmp #$02
|
cmp #$02
|
||||||
beq L768B
|
beq L768B
|
||||||
A2D_CALL A2D_SET_POS, set_pos_params
|
MGTK_CALL MGTK::MoveTo, set_pos_params
|
||||||
jsr L7086
|
jsr L7086
|
||||||
eor in_close_box
|
eor in_close_box
|
||||||
bpl loop
|
bpl loop
|
||||||
@ -6912,7 +6941,7 @@ L76D1: jsr L653C
|
|||||||
jsr L784C
|
jsr L784C
|
||||||
lda #$02
|
lda #$02
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
A2D_CALL A2D_SET_PATTERN, checkerboard_pattern
|
MGTK_CALL MGTK::SetPattern, checkerboard_pattern
|
||||||
L76E2: jsr next_window::L703E
|
L76E2: jsr next_window::L703E
|
||||||
jsr L7749
|
jsr L7749
|
||||||
jsr L70B7
|
jsr L70B7
|
||||||
@ -7121,11 +7150,11 @@ L7871: .byte 0
|
|||||||
L7872: sta L7010
|
L7872: sta L7010
|
||||||
lda #$00
|
lda #$00
|
||||||
sta L7871
|
sta L7871
|
||||||
A2D_CALL A2D_SET_BOX, set_box_params
|
MGTK_CALL MGTK::SetPortSite, set_box_params
|
||||||
lda #$00
|
lda #$00
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
A2D_CALL A2D_SET_PATTERN, checkerboard_pattern
|
MGTK_CALL MGTK::SetPattern, checkerboard_pattern
|
||||||
A2D_CALL A2D_FILL_RECT, set_box_params_box
|
MGTK_CALL MGTK::PaintRect, set_box_params_box
|
||||||
jsr L6553
|
jsr L6553
|
||||||
jsr top_window
|
jsr top_window
|
||||||
beq L78CA
|
beq L78CA
|
||||||
@ -7161,8 +7190,8 @@ L78CF: .byte $0D,$00
|
|||||||
.proc set_box_params
|
.proc set_box_params
|
||||||
left: .word 0
|
left: .word 0
|
||||||
top: .word $D
|
top: .word $D
|
||||||
addr: .addr A2D_SCREEN_ADDR
|
addr: .addr MGTK::screen_mapbits
|
||||||
stride: .word A2D_SCREEN_STRIDE
|
stride: .word MGTK::screen_mapwidth
|
||||||
hoffset:.word 0
|
hoffset:.word 0
|
||||||
voffset:.word 0
|
voffset:.word 0
|
||||||
width: .word 0
|
width: .word 0
|
||||||
@ -7302,7 +7331,7 @@ L7990: eor $8D
|
|||||||
L79A0: bne L79AF
|
L79A0: bne L79AF
|
||||||
jsr L79F1
|
jsr L79F1
|
||||||
jsr L657E
|
jsr L657E
|
||||||
A2D_CALL A2D_FILL_RECT, $C7
|
MGTK_CALL MGTK::PaintRect, $C7
|
||||||
rts
|
rts
|
||||||
|
|
||||||
L79AF: bit $8C
|
L79AF: bit $8C
|
||||||
@ -7315,9 +7344,9 @@ L79B8: bit $B0
|
|||||||
bpl L79B7
|
bpl L79B7
|
||||||
L79BC: jsr L657E
|
L79BC: jsr L657E
|
||||||
jsr L79F1
|
jsr L79F1
|
||||||
A2D_CALL A2D_SET_PATTERN, light_speckles_pattern
|
MGTK_CALL MGTK::SetPattern, light_speckles_pattern
|
||||||
A2D_CALL A2D_FILL_RECT, $C7
|
MGTK_CALL MGTK::PaintRect, $C7
|
||||||
A2D_CALL A2D_SET_PATTERN, screen_state::pattern
|
MGTK_CALL MGTK::SetPattern, screen_state::pattern
|
||||||
bit $8C
|
bit $8C
|
||||||
bmi L79DD
|
bmi L79DD
|
||||||
bit $AF
|
bit $AF
|
||||||
@ -7458,7 +7487,7 @@ QUERY_CLIENT_IMPL:
|
|||||||
jsr top_window
|
jsr top_window
|
||||||
bne L7ACE
|
bne L7ACE
|
||||||
lda #$A0
|
lda #$A0
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L7ACE: bit $B0
|
L7ACE: bit $B0
|
||||||
bpl L7B15
|
bpl L7B15
|
||||||
@ -7557,12 +7586,12 @@ L7B81: cmp #$02
|
|||||||
sta $82
|
sta $82
|
||||||
beq L7B90
|
beq L7B90
|
||||||
L7B8B: lda #$A4
|
L7B8B: lda #$A4
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L7B90: jsr top_window
|
L7B90: jsr top_window
|
||||||
bne L7B9A
|
bne L7B9A
|
||||||
lda #$A0
|
lda #$A0
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L7B9A: ldy #$06
|
L7B9A: ldy #$06
|
||||||
bit $82
|
bit $82
|
||||||
@ -7590,7 +7619,7 @@ L7BB6: cmp #$02
|
|||||||
sta $82
|
sta $82
|
||||||
beq L7BC5
|
beq L7BC5
|
||||||
L7BC0: lda #$A4
|
L7BC0: lda #$A4
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L7BC5: lda $82
|
L7BC5: lda $82
|
||||||
sta $8C
|
sta $8C
|
||||||
@ -7603,14 +7632,14 @@ L7BCB: lda $83,x
|
|||||||
jsr top_window
|
jsr top_window
|
||||||
bne L7BE0
|
bne L7BE0
|
||||||
lda #$A0
|
lda #$A0
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L7BE0: jsr L7A73
|
L7BE0: jsr L7A73
|
||||||
jsr L653F
|
jsr L653F
|
||||||
jsr L6588
|
jsr L6588
|
||||||
lda #$02
|
lda #$02
|
||||||
jsr set_fill_mode
|
jsr set_fill_mode
|
||||||
A2D_CALL A2D_SET_PATTERN, light_speckles_pattern
|
MGTK_CALL MGTK::SetPattern, light_speckles_pattern
|
||||||
jsr HIDE_CURSOR_IMPL
|
jsr HIDE_CURSOR_IMPL
|
||||||
L7BF7: jsr L707F
|
L7BF7: jsr L707F
|
||||||
jsr SHOW_CURSOR_IMPL
|
jsr SHOW_CURSOR_IMPL
|
||||||
@ -7779,12 +7808,12 @@ L7D30: cmp #$02
|
|||||||
sta $8C
|
sta $8C
|
||||||
beq L7D3F
|
beq L7D3F
|
||||||
L7D3A: lda #$A4
|
L7D3A: lda #$A4
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L7D3F: jsr top_window
|
L7D3F: jsr top_window
|
||||||
bne L7D49
|
bne L7D49
|
||||||
lda #$A0
|
lda #$A0
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L7D49: ldy #$07
|
L7D49: ldy #$07
|
||||||
bit $8C
|
bit $8C
|
||||||
@ -8340,7 +8369,7 @@ L81D9: lda #$00
|
|||||||
sta L7D74
|
sta L7D74
|
||||||
lda #$A2
|
lda #$A2
|
||||||
plp
|
plp
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L81E4: lda $AC
|
L81E4: lda $AC
|
||||||
and #$01
|
and #$01
|
||||||
@ -8348,7 +8377,7 @@ L81E4: lda $AC
|
|||||||
lda #$00
|
lda #$00
|
||||||
sta L7D74
|
sta L7D74
|
||||||
lda #$A1
|
lda #$A1
|
||||||
jmp a2d_exit_with_a
|
jmp mgtk_exit_with_a
|
||||||
|
|
||||||
L81F4: ldx #$00
|
L81F4: ldx #$00
|
||||||
L81F6: clc
|
L81F6: clc
|
||||||
@ -8513,11 +8542,11 @@ L8333: lda $0600,x
|
|||||||
|
|
||||||
L8346: rts
|
L8346: rts
|
||||||
|
|
||||||
L8347: A2D_CALL A2D_SET_INPUT, set_input_params
|
L8347: MGTK_CALL MGTK::PostEvent, set_input_params
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.proc set_input_params ; 1 byte shorter than normal, since KEY
|
.proc set_input_params ; 1 byte shorter than normal, since KEY
|
||||||
state: .byte A2D_INPUT_KEY
|
state: .byte MGTK::key_down
|
||||||
key: .byte 0
|
key: .byte 0
|
||||||
modifiers:
|
modifiers:
|
||||||
.byte 0
|
.byte 0
|
||||||
@ -8797,4 +8826,4 @@ mouse_firmware_hi: ; e.g. if mouse is in slot 4, this is $C4
|
|||||||
mouse_operand: ; e.g. if mouse is in slot 4, this is $40
|
mouse_operand: ; e.g. if mouse is in slot 4, this is $40
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
||||||
.endproc ; a2d
|
.endproc ; mgtk
|
@ -1,25 +1,24 @@
|
|||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; A2Desktop - GUI Library
|
;;; Mouse Graphics Tool Kit (w/ Graphics Primitives)
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
;;; ==================================================
|
.scope MGTK
|
||||||
;;; A2D Calls
|
|
||||||
|
|
||||||
A2D := $4000
|
MLI := $4000
|
||||||
;; MLI-style call (jsr A2D ; .byte call ; .addr params)
|
;; MLI-style call (jsr MLI ; .byte call ; .addr params)
|
||||||
;; Call from AUX (RAMRDON/RAMWRTON)
|
;; Call from AUX (RAMRDON/RAMWRTON)
|
||||||
|
|
||||||
|
;;; ==================================================
|
||||||
|
;;; Graphics Primitives
|
||||||
|
;;; ==================================================
|
||||||
|
|
||||||
;;; $40E5,(call*2) is the jump table used for processing these calls
|
;;; --------------------------------------------------
|
||||||
;;; $4184,(call*2) defines param blocks input length
|
;;; Initialization Commands
|
||||||
;;; if >=0, is length of param block
|
|
||||||
;;; if <0, and with $7E to get length
|
|
||||||
;;; if $4185,(call*2) is non-zero, param block is copied.
|
|
||||||
|
|
||||||
A2D_NOOP := $00 ; No-op
|
NoOp := $00 ; No-op
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
|
|
||||||
A2D_CFG_DISPLAY := $02 ; Configure display switches
|
SetSwitches := $02 ; Configure display switches
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; Turns on 80 col/DHR, and then:
|
;; Turns on 80 col/DHR, and then:
|
||||||
;; bit 0: LoRes if clear, HiRes if set
|
;; bit 0: LoRes if clear, HiRes if set
|
||||||
@ -27,13 +26,16 @@ A2D_CFG_DISPLAY := $02 ; Configure display switches
|
|||||||
;; bit 2: Full screen if clear, split screen if set
|
;; bit 2: Full screen if clear, split screen if set
|
||||||
;; bit 3: Graphics if clear, text if set
|
;; bit 3: Graphics if clear, text if set
|
||||||
|
|
||||||
A2D_QUERY_SCREEN := $03 ; Get screen state
|
;;; --------------------------------------------------
|
||||||
|
;;; GrafPort Commands
|
||||||
|
|
||||||
|
InitPort := $03 ; Get screen state
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
;; (output length 36 bytes)
|
;; (output length 36 bytes)
|
||||||
;; .word left
|
;; .word left
|
||||||
;; .word top
|
;; .word top
|
||||||
;; .addr addr A2D_SCREEN_ADDR
|
;; .addr addr screen_mapbits
|
||||||
;; .word stride A2D_SCREEN_STRIDE
|
;; .word stride screen_mapwidth
|
||||||
;; .word hoff
|
;; .word hoff
|
||||||
;; .word voff
|
;; .word voff
|
||||||
;; .word width 560-1
|
;; .word width 560-1
|
||||||
@ -49,12 +51,12 @@ A2D_QUERY_SCREEN := $03 ; Get screen state
|
|||||||
;; .byte tmask AND mask for text, default $7F
|
;; .byte tmask AND mask for text, default $7F
|
||||||
;; .addr font
|
;; .addr font
|
||||||
|
|
||||||
A2D_SET_STATE := $04 ; Set full drawing state
|
SetPort := $04 ; Set full drawing state
|
||||||
;; (input length 36 bytes)
|
;; (input length 36 bytes)
|
||||||
;; .word left pixels from screen edge
|
;; .word left pixels from screen edge
|
||||||
;; .word top
|
;; .word top
|
||||||
;; .addr addr A2D_SCREEN_ADDR
|
;; .addr addr screen_mapbits
|
||||||
;; .word stride A2D_SCREEN_STRIDE
|
;; .word stride screen_mapwidth
|
||||||
;; .word hoff pixels scrolled
|
;; .word hoff pixels scrolled
|
||||||
;; .word voff
|
;; .word voff
|
||||||
;; .word width pixels
|
;; .word width pixels
|
||||||
@ -70,92 +72,95 @@ A2D_SET_STATE := $04 ; Set full drawing state
|
|||||||
;; .byte tmask AND mask for text, default $7F
|
;; .byte tmask AND mask for text, default $7F
|
||||||
;; .addr font
|
;; .addr font
|
||||||
|
|
||||||
A2D_GET_STATE := $05 ; Get pointer to active drawing state
|
GetPort := $05 ; Get pointer to active drawing state
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
;; (output length 2 bytes)
|
;; (output length 2 bytes)
|
||||||
;; .addr state (out)
|
;; .addr state (out)
|
||||||
|
|
||||||
A2D_SET_BOX := $06 ; Set just the drawing box, subset of full state
|
SetPortSite := $06 ; Set just the drawing box, subset of full state
|
||||||
;; (input length 16 bytes)
|
;; (input length 16 bytes)
|
||||||
;; .word left pixels from screen edge
|
;; .word left pixels from screen edge
|
||||||
;; .word top
|
;; .word top
|
||||||
;; .addr addr A2D_SCREEN_ADDR ($2000)
|
;; .addr addr screen_mapbits ($2000)
|
||||||
;; .word stride A2D_SCREEN_STRIDE ($80)
|
;; .word stride screen_mapwidth ($80)
|
||||||
;; .word hoff pixels scrolled
|
;; .word hoff pixels scrolled
|
||||||
;; .word voff
|
;; .word voff
|
||||||
;; .word width pixels
|
;; .word width pixels
|
||||||
;; .word height
|
;; .word height
|
||||||
|
|
||||||
A2D_SET_FILL_MODE := $07
|
SetPenMode := $07
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; .byte mode (>=4 also sets eor mask to $7f)
|
;; .byte mode (>=4 also sets eor mask to $7f)
|
||||||
;; 0 = white (???)
|
;; 0 = white (???)
|
||||||
;; 2 = black (???)
|
;; 2 = black (???)
|
||||||
|
|
||||||
A2D_SET_PATTERN := $08
|
SetPattern := $08
|
||||||
;; (input length 8 bytes)
|
;; (input length 8 bytes)
|
||||||
;; .res 8 pattern 8x8 pixel pattern for A2D_FILL_RECT calls
|
;; .res 8 pattern 8x8 pixel pattern for PaintRect calls
|
||||||
|
|
||||||
A2D_SET_MSK := $09
|
SetColorMasks := $09
|
||||||
;; (input length 2 bytes)
|
;; (input length 2 bytes)
|
||||||
;; .byte mskand
|
;; .byte mskand
|
||||||
;; .byte mskor
|
;; .byte mskor
|
||||||
|
|
||||||
A2D_SET_THICKNESS := $0A
|
SetPenSize := $0A
|
||||||
;; (input length 2 bytes)
|
;; (input length 2 bytes)
|
||||||
;; .byte hthick horizontal pen thickness
|
;; .byte hthick horizontal pen thickness
|
||||||
;; .byte vthick vertical pen thickness
|
;; .byte vthick vertical pen thickness
|
||||||
|
|
||||||
A2D_SET_FONT := $0B
|
SetFont := $0B
|
||||||
;; (input length 2 bytes)
|
;; (input length 2 bytes)
|
||||||
;; .addr font font definition (see below)
|
;; .addr font font definition (see below)
|
||||||
|
|
||||||
A2D_SET_TEXT_MASK := $0C ; Stored to background before XORing glyph
|
SetTextBG := $0C ; Stored to background before XORing glyph
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; .byte mask
|
;; .byte mask
|
||||||
|
|
||||||
A2D_OFFSET_POS := $0D ; Adjust start of subsequent DRAW_TEXT, DRAW_LINE
|
;;; --------------------------------------------------
|
||||||
|
;;; Drawing Commands
|
||||||
|
|
||||||
|
Move := $0D ; Adjust start of subsequent DRAW_TEXT, DRAW_LINE
|
||||||
;; (input length 4 bytes)
|
;; (input length 4 bytes)
|
||||||
;; .word xdelta
|
;; .word xdelta
|
||||||
;; .word ydelta
|
;; .word ydelta
|
||||||
|
|
||||||
A2D_SET_POS := $0E ; Start of subsequent DRAW_TEXT, DRAW_LINE
|
MoveTo := $0E ; Start of subsequent DRAW_TEXT, DRAW_LINE
|
||||||
;; (input length 4 bytes)
|
;; (input length 4 bytes)
|
||||||
;; .word xcoord
|
;; .word xcoord
|
||||||
;; .word ycoord
|
;; .word ycoord
|
||||||
|
|
||||||
A2D_DRAW_LINE := $0F ; Draw line (from SET_POS)
|
Line := $0F ; Draw line (from SET_POS)
|
||||||
;; (input length 4 bytes)
|
;; (input length 4 bytes)
|
||||||
;; .word xdelta signed, delta in pixels
|
;; .word xdelta signed, delta in pixels
|
||||||
;; .word ydelta
|
;; .word ydelta
|
||||||
|
|
||||||
A2D_DRAW_LINE_ABS := $10 ; Draw line (from SET_POS)
|
LineTo := $10 ; Draw line (from SET_POS)
|
||||||
;; (input length 4 bytes)
|
;; (input length 4 bytes)
|
||||||
;; .word xcoord end coords in pixels
|
;; .word xcoord end coords in pixels
|
||||||
;; .word ycoord
|
;; .word ycoord
|
||||||
|
|
||||||
A2D_FILL_RECT := $11 ; Fill rectangle with selected simple pattern/thickness
|
PaintRect := $11 ; Fill rectangle with selected simple pattern/thickness
|
||||||
;; (input length 8 bytes)
|
;; (input length 8 bytes)
|
||||||
;; .word left (includes scroll pos)
|
;; .word left (includes scroll pos)
|
||||||
;; .word top
|
;; .word top
|
||||||
;; .word right pixels
|
;; .word right pixels
|
||||||
;; .word bottom
|
;; .word bottom
|
||||||
|
|
||||||
A2D_DRAW_RECT := $12 ; Draw rectangle with selected simple pattern/thickness
|
FrameRect := $12 ; Draw rectangle with selected simple pattern/thickness
|
||||||
;; (input length 8 bytes)
|
;; (input length 8 bytes)
|
||||||
;; .word left pixels
|
;; .word left pixels
|
||||||
;; .word top
|
;; .word top
|
||||||
;; .word right
|
;; .word right
|
||||||
;; .word bottom
|
;; .word bottom
|
||||||
|
|
||||||
A2D_TEST_BOX := $13 ; Is pos (via SET_POS) in bounds? Returns true/false in A
|
InRect := $13 ; Is pos (via SET_POS) in bounds? Returns true/false in A
|
||||||
;; (input length 8 bytes)
|
;; (input length 8 bytes)
|
||||||
;; .word left
|
;; .word left
|
||||||
;; .word top
|
;; .word top
|
||||||
;; .word right
|
;; .word right
|
||||||
;; .word bottom
|
;; .word bottom
|
||||||
|
|
||||||
A2D_DRAW_BITMAP := $14 ; Draw pattern
|
PaintBits := $14 ; Draw pattern
|
||||||
;; (input length 16 bytes)
|
;; (input length 16 bytes)
|
||||||
;; .word left
|
;; .word left
|
||||||
;; .word top
|
;; .word top
|
||||||
@ -170,7 +175,7 @@ A2D_DRAW_BITMAP := $14 ; Draw pattern
|
|||||||
;; $15 used in DeskTop but not DAs - icon redraw
|
;; $15 used in DeskTop but not DAs - icon redraw
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
|
|
||||||
A2D_DRAW_POLYGONS := $16 ; Draw multiple closed polygons
|
FramePoly := $16 ; Draw multiple closed polygons
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
;; Address points at struct:
|
;; Address points at struct:
|
||||||
;; .byte points count
|
;; .byte points count
|
||||||
@ -182,97 +187,120 @@ A2D_DRAW_POLYGONS := $16 ; Draw multiple closed polygons
|
|||||||
;; $17 used in DeskTop but not DAs - maybe selection drag
|
;; $17 used in DeskTop but not DAs - maybe selection drag
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
|
|
||||||
A2D_MEASURE_TEXT := $18 ; Measure the width of a string in pixels
|
;;; --------------------------------------------------
|
||||||
|
;;; Text Commands
|
||||||
|
|
||||||
|
TextWidth := $18 ; Measure the width of a string in pixels
|
||||||
;; (input length 3 bytes)
|
;; (input length 3 bytes)
|
||||||
;; .addr data
|
;; .addr data
|
||||||
;; .byte length
|
;; .byte length
|
||||||
;; .word width result in pixels
|
;; .word width result in pixels
|
||||||
|
|
||||||
A2D_DRAW_TEXT := $19 ; Drawn at last SET_POS as left, baseline
|
DrawText := $19 ; Drawn at last SET_POS as left, baseline
|
||||||
;; (input length 3 bytes)
|
;; (input length 3 bytes)
|
||||||
;; .addr data
|
;; .addr data
|
||||||
;; .byte length
|
;; .byte length
|
||||||
|
|
||||||
A2D_CONFIGURE_ZP_USE := $1A ; Configure ZP usage by API (speed vs. convenience)
|
;;; --------------------------------------------------
|
||||||
|
;;; Utility Commands
|
||||||
|
|
||||||
|
SetZP1 := $1A ; Configure ZP usage by API (speed vs. convenience)
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; .byte flag (AWS_CZP_*; high bit set = preserve ZP during calls)
|
;; .byte flag (AWS_CZP_*; high bit set = preserve ZP during calls)
|
||||||
|
|
||||||
A2D_LOW_ZP_STASH := $1B ; Stash or restore lower 128 bytes of ZP; calls are idempotent
|
SetZP2 := $1B ; Stash or restore lower 128 bytes of ZP; calls are idempotent
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; .byte flag (high bit set = stash ZP, clear = unstash ZP)
|
;; .byte flag (high bit set = stash ZP, clear = unstash ZP)
|
||||||
|
|
||||||
A2D_INIT_SCREEN_AND_MOUSE := $1D; Inits state, registers interrupt handler, draws desktop
|
|
||||||
|
;;; ==================================================
|
||||||
|
;;; Mouse Graphics Tool Kit Calls
|
||||||
|
;;; ==================================================
|
||||||
|
|
||||||
|
;;; --------------------------------------------------
|
||||||
|
;;; Initialization Calls
|
||||||
|
|
||||||
|
StartDeskTop := $1D; Inits state, registers interrupt handler, draws desktop
|
||||||
;; (input length 12 byte)
|
;; (input length 12 byte)
|
||||||
;; ???
|
;; ???
|
||||||
|
|
||||||
A2D_DISABLE_MOUSE := $1E ; Deallocates interrupt, hides cursor
|
StopDeskTop := $1E ; Deallocates interrupt, hides cursor
|
||||||
;; (no parameters; pass $0000 as address)
|
;; (no parameters; pass $0000 as address)
|
||||||
|
|
||||||
A2D_HOOK_MOUSE := $20 ; Install mouse hook; A=0 on success, $95 if mouse disabled
|
SetUserHook := $20 ; Install mouse hook; A=0 on success, $95 if mouse disabled
|
||||||
;; NOTE: Doesn't set the internal flag - buggy ???
|
;; NOTE: Doesn't set the internal flag - buggy ???
|
||||||
;; (input length 2 bytes)
|
;; (input length 2 bytes)
|
||||||
;; (output length 2 bytes)
|
;; (output length 2 bytes)
|
||||||
;; .addr hook Mouse hook routine to install
|
;; .addr hook Mouse hook routine to install
|
||||||
;; .addr mouse_state (out) Address of mouse state (.word x, y; .byte status)
|
;; .addr mouse_state (out) Address of mouse state (.word x, y; .byte status)
|
||||||
|
|
||||||
A2D_GET_INT_HANDLER := $23 ; Get address of interrupt handler
|
GetIntHandler := $23 ; Get address of interrupt handler
|
||||||
;; (input length 0)
|
;; (input length 0)
|
||||||
;; (output length 2 bytes)
|
;; (output length 2 bytes)
|
||||||
;; .addr handler (out) Address of interrupt handler (after cld)
|
;; .addr handler (out) Address of interrupt handler (after cld)
|
||||||
|
|
||||||
A2D_SET_CURSOR := $24 ; Set cursor definition
|
;;; --------------------------------------------------
|
||||||
|
;;; Cursor Manager Calls
|
||||||
|
|
||||||
|
SetCursor := $24 ; Set cursor definition
|
||||||
;; (input not copied)
|
;; (input not copied)
|
||||||
;; .res 24 bitmap 2x12 byte bitmap
|
;; .res 24 bitmap 2x12 byte bitmap
|
||||||
;; .res 24 mask 2x12 byte mask
|
;; .res 24 mask 2x12 byte mask
|
||||||
;; .byte hotx hotspot coords
|
;; .byte hotx hotspot coords
|
||||||
;; .byte hoty
|
;; .byte hoty
|
||||||
|
|
||||||
A2D_SHOW_CURSOR := $25 ; Return cursor to visibility
|
ShowCursor := $25 ; Return cursor to visibility
|
||||||
;; (no parameters; pass $0000 as address)
|
;; (no parameters; pass $0000 as address)
|
||||||
|
|
||||||
A2D_HIDE_CURSOR := $26 ; Cursor hidden until A2D_SHOW_CURSOR call
|
HideCursor := $26 ; Cursor hidden until ShowCursor call
|
||||||
;; (no parameters; pass $0000 as address)
|
;; (no parameters; pass $0000 as address)
|
||||||
|
|
||||||
A2D_ERASE_CURSOR := $27 ; Cursor hidden until moved or other A2D call
|
ObscureCursor := $27 ; Cursor hidden until moved
|
||||||
;; (no parameters; pass $0000 as address)
|
;; (no parameters; pass $0000 as address)
|
||||||
|
|
||||||
A2D_GET_CURSOR := $28 ; Get cursor definition
|
GetCursorAddr := $28 ; Get cursor definition
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
;; (output length 2 bytes)
|
;; (output length 2 bytes)
|
||||||
;; .addr definition See A2D_SET_CURSOR
|
;; .addr definition See SetCursor
|
||||||
|
|
||||||
A2D_GET_INPUT := $2A
|
;;; --------------------------------------------------
|
||||||
|
;;; Event Manager Calls
|
||||||
|
|
||||||
|
GetEvent := $2A
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
;; (output length 5 bytes)
|
;; (output length 5 bytes)
|
||||||
;; .byte state (A2D_INPUT_*)
|
;; .byte state
|
||||||
;; if state is A2D_INPUT_KEY:
|
;; if state is key_down:
|
||||||
;; .byte key (ASCII code; high bit clear)
|
;; .byte key (ASCII code; high bit clear)
|
||||||
;; .byte modifiers (0=none, 1=open-apple, 2=closed-apple, 3=both)
|
;; .byte modifiers (0=none, 1=open-apple, 2=closed-apple, 3=both)
|
||||||
;; if state otherwise:
|
;; if state otherwise:
|
||||||
;; .word xcoord
|
;; .word xcoord
|
||||||
;; .word ycoord
|
;; .word ycoord
|
||||||
|
|
||||||
A2D_UNK_2B := $2B ; Unknown - possibly "reset drawing state"
|
FlushEvents := $2B
|
||||||
;; (no parameters; pass $0000 as address)
|
;; (no parameters; pass $0000 as address)
|
||||||
|
|
||||||
;; $2C used in DeskTop but not DAs - icon drag
|
;; $2C used in DeskTop but not DAs - icon drag
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
|
|
||||||
A2D_SET_INPUT := $2D ; Set pending input state (mouse or keyboard)
|
PostEvent := $2D ; Set pending input state (mouse or keyboard)
|
||||||
;; (input length 5 bytes)
|
;; (input length 5 bytes)
|
||||||
;; .byte state A2D_INPUT_*
|
;; .byte state
|
||||||
;; if state is A2D_INPUT_KEY:
|
;; if state is key_down:
|
||||||
;; .byte key ASCII code; high bit clear
|
;; .byte key ASCII code; high bit clear
|
||||||
;; .byte modifiers 0=none, 1=open-apple, 2=closed-apple, 3=both
|
;; .byte modifiers 0=none, 1=open-apple, 2=closed-apple, 3=both
|
||||||
;; if state otherwise:
|
;; if state otherwise:
|
||||||
;; .word xcoord
|
;; .word xcoord
|
||||||
;; .word ycoord
|
;; .word ycoord
|
||||||
|
|
||||||
A2D_SET_KBD_FLAG := $2E ; When set, keyboard is ignored in $29 calls
|
SetKeyEvent := $2E ; When set, keyboard is ignored in $29 calls
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; .byte flag high bit set = ignore keyboard, otherwise check
|
;; .byte flag high bit set = ignore keyboard, otherwise check
|
||||||
|
|
||||||
A2D_SET_MENU := $30 ; Configure (and draw) menu
|
;;; --------------------------------------------------
|
||||||
|
;;; Menu Manager Calls
|
||||||
|
|
||||||
|
SetMenu := $30 ; Configure (and draw) menu
|
||||||
;; (input not copied)
|
;; (input not copied)
|
||||||
;; .word count Number of top-level menus
|
;; .word count Number of top-level menus
|
||||||
;;
|
;;
|
||||||
@ -294,19 +322,22 @@ A2D_SET_MENU := $30 ; Configure (and draw) menu
|
|||||||
;; or for a separator:
|
;; or for a separator:
|
||||||
;; .word $40, $13, $0
|
;; .word $40, $13, $0
|
||||||
|
|
||||||
A2D_MENU_CLICK := $31 ; Enter modal loop for handling mouse-down on menu bar
|
MenuSelect := $31 ; Enter modal loop for handling mouse-down on menu bar
|
||||||
;; (input not copied)
|
;; (input not copied)
|
||||||
;; (output 2 bytes)
|
;; (output 2 bytes)
|
||||||
;; .byte menu_id Top level menu identifier, or 0 if none
|
;; .byte menu_id Top level menu identifier, or 0 if none
|
||||||
;; .byte item_num Index (1-based) of item in menu, or 0 if none
|
;; .byte item_num Index (1-based) of item in menu, or 0 if none
|
||||||
|
|
||||||
A2D_CREATE_WINDOW := $38
|
;;; --------------------------------------------------
|
||||||
|
;;; Window Manager Calls
|
||||||
|
|
||||||
|
OpenWindow := $38
|
||||||
;; (input not copied)
|
;; (input not copied)
|
||||||
;; .byte id 0 = desktop, 1-...n = DeskTop windows, DAs use 51, 52, 100
|
;; .byte id
|
||||||
;; .byte flags A2D_CWF_*
|
;; .byte options option_*
|
||||||
;; .addr title
|
;; .addr title
|
||||||
;; .byte hscroll A2D_CWS_*
|
;; .byte hscroll scroll_option_*
|
||||||
;; .byte vscroll A2D_CWS_*
|
;; .byte vscroll scroll_option_*
|
||||||
;; .byte hsmax
|
;; .byte hsmax
|
||||||
;; .byte hspos
|
;; .byte hspos
|
||||||
;; .byte vsmax
|
;; .byte vsmax
|
||||||
@ -317,7 +348,7 @@ A2D_CREATE_WINDOW := $38
|
|||||||
;; .word height_a ???
|
;; .word height_a ???
|
||||||
;; .word width_b (of scroll area?)
|
;; .word width_b (of scroll area?)
|
||||||
;; .word height_b (of scroll area?)
|
;; .word height_b (of scroll area?)
|
||||||
;; - next section is identical to that for A2D_SET_STATE
|
;; - next section is identical to that for SetPort
|
||||||
;; .word left pixels from screen edge
|
;; .word left pixels from screen edge
|
||||||
;; .word top
|
;; .word top
|
||||||
;; .word screen_addr
|
;; .word screen_addr
|
||||||
@ -338,69 +369,69 @@ A2D_CREATE_WINDOW := $38
|
|||||||
;; .addr font
|
;; .addr font
|
||||||
;; .addr next address of next lower window in stack (filled in by call)
|
;; .addr next address of next lower window in stack (filled in by call)
|
||||||
|
|
||||||
A2D_DESTROY_WINDOW := $39
|
CloseWindow := $39
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; .byte id
|
;; .byte id
|
||||||
|
|
||||||
A2D_QUERY_WINDOW := $3B ; Get pointer to window params by id; A=0 on success
|
GetWinPtr := $3B ; Get pointer to window params by id; A=0 on success
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; (output length 3 bytes)
|
;; (output length 3 bytes)
|
||||||
;; .byte id of window
|
;; .byte id of window
|
||||||
;; .addr window (out) window params
|
;; .addr window (out) window params
|
||||||
|
|
||||||
A2D_QUERY_STATE := $3C ; get drawing state of window
|
GetWinPort := $3C ; get drawing state of window
|
||||||
;; (input length 3 bytes)
|
;; (input length 3 bytes)
|
||||||
;; .byte id window
|
;; .byte id window
|
||||||
;; .addr state state definition to populate, like A2D_SET_STATE
|
;; .addr state state definition to populate, like SetPort
|
||||||
|
|
||||||
A2D_UPDATE_STATE := $3D ; Update drawing state by passed window id
|
SetWinPort := $3D ; Update drawing state by passed window id
|
||||||
;; ** Implementation appears buggy - or maybe just really cryptic ??? **
|
;; ** Implementation appears buggy - or maybe just really cryptic ??? **
|
||||||
;; (input length 2 bytes)
|
;; (input length 2 bytes)
|
||||||
;; .byte id window
|
;; .byte id window
|
||||||
;; .byte ???
|
;; .byte ???
|
||||||
|
|
||||||
|
|
||||||
A2D_REDRAW_WINDOW := $3E ; Draws window border, background, title bar, scroll bars
|
BeginUpdate := $3E ; Draws window border, background, title bar, scroll bars
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; .byte id
|
;; .byte id
|
||||||
|
|
||||||
A2D_QUERY_TARGET := $40
|
FindWindow := $40
|
||||||
;; (input length 4 bytes)
|
;; (input length 4 bytes)
|
||||||
;; .word queryx relative to screen
|
;; .word queryx relative to screen
|
||||||
;; .word queryy
|
;; .word queryy
|
||||||
;; .byte element (out) A2D_ELEM_*
|
;; .byte element (out) area_*
|
||||||
;; .byte id (out) of window
|
;; .byte id (out) of window
|
||||||
|
|
||||||
A2D_QUERY_TOP := $41 ; Get id of top window
|
FrontWindow := $41 ; Get id of top window
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
;; (output length 1 byte)
|
;; (output length 1 byte)
|
||||||
;; .byte id (out) window, or 0 if none
|
;; .byte id (out) window, or 0 if none
|
||||||
|
|
||||||
A2D_RAISE_WINDOW := $42 ; Make window topmost
|
SelectWindow := $42 ; Make window topmost
|
||||||
;; (input length 1 byte)
|
;; (input length 1 byte)
|
||||||
;; .byte id window
|
;; .byte id window
|
||||||
|
|
||||||
A2D_CLOSE_CLICK := $43
|
TrackGoAway := $43
|
||||||
;; (input length 0 bytes)
|
;; (input length 0 bytes)
|
||||||
;; .byte clicked (out) 0 = cancelled, 1 = clicked
|
;; .byte clicked (out) 0 = cancelled, 1 = clicked
|
||||||
;; .byte ?? (out)
|
;; .byte ?? (out)
|
||||||
;; .byte ?? (out)
|
;; .byte ?? (out)
|
||||||
|
|
||||||
A2D_DRAG_WINDOW := $44
|
DragWindow := $44
|
||||||
;; (input length 5 bytes)
|
;; (input length 5 bytes)
|
||||||
;; .byte id window
|
;; .byte id window
|
||||||
;; .word xcoord mouse coords
|
;; .word xcoord mouse coords
|
||||||
;; .word ycoord
|
;; .word ycoord
|
||||||
;; .byte moved high bit set if moved, clear if not
|
;; .byte moved high bit set if moved, clear if not
|
||||||
|
|
||||||
A2D_DRAG_RESIZE := $45
|
GrowWindow := $45
|
||||||
;; (input length 5 bytes)
|
;; (input length 5 bytes)
|
||||||
;; .byte id window
|
;; .byte id window
|
||||||
;; .word xcoord mouse coords
|
;; .word xcoord mouse coords
|
||||||
;; .word ycoord
|
;; .word ycoord
|
||||||
;; .byte ?? likely: moved? 0 = no change, 1 = moved
|
;; .byte ?? likely: moved? 0 = no change, 1 = moved
|
||||||
|
|
||||||
A2D_MAP_COORDS := $46 ; Map screen coords to client coords
|
ScreenToWindow := $46 ; Map screen coords to client coords
|
||||||
;; (input length 5 bytes)
|
;; (input length 5 bytes)
|
||||||
;; .byte window_id
|
;; .byte window_id
|
||||||
;; .word screenx
|
;; .word screenx
|
||||||
@ -408,108 +439,116 @@ A2D_MAP_COORDS := $46 ; Map screen coords to client coords
|
|||||||
;; .word clientx
|
;; .word clientx
|
||||||
;; .word clienty
|
;; .word clienty
|
||||||
|
|
||||||
A2D_QUERY_CLIENT:= $48
|
;;; --------------------------------------------------
|
||||||
|
;;; Control Manager Calls
|
||||||
|
|
||||||
|
FindControl := $48
|
||||||
;; (input length 4 bytes)
|
;; (input length 4 bytes)
|
||||||
;; .word xcoord
|
;; .word xcoord
|
||||||
;; .word ycoord
|
;; .word ycoord
|
||||||
;; .byte part A2D_CLIENT, A2D_HSCROLL or A2D_VSCROLL
|
;; .byte part ctl_*
|
||||||
;; .byte scroll A2D_SCROLL_PART_*
|
;; .byte scroll part_*
|
||||||
|
|
||||||
A2D_RESIZE_WINDOW := $49 ; ???
|
SetCtlMax := $49 ; ???
|
||||||
;; (input length 3 bytes)
|
;; (input length 3 bytes)
|
||||||
;; .byte ??? maybe part (i.e. HSCROLL or VSCROLL) ???
|
;; .byte ??? maybe part (i.e. HSCROLL or VSCROLL) ???
|
||||||
;; .byte ??? width fraction ??
|
;; .byte ??? width fraction ??
|
||||||
;; .byte ???
|
;; .byte ???
|
||||||
|
|
||||||
A2D_DRAG_SCROLL := $4A
|
TrackThumb := $4A
|
||||||
;; (input length 5 bytes)
|
;; (input length 5 bytes)
|
||||||
;; .byte type A2D_HSCROLL or A2D_VSCROLL
|
;; .byte type ctl_horizontal_scroll_bar or ctl_vertical_scroll_bar
|
||||||
;; .word mouse xcoord
|
;; .word mouse xcoord
|
||||||
;; .word mouse ycoord
|
;; .word mouse ycoord
|
||||||
;; .byte position 0...255
|
;; .byte position 0...255
|
||||||
;; .byte moved 0 = no change, 1 = moved
|
;; .byte moved 0 = no change, 1 = moved
|
||||||
|
|
||||||
A2D_UPDATE_SCROLL:= $4B
|
UpdateThumb := $4B
|
||||||
;; (input length 3 bytes)
|
;; (input length 3 bytes)
|
||||||
;; .byte type A2D_HSCROLL or A2D_VSCROLL
|
;; .byte type ctl_horizontal_scroll_bar or ctl_vertical_scroll_bar
|
||||||
;; .byte pos new position 0...250
|
;; .byte pos new position 0...250
|
||||||
;; .byte ???
|
;; .byte ???
|
||||||
|
|
||||||
;;; $4E looks like last call
|
;;; $4E is last call
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; Constants
|
;;; Graphics Primitives Constants
|
||||||
|
|
||||||
;;; Used in A2D_QUERY_STATE / A2D_SET_BOX
|
;;; Used in GetWinPort / SetPortSite
|
||||||
A2D_SCREEN_ADDR := $2000 ; Screen address
|
screen_mapbits := $2000 ; Screen address
|
||||||
A2D_SCREEN_STRIDE := $80 ; Stride in bytes
|
screen_mapwidth := $80 ; Stride in bytes
|
||||||
|
|
||||||
;;; Used in A2D_GET_INPUT
|
;;; Used in SetPenMode
|
||||||
A2D_INPUT_NONE := 0 ; No mouse or keypress
|
pencopy := 0
|
||||||
A2D_INPUT_DOWN := 1 ; Mouse button was depressed
|
notpenXOR := 6
|
||||||
A2D_INPUT_UP := 2 ; Mouse button was released
|
|
||||||
A2D_INPUT_KEY := 3 ; Key was pressed
|
|
||||||
A2D_INPUT_HELD := 4 ; Mouse button still down
|
|
||||||
A2D_INPUT_DOWN_MOD := 5 ; Mouse button was depressed, modifier key down
|
|
||||||
|
|
||||||
;;; Used in A2D_GET_MOUSE
|
;;; Used in SetZP1
|
||||||
A2D_ELEM_DESKTOP:= 0
|
zp_overwrite := 0
|
||||||
A2D_ELEM_MENU := 1
|
zp_preserve := 1<<7
|
||||||
A2D_ELEM_CLIENT := 2 ; Includes scroll bars
|
|
||||||
A2D_ELEM_TITLE := 3
|
|
||||||
A2D_ELEM_RESIZE := 4
|
|
||||||
A2D_ELEM_CLOSE := 5
|
|
||||||
|
|
||||||
;;; Used in A2D_QUERY_CLIENT, A2D_DRAG_SCROLL, A2D_UPDATE_SCROLL
|
|
||||||
A2D_CLIENT := 0
|
|
||||||
A2D_VSCROLL := 1
|
|
||||||
A2D_HSCROLL := 2
|
|
||||||
|
|
||||||
;;; Used in A2D_QUERY_CLIENT
|
|
||||||
A2D_SCROLL_PART_UP := 1
|
|
||||||
A2D_SCROLL_PART_LEFT := 1
|
|
||||||
A2D_SCROLL_PART_DOWN := 2
|
|
||||||
A2D_SCROLL_PART_RIGHT := 2
|
|
||||||
A2D_SCROLL_PART_ABOVE := 3
|
|
||||||
A2D_SCROLL_PART_BEFORE := 3
|
|
||||||
A2D_SCROLL_PART_BELOW := 4
|
|
||||||
A2D_SCROLL_PART_AFTER := 4
|
|
||||||
A2D_SCROLL_PART_THUMB := 5
|
|
||||||
|
|
||||||
;;; Used in A2D_SET_FILL_MODE
|
|
||||||
A2D_SFM_NORMAL := 0
|
|
||||||
A2D_SFM_XOR := 6
|
|
||||||
|
|
||||||
;;; Used in A2D_CREATE_WINDOW
|
|
||||||
A2D_CWF_NOTITLE := 1 << 0
|
|
||||||
A2D_CWF_ADDCLOSE := 1 << 1
|
|
||||||
A2D_CWF_ADDRESIZE := 1 << 2
|
|
||||||
|
|
||||||
A2D_CWS_NOSCROLL := 0
|
|
||||||
A2D_CWS_SCROLL_ENABLED := 1 << 7
|
|
||||||
A2D_CWS_SCROLL_THUMB := 1 << 6
|
|
||||||
A2D_CWS_SCROLL_TRACK := 1 << 0
|
|
||||||
A2D_CWS_SCROLL_NORMAL := A2D_CWS_SCROLL_ENABLED | A2D_CWS_SCROLL_THUMB | A2D_CWS_SCROLL_TRACK
|
|
||||||
|
|
||||||
;;; Used in A2D_CONFIGURE_ZP_USE
|
|
||||||
A2D_CZP_PRESERVE := 1<<7
|
|
||||||
A2D_CZP_OVERWRITE := 0
|
|
||||||
|
|
||||||
;;; Used in various state blocks
|
;;; Used in various state blocks
|
||||||
A2D_DEFAULT_MSKAND := $FF
|
colormask_and := $FF
|
||||||
A2D_DEFAULT_MSKOR := $00
|
colormask_or := $00
|
||||||
A2D_DEFAULT_TMASK := $7F
|
textbg_white := $7F
|
||||||
|
|
||||||
|
;;; ==================================================
|
||||||
|
;;; Mouse Graphics Tool Kit Constants
|
||||||
|
|
||||||
|
;;; Used in GetEvent
|
||||||
|
no_event := 0 ; No mouse or keypress
|
||||||
|
button_down := 1 ; Mouse button was depressed
|
||||||
|
button_up := 2 ; Mouse button was released
|
||||||
|
key_down := 3 ; Key was pressed
|
||||||
|
drag := 4 ; Mouse button still down
|
||||||
|
apple_key := 5 ; Mouse button was depressed, modifier key down
|
||||||
|
|
||||||
|
;;; Used in FindWindow
|
||||||
|
area_desktop := 0
|
||||||
|
area_menubar := 1
|
||||||
|
area_content := 2 ; Includes scroll bars
|
||||||
|
area_dragbar := 3
|
||||||
|
area_grow_box := 4
|
||||||
|
area_close_box := 5
|
||||||
|
|
||||||
|
;;; Used in FindControl, TrackThumb, UpdateThumb
|
||||||
|
ctl_not_a_control := 0
|
||||||
|
ctl_vertical_scroll_bar := 1
|
||||||
|
ctl_horizontal_scroll_bar := 2
|
||||||
|
|
||||||
|
;;; Used in FindControl
|
||||||
|
part_up_arrow := 1
|
||||||
|
part_left_arrow := 1
|
||||||
|
part_down_arrow := 2
|
||||||
|
part_right_arrow := 2
|
||||||
|
part_page_up := 3
|
||||||
|
part_page_left := 3
|
||||||
|
part_page_down := 4
|
||||||
|
part_page_right := 4
|
||||||
|
part_thumb := 5
|
||||||
|
|
||||||
|
;;; Used in OpenWindow
|
||||||
|
option_dialog_box := 1 << 0
|
||||||
|
option_go_away_box := 1 << 1
|
||||||
|
option_grow_box := 1 << 2
|
||||||
|
|
||||||
|
scroll_option_none := 0
|
||||||
|
scroll_option_present := 1 << 7
|
||||||
|
scroll_option_thumb := 1 << 6
|
||||||
|
scroll_option_active := 1 << 0
|
||||||
|
scroll_option_normal := scroll_option_present | scroll_option_thumb | scroll_option_active
|
||||||
|
|
||||||
|
.endscope ; MGTK
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; Macros
|
;;; Macros
|
||||||
|
|
||||||
;;; Call an A2D entry point:
|
;;; Call an MGTK entry point:
|
||||||
;;; A2D_CALL n - params is $0000
|
;;; MGTK_CALL n - params is $0000
|
||||||
;;; A2D_CALL n, params_addr
|
;;; MGTK_CALL n, params_addr
|
||||||
;;; A2D_CALL m, params_addr, label - params_addr is labeled for modifying
|
;;; MGTK_CALL m, params_addr, label - params_addr is labeled for modifying
|
||||||
|
|
||||||
.macro A2D_CALL op, addr, label
|
.macro MGTK_CALL op, addr, label
|
||||||
jsr A2D
|
jsr MGTK::MLI
|
||||||
.byte op
|
.byte op
|
||||||
|
|
||||||
.if .paramcount > 2
|
.if .paramcount > 2
|
||||||
@ -525,10 +564,10 @@ A2D_DEFAULT_TMASK := $7F
|
|||||||
|
|
||||||
;;; ------------------------------------
|
;;; ------------------------------------
|
||||||
|
|
||||||
.macro A2D_DEFSTRING str, label ; String definition, for use with A2D_TEXT
|
.macro DEFINE_STRING str, label ; String definition, for use with TextWidth/DrawText
|
||||||
.local data ; Call as A2D_DEFSTRING "abc"
|
.local data ; Call as DEFINE_STRING "abc"
|
||||||
.local end ; Can include control chars by using:
|
.local end ; Can include control chars by using:
|
||||||
.addr data ; A2D_DEFSTRING {"abc",$0D,"def"}
|
.addr data ; DEFINE_STRING {"abc",$0D,"def"}
|
||||||
|
|
||||||
.if .paramcount > 1
|
.if .paramcount > 1
|
||||||
label:
|
label:
|
||||||
@ -539,7 +578,7 @@ end:
|
|||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
;;; Define pattern for A2D_DRAW_BITMAP - low 7 bits are reversed
|
;;; Define pattern for PaintBits - low 7 bits are reversed
|
||||||
;;; e.g. .byte px(%1000000)
|
;;; e.g. .byte px(%1000000)
|
||||||
;;; px() has high bit clear, PX() has high bit set
|
;;; px() has high bit clear, PX() has high bit set
|
||||||
.define px(bits) (((bits&$40)>>6)|((bits&$20)>>4)|((bits&$10)>>2)|(bits&$8)|((bits&$4)<<2)|((bits&$2)<<4)|((bits&$1)<<6))
|
.define px(bits) (((bits&$40)>>6)|((bits&$20)>>4)|((bits&$10)>>2)|(bits&$8)|((bits&$4)<<2)|((bits&$2)<<4)|((bits&$1)<<6))
|
Loading…
x
Reference in New Issue
Block a user