a2d/desktop
2018-01-20 09:47:56 -08:00
..
infos DeskTop: split invoker routine out 2018-01-07 11:45:52 -08:00
orig DeskTop: split invoker routine out 2018-01-07 11:45:52 -08:00
res Clean up directories, start work mapping DESKTOP2 2017-09-16 17:11:50 -07:00
.gitignore Add .gitignore for DeskTop dir 2017-09-18 20:31:16 -07:00
a2d.s pull font defn into separate file 2018-01-20 09:47:56 -08:00
asm.cfg DeskTop: Consolidate aux/main code into single source, split out GUI library 2018-01-04 14:18:24 -08:00
desktop.s more procs, and 65816 quit code 2018-01-19 21:57:58 -08:00
font.inc pull font defn into separate file 2018-01-20 09:47:56 -08:00
go.sh DeskTop: Initial disassembly of segments 5/6 2018-01-05 09:42:32 -08:00
invoker.s pull font defn into separate file 2018-01-20 09:47:56 -08:00
loader.s DeskTop: Remove some placeholder symbols 2018-01-07 21:53:39 -08:00
Makefile DeskTop: split invoker routine out 2018-01-07 11:45:52 -08:00
README.md DeskTop: dynamic code segment loader 2018-01-19 09:00:24 -08:00

DeskTop diassembly notes

DESKTOP.SYSTEM

A short (8k) loader program. This is likely responsible for copying the rest to a RAM card (if available), then invoking the main app.

DESKTOP2.$F1

This is large - 111k. It includes a loader, the DeskTop app (with both main memory and aux memory segments, filling everything from $4000 to $FFFF (except for I/O space and ProDOS), and still having more code - probably the disk copy code which is swapped in dynamically.

The file is broken down into multiple segments:

  • segment 0: load - A$2000-$257F, L$0580, mark $000000 (Loader)
  • segment 1: aux1 - A$4000-$BFFF, L$8000, mark $000580 (A2D, part of DeskTop)
  • segment 2: aux2 - A$D000-$ECFF, L$1D00, mark $008580 (More of DeskTop)
  • segment 3: aux3 - A$FB00-$FFFF, L$0500, mark $00A280 (More of DeskTop)
  • segment 4: main - A$4000-$BEFF, L$7F00, mark $00A780 (More of DeskTop)
  • segment 5: main - A$0800-$0FFF, L$0800, mark $012680 (Initializer)
  • segment 6: main - A$0290-$03EF, L$0160, mark $012E80 (Invoker)
  • segments dynamically loaded for these actions:
    • disk copy - A$0800, L$0200, mark $012FE0
    • format/erase - A$0800, L$1400, mark $0160E0
    • selector - A$9000, L$1000, mark $0174E0
    • helpers - A$5000, L$2000, mark $0184E0 (used by selector, copy, delete)
    • file copy - A$7000, L$0800, mark $01A4E0
    • file delete - A$7000, L$0800, mark $01ACE0
    • selector - A$7000, L$0800, mark $01B4E0
  • (EOF is $01BCE0)

Structure

Loader

loader.s

Invoked at $2000; patches the ProDOS QUIT routine (at LC2 $D100) then invokes it. That gets copied to $1000-$11FF and run by ProDOS.

The invoked code stashes the current prefix and re-patches ProDOS with itself. It then (in a convoluted way) loads in the second $200 bytes of DESKTOP2 at $2000 and invokes that.

This code then loads the rest of the file as a sequence of segments, moving them to the appropriate destination in aux/banked/main memory.

There's fourth chunk of code, which expects to live at $280 so it can't co-exist with the Invoker; it may be temporary code, as there is no sign that it is ever moved into place. It's also unclear how it would be hooked in. The routine detects OA+CA+P and prints the DHR screen to an ImageWriter II printer attached to Slot 1. (This may have been used to produce screenshots during development for manuals.)

Invoker

invoker.s

Loaded at $290-$03EF, this small routine is used to invoke a target, e.g. a double-clicked file. System files are loaded/run at $2000, binary files at the location specified by their aux type, and BASIC files loaded by searching for BASIC.SYSTEM and running it with the pathname passed at $2006 (see ProDOS TLM).

Initializer

desktop.s

Loaded at $800-$FFF, this does one-time initialization of the DeskTop. It is later overwritten when any desk accessories are run.

GUI Library "A2D"

a2d.s

AUX $4000-$8DFF is the GUI library used for the DeskTop application and (presumably) for disk copy and Selector apps (TBD).

Entry point is $4000 with a ProDOS MLI-style calling convention

  • Font is at $8800

  • Part of $8500-$87FF looks like part of "DeskTop" (see below), dealing with online volumes.

"DeskTop" Application

desktop.s

DeskTop application code is in the lower 48k of both Aux and Main:

  • Aux $8E00-$BFFF - sitting above the GUI library
  • Main $4000-$BEFF

...and in the Aux language card area (accessible from both aux and main code) are relays, buffers and resources:

  • Aux $D000-$ECFF - relays and other aux/main helpers, resources (menus, strings, window)
  • Aux $ED00-$FAFF - hole for data buffer
  • Aux $FB00-$FFFF - more resources (file types, icons)

($C000-$CFFF is reserved for I/O, and main $BF page and language card is ProDOS)

       Main               Aux                 ROM
$FFFF +-------------+    +-------------+    +-------------+
      | ProDOS      |    | DeskTop     |    | Monitor     |
$F800 |             |    | Resources/  |    +-------------+
      |             |    | Buffers     |    | Applesoft   |
      |             |    |             |    |             |
      |             |    |             |    |             |
      |             |    |             |    |             |
$D000 +-------------+    +-------------+    +-------------+    +-------------+
                                                               | I/O         |
                                                               |             |
$C000 +-------------+    +-------------+                       +-------------+
      | ProDOS GP   |    | DeskTop     |
$BF00 +-------------+    | App Code    |
      | DeskTop     |    |             |
      | App Code    |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
$8E00 |             |    +-------------+
      |             |    | A2D GUI     |
      |             |    | Library     |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
$4000 +-------------+    +-------------+
      | Graphics    |    | Graphics    |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
      |             |    |             |
$2000 +-------------+    +-------------+
      | Initializer |    | Desk Acc    |
      | & Desk Acc  |    |             |
      |             |    |             |
      |             |    |             |
$0800 +-------------+    +-------------+
      | Text        |    | Text        |
      |             |    |             |
$0400 +-------------+    +-------------+
      | Invoker     |    |             |
$0300 +-------------+    +-------------+
      | Input Buf   |    | Input Buf   |
$0200 +-------------+    +-------------+
      | Stack       |    | Stack       |
$0100 +-------------+    +-------------+
      | Zero Page   |    | Zero Page   |
$0000 +-------------+    +-------------+