mirror of
https://github.com/mi57730/a2d.git
synced 2024-12-01 05:50:24 +00:00
159 lines
5.5 KiB
PHP
159 lines
5.5 KiB
PHP
;;; ==================================================
|
|
;;; DeskTop Internals
|
|
;;; ==================================================
|
|
|
|
DA_LOAD_ADDRESS := $800
|
|
DA_MAX_SIZE := $1C00 - DA_LOAD_ADDRESS
|
|
|
|
;;; ==================================================
|
|
;;; Direct Calls (from main memory)
|
|
|
|
;;; * = Used by Desk Accessories
|
|
|
|
JUMP_TABLE_00 := $4000 ; ???
|
|
JUMP_TABLE_MGTK_RELAY := $4003 ; MGTK relay call (main>aux)
|
|
JUMP_TABLE_06 := $4006 ; ???
|
|
JUMP_TABLE_09 := $4009 ; ???
|
|
JUMP_TABLE_0C := $400C ; ???
|
|
JUMP_TABLE_0F := $400F ; Auxload
|
|
JUMP_TABLE_EJECT := $4012 ; Eject command
|
|
JUMP_TABLE_REDRAW_ALL := $4015 ; Redraw all windows (e.g. after a drag) *
|
|
JUMP_TABLE_DESKTOP_RELAY:= $4018 ; DESKTOP relay call (main>aux)
|
|
JUMP_TABLE_LOAD_SEG := $401B ; Load dynamic routine
|
|
JUMP_TABLE_CLEAR_SEL := $401E ; Clear DeskTop selection *
|
|
JUMP_TABLE_MLI := $4021 ; ProDOS MLI call (Y=call, X,A=params addr) *
|
|
JUMP_TABLE_COPY_TO_BUF := $4024 ; Copy to buffer
|
|
JUMP_TABLE_COPY_FROM_BUF:= $4027 ; Copy from buffer
|
|
JUMP_TABLE_NOOP := $402A ; No-Op command (RTS)
|
|
JUMP_TABLE_2D := $402D ; ??? (Draw type/size/date in non-icon views?)
|
|
JUMP_TABLE_30 := $4030 ; Show alert 0
|
|
JUMP_TABLE_33 := $4033 ; Show alert X
|
|
JUMP_TABLE_LAUNCH_FILE := $4036 ; Launch file
|
|
JUMP_TABLE_CUR_POINTER := $4039 ; Changes mouse cursor to pointer *
|
|
JUMP_TABLE_CUR_WATCH := $403C ; Changes mouse cursor to watch
|
|
JUMP_TABLE_RESTORE_SEG := $403F ; Restore from dynamic routine
|
|
|
|
;;; ==================================================
|
|
;;; API Calls (from aux memory)
|
|
|
|
;;; * = Used by Desk Accessories
|
|
|
|
DESKTOP := $8E00
|
|
;; MLI-style call (jsr DEKSTOP ; .byte call ; .addr params)
|
|
;; Call from AUX (RAMRDON/RAMWRTON)
|
|
|
|
;; Implementation bounces to $93BC, uses jump table at $939E
|
|
|
|
DT_HIGHLIGHT_ICON := $02 ; { .byte icon }
|
|
DT_UNHIGHLIGHT_ICON := $03 ; { .byte icon }
|
|
;; $06 ???
|
|
DT_CLOSE_WINDOW := $07 ; { .byte window_id }
|
|
DT_FIND_ICON := $09 ; { .word mousex, .word mousey, .byte result }
|
|
|
|
DT_REDRAW_ICONS := $0C ; Repaints desktop icons *
|
|
DT_ICON_IN_RECT := $0D ; { .byte icon, rect bounds }
|
|
|
|
|
|
;;; Call a DESKTOP entry point:
|
|
;;; DESKTOP_CALL n - params is $0000
|
|
;;; DESKTOP_CALL n, params_addr
|
|
;;; DESKTOP_CALL m, params_addr, label - params_addr is labeled for modifying
|
|
|
|
.macro DESKTOP_CALL op, addr, label
|
|
jsr DESKTOP
|
|
.byte op
|
|
|
|
.if .paramcount > 2
|
|
label := *
|
|
.endif
|
|
|
|
.if .paramcount > 1
|
|
.addr addr
|
|
.else
|
|
.addr 0
|
|
.endif
|
|
.endmacro
|
|
|
|
|
|
;;; ==================================================
|
|
;;; Internals - Windows (paths) and Icons (files)
|
|
|
|
;;; NOTE: Some of these are used by Desk Accessories
|
|
|
|
;; These are DeskTop internals, but it appears there is no
|
|
;; API for getting the selected file.
|
|
file_selected := $DF21 ; 0 if no selection, 1 otherwise
|
|
path_index := $DF20 ; index of selected window (used to get prefix)
|
|
path_table := $DFB3 ; window address table
|
|
;; each entry is 65 bytes long
|
|
;; length-prefixed path string (no trailing /)
|
|
file_index := $DF22 ; index of selected file (global, not w/in window)
|
|
file_table := $DD9F ; file address table
|
|
;; each entry is 27 bytes long
|
|
;; .byte ??
|
|
;; .byte ??
|
|
;; .byte type/icon (bits 4,5,6 clear = directory)
|
|
;; .word iconx (pixels)
|
|
;; .word icony (pixels)
|
|
;; .byte ??
|
|
;; .byte ??
|
|
;; .byte len, name (length-prefixed, spaces before/after; 17 byte buffer)
|
|
|
|
|
|
;;; ==================================================
|
|
;;; Internals - Default Font
|
|
|
|
;;; Used by DAs for window definitions
|
|
DEFAULT_FONT := $8800
|
|
|
|
;;; Modified by Show Text File DA to toggle fixed width
|
|
font_flag := $8800 ; = $00 - if high bit set, glyphs are 2 bytes wide (???)
|
|
font_size_count := $8801 ; = $7F - max glyph number (count is this + 1)
|
|
font_height := $8802 ; 9 pixels
|
|
font_width_table := $8803 ; width in pixels, indexed by ASCII code
|
|
|
|
font_glyphs := $8883 ; $80 glyphs, organized by row, 9 bytes per
|
|
|
|
;;; So glyph for A $41
|
|
;;; width is at $8803 + $41 = $8844 which is 7
|
|
;;; row0 is at $8883 + $41 + (0 * $80) = $88C4 ~ $1E = %00011110
|
|
;;; row1 is at $8883 + $41 + (1 * $80) = $8944 ~ $33 = %00110011
|
|
;;; etc
|
|
|
|
;;; Control Character Glyphs
|
|
;;;
|
|
;;; Glyphs $00-$1F are useful symbols; some overlap with MouseText
|
|
;;; (called out as MT:X in the table below)
|
|
;;;
|
|
;;; $00 = space $10 = TM left
|
|
;;; $01 = folder left (MT:X) $11 = TM right
|
|
;;; $02 = folder right (MT:Y) $12 = pound
|
|
;;; $03 = hourglass (MT:C) $13 = pi
|
|
;;; $04 = insertion pt $14 = divide
|
|
;;; $05 = pointer (MT:B) $15 = rarrow (MT:U)
|
|
;;; $06 = vbar (MT:_) $16 = tri
|
|
;;; $07 = hbar (MT:S) $17 = open circ
|
|
;;; $08 = larrow $18 = close (MT:])
|
|
;;; $09 = left box $19 = gray odd (MT:W)
|
|
;;; $0A = darrow (MT:J) $1A = gray even (MT:V)
|
|
;;; $0B = uarrow (MT:K) $1B = solid circ
|
|
;;; $0C = right box $1C = inv check (MT:E)
|
|
;;; $0D = return (MT:M) $1D = check (MT:D)
|
|
;;; $0E = (C) $1E = solid apple (MT:@)
|
|
;;; $0F = (R) $1F = open apple (MT:A)
|
|
|
|
GLYPH_LARROW := $09
|
|
GLYPH_RARROW := $15
|
|
GLYPH_UARROW := $0B
|
|
GLYPH_DARROW := $0A
|
|
GLYPH_RETURN := $0D
|
|
GLYPH_OAPPLE := $1F
|
|
GLYPH_CAPPLE := $1E
|
|
|
|
;;; Menu (by default) uses:
|
|
;;; Solid Mod $1E
|
|
;;; Open Mod $1F
|
|
;;; Check $1D
|
|
;;; Control $01
|
|
;;; Inactive $7F
|