{
 "schema": 1,
 "platform": "c64",
 "game": "paradroid",
 "build": "Hewson's original UK disk of 1985, a GCR image of the protected original from the C64 Preservation Project; booted through the collection's patched copy, whose game data is byte for byte the same (orientation.md)",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    57053,
    57343,
    "I/O and colour RAM"
   ],
   [
    18432,
    19455,
    "screen RAM"
   ],
   [
    513,
    516,
    "not used: nothing in the game reads or writes them"
   ],
   [
    549,
    559,
    "not used: past the colour scheme's 16 entries"
   ],
   [
    586,
    678,
    "not used: the KERNAL's work area, which the game, with the ROMs switched out, leaves alone"
   ],
   [
    724,
    815,
    "not used: what the boot file and the KERNAL left there, below the robot slots"
   ],
   [
    1896,
    2047,
    "padding after the sound driver: the RAM's stripes of $00 and $FF, which nothing reads"
   ],
   [
    3851,
    4095,
    "padding after the memory editor, the same stripes, which nothing reads"
   ],
   [
    16116,
    16383,
    "padding after the code, the same stripes, which nothing reads"
   ],
   [
    16384,
    18431,
    "runtime: cleared by the restart ($10FF), then the blank character set of the band above the deck (irq_top), shape 0, the blank sprite irq_bottom shows over the status line, and the dictionary index at $4400-$45FF (index_words); as loaded, the staged copy of $D000-$D7FF that the start-up copies there"
   ],
   [
    18432,
    19455,
    "runtime: the screen and its sprite pointers; as loaded, the staged copy of $D800-$DBFF that the start-up copies there"
   ],
   [
    20736,
    21503,
    "runtime: the work shapes $44-$4F, the mirrored halves of a console picture (mirror_shape) and the eight numbered droid shapes (sprite_number); as loaded, the staged copy of $DC00-$DEFF"
   ],
   [
    28316,
    28351,
    "padding after the version mark, the same stripes, which nothing reads"
   ],
   [
    28650,
    28671,
    "padding after the interrupts, the same stripes, which nothing reads"
   ],
   [
    32768,
    49151,
    "runtime: the deck map, 64 rows of 256 cells, built for each deck (build_deck) and holding the title pages on the title; as loaded, the staged copies of $E000-$FFFF, $C000-$CFFF and $0500-$07FF"
   ],
   [
    51981,
    52223,
    "padding after the waypoint lists, the same stripes, which nothing reads"
   ],
   [
    57053,
    57343,
    "padding after the title pages, and below it what the load left there before the start-up's copies, which nothing reads"
   ],
   [
    59229,
    59391,
    "padding after the high score strings, the same stripes, which nothing reads"
   ],
   [
    65528,
    65535,
    "runtime: two spare bytes, then the NMI, reset and interrupt vectors, which cold_start and the interrupts write"
   ]
  ],
  "extra": [
   [
    30720,
    32767,
    "character set"
   ],
   [
    28672,
    30719,
    "the text font"
   ]
  ],
  "edges": [
   0,
   256,
   512,
   1024,
   2048,
   4096,
   16384,
   32768,
   40960,
   49152,
   53248,
   57344
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 1023,
   "type": "Undefined"
  },
  {
   "start": 1024,
   "end": 1279,
   "type": "Byte"
  },
  {
   "start": 1280,
   "end": 1895,
   "type": "Code"
  },
  {
   "start": 1896,
   "end": 2047,
   "type": "Undefined"
  },
  {
   "start": 2048,
   "end": 2303,
   "type": "Byte"
  },
  {
   "start": 2304,
   "end": 2397,
   "type": "Code"
  },
  {
   "start": 2398,
   "end": 2405,
   "type": "Byte"
  },
  {
   "start": 2406,
   "end": 3022,
   "type": "Code"
  },
  {
   "start": 3023,
   "end": 3048,
   "type": "Byte"
  },
  {
   "start": 3049,
   "end": 3322,
   "type": "Code"
  },
  {
   "start": 3323,
   "end": 3426,
   "type": "Byte"
  },
  {
   "start": 3427,
   "end": 3850,
   "type": "Code"
  },
  {
   "start": 3851,
   "end": 4095,
   "type": "Undefined"
  },
  {
   "start": 4096,
   "end": 7435,
   "type": "Code"
  },
  {
   "start": 7436,
   "end": 7436,
   "type": "Undefined"
  },
  {
   "start": 7437,
   "end": 16115,
   "type": "Code"
  },
  {
   "start": 16116,
   "end": 19455,
   "type": "Undefined"
  },
  {
   "start": 19456,
   "end": 20735,
   "type": "Byte"
  },
  {
   "start": 20736,
   "end": 21503,
   "type": "Undefined"
  },
  {
   "start": 21504,
   "end": 28315,
   "type": "Byte"
  },
  {
   "start": 28316,
   "end": 28351,
   "type": "Undefined"
  },
  {
   "start": 28352,
   "end": 28649,
   "type": "Code"
  },
  {
   "start": 28650,
   "end": 28671,
   "type": "Undefined"
  },
  {
   "start": 28672,
   "end": 32767,
   "type": "Byte"
  },
  {
   "start": 32768,
   "end": 49151,
   "type": "Undefined"
  },
  {
   "start": 49152,
   "end": 51980,
   "type": "Byte"
  },
  {
   "start": 51981,
   "end": 52223,
   "type": "Undefined"
  },
  {
   "start": 52224,
   "end": 57052,
   "type": "Byte"
  },
  {
   "start": 57053,
   "end": 57359,
   "type": "Undefined"
  },
  {
   "start": 57360,
   "end": 58886,
   "type": "Code"
  },
  {
   "start": 58887,
   "end": 59228,
   "type": "Byte"
  },
  {
   "start": 59229,
   "end": 59391,
   "type": "Undefined"
  },
  {
   "start": 59392,
   "end": 65527,
   "type": "Byte"
  },
  {
   "start": 65528,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "cpu_ddr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2,
   "name": "spr_bit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "spr_notbit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4,
   "name": "spr_n",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5,
   "name": "spr_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6,
   "name": "spr_xhi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7,
   "name": "spr_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8,
   "name": "spr_on",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9,
   "name": "spr_tall",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10,
   "name": "spr_behind",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11,
   "name": "spr_multi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12,
   "name": "spr_wide",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13,
   "name": "spr_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14,
   "name": "spr_shape",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15,
   "name": "tmp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16,
   "name": "slot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17,
   "name": "slot2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18,
   "name": "cell_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19,
   "name": "cell_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20,
   "name": "ptr2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21,
   "name": "ptr2_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22,
   "name": "stick_v",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23,
   "name": "stick_h",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 24,
   "name": "fire_up",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 25,
   "name": "keys",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26,
   "name": "ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27,
   "name": "ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28,
   "name": "scr",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 29,
   "name": "scr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30,
   "name": "col",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 31,
   "name": "col_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32,
   "name": "count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33,
   "name": "score",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 34,
   "name": "score_2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35,
   "name": "score_3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36,
   "name": "score_4",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37,
   "name": "done",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38,
   "name": "owed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39,
   "name": "owed_back",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40,
   "name": "speed_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41,
   "name": "speed_x_px",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42,
   "name": "speed_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "speed_y_px",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44,
   "name": "bg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45,
   "name": "scroll_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46,
   "name": "scroll_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47,
   "name": "scroll_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48,
   "name": "scroll_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49,
   "name": "view_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50,
   "name": "view_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51,
   "name": "deck",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52,
   "name": "slow_pos",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53,
   "name": "push_pos",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 54,
   "name": "top_speed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55,
   "name": "slow_neg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 56,
   "name": "push_neg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57,
   "name": "top_speed_neg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "fire_mode",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59,
   "name": "doors_open",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60,
   "name": "console_st",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "win_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62,
   "name": "win_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 63,
   "name": "win_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64,
   "name": "win_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 65,
   "name": "pos_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 66,
   "name": "pos_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 67,
   "name": "pos_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 68,
   "name": "pos_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 69,
   "name": "margin",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 70,
   "name": "first_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 71,
   "name": "volume",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 72,
   "name": "fine_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 73,
   "name": "fine_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 74,
   "name": "passes",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 75,
   "name": "frame_flag",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 76,
   "name": "player_cell",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 77,
   "name": "player_cell_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 78,
   "name": "under_player",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 79,
   "name": "hits",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 80,
   "name": "bw",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 81,
   "name": "shot_dx",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 82,
   "name": "shot_dy",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 83,
   "name": "title_fire",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 84,
   "name": "weapon",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 85,
   "name": "wait",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 86,
   "name": "rle_cell",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 87,
   "name": "rle_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 88,
   "name": "type",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 89,
   "name": "slots",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 90,
   "name": "border",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 91,
   "name": "step",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 92,
   "name": "record",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 93,
   "name": "record_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 94,
   "name": "aim_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 95,
   "name": "aim_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 96,
   "name": "aim_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 97,
   "name": "aim_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 98,
   "name": "lift_no",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 99,
   "name": "shaft",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 100,
   "name": "alert_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 101,
   "name": "last_deck",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 102,
   "name": "max_energy",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 103,
   "name": "ship_no",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 104,
   "name": "robots_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 105,
   "name": "kind1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 106,
   "name": "kind2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 107,
   "name": "target",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 108,
   "name": "last_bounce",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 109,
   "name": "way_neg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 111,
   "name": "way_pos",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 112,
   "name": "ways_x",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 115,
   "name": "ways_y",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 118,
   "name": "probe",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 119,
   "name": "probe_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 120,
   "name": "n",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 121,
   "name": "kill_pts",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 122,
   "name": "step_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 123,
   "name": "step_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 124,
   "name": "rows_held",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 125,
   "name": "end_char",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 126,
   "name": "chosen",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 127,
   "name": "side_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 128,
   "name": "pulsers",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 129,
   "name": "cursor_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 130,
   "name": "pulser_char",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 131,
   "name": "target_class",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 132,
   "name": "pulsers2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 133,
   "name": "cursor_row2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 134,
   "name": "cursor_col2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 135,
   "name": "other_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 136,
   "name": "host_class",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 137,
   "name": "passes_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 138,
   "name": "countdown_bcd",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 139,
   "name": "leader",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 140,
   "name": "wire_char",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 141,
   "name": "wire_char2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 142,
   "name": "cursor_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 143,
   "name": "aim_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 144,
   "name": "sound_mode",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 145,
   "name": "sfx_req",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 146,
   "name": "sfx_req2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 147,
   "name": "transfer_wait",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 148,
   "name": "disrupt",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 149,
   "name": "bg_saved",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 150,
   "name": "unused_96",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 151,
   "name": "chan_ofs",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 152,
   "name": "voice_ofs",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 153,
   "name": "chan",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 154,
   "name": "effect_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 155,
   "name": "effect_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 156,
   "name": "title_frames",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 157,
   "name": "playing",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 158,
   "name": "playing2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 159,
   "name": "control",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 160,
   "name": "control2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 162,
   "name": "gate",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 163,
   "name": "gate2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 175,
   "name": "robot_flash",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 176,
   "name": "dst",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 177,
   "name": "dst_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 178,
   "name": "src",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 179,
   "name": "src_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 180,
   "name": "print_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 181,
   "name": "print_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 182,
   "name": "print_char",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 183,
   "name": "mon_addr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 184,
   "name": "mon_addr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 185,
   "name": "mon_byte",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 186,
   "name": "rec_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 187,
   "name": "mon_mode",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 188,
   "name": "mon_digit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 189,
   "name": "mon_key",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 190,
   "name": "word_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 191,
   "name": "word_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 192,
   "name": "ch0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 193,
   "name": "ch0_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 194,
   "name": "ch0_slide",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 195,
   "name": "ch0_slide_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 196,
   "name": "ch0_slide_count",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 197,
   "name": "ch0_slide_reload",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 198,
   "name": "ch0_periods",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 199,
   "name": "ch0_pulse",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 200,
   "name": "ch0_pulse_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 201,
   "name": "ch0_pulse_slide",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 202,
   "name": "ch0_pulse_slide_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 203,
   "name": "ch0_mode",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 204,
   "name": "ch0_restart",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 205,
   "name": "ch0_restart_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 206,
   "name": "ch0_next",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 208,
   "name": "ch1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 212,
   "name": "ch1_slide_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 512,
   "name": "motor_copy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 517,
   "name": "spr_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 525,
   "name": "shape_shadow",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 526,
   "name": "shape_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 527,
   "name": "shape_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 528,
   "name": "shape_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 529,
   "name": "shape_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 530,
   "name": "shape_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 531,
   "name": "shape_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 532,
   "name": "shape_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 533,
   "name": "scheme",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 536,
   "name": "scheme_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 537,
   "name": "scheme_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 539,
   "name": "scheme_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 548,
   "name": "scheme_15",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 560,
   "name": "door_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 568,
   "name": "door_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 576,
   "name": "door_states",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 584,
   "name": "cap_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 585,
   "name": "cap_saved",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 679,
   "name": "saved_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 687,
   "name": "saved_xy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 695,
   "name": "saved_xy2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 703,
   "name": "saved_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 710,
   "name": "saved_spr_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 718,
   "name": "saved_xhi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 719,
   "name": "saved_enable",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 720,
   "name": "saved_tall",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 721,
   "name": "saved_multi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 722,
   "name": "saved_wide",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 723,
   "name": "saved_bg",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 816,
   "name": "slot_place",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 832,
   "name": "slot_type",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 848,
   "name": "slot_sprite",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 849,
   "name": "slot1_sprite",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 864,
   "name": "slot_energy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 865,
   "name": "slot1_energy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 880,
   "name": "slot_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 896,
   "name": "slot_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 912,
   "name": "slot_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 928,
   "name": "slot_fire",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 944,
   "name": "slot_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 960,
   "name": "slot_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 976,
   "name": "slot_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 992,
   "name": "slot_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1008,
   "name": "slot_pause",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1024,
   "name": "population",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1053,
   "name": "pop_999",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1280,
   "name": "sound_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1291,
   "name": "b_050B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1298,
   "name": "b_0512",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1307,
   "name": "b_051B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1318,
   "name": "b_0526",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1350,
   "name": "b_0546",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1354,
   "name": "title_sound",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1377,
   "name": "b_0561",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1386,
   "name": "b_056A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1393,
   "name": "b_0571",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1429,
   "name": "b_0595",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1440,
   "name": "play_channels",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1444,
   "name": "b_05A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1468,
   "name": "b_05BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1478,
   "name": "b_05C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1485,
   "name": "b_05CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1493,
   "name": "j_05D5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 1504,
   "name": "b_05E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1591,
   "name": "b_0637",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1637,
   "name": "b_0665",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1649,
   "name": "j_0671",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 1666,
   "name": "j_0682",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 1673,
   "name": "b_0689",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1690,
   "name": "r_069A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 1691,
   "name": "start_effect",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1751,
   "name": "b_06D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1753,
   "name": "b_06D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1770,
   "name": "silence_voice",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1783,
   "name": "set_voice",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1793,
   "name": "b_0701",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1844,
   "name": "voice_offset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1846,
   "name": "b_0736",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1855,
   "name": "sound_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1857,
   "name": "b_0741",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1868,
   "name": "sound_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1870,
   "name": "b_074E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2048,
   "name": "colour_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2070,
   "name": "colour_alert",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2304,
   "name": "init_vars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2330,
   "name": "read_stick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2357,
   "name": "b_0935",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2364,
   "name": "b_093C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2368,
   "name": "j_0940",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2381,
   "name": "b_094D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2388,
   "name": "b_0954",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2392,
   "name": "j_0958",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2398,
   "name": "bit_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2406,
   "name": "sprite_get",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2449,
   "name": "b_0991",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2487,
   "name": "sprite_put",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2538,
   "name": "b_09EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2543,
   "name": "b_09EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2557,
   "name": "b_09FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2562,
   "name": "b_0A02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2576,
   "name": "b_0A10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2581,
   "name": "b_0A15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2595,
   "name": "b_0A23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2600,
   "name": "b_0A28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2614,
   "name": "b_0A36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2619,
   "name": "b_0A3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2633,
   "name": "b_0A49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2638,
   "name": "b_0A4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2642,
   "name": "fill_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2644,
   "name": "j_0A54",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2646,
   "name": "b_0A56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2667,
   "name": "b_0A6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2672,
   "name": "b_0A70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2684,
   "name": "r_0A7C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 2685,
   "name": "score_tick",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 2700,
   "name": "b_0A8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2710,
   "name": "b_0A96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2734,
   "name": "b_0AAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2750,
   "name": "b_0ABE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2776,
   "name": "r_0AD8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 2777,
   "name": "print_score",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 2794,
   "name": "b_0AEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2804,
   "name": "j_0AF4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2823,
   "name": "j_0B07",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2837,
   "name": "b_0B15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2844,
   "name": "b_0B1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2851,
   "name": "read_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2905,
   "name": "b_0B59",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2914,
   "name": "delay",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 2926,
   "name": "cassette_motor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2941,
   "name": "r_0B7D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 2942,
   "name": "b_0B7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2954,
   "name": "cheese",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2971,
   "name": "b_0B9B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3022,
   "name": "r_0BCE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 3023,
   "name": "str_pause",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3036,
   "name": "str_cheese",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3049,
   "name": "print_word",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3075,
   "name": "j_0C03",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3079,
   "name": "j_0C07",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3088,
   "name": "b_0C10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3095,
   "name": "b_0C17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3118,
   "name": "print_string",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3138,
   "name": "b_0C42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3145,
   "name": "j_0C49",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3149,
   "name": "j_0C4D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3166,
   "name": "r_0C5E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 3167,
   "name": "put_char",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3226,
   "name": "r_0C9A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 3227,
   "name": "copy_pages",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 3240,
   "name": "copy_bytes",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3252,
   "name": "volume_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3279,
   "name": "b_0CCF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3287,
   "name": "b_0CD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3300,
   "name": "b_0CE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3302,
   "name": "j_0CE6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3322,
   "name": "r_0CFA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 3323,
   "name": "row_addr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3348,
   "name": "row_addr_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3373,
   "name": "str_abmon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3397,
   "name": "abmon_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3403,
   "name": "abmon_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3409,
   "name": "abmon_codes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3415,
   "name": "str_volume",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3424,
   "name": "volume_digits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3425,
   "name": "volume_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3427,
   "name": "abmon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3449,
   "name": "b_0D79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3453,
   "name": "b_0D7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3467,
   "name": "r_0D8B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 3468,
   "name": "abmon_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3493,
   "name": "b_0DA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3505,
   "name": "b_0DB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3513,
   "name": "b_0DB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3525,
   "name": "b_0DC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3533,
   "name": "b_0DCD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3546,
   "name": "b_0DDA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3559,
   "name": "b_0DE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3569,
   "name": "b_0DF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3579,
   "name": "b_0DFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3592,
   "name": "b_0E08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3602,
   "name": "b_0E12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3612,
   "name": "j_0E1C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3644,
   "name": "b_0E3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3656,
   "name": "b_0E48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3666,
   "name": "b_0E52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3676,
   "name": "b_0E5C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3702,
   "name": "b_0E76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3714,
   "name": "b_0E82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3724,
   "name": "b_0E8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3731,
   "name": "j_0E93",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3737,
   "name": "j_0E99",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3817,
   "name": "b_0EE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3825,
   "name": "abmon_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3827,
   "name": "b_0EF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3845,
   "name": "b_0F05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4096,
   "name": "entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4103,
   "name": "b_1007",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4216,
   "name": "cold_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4307,
   "name": "restart",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4354,
   "name": "b_1102",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4476,
   "name": "b_117C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4484,
   "name": "attract_page",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4528,
   "name": "b_11B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4544,
   "name": "b_11C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4550,
   "name": "b_11C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4566,
   "name": "b_11D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4576,
   "name": "b_11E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4589,
   "name": "b_11ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4593,
   "name": "b_11F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4628,
   "name": "b_1214",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4651,
   "name": "b_122B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4671,
   "name": "b_123F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4674,
   "name": "game_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4722,
   "name": "ship_cleared",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4726,
   "name": "b_1276",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4745,
   "name": "ship_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4875,
   "name": "b_130B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4918,
   "name": "b_1336",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4943,
   "name": "next_deck",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4950,
   "name": "b_1356",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4953,
   "name": "deck_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4985,
   "name": "b_1379",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5010,
   "name": "b_1392",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5013,
   "name": "b_1395",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5082,
   "name": "main_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 5107,
   "name": "b_13F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5114,
   "name": "b_13FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5143,
   "name": "b_1417",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5166,
   "name": "j_142E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5191,
   "name": "b_1447",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5197,
   "name": "out_of_energy",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 5205,
   "name": "b_1455",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5240,
   "name": "b_1478",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5288,
   "name": "b_14A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5295,
   "name": "b_14AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5310,
   "name": "b_14BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5334,
   "name": "console_mode",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5363,
   "name": "b_14F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5398,
   "name": "b_1516",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5404,
   "name": "j_151C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5407,
   "name": "b_151F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5426,
   "name": "back_to_play",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5445,
   "name": "frame_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5456,
   "name": "b_1550",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5476,
   "name": "b_1564",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5486,
   "name": "b_156E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5491,
   "name": "burnt_out",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5534,
   "name": "b_159E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5552,
   "name": "j_15B0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5579,
   "name": "b_15CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5608,
   "name": "build_ship",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5611,
   "name": "b_15EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5627,
   "name": "b_15FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5641,
   "name": "b_1609",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5653,
   "name": "b_1615",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5666,
   "name": "b_1622",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5693,
   "name": "b_163D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5698,
   "name": "b_1642",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5709,
   "name": "b_164D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5716,
   "name": "b_1654",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5732,
   "name": "load_deck",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5746,
   "name": "b_1672",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5764,
   "name": "b_1684",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5858,
   "name": "b_16E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5869,
   "name": "b_16ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5876,
   "name": "b_16F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5888,
   "name": "deck_points",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5901,
   "name": "find_point",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5915,
   "name": "b_171B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5940,
   "name": "b_1734",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5951,
   "name": "b_173F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5955,
   "name": "b_1743",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5963,
   "name": "update_droids",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5970,
   "name": "b_1752",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5974,
   "name": "b_1756",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6007,
   "name": "kind_call",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6008,
   "name": "kind_call_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6095,
   "name": "b_17CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6096,
   "name": "b_17D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6108,
   "name": "b_17DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6131,
   "name": "r_17F3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6132,
   "name": "explosion_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6165,
   "name": "b_1815",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6179,
   "name": "b_1823",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6196,
   "name": "b_1834",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6213,
   "name": "b_1845",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6217,
   "name": "shot_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6260,
   "name": "b_1874",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6273,
   "name": "b_1881",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6295,
   "name": "b_1897",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6300,
   "name": "b_189C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6314,
   "name": "b_18AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6327,
   "name": "b_18B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6346,
   "name": "droid_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6362,
   "name": "b_18DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6375,
   "name": "b_18E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6394,
   "name": "b_18FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6438,
   "name": "b_1926",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6443,
   "name": "j_192B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6463,
   "name": "b_193F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6468,
   "name": "j_1944",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6482,
   "name": "b_1952",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6516,
   "name": "j_1974",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6535,
   "name": "move_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6545,
   "name": "b_1991",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6550,
   "name": "b_1996",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6566,
   "name": "b_19A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6579,
   "name": "j_19B3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6594,
   "name": "b_19C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6599,
   "name": "b_19C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6615,
   "name": "b_19D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6628,
   "name": "j_19E4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6634,
   "name": "collisions",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6642,
   "name": "b_19F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6659,
   "name": "b_1A03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6660,
   "name": "b_1A04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6718,
   "name": "b_1A3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6723,
   "name": "player_touch",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 6727,
   "name": "b_1A47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6759,
   "name": "b_1A67",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6762,
   "name": "ram",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 6771,
   "name": "b_1A73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6800,
   "name": "b_1A90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6814,
   "name": "b_1A9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6853,
   "name": "b_1AC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6869,
   "name": "b_1AD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6879,
   "name": "b_1ADF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6896,
   "name": "r_1AF0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6897,
   "name": "shot_hits_player",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 6902,
   "name": "b_1AF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6927,
   "name": "b_1B0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6938,
   "name": "blast_hits_player",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 6948,
   "name": "b_1B24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6956,
   "name": "rule",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6972,
   "name": "shot_done",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 6979,
   "name": "b_1B43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6993,
   "name": "pair_rules",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 7016,
   "name": "b_1B68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7059,
   "name": "r_1B93",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7060,
   "name": "b_1B94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7066,
   "name": "b_1B9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7072,
   "name": "b_1BA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7078,
   "name": "b_1BA6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7084,
   "name": "b_1BAC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7090,
   "name": "b_1BB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7093,
   "name": "b_1BB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7097,
   "name": "b_1BB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7101,
   "name": "b_1BBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7105,
   "name": "b_1BC1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7109,
   "name": "b_1BC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7113,
   "name": "r_1BC9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7114,
   "name": "explode",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 7126,
   "name": "b_1BD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7158,
   "name": "damage",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7183,
   "name": "player_shot_damage",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7224,
   "name": "r_1C38",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7225,
   "name": "pause16",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7233,
   "name": "destroyed",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 7243,
   "name": "b_1C4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7263,
   "name": "bounce",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7297,
   "name": "r_1C81",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7298,
   "name": "remove",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7309,
   "name": "find_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7314,
   "name": "b_1C92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7322,
   "name": "b_1C9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7325,
   "name": "unpopulate",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7340,
   "name": "r_1CAC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7341,
   "name": "choose_way",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7349,
   "name": "b_1CB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7378,
   "name": "b_1CD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7382,
   "name": "b_1CD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7396,
   "name": "b_1CE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7411,
   "name": "b_1CF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7435,
   "name": "r_1D0B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7437,
   "name": "step_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7450,
   "name": "b_1D1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7451,
   "name": "b_1D1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7466,
   "name": "b_1D2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7467,
   "name": "b_1D2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7472,
   "name": "cell_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7483,
   "name": "b_1D3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7489,
   "name": "b_1D41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7493,
   "name": "regen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7503,
   "name": "b_1D4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7526,
   "name": "r_1D66",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7527,
   "name": "b_1D67",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7537,
   "name": "b_1D71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7541,
   "name": "pulser",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7575,
   "name": "b_1D97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7581,
   "name": "b_1D9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7585,
   "name": "b_1DA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7644,
   "name": "b_1DDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7663,
   "name": "r_1DEF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7664,
   "name": "erase_cursor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7666,
   "name": "wire_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7675,
   "name": "cursor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7686,
   "name": "flow_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7774,
   "name": "flow_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7862,
   "name": "flow_column",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7868,
   "name": "b_1EBC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7912,
   "name": "b_1EE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7924,
   "name": "b_1EF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7935,
   "name": "b_1EFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7940,
   "name": "b_1F04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7948,
   "name": "b_1F0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7983,
   "name": "b_1F2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7998,
   "name": "b_1F3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8007,
   "name": "b_1F47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8042,
   "name": "b_1F6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8058,
   "name": "b_1F7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8065,
   "name": "j_1F81",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8103,
   "name": "b_1FA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8135,
   "name": "power_next",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8140,
   "name": "paint_dead",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8148,
   "name": "paint_segment",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8155,
   "name": "j_1FDB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8159,
   "name": "b_1FDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8188,
   "name": "b_1FFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8190,
   "name": "b_1FFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8197,
   "name": "board_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8215,
   "name": "swap_turn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8279,
   "name": "count_middle",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8300,
   "name": "b_206C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8323,
   "name": "b_2083",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8335,
   "name": "b_208F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8346,
   "name": "b_209A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8373,
   "name": "b_20B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8380,
   "name": "b_20BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8384,
   "name": "set_leader",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8410,
   "name": "countdown",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8456,
   "name": "r_2108",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8457,
   "name": "opponent",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8477,
   "name": "b_211D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8482,
   "name": "b_2122",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8491,
   "name": "b_212B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8499,
   "name": "b_2133",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8504,
   "name": "b_2138",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8524,
   "name": "b_214C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8527,
   "name": "b_214F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8531,
   "name": "round_end",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8549,
   "name": "r_2165",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8550,
   "name": "transfer_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 8552,
   "name": "b_2168",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8597,
   "name": "b_2195",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8647,
   "name": "b_21C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8655,
   "name": "transfer_result",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8700,
   "name": "b_21FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8748,
   "name": "b_222C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8766,
   "name": "host_stats",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8800,
   "name": "transfer_done",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8809,
   "name": "b_2269",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8861,
   "name": "transfer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8892,
   "name": "b_22BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8930,
   "name": "b_22E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8958,
   "name": "b_22FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8962,
   "name": "cell_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8976,
   "name": "cell_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8989,
   "name": "r_231D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8990,
   "name": "disruptor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9003,
   "name": "b_232B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9014,
   "name": "b_2336",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9027,
   "name": "b_2343",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9045,
   "name": "b_2355",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9075,
   "name": "b_2373",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9083,
   "name": "b_237B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9114,
   "name": "b_239A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9118,
   "name": "b_239E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9142,
   "name": "b_23B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9152,
   "name": "b_23C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9216,
   "name": "j_2400",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9221,
   "name": "j_2405",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9228,
   "name": "mark_deck",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9269,
   "name": "b_2435",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9271,
   "name": "b_2437",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9290,
   "name": "b_244A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9296,
   "name": "j_2450",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9312,
   "name": "b_2460",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9328,
   "name": "b_2470",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9333,
   "name": "b_2475",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9338,
   "name": "b_247A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9340,
   "name": "b_247C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9372,
   "name": "b_249C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9380,
   "name": "b_24A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9384,
   "name": "b_24A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9390,
   "name": "line_of_sight",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9404,
   "name": "b_24BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9433,
   "name": "b_24D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9451,
   "name": "r_24EB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9452,
   "name": "b_24EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9490,
   "name": "b_2512",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9509,
   "name": "b_2525",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9534,
   "name": "b_253E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9552,
   "name": "b_2550",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9595,
   "name": "b_257B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9612,
   "name": "r_258C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9613,
   "name": "sight_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9645,
   "name": "b_25AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9647,
   "name": "sight_scale",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9663,
   "name": "j_25BF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9681,
   "name": "b_25D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9702,
   "name": "b_25E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9733,
   "name": "animate_tiles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9735,
   "name": "b_2607",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9751,
   "name": "j_2617",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9762,
   "name": "b_2622",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9767,
   "name": "b_2627",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9838,
   "name": "b_266E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9841,
   "name": "tile_dst",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9842,
   "name": "tile_dst_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9850,
   "name": "lift",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9883,
   "name": "b_269B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9893,
   "name": "b_26A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9972,
   "name": "b_26F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9989,
   "name": "lift_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10030,
   "name": "r_272E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10031,
   "name": "find_lift",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10045,
   "name": "b_273D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10066,
   "name": "b_2752",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10071,
   "name": "b_2757",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10113,
   "name": "b_2781",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10128,
   "name": "b_2790",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10133,
   "name": "colour_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10145,
   "name": "title_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10163,
   "name": "b_27B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10174,
   "name": "b_27BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10180,
   "name": "b_27C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10203,
   "name": "b_27DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10213,
   "name": "deck_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10235,
   "name": "b_27FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10244,
   "name": "b_2804",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10248,
   "name": "b_2808",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10259,
   "name": "b_2813",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10263,
   "name": "b_2817",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10265,
   "name": "b_2819",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10308,
   "name": "colour_status",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10327,
   "name": "b_2857",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10340,
   "name": "wait_release",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10344,
   "name": "b_2868",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10361,
   "name": "title_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10412,
   "name": "b_28AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10414,
   "name": "b_28AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10443,
   "name": "b_28CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10487,
   "name": "b_28F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10503,
   "name": "b_2907",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10507,
   "name": "b_290B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10529,
   "name": "r_2921",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10530,
   "name": "irq_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10557,
   "name": "screen_line",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10581,
   "name": "console_page",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10650,
   "name": "droid_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10689,
   "name": "walls",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10691,
   "name": "b_29C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10715,
   "name": "b_29DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10720,
   "name": "b_29E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10748,
   "name": "b_29FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10753,
   "name": "b_2A01",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10777,
   "name": "b_2A19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10782,
   "name": "b_2A1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10810,
   "name": "b_2A3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10814,
   "name": "probe_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10833,
   "name": "probe_addr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10834,
   "name": "probe_addr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10858,
   "name": "b_2A6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10861,
   "name": "door_touch",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10878,
   "name": "b_2A7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10892,
   "name": "b_2A8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10895,
   "name": "b_2A8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10928,
   "name": "b_2AB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10930,
   "name": "j_2AB2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 10933,
   "name": "r_2AB5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10934,
   "name": "b_2AB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10985,
   "name": "b_2AE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11016,
   "name": "doors_close",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11023,
   "name": "b_2B0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11027,
   "name": "j_2B13",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11087,
   "name": "b_2B4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11129,
   "name": "b_2B79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11153,
   "name": "b_2B91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11154,
   "name": "b_2B92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11170,
   "name": "j_2BA2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11173,
   "name": "clear_window",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11210,
   "name": "index_words",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11222,
   "name": "j_2BD6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11237,
   "name": "b_2BE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11240,
   "name": "b_2BE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11261,
   "name": "b_2BFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11268,
   "name": "console",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11298,
   "name": "console_jump",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11299,
   "name": "console_jump_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11300,
   "name": "r_2C24",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11301,
   "name": "b_2C25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11332,
   "name": "b_2C44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11346,
   "name": "b_2C52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11363,
   "name": "b_2C63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11377,
   "name": "j_2C71",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11402,
   "name": "b_2C8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11413,
   "name": "b_2C95",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11450,
   "name": "r_2CBA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11451,
   "name": "to_menu",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 11462,
   "name": "enquiry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11502,
   "name": "enquiry_jump",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11503,
   "name": "enquiry_jump_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11504,
   "name": "enquiry_pick",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 11534,
   "name": "b_2D0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11543,
   "name": "b_2D17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11548,
   "name": "b_2D1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11571,
   "name": "r_2D33",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11572,
   "name": "enquiry_page",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11584,
   "name": "enquiry_more",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11626,
   "name": "enquiry_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11641,
   "name": "enquiry_clear",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11666,
   "name": "describe",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11681,
   "name": "field_no",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11720,
   "name": "b_2DC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11725,
   "name": "b_2DCD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11743,
   "name": "b_2DDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11752,
   "name": "j_2DE8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11753,
   "name": "notes_at",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11769,
   "name": "j_2DF9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11781,
   "name": "b_2E05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11793,
   "name": "b_2E11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11806,
   "name": "word",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11837,
   "name": "capital",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11879,
   "name": "b_2E67",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11883,
   "name": "b_2E6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11887,
   "name": "b_2E6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11889,
   "name": "b_2E71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11893,
   "name": "b_2E75",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11899,
   "name": "floor_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11926,
   "name": "b_2E96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11951,
   "name": "b_2EAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11956,
   "name": "b_2EB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11959,
   "name": "b_2EB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11968,
   "name": "b_2EC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11971,
   "name": "save_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11973,
   "name": "b_2EC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12048,
   "name": "restore_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12050,
   "name": "b_2F12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12119,
   "name": "field_value",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12148,
   "name": "b_2F74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12160,
   "name": "j_2F80",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12169,
   "name": "b_2F89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12191,
   "name": "b_2F9F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12200,
   "name": "b_2FA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12224,
   "name": "b_2FC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12243,
   "name": "j_2FD3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12256,
   "name": "b_2FE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12265,
   "name": "j_2FE9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12278,
   "name": "b_2FF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12289,
   "name": "deck_plan",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12296,
   "name": "b_3008",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12370,
   "name": "b_3052",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12385,
   "name": "r_3061",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12386,
   "name": "side_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12393,
   "name": "draw_side",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12448,
   "name": "draw_plan",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12466,
   "name": "b_30B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12482,
   "name": "b_30C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12492,
   "name": "b_30CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12516,
   "name": "b_30E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12519,
   "name": "b_30E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12534,
   "name": "j_30F6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12559,
   "name": "b_310F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12560,
   "name": "plan_add",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12561,
   "name": "b_3111",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12568,
   "name": "plan_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12569,
   "name": "plan_colour_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12570,
   "name": "b_311A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12594,
   "name": "b_3132",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12610,
   "name": "b_3142",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12616,
   "name": "r_3148",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12617,
   "name": "unit_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12680,
   "name": "b_3188",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12687,
   "name": "b_318F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12691,
   "name": "pad_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12707,
   "name": "r_31A3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12708,
   "name": "text_page",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12729,
   "name": "fire_state",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12746,
   "name": "r_31CA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12747,
   "name": "b_31CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12751,
   "name": "b_31CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12768,
   "name": "b_31E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12778,
   "name": "b_31EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12798,
   "name": "b_31FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12803,
   "name": "b_3203",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12830,
   "name": "on_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12870,
   "name": "b_3246",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12876,
   "name": "b_324C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12916,
   "name": "b_3274",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12922,
   "name": "b_327A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12924,
   "name": "b_327C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12926,
   "name": "to_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12949,
   "name": "free_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12968,
   "name": "find_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12970,
   "name": "b_32AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12978,
   "name": "b_32B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12983,
   "name": "colour_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13004,
   "name": "r_32CC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13005,
   "name": "b_32CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13017,
   "name": "player_shot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13031,
   "name": "b_32E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13061,
   "name": "b_3305",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13069,
   "name": "j_330D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13079,
   "name": "b_3317",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13095,
   "name": "b_3327",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13103,
   "name": "j_332F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13133,
   "name": "b_334D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13135,
   "name": "b_334F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13146,
   "name": "b_335A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13158,
   "name": "j_3366",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13166,
   "name": "r_336E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13167,
   "name": "wall_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13179,
   "name": "b_337B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13185,
   "name": "b_3381",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13211,
   "name": "b_339B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13220,
   "name": "b_33A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13235,
   "name": "b_33B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13236,
   "name": "r_33B4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13237,
   "name": "shoot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13264,
   "name": "b_33D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13301,
   "name": "b_33F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13302,
   "name": "b_33F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13303,
   "name": "b_33F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13304,
   "name": "b_33F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13353,
   "name": "b_3429",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13361,
   "name": "j_3431",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13376,
   "name": "r_3440",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13377,
   "name": "j_3441",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13392,
   "name": "robot_shoot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13468,
   "name": "b_349C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13472,
   "name": "r_34A0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13473,
   "name": "b_34A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13492,
   "name": "r_34B4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13493,
   "name": "aim_shot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13616,
   "name": "b_3530",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13628,
   "name": "b_353C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13640,
   "name": "b_3548",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13650,
   "name": "b_3552",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13656,
   "name": "b_3558",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13657,
   "name": "b_3559",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13658,
   "name": "b_355A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13687,
   "name": "recolour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13689,
   "name": "b_3579",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13712,
   "name": "build_deck",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13736,
   "name": "b_35A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13760,
   "name": "b_35C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13763,
   "name": "b_35C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13778,
   "name": "j_35D2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13804,
   "name": "b_35EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13806,
   "name": "b_35EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13836,
   "name": "b_360C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13864,
   "name": "r_3628",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13865,
   "name": "droid_picture",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13883,
   "name": "b_363B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13908,
   "name": "j_3654",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13919,
   "name": "picture_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13946,
   "name": "b_367A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13974,
   "name": "b_3696",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13995,
   "name": "b_36AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14009,
   "name": "briefing",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14043,
   "name": "print_words",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14063,
   "name": "b_36EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14089,
   "name": "b_3709",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14102,
   "name": "j_3716",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14108,
   "name": "b_371C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14115,
   "name": "b_3723",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14131,
   "name": "r_3733",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14132,
   "name": "transfer_intro",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14206,
   "name": "clear_index",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14209,
   "name": "b_3781",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14219,
   "name": "game_over",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14233,
   "name": "b_3799",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14261,
   "name": "b_37B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14273,
   "name": "j_37C1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14300,
   "name": "b_37DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14342,
   "name": "b_3806",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14358,
   "name": "ship_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14389,
   "name": "mobile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14390,
   "name": "transfer_hold",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14409,
   "name": "scroll",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14428,
   "name": "b_385C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14440,
   "name": "b_3868",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14456,
   "name": "j_3878",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14475,
   "name": "b_388B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14485,
   "name": "b_3895",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14501,
   "name": "rotate_chars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14503,
   "name": "b_38A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14504,
   "name": "rot_ldy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14505,
   "name": "rot_ldy_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14507,
   "name": "rot_lda3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14508,
   "name": "rot_lda3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14510,
   "name": "rot_sta4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14511,
   "name": "rot_sta4_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14513,
   "name": "rot_lda2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14514,
   "name": "rot_lda2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14516,
   "name": "rot_sta3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14517,
   "name": "rot_sta3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14519,
   "name": "rot_lda1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14520,
   "name": "rot_lda1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14522,
   "name": "rot_sta2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14523,
   "name": "rot_sta2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14526,
   "name": "rot_sta1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14527,
   "name": "rot_sta1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14532,
   "name": "animate_chars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14541,
   "name": "b_38CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14547,
   "name": "next_anim",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14617,
   "name": "r_3919",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14618,
   "name": "draw_deck",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14692,
   "name": "j_3964",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14696,
   "name": "b_3968",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14720,
   "name": "b_3980",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14729,
   "name": "b_3989",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14742,
   "name": "b_3996",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14744,
   "name": "b_3998",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14745,
   "name": "deck_read",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14746,
   "name": "deck_read_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14754,
   "name": "deck_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14755,
   "name": "deck_colour_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14776,
   "name": "b_39B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14791,
   "name": "j_39C7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14793,
   "name": "b_39C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14815,
   "name": "b_39DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14818,
   "name": "b_39E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14841,
   "name": "move_player",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14863,
   "name": "b_3A0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14879,
   "name": "b_3A1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14905,
   "name": "b_3A39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14923,
   "name": "b_3A4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14929,
   "name": "j_3A51",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14951,
   "name": "b_3A67",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14967,
   "name": "b_3A77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14993,
   "name": "b_3A91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15011,
   "name": "b_3AA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15017,
   "name": "j_3AA9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15036,
   "name": "b_3ABC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15048,
   "name": "b_3AC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15067,
   "name": "b_3ADB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15079,
   "name": "r_3AE7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15080,
   "name": "mirror_shape",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15137,
   "name": "b_3B21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15141,
   "name": "b_3B25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15151,
   "name": "b_3B2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15161,
   "name": "mirror_dst1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15162,
   "name": "mirror_dst1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15180,
   "name": "b_3B4C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15184,
   "name": "b_3B50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15194,
   "name": "b_3B5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15209,
   "name": "mirror_dst2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15210,
   "name": "mirror_dst2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15228,
   "name": "pause",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15251,
   "name": "b_3B93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15267,
   "name": "b_3BA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15335,
   "name": "r_3BE7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15336,
   "name": "b_3BE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15339,
   "name": "b_3BEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15380,
   "name": "print_page",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15398,
   "name": "j_3C26",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15419,
   "name": "b_3C3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15434,
   "name": "r_3C4A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15435,
   "name": "b_3C4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15438,
   "name": "big_char",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15478,
   "name": "r_3C76",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15479,
   "name": "sprite_number",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15520,
   "name": "b_3CA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15521,
   "name": "digit_class",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15522,
   "name": "digit_class_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15560,
   "name": "b_3CC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15561,
   "name": "digit_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15562,
   "name": "digit_tens_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15598,
   "name": "b_3CEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15599,
   "name": "digit_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15600,
   "name": "digit_units_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15611,
   "name": "energy_symbols",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15616,
   "name": "j_3D00",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15626,
   "name": "b_3D0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15636,
   "name": "b_3D14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15644,
   "name": "b_3D1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15673,
   "name": "b_3D39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15838,
   "name": "j_3DDE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15845,
   "name": "b_3DE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15867,
   "name": "j_3DFB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15877,
   "name": "r_3E05",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15878,
   "name": "b_3E06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15884,
   "name": "b_3E0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15905,
   "name": "b_3E21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15921,
   "name": "r_3E31",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15922,
   "name": "alert",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15936,
   "name": "b_3E40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15957,
   "name": "b_3E55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15983,
   "name": "b_3E6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15986,
   "name": "r_3E72",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15987,
   "name": "b_3E73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16006,
   "name": "show_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16008,
   "name": "b_3E88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16020,
   "name": "score_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16067,
   "name": "r_3EC3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16068,
   "name": "score_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "f_4000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17408,
   "name": "f_4400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17664,
   "name": "f_4500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18688,
   "name": "f_4900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18752,
   "name": "f_4940",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19448,
   "name": "a_4BF8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19449,
   "name": "a_4BF9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19450,
   "name": "a_4BFA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19451,
   "name": "a_4BFB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19452,
   "name": "a_4BFC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19453,
   "name": "a_4BFD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19454,
   "name": "a_4BFE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19455,
   "name": "a_4BFF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19456,
   "name": "shape_laser_across",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19520,
   "name": "shape_laser_diag",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19584,
   "name": "shape_blast_small",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20032,
   "name": "shape_blast_big",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21504,
   "name": "shape_menu_enquiry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21568,
   "name": "shape_pictures_51",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21760,
   "name": "shape_laser_vert",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21824,
   "name": "shape_laser_diag2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21888,
   "name": "shape_pictures_56",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22912,
   "name": "shape_pictures_66",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23936,
   "name": "shape_pictures_76",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24960,
   "name": "shape_pictures_86",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25664,
   "name": "shape_shots",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26688,
   "name": "shape_menu_plan",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26752,
   "name": "shape_menu_side",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26816,
   "name": "shape_a3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26880,
   "name": "str_bar_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26903,
   "name": "str_bar_mid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26935,
   "name": "str_bar_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26940,
   "name": "str_bar_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26964,
   "name": "accel_slow_pos",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26965,
   "name": "accel_push_pos",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26966,
   "name": "accel_slow_neg",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26967,
   "name": "accel_push_neg",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26968,
   "name": "str_game_on",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26980,
   "name": "str_continue",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26993,
   "name": "str_game_over",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27005,
   "name": "str_transfer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27018,
   "name": "str_mobile",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27031,
   "name": "str_weapon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27044,
   "name": "str_deadlock",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27057,
   "name": "str_colour",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27070,
   "name": "str_finish",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27080,
   "name": "finish_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27081,
   "name": "finish_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27083,
   "name": "str_captured",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27096,
   "name": "str_blk_whte",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27108,
   "name": "str_console",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27121,
   "name": "str_burnt_out",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27133,
   "name": "str_complete",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27145,
   "name": "str_rejected",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27158,
   "name": "str_briefing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27171,
   "name": "spr_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27182,
   "name": "spr_player",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27193,
   "name": "spr_blast",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27204,
   "name": "colour_schemes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27300,
   "name": "digit_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27310,
   "name": "digit_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27406,
   "name": "sym_r2a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27414,
   "name": "sym_r2b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27422,
   "name": "sym_r3a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27430,
   "name": "sym_r3b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27438,
   "name": "sym_r3c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27446,
   "name": "sym_r4a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27454,
   "name": "sym_r4b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27462,
   "name": "sym_r4c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27470,
   "name": "sym_r0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27472,
   "name": "sym_r1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27474,
   "name": "probe_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27486,
   "name": "probe_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27498,
   "name": "picture_spr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27508,
   "name": "str_on",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27511,
   "name": "str_unit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27524,
   "name": "unit_class",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27525,
   "name": "unit_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27526,
   "name": "unit_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27529,
   "name": "menu_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27549,
   "name": "menu_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27617,
   "name": "console_items",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27625,
   "name": "enquiry_steps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27635,
   "name": "kind_routines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27643,
   "name": "str_lift",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27656,
   "name": "str_more",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27669,
   "name": "word_height",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27671,
   "name": "height_d1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27672,
   "name": "height_d2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27676,
   "name": "word_weight",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27677,
   "name": "weight_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27678,
   "name": "weight_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27683,
   "name": "rotate_list",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27688,
   "name": "tiles_play",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27756,
   "name": "tiles_transfer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27824,
   "name": "shaft_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27832,
   "name": "shaft_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27840,
   "name": "shaft_len",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27848,
   "name": "lift_decks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27879,
   "name": "lift_shafts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27911,
   "name": "lift_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27942,
   "name": "lift_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27973,
   "name": "alert_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27977,
   "name": "flash_mobile",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27985,
   "name": "flash_hot",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27993,
   "name": "picture_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28003,
   "name": "picture_mc2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28013,
   "name": "collide_rules",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28045,
   "name": "way_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28047,
   "name": "way_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28055,
   "name": "top_speeds",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28064,
   "name": "words_briefing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28077,
   "name": "ship_word",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28085,
   "name": "words_host",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28095,
   "name": "words_target",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28110,
   "name": "words_clear",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28126,
   "name": "burn_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28136,
   "name": "alert_points",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28140,
   "name": "kill_points",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28150,
   "name": "ram_points",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28160,
   "name": "str_access",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28178,
   "name": "str_ship",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28188,
   "name": "str_deck",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28198,
   "name": "str_alert",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28208,
   "name": "str_transmission",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28223,
   "name": "str_terminated",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28236,
   "name": "shot_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28248,
   "name": "shot_speeds",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28251,
   "name": "immune_types",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28256,
   "name": "hum_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28272,
   "name": "hum_period",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28288,
   "name": "hum_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28304,
   "name": "str_version",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28352,
   "name": "irq_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28420,
   "name": "irq_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28424,
   "name": "b_6F08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28444,
   "name": "deck_mode",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28485,
   "name": "b_6F45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28487,
   "name": "b_6F47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28492,
   "name": "irq_deck",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28495,
   "name": "deck_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28496,
   "name": "b_6F50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28501,
   "name": "deck_charset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28608,
   "name": "irq_collide",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28672,
   "name": "font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29696,
   "name": "font_lower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30720,
   "name": "deck_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30728,
   "name": "deck_char_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30736,
   "name": "deck_char_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30744,
   "name": "deck_char_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31744,
   "name": "deck_chars_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "f_8000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49152,
   "name": "dictionary",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50176,
   "name": "dictionary_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50704,
   "name": "effects",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51077,
   "name": "hum_bytes",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51078,
   "name": "hum_period_byte",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51079,
   "name": "hum_length_byte",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51200,
   "name": "way_counts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51216,
   "name": "way_lists",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51232,
   "name": "way_lists_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51248,
   "name": "deck_lowest",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51264,
   "name": "waypoints",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52224,
   "name": "title_picture",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53248,
   "name": "title_pages",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53913,
   "name": "page_story",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 54851,
   "name": "page_device",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55378,
   "name": "title_d852",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55418,
   "name": "title_d87a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55616,
   "name": "title_d940",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55797,
   "name": "page_console",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 56697,
   "name": "page_scores",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 56721,
   "name": "line_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 56764,
   "name": "line_worst",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 56970,
   "name": "page_credits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57360,
   "name": "transfer_board",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57363,
   "name": "high_scores",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57366,
   "name": "transfer_setup",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 57387,
   "name": "b_E02B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57403,
   "name": "b_E03B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57405,
   "name": "b_E03D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57424,
   "name": "b_E050",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57428,
   "name": "b_E054",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57430,
   "name": "b_E056",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57449,
   "name": "b_E069",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57455,
   "name": "b_E06F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57498,
   "name": "b_E09A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57528,
   "name": "b_E0B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57547,
   "name": "b_E0CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57590,
   "name": "b_E0F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57631,
   "name": "b_E11F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57770,
   "name": "b_E1AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57789,
   "name": "b_E1BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57795,
   "name": "b_E1C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57801,
   "name": "b_E1C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57815,
   "name": "b_E1D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57890,
   "name": "place_piece",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57909,
   "name": "b_E235",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57924,
   "name": "piece_jump",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57925,
   "name": "piece_jump_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57926,
   "name": "b_E246",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57941,
   "name": "b_E255",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57944,
   "name": "r_E258",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 57945,
   "name": "auto_pulser",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57954,
   "name": "terminator",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57973,
   "name": "r_E275",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 57974,
   "name": "changer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57991,
   "name": "splitter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58047,
   "name": "b_E2BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58074,
   "name": "b_E2DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58088,
   "name": "b_E2E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58091,
   "name": "b_E2EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58100,
   "name": "joiner",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58144,
   "name": "b_E320",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58171,
   "name": "b_E33B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58185,
   "name": "b_E349",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58188,
   "name": "b_E34C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58197,
   "name": "cut_inner",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58211,
   "name": "b_E363",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58234,
   "name": "b_E37A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58245,
   "name": "cut_outer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58259,
   "name": "b_E393",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58310,
   "name": "step_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58324,
   "name": "step_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58338,
   "name": "colour_ptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58350,
   "name": "draw_bar",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58387,
   "name": "swap_sides",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58451,
   "name": "colour_top",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58477,
   "name": "show_pulsers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58501,
   "name": "b_E485",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58505,
   "name": "j_E489",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58531,
   "name": "b_E4A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58543,
   "name": "b_E4AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58545,
   "name": "b_E4B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58559,
   "name": "b_E4BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58561,
   "name": "b_E4C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58574,
   "name": "b_E4CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58579,
   "name": "row_ptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58597,
   "name": "score_check",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 58607,
   "name": "b_E4EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58621,
   "name": "b_E4FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58623,
   "name": "b_E4FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58633,
   "name": "b_E509",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58639,
   "name": "b_E50F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58641,
   "name": "b_E511",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58678,
   "name": "initials",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58694,
   "name": "b_E546",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58696,
   "name": "b_E548",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58733,
   "name": "enter_letter",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58737,
   "name": "b_E571",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58757,
   "name": "b_E585",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58759,
   "name": "b_E587",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58786,
   "name": "b_E5A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58796,
   "name": "score_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58809,
   "name": "b_E5B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58826,
   "name": "b_E5CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58836,
   "name": "j_E5D4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58851,
   "name": "j_E5E3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58869,
   "name": "b_E5F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58878,
   "name": "b_E5FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58887,
   "name": "piece_routines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58888,
   "name": "piece_routines_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58899,
   "name": "board_top",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59019,
   "name": "board_wires",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59059,
   "name": "board_foot",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59099,
   "name": "str_colour_q",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59109,
   "name": "colour_q_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59110,
   "name": "colour_q_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59112,
   "name": "str_initials",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59114,
   "name": "initial_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59115,
   "name": "initial_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59116,
   "name": "initial_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59121,
   "name": "initial_letters",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59148,
   "name": "top_score",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59152,
   "name": "worst_score",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59156,
   "name": "str_initials_q",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59187,
   "name": "str_great",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59202,
   "name": "str_lowest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59392,
   "name": "map_blocks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59904,
   "name": "type_class",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59936,
   "name": "type_number",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59968,
   "name": "type_speed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60000,
   "name": "type_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60032,
   "name": "type_weapon",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60064,
   "name": "instruments",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60160,
   "name": "droid_001",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60224,
   "name": "droid_123",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60288,
   "name": "droid_139",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60352,
   "name": "droid_247",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60416,
   "name": "droid_249",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60480,
   "name": "droid_296",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60544,
   "name": "droid_302",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60608,
   "name": "droid_329",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60672,
   "name": "droid_420",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60736,
   "name": "droid_476",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60800,
   "name": "droid_493",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60864,
   "name": "droid_516",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60928,
   "name": "droid_571",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60992,
   "name": "droid_598",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61056,
   "name": "droid_614",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61120,
   "name": "droid_615",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61184,
   "name": "droid_629",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61248,
   "name": "droid_711",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61312,
   "name": "droid_742",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61376,
   "name": "droid_751",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61440,
   "name": "droid_821",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61504,
   "name": "droid_834",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61568,
   "name": "droid_883",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61632,
   "name": "droid_999",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61696,
   "name": "plan_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61712,
   "name": "plan_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61728,
   "name": "side_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61744,
   "name": "side_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61760,
   "name": "side_depth",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61776,
   "name": "side_width",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61792,
   "name": "deck_schemes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61808,
   "name": "deck_places",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61824,
   "name": "side_picture",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62025,
   "name": "plan_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62089,
   "name": "plan_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62245,
   "name": "plan_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62300,
   "name": "plan_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62572,
   "name": "plan_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62811,
   "name": "plan_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63067,
   "name": "plan_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63352,
   "name": "plan_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63559,
   "name": "plan_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63737,
   "name": "plan_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63862,
   "name": "plan_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64152,
   "name": "plan_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64485,
   "name": "plan_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64800,
   "name": "plan_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64943,
   "name": "plan_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65227,
   "name": "plan_15",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 0,
   "type": "line",
   "text": "The 6510's data direction register: the game never writes it and leaves the KERNAL's setting."
  },
  {
   "address": 1,
   "type": "line",
   "text": "The 6510's processor port: $25, RAM with the I/O at $D000, in play; $24, all RAM, while the start-up copies and while the title pages and score lines under the I/O are read or written. cassette_motor keeps its motor bit."
  },
  {
   "address": 2,
   "type": "line",
   "text": "sprite_get and sprite_put: the bit of sprite $04 in the VIC's sprite registers, from bit_masks."
  },
  {
   "address": 3,
   "type": "line",
   "text": "sprite_get and sprite_put: the complement of spr_bit, to clear the sprite's bit."
  },
  {
   "address": 4,
   "type": "line",
   "text": "The sprite work copy, $04-$0E, that sprite_get fills from the VIC and sprite_put writes back: $04 is the hardware sprite, 0-7 (0 the player's shot, 7 the player)."
  },
  {
   "address": 5,
   "type": "line",
   "text": "Sprite work copy: X position, low eight bits."
  },
  {
   "address": 6,
   "type": "line",
   "text": "Sprite work copy: the ninth bit of X ($D010), 0 or $FF as sprite_get reads it, bit 0 as sprite_put writes it."
  },
  {
   "address": 7,
   "type": "line",
   "text": "Sprite work copy: Y position."
  },
  {
   "address": 8,
   "type": "line",
   "text": "Sprite work copy: enable, 0 off and anything else on."
  },
  {
   "address": 9,
   "type": "line",
   "text": "Sprite work copy: expand in Y ($D017)."
  },
  {
   "address": 10,
   "type": "line",
   "text": "Sprite work copy: priority, behind the characters ($D01B)."
  },
  {
   "address": 11,
   "type": "line",
   "text": "Sprite work copy: multicolour ($D01C)."
  },
  {
   "address": 12,
   "type": "line",
   "text": "Sprite work copy: expand in X ($D01D)."
  },
  {
   "address": 13,
   "type": "line",
   "text": "Sprite work copy: colour ($D027 + sprite)."
  },
  {
   "address": 14,
   "type": "line",
   "text": "Sprite work copy: shape number, kept in the shadow table at $020D and copied to the screen's sprite pointers by the interrupt."
  },
  {
   "address": 15,
   "type": "line",
   "text": "A work byte many routines use for a moment: a count, a character or a colour."
  },
  {
   "address": 16,
   "type": "line",
   "text": "The slot being run by update_droids and collisions (the robot that shoots, in robot_shoot); elsewhere a work byte."
  },
  {
   "address": 17,
   "type": "line",
   "text": "A second slot or index: where update_droids packs the slots to, the column flow_column works on, and a work byte elsewhere."
  },
  {
   "address": 18,
   "type": "line",
   "text": "A deck map cell: its column (droid_cell, find_point, line_of_sight), or the low byte of a work pointer."
  },
  {
   "address": 19,
   "type": "line",
   "text": "A deck map cell: its row plus $80, so with cell_col it is the cell's address in the map at $8000 (droid_cell, find_point, line_of_sight); find_point holds the row without the $80 for a few instructions. Elsewhere the high byte of a work pointer through ($12): the population table's row at $1680, a map block at $35E8, a droid record at $3637, and saved screen addresses at $1F5D and $E28F."
  },
  {
   "address": 20,
   "type": "line",
   "text": "A second work pointer, low byte: the cell the line of sight has reached, the door block, the next transfer table."
  },
  {
   "address": 21,
   "type": "line",
   "text": "High byte of ptr2."
  },
  {
   "address": 22,
   "type": "line",
   "text": "The joystick's up and down, from read_stick: $FF up, 1 down, 0 neither. The transfer's robot side writes it for itself (opponent)."
  },
  {
   "address": 23,
   "type": "line",
   "text": "The joystick's left and right: $FF left, 1 right, 0 neither."
  },
  {
   "address": 24,
   "type": "line",
   "text": "The fire button: $10 while it is released, 0 while it is held."
  },
  {
   "address": 25,
   "type": "line",
   "text": "The keys read_keys last read, a bit clear for each held: F7, F1, F3, F5 and SHIFT."
  },
  {
   "address": 26,
   "type": "line",
   "text": "The main work pointer, low byte: a string, a record, a list or a table being read."
  },
  {
   "address": 27,
   "type": "line",
   "text": "High byte of ptr."
  },
  {
   "address": 28,
   "type": "line",
   "text": "The screen pointer, low byte, for the row being printed or drawn (also a work pair and the line of sight's fractions)."
  },
  {
   "address": 29,
   "type": "line",
   "text": "High byte of scr."
  },
  {
   "address": 30,
   "type": "line",
   "text": "The colour RAM pointer, low byte, beside scr ($1D + $90)."
  },
  {
   "address": 31,
   "type": "line",
   "text": "High byte of col."
  },
  {
   "address": 32,
   "type": "line",
   "text": "A work counter for loops: rows, records, waits."
  },
  {
   "address": 33,
   "type": "line",
   "text": "The score, 8 BCD digits in $21-$24, $21 the highest two."
  },
  {
   "address": 34,
   "type": "line",
   "text": "The score's third and fourth digits (BCD)."
  },
  {
   "address": 35,
   "type": "line",
   "text": "The score's fifth and sixth digits (BCD)."
  },
  {
   "address": 36,
   "type": "line",
   "text": "The score's last two digits (BCD)."
  },
  {
   "address": 37,
   "type": "line",
   "text": "Set to end what is running: the deck (a lift taken, or the ship's last robot gone), the transfer game, the title pages being printed."
  },
  {
   "address": 38,
   "type": "line",
   "text": "Points still to be added to the score, one a call of score_tick (score_up)."
  },
  {
   "address": 39,
   "type": "line",
   "text": "Points still to be taken off the score (score_down)."
  },
  {
   "address": 40,
   "type": "line",
   "text": "The player's speed across, a signed 8.8 number in $28/$29, positive to the left; this byte is the fraction."
  },
  {
   "address": 41,
   "type": "line",
   "text": "The whole pixels of the speed across, which scroll takes off the scroll position each pass."
  },
  {
   "address": 42,
   "type": "line",
   "text": "The player's speed up and down, the fraction, positive upwards."
  },
  {
   "address": 43,
   "type": "line",
   "text": "The whole pixels of the speed up and down."
  },
  {
   "address": 44,
   "type": "line",
   "text": "The background colour, which the interrupts put into $D021 (and $D020 on the title)."
  },
  {
   "address": 45,
   "type": "line",
   "text": "The view's position across the deck in pixels, $2D/$2E."
  },
  {
   "address": 46,
   "type": "line",
   "text": "High byte of scroll_x."
  },
  {
   "address": 47,
   "type": "line",
   "text": "The view's position down the deck in pixels, $2F/$30."
  },
  {
   "address": 48,
   "type": "line",
   "text": "High byte of scroll_y."
  },
  {
   "address": 49,
   "type": "line",
   "text": "The deck map column at the view's left edge (draw_deck)."
  },
  {
   "address": 50,
   "type": "line",
   "text": "The deck map row at the view's top (draw_deck)."
  },
  {
   "address": 51,
   "type": "line",
   "text": "The deck the player is on, 0-15."
  },
  {
   "address": 52,
   "type": "line",
   "text": "How a positive speed runs down with the stick centred: added as the low byte of a negative number, $50 making \u2212$B0 a pass (from $6954)."
  },
  {
   "address": 53,
   "type": "line",
   "text": "What a push left or up adds to the speed, $D0 (from $6955)."
  },
  {
   "address": 54,
   "type": "line",
   "text": "The host's top speed in whole pixels a pass, 5 to 7 (from $6D97)."
  },
  {
   "address": 55,
   "type": "line",
   "text": "How a negative speed runs down with the stick centred, $B0 a pass (from $6956)."
  },
  {
   "address": 56,
   "type": "line",
   "text": "What a push right or down adds, as the low byte of a negative number with the carry: $30 makes \u2212$CF (from $6957)."
  },
  {
   "address": 57,
   "type": "line",
   "text": "The negative of top_speed, the limit the other way."
  },
  {
   "address": 58,
   "type": "line",
   "text": "The fire state: $80 \"Mobile\", 1 \"Weapon\", 2 held with the stick centred, 0 \"Transfer\" (fire_state). In the console it marks a held push."
  },
  {
   "address": 59,
   "type": "line",
   "text": "How many doors are in the open-door list at $0230-$0247, 7 at most."
  },
  {
   "address": 60,
   "type": "line",
   "text": "The console's state: bits 6 and 7 the menu still to draw and up, the low bits the item. In play it counts the passes fire is held on a console or lift, from 5."
  },
  {
   "address": 61,
   "type": "line",
   "text": "The window coordinates on_screen works out for the slot being moved, a robot, a robot's shot or an explosion (explosion_step, shot_step, droid_step): X in $3D/$3E."
  },
  {
   "address": 62,
   "type": "line",
   "text": "High byte of win_x."
  },
  {
   "address": 63,
   "type": "line",
   "text": "The window coordinates on_screen works out for the slot being moved, a robot, a robot's shot or an explosion: Y in $3F/$40."
  },
  {
   "address": 64,
   "type": "line",
   "text": "High byte of win_y."
  },
  {
   "address": 65,
   "type": "line",
   "text": "The slot's X position in pixels, $41/$42, after move_slot."
  },
  {
   "address": 66,
   "type": "line",
   "text": "High byte of pos_x."
  },
  {
   "address": 67,
   "type": "line",
   "text": "The slot's Y position in pixels, $43/$44."
  },
  {
   "address": 68,
   "type": "line",
   "text": "High byte of pos_y."
  },
  {
   "address": 69,
   "type": "line",
   "text": "The column a printed word list starts its lines at (print_word, print_words)."
  },
  {
   "address": 70,
   "type": "line",
   "text": "The row a printed word list or droid description starts on."
  },
  {
   "address": 71,
   "type": "line",
   "text": "The title's music volume, 0-15, 5 at the start (volume_keys)."
  },
  {
   "address": 72,
   "type": "line",
   "text": "The horizontal fine scroll, 0-7, that irq_top puts into $D016."
  },
  {
   "address": 73,
   "type": "line",
   "text": "The vertical fine scroll, 0-7, for $D011."
  },
  {
   "address": 74,
   "type": "line",
   "text": "The pass count: one a pass of the main loop, or a step of frame_step, the title and the transfer; the timers of the game test its low bits."
  },
  {
   "address": 75,
   "type": "line",
   "text": "The frame flag: irq_bottom adds one at line 254 and irq_deck clears it at line 118 (irq_screen gives it 0 and $80 in turn), and the main loop waits on it."
  },
  {
   "address": 76,
   "type": "line",
   "text": "The deck map address of the player's cell, $4C/$4D, row 8, column 19 of the view (draw_deck)."
  },
  {
   "address": 77,
   "type": "line",
   "text": "High byte of player_cell: the map row plus $80."
  },
  {
   "address": 78,
   "type": "line",
   "text": "The map cell under the player: an energiser, a lift or a console (floor_cell)."
  },
  {
   "address": 79,
   "type": "line",
   "text": "The sprite-to-sprite collision bits the interrupt read from $D01E (irq_collide), a bit per sprite."
  },
  {
   "address": 80,
   "type": "line",
   "text": "0 for colour, $FF for black and white (f1 and f2, colour_key)."
  },
  {
   "address": 81,
   "type": "line",
   "text": "The player's shot's speed across, signed pixels a pass (shoot)."
  },
  {
   "address": 82,
   "type": "line",
   "text": "The player's shot's speed down."
  },
  {
   "address": 83,
   "type": "line",
   "text": "The fire bit when the title ended: 0 if fire was pressed, which starts a game at once."
  },
  {
   "address": 84,
   "type": "line",
   "text": "The host's weapon from $EA80: 0-2 for its shots' shape and strength, 3 the disruptor."
  },
  {
   "address": 85,
   "type": "line",
   "text": "A counter for wait_release; the pass count kept in the console and the pause."
  },
  {
   "address": 86,
   "type": "line",
   "text": "The cell byte draw_plan and build_deck have just read (bit 7 set for a run); the mirrored shape in droid_picture."
  },
  {
   "address": 87,
   "type": "line",
   "text": "How many times the cell repeats; the step down to the next row of sprites in droid_picture."
  },
  {
   "address": 88,
   "type": "line",
   "text": "The droid type a picture, a number or a description is for (droid_picture, sprite_number, unit_line, field_value); the robot enquiry steps it up and down."
  },
  {
   "address": 89,
   "type": "line",
   "text": "How many slots are in use, the player's slot 0 included."
  },
  {
   "address": 90,
   "type": "line",
   "text": "The border colour; the interrupts write it to $D020."
  },
  {
   "address": 91,
   "type": "line",
   "text": "The step of a console page: the enquiry's (0-4), or 0 until a plan is drawn."
  },
  {
   "address": 92,
   "type": "line",
   "text": "The droid's 64-byte record at $EB00 + 64 \u00d7 type, $5C/$5D (droid_picture)."
  },
  {
   "address": 93,
   "type": "line",
   "text": "High byte of record."
  },
  {
   "address": 94,
   "type": "line",
   "text": "The distance across from the player to a robot, $5E/$5F signed, then the line of sight's step across; robot_shoot aims with it."
  },
  {
   "address": 95,
   "type": "line",
   "text": "High byte of aim_x: its sign, or the whole part of the step."
  },
  {
   "address": 96,
   "type": "line",
   "text": "The distance down from the player to a robot, $60/$61, then the step down."
  },
  {
   "address": 97,
   "type": "line",
   "text": "High byte of aim_y."
  },
  {
   "address": 98,
   "type": "line",
   "text": "The lift entry the player is at, 1-31 (find_lift, lift_move)."
  },
  {
   "address": 99,
   "type": "line",
   "text": "The lift's shaft, from $6CE7: entries of the same shaft are the decks it serves."
  },
  {
   "address": 100,
   "type": "line",
   "text": "The alert count: kills add the type, it falls by one every 16 passes, and its top two bits are the alert colour (alert)."
  },
  {
   "address": 101,
   "type": "line",
   "text": "The deck before the lift, so that deck_start loads only a deck that has changed."
  },
  {
   "address": 102,
   "type": "line",
   "text": "The host's maximum energy, $40 when taken, falling as it burns out (alert)."
  },
  {
   "address": 103,
   "type": "line",
   "text": "The ship number, 1-8: it raises the robots' types (build_ship), the explosions' damage and the robots' rate of fire."
  },
  {
   "address": 104,
   "type": "line",
   "text": "The robots left in the ship, the 999 included; at 0 the ship is cleared."
  },
  {
   "address": 105,
   "type": "line",
   "text": "The kind of the second object of a colliding pair (type / 32)."
  },
  {
   "address": 106,
   "type": "line",
   "text": "The kind of the first object of a colliding pair; the robot's type in a ram."
  },
  {
   "address": 107,
   "type": "line",
   "text": "The slot of the robot touched in transfer mode, 0 when none."
  },
  {
   "address": 108,
   "type": "line",
   "text": "The complement of the type or kind last bounced, so a pair still touching bounces once."
  },
  {
   "address": 109,
   "type": "line",
   "text": "choose_way's speed the negative way; $6E is never written and so stays 0 for no movement."
  },
  {
   "address": 111,
   "type": "line",
   "text": "choose_way's speed the positive way, the robot's speed from $EA40."
  },
  {
   "address": 112,
   "type": "line",
   "text": "choose_way's three choices of speed across, $70-$72."
  },
  {
   "address": 115,
   "type": "line",
   "text": "choose_way's three choices of speed down, $73-$75."
  },
  {
   "address": 118,
   "type": "line",
   "text": "A deck map address, $76/$77: the cell of a robot or a shot, or the one a probe point reads."
  },
  {
   "address": 119,
   "type": "line",
   "text": "High byte of probe."
  },
  {
   "address": 120,
   "type": "line",
   "text": "A work byte: a step counter and a damage amount."
  },
  {
   "address": 121,
   "type": "line",
   "text": "Points for a robot the player's shot destroyed, scored by shot_done."
  },
  {
   "address": 122,
   "type": "line",
   "text": "The transfer board's step towards the middle, $7A/$7B: +1 on the left, \u22121 on the right."
  },
  {
   "address": 123,
   "type": "line",
   "text": "High byte of the step."
  },
  {
   "address": 124,
   "type": "line",
   "text": "How many rows of the middle column are in the side's colour (count_middle)."
  },
  {
   "address": 125,
   "type": "line",
   "text": "The side's terminator character, $F3 or $FD (the other side's pulser)."
  },
  {
   "address": 126,
   "type": "line",
   "text": "The colour the player chose on the transfer board, $FF yellow or $FC purple."
  },
  {
   "address": 127,
   "type": "line",
   "text": "The colour of the side whose variables are in place."
  },
  {
   "address": 128,
   "type": "line",
   "text": "The side's pulsers left."
  },
  {
   "address": 129,
   "type": "line",
   "text": "The side's cursor row, 1-12, 0 when it rests above the board."
  },
  {
   "address": 130,
   "type": "line",
   "text": "The side's pulser character, $FD or $F3."
  },
  {
   "address": 131,
   "type": "line",
   "text": "The class of the robot being taken over."
  },
  {
   "address": 132,
   "type": "line",
   "text": "The other side's pulsers left."
  },
  {
   "address": 133,
   "type": "line",
   "text": "The other side's cursor row."
  },
  {
   "address": 134,
   "type": "line",
   "text": "The other side's cursor column."
  },
  {
   "address": 135,
   "type": "line",
   "text": "The other side's colour."
  },
  {
   "address": 136,
   "type": "line",
   "text": "The class of the player's host in the transfer."
  },
  {
   "address": 137,
   "type": "line",
   "text": "The passes the transfer game runs after the countdown, from $55."
  },
  {
   "address": 138,
   "type": "line",
   "text": "The transfer's countdown, BCD, $99 when it starts."
  },
  {
   "address": 139,
   "type": "line",
   "text": "The colour that leads the middle column, $F8 for a draw."
  },
  {
   "address": 140,
   "type": "line",
   "text": "The side's wire character, $F1 or $F2."
  },
  {
   "address": 141,
   "type": "line",
   "text": "The other side's wire character."
  },
  {
   "address": 142,
   "type": "line",
   "text": "The side's cursor column, 5 or 34."
  },
  {
   "address": 143,
   "type": "line",
   "text": "The row the transfer's robot side is moving to."
  },
  {
   "address": 144,
   "type": "line",
   "text": "The sound driver's mode: 0 off, 1 the title, 2 play; writing $11 or $12 resets the driver first (sound_frame)."
  },
  {
   "address": 145,
   "type": "line",
   "text": "The effect asked of channel 0, voice 1; the driver clears it when it takes it."
  },
  {
   "address": 146,
   "type": "line",
   "text": "The effect asked of channel 1, voice 2."
  },
  {
   "address": 147,
   "type": "line",
   "text": "Passes of fire held with the stick centred before transfer mode, 8 (mobile)."
  },
  {
   "address": 148,
   "type": "line",
   "text": "The disruptor's step, 4 down to 0 (disruptor)."
  },
  {
   "address": 149,
   "type": "line",
   "text": "The background colour kept while the disruptor flashes."
  },
  {
   "address": 150,
   "type": "line",
   "text": "Cleared by sound_reset; nothing reads it."
  },
  {
   "address": 151,
   "type": "line",
   "text": "The sound driver's offset into the channel state, 0 or $10; an index in start_effect and set_voice."
  },
  {
   "address": 152,
   "type": "line",
   "text": "The SID register offset of the voice being played, 0 or 7 (voice_offset)."
  },
  {
   "address": 153,
   "type": "line",
   "text": "The channel being played, 0 or 1."
  },
  {
   "address": 154,
   "type": "line",
   "text": "The effect's 16-byte record, $9A/$9B, at $C610 + 16 \u00d7 (number \u2212 1)."
  },
  {
   "address": 155,
   "type": "line",
   "text": "High byte of effect_ptr."
  },
  {
   "address": 156,
   "type": "line",
   "text": "The title's frame count, which title_sound counts down."
  },
  {
   "address": 157,
   "type": "line",
   "text": "The effect playing on channel 0, 0 for none; bit 7 keeps another from replacing it."
  },
  {
   "address": 158,
   "type": "line",
   "text": "The effect playing on channel 1."
  },
  {
   "address": 159,
   "type": "line",
   "text": "The voice control byte of channel 0's instrument, kept to release the gate."
  },
  {
   "address": 160,
   "type": "line",
   "text": "The voice control byte of channel 1's instrument."
  },
  {
   "address": 162,
   "type": "line",
   "text": "Channel 0's gate timer in frames; at 0 the note is released."
  },
  {
   "address": 163,
   "type": "line",
   "text": "Channel 1's gate timer."
  },
  {
   "address": 175,
   "type": "line",
   "text": "4 when a robot fired the disruptor, 0 when the player did; robot kills by it score nothing."
  },
  {
   "address": 176,
   "type": "line",
   "text": "copy_pages' destination, $B0/$B1; put_char's screen address."
  },
  {
   "address": 177,
   "type": "line",
   "text": "High byte of dst."
  },
  {
   "address": 178,
   "type": "line",
   "text": "copy_pages' source, $B2/$B3."
  },
  {
   "address": 179,
   "type": "line",
   "text": "High byte of src."
  },
  {
   "address": 180,
   "type": "line",
   "text": "The row put_char prints on."
  },
  {
   "address": 181,
   "type": "line",
   "text": "The column put_char prints at, moved on after each character."
  },
  {
   "address": 182,
   "type": "line",
   "text": "The character put_char prints."
  },
  {
   "address": 183,
   "type": "line",
   "text": "The unused memory editor's address, $B7/$B8 (abmon)."
  },
  {
   "address": 184,
   "type": "line",
   "text": "High byte of mon_addr."
  },
  {
   "address": 185,
   "type": "line",
   "text": "The unused memory editor's work byte."
  },
  {
   "address": 186,
   "type": "line",
   "text": "The index into the string or record being printed (print_string, print_page)."
  },
  {
   "address": 187,
   "type": "line",
   "text": "The unused memory editor's mode, from the A and D keys."
  },
  {
   "address": 188,
   "type": "line",
   "text": "Which digit the unused memory editor changes."
  },
  {
   "address": 189,
   "type": "line",
   "text": "The unused memory editor's key."
  },
  {
   "address": 190,
   "type": "line",
   "text": "The word being printed, $BE/$BF (print_word, word)."
  },
  {
   "address": 191,
   "type": "line",
   "text": "High byte of word_ptr."
  },
  {
   "address": 192,
   "type": "line",
   "text": "Channel 0's state, 15 bytes from the effect's record: $C0/$C1 the frequency, $C2/$C3 the pitch slide, $C4 the slide period's count and $C5 its reload, $C6 the count of periods, $C7/$C8 the pulse width, $C9/$CA the pulse slide, $CB the mode (1 restarts, otherwise the slide reverses), $CC/$CD the restart frequency and $CE the follow-on effect. Channel 1's is at $D0-$DE."
  },
  {
   "address": 193,
   "type": "line",
   "text": "Channel 0's frequency, high byte, beside $C0."
  },
  {
   "address": 194,
   "type": "line",
   "text": "Channel 0's pitch slide, low byte, added to the frequency each frame."
  },
  {
   "address": 195,
   "type": "line",
   "text": "Channel 0's pitch slide, high byte, which title_sound moves at random."
  },
  {
   "address": 196,
   "type": "line",
   "text": "Channel 0's slide period count; at 0 the slide reverses or restarts and it reloads from $C5."
  },
  {
   "address": 197,
   "type": "line",
   "text": "Channel 0's slide period reload."
  },
  {
   "address": 198,
   "type": "line",
   "text": "Channel 0's count of slide periods; the effect ends at 0."
  },
  {
   "address": 199,
   "type": "line",
   "text": "Channel 0's pulse width, low byte."
  },
  {
   "address": 200,
   "type": "line",
   "text": "Channel 0's pulse width, high byte."
  },
  {
   "address": 201,
   "type": "line",
   "text": "Channel 0's pulse slide, low byte, added to the pulse width each frame."
  },
  {
   "address": 202,
   "type": "line",
   "text": "Channel 0's pulse slide, high byte."
  },
  {
   "address": 203,
   "type": "line",
   "text": "Channel 0's effect mode: 1 restarts the slide from $CC/$CD at the end of each period, anything else reverses it."
  },
  {
   "address": 204,
   "type": "line",
   "text": "Channel 0's restart frequency, low byte."
  },
  {
   "address": 205,
   "type": "line",
   "text": "Channel 0's restart frequency, high byte."
  },
  {
   "address": 206,
   "type": "line",
   "text": "Channel 0's follow-on effect, requested when the effect ends; $CF is not used."
  },
  {
   "address": 208,
   "type": "line",
   "text": "Channel 1's state, $D0-$DE, laid out as channel 0's at $C0 and reached through it with the offset $97 = $10."
  },
  {
   "address": 212,
   "type": "line",
   "text": "Channel 1's slide period count, which sound_reset clears ($D6, the count of periods, would match channel 0's $C6)."
  },
  {
   "address": 512,
   "type": "line",
   "text": "cassette_motor's copy of the processor port, cleared by init_vars. $0201-$0204 are not used."
  },
  {
   "address": 517,
   "type": "line",
   "text": "The sprite table, one byte for each hardware sprite 0-7: 0 when the sprite is free, otherwise what uses it (find_sprite, free_sprite); byte 0 is the player's shot's and byte 7 the player's."
  },
  {
   "address": 525,
   "type": "line",
   "text": "The shape of each sprite 0-7, kept by sprite_put and copied into the screen's sprite pointers ($4BF8-$4BFF) by irq_deck in the middle of the frame. This byte is sprite 0's."
  },
  {
   "address": 526,
   "type": "line",
   "text": "Sprite 1's shape, for irq_deck."
  },
  {
   "address": 527,
   "type": "line",
   "text": "Sprite 2's shape, for irq_deck."
  },
  {
   "address": 528,
   "type": "line",
   "text": "Sprite 3's shape, for irq_deck."
  },
  {
   "address": 529,
   "type": "line",
   "text": "Sprite 4's shape, for irq_deck."
  },
  {
   "address": 530,
   "type": "line",
   "text": "Sprite 5's shape, for irq_deck."
  },
  {
   "address": 531,
   "type": "line",
   "text": "Sprite 6's shape, for irq_deck."
  },
  {
   "address": 532,
   "type": "line",
   "text": "Sprite 7's shape, the player's, for irq_deck."
  },
  {
   "address": 533,
   "type": "line",
   "text": "The colour scheme in use, 16 entries, one for each group of the colour table (the high four bits of an entry): entries 0-11 copied from colour_schemes, 15 set to $FE by deck_colours, 12-14 left at 0. Entry 0 is also the background."
  },
  {
   "address": 536,
   "type": "line",
   "text": "Entry 3 of the scheme, the border colour."
  },
  {
   "address": 537,
   "type": "line",
   "text": "Entry 4 of the scheme, which title_colours gives every entry for the title pages' text."
  },
  {
   "address": 539,
   "type": "line",
   "text": "Entry 6 of the scheme, the player's colour in transfer mode (energy_symbols)."
  },
  {
   "address": 548,
   "type": "line",
   "text": "Entry 15 of the scheme, $FE, the colour of characters $A5-$A7. $0225-$022F are not used."
  },
  {
   "address": 560,
   "type": "line",
   "text": "The open-door list, up to 7 doors: the deck map row of each door's 4-cell block (door_touch, doors_close)."
  },
  {
   "address": 568,
   "type": "line",
   "text": "The open-door list: each door's block column."
  },
  {
   "address": 576,
   "type": "line",
   "text": "The open-door list: each door's state: $40 or $C0 by which way its cells open (door_touch), bit 6 set when it was touched this pass, the low bits how far it is open."
  },
  {
   "address": 584,
   "type": "line",
   "text": "Set to ask word for a capital letter, cleared by capital."
  },
  {
   "address": 585,
   "type": "line",
   "text": "The byte capital replaced, put back after the word is printed. $024A-$02A6 are not used."
  },
  {
   "address": 679,
   "type": "line",
   "text": "save_sprites' copy of the eight sprite shapes from shape_shadow."
  },
  {
   "address": 687,
   "type": "line",
   "text": "save_sprites' copy of the positions of sprites 0-3 ($D000-$D007)."
  },
  {
   "address": 695,
   "type": "line",
   "text": "save_sprites' copy of the positions of sprites 4-7 ($D008-$D00F)."
  },
  {
   "address": 703,
   "type": "line",
   "text": "save_sprites' copy of the border, the four background colours and the two sprite multicolours ($D020-$D026)."
  },
  {
   "address": 710,
   "type": "line",
   "text": "save_sprites' copy of the eight sprite colours ($D027-$D02E)."
  },
  {
   "address": 718,
   "type": "line",
   "text": "save_sprites' copy of the X high bits ($D010)."
  },
  {
   "address": 719,
   "type": "line",
   "text": "save_sprites' copy of the sprite enable register ($D015)."
  },
  {
   "address": 720,
   "type": "line",
   "text": "save_sprites' copy of the expand-Y register ($D017)."
  },
  {
   "address": 721,
   "type": "line",
   "text": "save_sprites' copy of the multicolour register ($D01C)."
  },
  {
   "address": 722,
   "type": "line",
   "text": "save_sprites' copy of the expand-X register ($D01D)."
  },
  {
   "address": 723,
   "type": "line",
   "text": "save_sprites' copy of the background colour $2C; deck_plan reads it too, before it sets its own."
  },
  {
   "address": 816,
   "type": "line",
   "text": "The slots, 16 of them (0 the player), in 13 arrays of 16 bytes from $0330 to $03FF: this one is each robot's index in the population table, 16 x deck + place, which unpopulate clears when the robot leaves the ship."
  },
  {
   "address": 832,
   "type": "line",
   "text": "Each slot's type: a droid type 0-23, $20-$25 a robot's shot, $40 and up an explosion, $60 the player's shot; bits 5-6 are the kind. Byte 0 is the player's host."
  },
  {
   "address": 848,
   "type": "line",
   "text": "Each slot's hardware sprite, 0 for none. Byte 0, the player's, is 7."
  },
  {
   "address": 849,
   "type": "line",
   "text": "Slot 1's sprite, cleared by ship_start, which also counts two slots ($59 = 2)."
  },
  {
   "address": 864,
   "type": "line",
   "text": "Each slot's energy; byte 0 is the player's, held at the maximum $66."
  },
  {
   "address": 865,
   "type": "line",
   "text": "Slot 1's energy, cleared by ship_start, so the first update_droids drops the slot."
  },
  {
   "address": 880,
   "type": "line",
   "text": "Each slot's speed across, in pixels a pass, positive to the right."
  },
  {
   "address": 896,
   "type": "line",
   "text": "Each slot's speed down, positive downwards."
  },
  {
   "address": 912,
   "type": "line",
   "text": "Each droid's symbol timer, the passes to the next turn of the symbol on its sprite; a shot's shape."
  },
  {
   "address": 928,
   "type": "line",
   "text": "Each robot's fire delay, counted down; byte 0 is the player's."
  },
  {
   "address": 944,
   "type": "line",
   "text": "Each slot's X position in pixels on the deck, low byte."
  },
  {
   "address": 960,
   "type": "line",
   "text": "Each slot's X position, high byte."
  },
  {
   "address": 976,
   "type": "line",
   "text": "Each slot's Y position in pixels, low byte."
  },
  {
   "address": 992,
   "type": "line",
   "text": "Each slot's Y position, high byte."
  },
  {
   "address": 1008,
   "type": "line",
   "text": "Each robot's pause, in passes, while it stands still (pause16, choose_way)."
  },
  {
   "address": 1024,
   "type": "line",
   "text": "The population table: 16 bytes for each of the 16 decks, a robot's type in each of places 1-13 (0 for none), built by build_ship and read by load_deck; a robot that leaves the ship is cleared from it."
  },
  {
   "address": 1053,
   "type": "line",
   "text": "Deck 1, place 13, the 999's place in every ship ($17, set by build_ship)."
  },
  {
   "address": 1280,
   "type": "line",
   "text": "The sound driver, called once a frame by the interrupt ($6FB7) and by the game to change mode. The mode in $90 says what to do: 0 silences the SID; 2 plays the two effect channels; 1 is the title's sound, which also picks effects at random before playing them. Writing $12 or $11 to $90 first resets the driver and sets the mode to 2 or 1 (the low nibble): voices 1 and 2 are cleared, voice 3 is set to noise at the highest frequency with its output off, as the random number source read from $D41B everywhere in the game, and the volume is 15 for $12 or the title's volume in $47 for $11."
  },
  {
   "address": 1354,
   "type": "line",
   "text": "Mode 1, the title's sound, made up as it goes from a frame count in $9C: every 128 frames it asks channel 0 for effect $1D, $1E or $1F, chosen by the noise voice; at two points in every 64 frames ($22 and $30) it asks channel 1 for effect $10; and every 16 frames it moves channel 0's pitch slide ($C3) up or down by a random amount. Then it plays the channels as mode 2 does."
  },
  {
   "address": 1440,
   "type": "line",
   "text": "Mode 2. Takes each channel's request ($91 for channel 0, $92 for channel 1): a request is dropped while the channel plays an effect whose number has bit 7 set, otherwise it replaces what the channel plays and the effect is started (start_effect). Then, for each channel with time left, it adds the pitch slide to the frequency and the pulse slide to the pulse width and writes both to the channel's SID voice (voice 1 for channel 0, voice 2 for channel 1), counts down the gate timer and releases the note when it runs out, and at the end of each slide period either reverses the slide (a siren) or, in mode 1 of the effect, starts again from the effect's restart frequency. When the effect's count of periods runs out, the voice is silenced, the channel freed, and the effect's follow-on effect, if it names one, requested on channel 0."
  },
  {
   "address": 1691,
   "type": "line",
   "text": "Starts effect $9D,y (1 up, bit 7 ignored) on channel Y-1. The effect's 16-byte record is at $C610 + 16 x (number - 1): its first byte picks an instrument from $EAA0 (set_voice), and the other fifteen are copied into the channel's slide state at $C0-$CE (channel 0) or $D0-$DE (channel 1): frequency, pitch slide, slide period and its reload, count of periods, pulse width, pulse slide, mode, restart frequency and follow-on effect."
  },
  {
   "address": 1770,
   "type": "line",
   "text": "Silences the SID voice at offset $98 by setting and clearing its test bit."
  },
  {
   "address": 1783,
   "type": "line",
   "text": "Loads instrument A into the SID voice at offset $98 from the 8-byte record at $EAA0 + 8 x A: the first seven bytes go straight into the voice's registers (frequency, pulse width, control, attack/decay, sustain/release), the eighth is the channel's gate timer in frames ($A2,y, Y the channel $99); the control byte, kept in $9F,y, is written again with the gate bit set to start the note."
  },
  {
   "address": 1844,
   "type": "line",
   "text": "Sets $98 to the SID register offset of voice X (1 gives 0, 2 gives 7, 3 gives 14)."
  },
  {
   "address": 1855,
   "type": "line",
   "text": "Mode 0: writes 0 to every SID register from $D400 to $D418 and restarts the title's frame count $9C."
  },
  {
   "address": 1868,
   "type": "line",
   "text": "Clears voices 1 and 2 ($D400-$D40D) and frees both channels: nothing playing ($9D, $9E), no request ($91, $92), and channel 0's count of periods $C6 at zero. For channel 1 it clears $D4, the slide counter, where channel 0's $C6 would match $D6, the count of periods. It also clears $96, which nothing else uses."
  },
  {
   "address": 2048,
   "type": "line",
   "text": "The colour of each of the 256 characters of the deck's set, which draw_deck and draw_plan put into colour RAM: the high four bits are the character's group, 0-15, and recolour fills the low four from the scheme's entry for the group."
  },
  {
   "address": 2070,
   "type": "line",
   "text": "The colour of character $16, the alert's, which deck_colours and alert set straight from alert_colours after recolour."
  },
  {
   "address": 2304,
   "type": "line",
   "text": "One-time set-up at the cold start (called once, from $108F): the unused memory monitor's state ($BC = $0A, $BB = $80, address $B7/$B8 = $0010), the cassette-motor copy $0200 = 0, and the music volume $47 = 5."
  },
  {
   "address": 2330,
   "type": "line",
   "text": "Reads the joystick in port 2. With no keyboard row selected ($DC00 = $FF) it reads $DC00 and sets $16 to $FF for up, $01 for down, and $17 to $FF for left, $01 for right (0 when centred), and $18 to the fire bit, $10 while fire is released and 0 while it is held. Returns with X holding the raw port bits."
  },
  {
   "address": 2398,
   "type": "line",
   "text": "The eight single-bit masks $01, $02 .. $80, indexed by sprite number or bit number."
  },
  {
   "address": 2406,
   "type": "line",
   "text": "Reads every setting of hardware sprite $04 into the work copy in zero page: its mask ($02) and inverse mask ($03), colour ($0D), shape from the shadow table $020D,y ($0E), X ($05), X high bit as $00/$FF ($06), Y ($07), and the sprite's bit in the enable ($08), expand-Y ($09), priority ($0A), multicolour ($0B) and expand-X ($0C) registers."
  },
  {
   "address": 2487,
   "type": "line",
   "text": "Writes the zero-page work copy back to hardware sprite $04, the reverse of sprite_get: colour, shape into the shadow table $020D,y, X and Y, then sets or clears the sprite's bit in $D010 (from bit 0 of $06), multicolour, expand-Y, expand-X, priority and, last, enable."
  },
  {
   "address": 2642,
   "type": "line",
   "text": "Fills X whole screen rows of 40 bytes with A, starting at the address in $1C/$1D, and leaves $1C/$1D at the start of the row after the last one filled."
  },
  {
   "address": 2685,
   "type": "line",
   "text": "Moves the score one point towards its target, once per call. While points are owed in $26 it takes one; if points are also owed back in $27 the two cancel one for one and it tries again, otherwise it adds 1 to the 8-digit BCD score at $21-$24 (99999999 at most). With nothing owed in $26 but something in $27 it subtracts 1, stopping at zero. Either way it then prints the score. The main loop, delay and a few screens call it, eight call sites in all, so a large award counts up on screen a point at a time."
  },
  {
   "address": 2777,
   "type": "line",
   "text": "Prints the four BCD bytes of the score at $21-$24 as eight digits at row 2, column 30 of the status line, putting a space ($30) for each leading zero until the first digit that is not zero."
  },
  {
   "address": 2851,
   "type": "line",
   "text": "Scans the keys the title and the pause use into $19, a bit clear for a key held: bits 3-6 for F7, F1, F3 and F5 (keyboard row 0) and bit 7 clear for either SHIFT (left from row 1, right from row 6). It sets the port directions first ($DC02 all outputs, $DC03 all inputs), ends with no row selected ($DC00 = $FF) and returns what $DC01 then reads."
  },
  {
   "address": 2914,
   "type": "line",
   "text": "Busy wait: counts X down to zero Y times, then calls score_tick once, and returns with Y = 0."
  },
  {
   "address": 2926,
   "type": "line",
   "text": "Keeps the cassette motor line of the processor port in step with the cassette keys: while no key is down (bit 4 of $01 set) it sets bit 5 (motor off) and keeps $01 in $0200; once a key is down, and only if $0200 is set, it clears bit 5. Called from the pause loop ($2950) and from the interrupt at $6FE5."
  },
  {
   "address": 2954,
   "type": "line",
   "text": "The F7 freeze, called by the pause loop (from $3BBC). F7 without SHIFT prints \"Cheese\" in the status line and holds everything still, re-reading the keys and stick, until fire, RUN/STOP or CLR/HOME is pressed, which returns at once, or F8 (SHIFT and F7), which prints \"Pause\" again and returns to the pause."
  },
  {
   "address": 3023,
   "type": "line",
   "text": "Status line text, row 2, column 2: \"Pause     \", printed when the game is paused and when F8 ends the freeze."
  },
  {
   "address": 3036,
   "type": "line",
   "text": "Status line text, row 2, column 2: \"Cheese    \", printed while F7 holds the picture still."
  },
  {
   "address": 3049,
   "type": "line",
   "text": "Prints one word of the droid descriptions from the dictionary at $C000: X/Y point at the word, whose first byte has bit 7 set. It prints a space first, then measures the word (a wide letter, codes $3A-$59, takes two columns) and, if it would pass column 39, starts a new line two rows down at the column in $45; nothing prints from row 24 on. Callers: $2E30, $2FBC, $2FFD."
  },
  {
   "address": 3118,
   "type": "line",
   "text": "Prints the string record at X/Y (low/high). A record is a row, a column, then characters in the game's alphabet up to a byte with bit 7 set (the first character's bit 7 is ignored). A row of $18 (24) or more prints nothing. 42 instructions call it."
  },
  {
   "address": 3167,
   "type": "line",
   "text": "Puts character $B6 at row $B4, column $B5 through the row address tables at $0CFB (high bytes) and $0D14 (low bytes), and moves the column on. Every character is two rows tall: its code on the row and the code with bit 7 set on the row below. Codes $3A-$59 (the capital letters, and the wide m and w) are also two columns wide: the code plus $20 goes in the next column, with bit 7 set below it, and the column moves on by two."
  },
  {
   "address": 3227,
   "type": "line",
   "text": "Copies X whole pages from the address in $B2/$B3 to the one in $B0/$B1, moving both on a page each time."
  },
  {
   "address": 3240,
   "type": "line",
   "text": "Copies Y + 1 bytes, from offset Y down to offset 0, from ($B2) to ($B0); copy_pages enters it with Y = 0, which copies all 256."
  },
  {
   "address": 3252,
   "type": "line",
   "text": "The title's volume control, every fourth frame ($4A): while F5 is held (bit 6 of $19 clear) it turns the volume $47 up, or down with SHIFT (F6), between 0 and 15, writes it to the SID's volume ($D418, with the filter mode bit 7 set) and prints \"Volume\" and its two digits in the status line."
  },
  {
   "address": 3323,
   "type": "line",
   "text": "High bytes of the screen address of each of the 25 text rows of the screen at $4800, read by put_char."
  },
  {
   "address": 3348,
   "type": "line",
   "text": "Low bytes of the screen address of each of the 25 text rows, for put_char."
  },
  {
   "address": 3373,
   "type": "line",
   "text": "The unused memory editor's status line, row 2, column 2: \"( abmon : 0000 - 00 )\", whose address and byte digits the editor fills in from $0E9F before printing it."
  },
  {
   "address": 3397,
   "type": "line",
   "text": "The memory editor's six keys, as keyboard row selections for $DC00: A, D, comma, full stop, J and M."
  },
  {
   "address": 3403,
   "type": "line",
   "text": "The column mask of each of the editor's six keys in $DC01."
  },
  {
   "address": 3409,
   "type": "line",
   "text": "The code abmon_key returns for each key: $41 and $44 (A and D), then the cursor codes $9D (left), $1D (right), $91 (up) and $11 (down) for comma, full stop, J and M."
  },
  {
   "address": 3415,
   "type": "line",
   "text": "Status line text, row 2, column 2: \"Volume\" and two digits, which volume_keys writes into $0D60 and $0D61 before printing it."
  },
  {
   "address": 3424,
   "type": "line",
   "text": "The two characters of the volume shown by str_volume, written by volume_keys: a space or a 1, then the units digit; $FF after them ends the string."
  },
  {
   "address": 3425,
   "type": "line",
   "text": "The units digit of str_volume, written by volume_keys."
  },
  {
   "address": 3427,
   "type": "line",
   "text": "A small memory editor left in the game, which nothing calls: no instruction jumps to or names any address from $0D63 to $0F0A. Each call reads one key through abmon_key: A and D switch its mode in $BB, and four keys acting as the cursor keys (comma, full stop, J and M) step the address in $B7/$B8 by 1 or 16 or change the byte there by 1 or 16, depending on which digit $BC points at. It writes the byte back and shows the address and the byte as hex digits in str_abmon. init_vars still sets up its variables at every cold start."
  },
  {
   "address": 3468,
   "type": "line",
   "text": "The memory editor's step while it is on: reads the byte at $B7/$B8 into $B9. On one call in four (the low two bits of the count $BB at 0) left and right move the digit $BC, $0A-$0D for the address and $11-$12 for the byte; on every call up and down add or take away 1 or 16 at a byte digit, or $1000, $100, $10 or 1 at an address digit, the new address's byte read again. It writes $B9 back to memory, fills str_abmon's hex digits from it and, in the second half of every four calls, blanks the chosen digit with character $30, so it blinks, before printing the line."
  },
  {
   "address": 3825,
   "type": "line",
   "text": "The memory editor's keyboard scan: for each of six keys, last first, selects the row from $0D45, tests the column mask from $0D4B in $DC01 and returns the code from $0D51 for the first key held, or 0 when none is."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "Where the loaded program starts. With every bank switched to RAM ($01 = $24) it clears the zero page from $02 and moves the parts the loader left in the wrong place (copy_pages): $4000-$4BFF to $D000 (the title pages' text, under the I/O), $5100-$53FF to $DC00, $8000-$9FFF to $E000-$FFFF, $A000-$AFFF to $C000 (the dictionary and droid tables) and $B000-$B2FF to $0500 (the sound driver). Then it runs on into cold_start."
  },
  {
   "address": 4216,
   "type": "line",
   "text": "The cold start, also the reset vector: RAM with the I/O at $D000 ($01 = $25), the VIC's bank 1 ($4000-$7FFF, $DD00 bits 0-1 = %10), the game's variables (init_vars), its own vectors at $FFFA-$FFFF (NMI $6FE9, reset here, interrupt irq_screen), a raster interrupt at line 91 and the CIA interrupts off. Sprite multicolour 1 ($D025) is black."
  },
  {
   "address": 4307,
   "type": "line",
   "text": "Back to the title, after a game or from the pause: the stack reset, sprites and sound off, title_screen, then the play screen's chain of interrupts (irq_bottom), the blank character set at $4000-$47FF, $4900-$49FF and the numbered sprite shapes at $5200-$53FF cleared, the status bar's frame and score printed, the title's sound ($90 = $11) and a random colour scheme (title_colours). Fire on the title page starts a game (game_start); otherwise the attract pages follow (attract_page)."
  },
  {
   "address": 4484,
   "type": "line",
   "text": "The attract mode: the title pages printed into the deck map are scrolled through, five pages 320 pixels apart, with \"Briefing\" in the status bar. Each page waits for up to 256 passes (pushing down skips the wait), scrolls down 360 pixels at one pixel a step, two with the stick pushed down and none with it pushed up, waits for up to 128 more, then moves 320 pixels right. On the fifth (scroll column $2E = 5) the picture of a random droid, type 1-16, is shown. After the fifth it goes back to the title (restart). Fire starts a game at any point; f1/f2 set the colours and f5/f6 the volume."
  },
  {
   "address": 4674,
   "type": "line",
   "text": "A new game: \"Game on!\", play sounds ($90 = $12), the ship number $67 and the player's weapon $54 at 0, the score at 0, the host back to the 001 ($0340 = 0) and effect 6, then the first ship (ship_start)."
  },
  {
   "address": 4722,
   "type": "line",
   "text": "The ship has no robots left: 2000 points (ten of 200), the dictionary index rebuilt (index_words) and the ship_clear page with effect $0B, then the next ship."
  },
  {
   "address": 4745,
   "type": "line",
   "text": "A new ship: speeds and the alert count $64 at 0, the ship's robots placed on its 16 decks (build_ship), the fire state \"Mobile\", the player's energy 7 and its sprite 7, and a random start deck from 4 to 7 in $33 ($65 set to a different deck so that deck_start loads it). Then the briefing, the deck built (build_deck), the player's sprite from the record at $6A2E and its number, and the view centred on the deck's first waypoint, the start point (deck_points): ($2D/$2E) = (column \u2212 19) \u00d7 8 and ($2F/$30) = (row \u2212 8) \u00d7 8. The player beams in over 32 steps of the delay with energy_symbols turning, then its energy and maximum $66 are both $40."
  },
  {
   "address": 4943,
   "type": "line",
   "text": "Leaving the deck ($25 set): with no robots left in the ship ($68 = 0) the ship is cleared (ship_cleared); otherwise the lift (lift)."
  },
  {
   "address": 4953,
   "type": "line",
   "text": "Starts play on deck $33. When the deck has changed (not $65) it writes the deck's hum into the bytes of effect $18 at $C785-$C787 from $6E60, $6E70 and $6E80, empties the open-door list ($3B = 0) and slots 1-15 and loads the deck's robots (load_deck), then packs the slots (update_droids), or leaves only the player ($59 = 1) when there are none. Then the deck's colours (deck_colours), the accelerations from $6954-$6957, the host's top speed $36 = $6D97[$EA40[type]] and $39 = \u2212$36, the fire state \"Mobile\", and $25, $6B, $4F and $94 cleared, before the main loop is entered at its view step ($142E)."
  },
  {
   "address": 5082,
   "type": "line",
   "text": "One pass of the game. It waits on the frame flag $4B five times, for it to clear (line 118 of the frame), set (line 254), clear, set and clear again, so a pass takes at least two frames: 66 passes in 200 frames were measured from a snapshot of play. $4A counts the passes. After the first wait: stick, score_tick, pause, fire_state, the sprite collisions (collisions), and a transfer if a robot was touched in transfer mode ($6B). After the second: update_droids. After the third: player_shot, animate_chars, the animated characters at $6C28 (animate_tiles), energy_symbols and alert. After the fourth: move_player, the walls (walls), doors_close, floor_cell and the console when it was asked for ($3C bit 7). After the fifth (at $142E): scroll, disruptor and draw_deck, and the pass ends with the checks: no energy left (out_of_energy) or the deck to be left ($25, next_deck)."
  },
  {
   "address": 5197,
   "type": "line",
   "text": "The host's energy is gone. A host other than the 001 burns out (burnt_out). The 001 is the end of the game: \"Game over\", the player stopped, sprites off, effect $13, then over 22 steps an explosion is put on each sprite from 6 down to 0 in turn at the player's place, moved up to 4 pixels at random, and every sprite's explosion runs on until its shape passes $43. Then the game_over page and the title (restart)."
  },
  {
   "address": 5334,
   "type": "line",
   "text": "The console, entered from the main loop: the dictionary index built (index_words), the pass count kept, the sprites saved, the text font, effect $16 on voice 2, the menu to be drawn ($3C = $C0) and the enquiry starting at type 0. Each step reads the stick and turns the animated characters, and runs console on a step with no input or the first step of one, so a held push acts once ($3A marks it); a step is 32 rounds of the delay. When the console has finished ($3C = 0) the pass count is put back and, once fire is let go, the sprites, then back_to_play."
  },
  {
   "address": 5426,
   "type": "line",
   "text": "Back to play after the console or a transfer: \"Mobile\", the dictionary index cleared, the deck's characters ($2F) and no multicolour ($6F1C = $C0), into the main loop at its view step."
  },
  {
   "address": 5445,
   "type": "line",
   "text": "A pass of the screen without the game, about a frame: reads the stick, counts $4A, reads the keys, runs the disruptor flash, then after $4B is set turns the animated characters (animate_chars and those at $6C28), after it clears scrolls and draws the deck view, and returns after it is set again. Used by the attract pages, the beam-in, the explosions at the end and burnt_out."
  },
  {
   "address": 5491,
   "type": "line",
   "text": "The host has burnt out: an explosion on sprite 0 at the player's place (shape $39, yellow, multicolour) and the player back to the 001 with energy 7, its maximum $66 kept if it is at least 7, its number and effect $12. The explosion runs its shapes to $43 while the robots carry on (update_droids), then the 001's top speed and weapon are set and play goes on."
  },
  {
   "address": 5608,
   "type": "line",
   "text": "Places the robots of a new ship. The table at $0400 has 16 bytes per deck, a robot type in each of places 1-13 (0 for none). It is cleared, the ship number $67 goes up by one (8 at most) and $68, the count of robots in the ship, starts at 1. For each deck the base type is $C830[deck] + $67, at most 19, and the deck has $F170[deck] - 1 places to fill, at most 12: places 12 down to 6 get the base plus a random 0-3, and the rest half a random 0-15, halved again until it is below the base + 3, a 0 leaving the place empty. Each robot placed adds one to $68. Last, place 13 of deck 1 always holds type $17, the 999, counted by the 1 $68 started at."
  },
  {
   "address": 5732,
   "type": "line",
   "text": "Loads the robots of deck $33 into the slots: each non-empty place y (13 down to 1) of the deck's row at $0400 goes into slot y with its type, its place ($0330), energy $40, no sprite ($0350 = 0), standing still, and the position of waypoint 14 \u2212 y (the deck's list at $C810/$C820, after the start point) as its X and Y in pixels ($03B0/$03C0, $03D0/$03E0, eight to a cell). $78 counts them. The STA $03F0,X at $16A7 clears the pause timer of the slot loaded before, not this one, so the last robot loaded keeps whatever its slot held. Then sprites 1-6 are freed ($0206-$020B) and only the player's is on."
  },
  {
   "address": 5888,
   "type": "line",
   "text": "Points $1A/$1B at the waypoint list of deck $33, from $C810 (low) and $C820 (high), with the deck in Y. Each waypoint is 3 bytes: column, row and the bits of the directions that lead on from it."
  },
  {
   "address": 5901,
   "type": "line",
   "text": "Looks for a waypoint at map cell $12 (column), $13 (row, plus $80) in the deck's list, which is in order of row: returns with the carry set and ($1A) at the waypoint if there is one, clear if not, and $13 with bit 7 set either way."
  },
  {
   "address": 5963,
   "type": "line",
   "text": "Runs every slot from 1 that has energy, through the routine for its kind from the table at $6BF3, by bits 5-6 of its type (droid_step for $00-$1F, shot_step for $20-$3F, explosion_step for $40-$5F), written into the JSR at $1776. Slots with no energy left are dropped as it goes, and the 13 arrays of the others ($0330-$03F0, 16 bytes each) moved down over them, so $59 counts what is left. When that is only the player, the deck is cleared: its colours change to scheme 7 (deck_colours), 500 points, effect $17, and if the ship has no robots left ($68 = 0), $25 ends the deck."
  },
  {
   "address": 6007,
   "type": "line",
   "text": "update_droids' call for the slot's kind, the low byte of the JSR operand at $1776, from the table at $6BF3."
  },
  {
   "address": 6008,
   "type": "line",
   "text": "High byte of update_droids' call for the kind, from $6BF4."
  },
  {
   "address": 6132,
   "type": "line",
   "text": "An explosion's pass: it moves (move_slot) and goes on to its next shape, and ends, freeing its sprite, when it leaves the window or passes its last shape ($38 for a small one, $43 for a big one). Each pass its speed is halved, rounding down, with \u22121 then made 0, so it drifts to a stop. On the 1986 disk the BNE at $1830 and $1841 is a BEQ, which makes every speed but \u22121 into 0 and leaves \u22121 as it is."
  },
  {
   "address": 6217,
   "type": "line",
   "text": "A robot's shot's pass: it moves (move_slot) and ends, freeing its sprite, when it leaves the window. A new shot ($25) is counted down to $21 with its sprite off, so it first shows on its fifth pass, with its shape from $0390; once shown ($20) it flickers through the colours at $6D51 and between its two shapes. On a wall cell (droid_cell) it becomes a small explosion: type $40, white, shape $32."
  },
  {
   "address": 6346,
   "type": "line",
   "text": "A robot's pass. It moves (move_slot); out of the window it gives up its sprite. In the window, one without a sprite takes a free one (find_sprite), with its number drawn into its shape ($48 + sprite, sprite_number); when none of sprites 1-6 is free, the robot is taken off the ship for good (energy 0, unpopulate). Its sprite shows only while the player can see it (line_of_sight), and only then can it fire (robot_shoot). With its pause timer $03F0 running it counts it down; otherwise, at a point where (X OR Y) AND $1F is $10 that is a waypoint (find_point), it picks its next direction there (choose_way) at its speed $EA40[type]. Then it checks the cell it is in and the two ahead in the way it is going (cell_check, step_cell) and recovers energy (regen)."
  },
  {
   "address": 6535,
   "type": "line",
   "text": "Adds slot X's speed, $0370 across and $0380 down (signed, whole pixels), to its position, $03B0/$03C0 and $03D0/$03E0, unless its pause timer $03F0 is running, and leaves the position in $41/$42 and $43/$44."
  },
  {
   "address": 6634,
   "type": "line",
   "text": "Acts on the sprite-to-sprite collisions the interrupt collected in $4F. When the player's sprite 7 is one of them, player_touch. Otherwise the highest and lowest sprites with a bit set are taken as a pair (any between are not looked at) and, if both are in use in the table at $0205, their kinds (type / 32: 0 a robot, 1 a robot's shot, 2 an explosion, 3 the player's shot) go to the rule table (pair_rules). When no pair is acted on, the pair last bounced is forgotten ($6C = 0)."
  },
  {
   "address": 6723,
   "type": "line",
   "text": "The player's sprite touches one other sprite (with two or more, nothing happens this pass). The other's slot is found (find_slot), and by its type: a robot is rammed, or taken in transfer mode (ram); a robot's shot or an explosion hurts the player (shot_hits_player, blast_hits_player)."
  },
  {
   "address": 6762,
   "type": "line",
   "text": "The player touches a robot. In transfer mode ($3A = 0) the robot's slot goes into $6B, and the main loop starts the transfer at once. Otherwise, once for each touch ($6C), effect $1A: the robot pauses 16 passes and turns back (pause16, bounce), and the player bounces off at twice its speed the other way (2 pixels up and left if it was still). The damage is host type + 2 \u2212 robot type: when that is 0 or more the robot loses twice it, and if that empties its energy the alert goes up by its type (at most 255), the points for its class at $6DF6 are scored (class 9 200) and it explodes; when it is less, the player loses half of the difference less one, (\u2212A \u2212 1) / 2, its energy stopping at 0."
  },
  {
   "address": 6897,
   "type": "line",
   "text": "A robot's shot hits the player: the player loses 8 or 16 energy, by bit 3 of the shot's shape less $91, stopping at 0, and the shot is removed with effect $19. The player's own shot (sprite 0) does nothing."
  },
  {
   "address": 6938,
   "type": "line",
   "text": "An explosion touching the player takes the ship number $67 from its energy each pass, stopping at 0, with effect $19."
  },
  {
   "address": 6956,
   "type": "line",
   "text": "Finds the slot of sprite $04 (find_slot) and returns its rule from the table at $6D6D, 8 bytes for each kind: $6D6D + kind of $04 \u00d7 8 + kind of $10."
  },
  {
   "address": 6972,
   "type": "line",
   "text": "The player's shot was one of a colliding pair: its sprite 0 is turned off and its shape in the table at $020D cleared, and the points for a kill it made ($79) are scored."
  },
  {
   "address": 6993,
   "type": "line",
   "text": "Applies the rules to a colliding pair, first to sprite $04's object with the other in $10, then the other way round. The rule's highest set bit says what happens to the object: bit 6 it explodes, bit 5 it takes damage (damage), bit 4 it is removed, bit 3 it turns back (bounce) the first time and waits 16 passes (pause16) the second, bit 2 it takes the player's shot's damage, bit 7 or none nothing. A robot meeting a robot turns back while the other waits; a robot's shot or an explosion damages a robot, and so does the player's shot (player_shot_damage); a robot's shot meeting anything but a robot explodes, so the player can shoot one down; an explosion is never changed. When the second object is the player's shot, shot_done instead."
  },
  {
   "address": 7114,
   "type": "line",
   "text": "Turns slot $20 into a big explosion: a robot is first taken off the ship (unpopulate), then the type and energy are $40 and its sprite shows shape $39 in yellow, multicolour."
  },
  {
   "address": 7158,
   "type": "line",
   "text": "Slot $20's robot loses 2 \u00d7 (40 \u2212 type) energy, from a robot's shot or an explosion; at none left it is destroyed (destroyed)."
  },
  {
   "address": 7183,
   "type": "line",
   "text": "The player's shot hits slot $20's robot: base = (weapon $54 + 2) \u00d7 4 + 8 \u2212 type. Below 0 the shot does nothing, so a host whose weapon is 0, like the 001 (base 16), cannot hurt types 17 and up (711 on). Otherwise the robot loses base \u00d7 4 + 16 with effect $11 on voice 2; at none left it is destroyed (destroyed)."
  },
  {
   "address": 7225,
   "type": "line",
   "text": "Stops slot $20 for 16 passes ($03F0)."
  },
  {
   "address": 7233,
   "type": "line",
   "text": "A robot destroyed by a shot, an explosion or the disruptor: the alert goes up by its type (at most 255), the points for its class at $6DEC are kept in $79 for shot_done, effect $12 on voice 2, and it explodes."
  },
  {
   "address": 7263,
   "type": "line",
   "text": "Reverses slot $20's speed both ways, unless the same pair was just bounced, which $6C remembers (by the complement of the type or kind)."
  },
  {
   "address": 7298,
   "type": "line",
   "text": "Takes slot $20 out: energy 0 and its sprite freed."
  },
  {
   "address": 7309,
   "type": "line",
   "text": "Finds the slot whose sprite ($0350) is $04, searching down from the last; returns it in $20 and X, or 0 if there is none."
  },
  {
   "address": 7325,
   "type": "line",
   "text": "Takes slot X's robot off the ship: clears its place in the table at $0400 (from $0330) and, if it held one, takes one from the count $68."
  },
  {
   "address": 7341,
   "type": "line",
   "text": "Picks a robot's new direction at a waypoint. The waypoint's third byte has a bit for each way on: bit 7 left, 6 down-left, 5 down, 4 down-right, 3 right, 2 up-right, 1 up, 0 up-left (from the tables at $6D8D and $6D8F, each entry 0 for \u2212speed, 1 for none, 2 for +speed, picking from $6D-$6F). The first three set, from bit 7, are the choices, and the noise of voice 3 picks one, a third of the time each; a choice the waypoint did not fill is standing still for 8 passes."
  },
  {
   "address": 7436,
   "type": "line",
   "text": "An RTS that nothing calls."
  },
  {
   "address": 7437,
   "type": "line",
   "text": "Moves the map address in $76/$77 one cell in the direction of slot X's speed, a column for $0370 and a row for $0380, and returns with Y = 0."
  },
  {
   "address": 7472,
   "type": "line",
   "text": "Looks at the map cell at ($76) ahead of slot X: a wall (bit 7) holds the robot for 2 passes ($03F0), and the cell $20 opens the door it is in (door_touch)."
  },
  {
   "address": 7493,
   "type": "line",
   "text": "Counts down slot X's fire delay $03A0 and, every fourth pass, gives it a point of energy up to $40. The 999 (type $17) doubles its energy instead, up to $40."
  },
  {
   "address": 7541,
   "type": "line",
   "text": "One side's turn at the transfer board's pulsers (the side whose variables are in place, swap_turn): with pulsers left ($80) the stick moves the cursor, the pulser character $82 in the side's colour at column $8E (5 on the left, 34 on the right), up and down rows 1-12, round at either end. Fire, when the next cell in is wire, plants the pulser there and starts a pulse, $B0, in that row of the side's first table at ($1A); the cursor goes to row 0, above the board, the side has a pulser fewer and one cell of its pulser column, 4 cells out, turns red (effect $0A)."
  },
  {
   "address": 7664,
   "type": "line",
   "text": "Puts plain wire, $8C in colour $F8, back at the cursor's column $8E."
  },
  {
   "address": 7666,
   "type": "line",
   "text": "Puts plain wire, $8C in colour $F8, at column Y of the row at ($1C)."
  },
  {
   "address": 7675,
   "type": "line",
   "text": "Draws the side's pulser character $82 in its colour $7F at column $8E of the row at ($1C)."
  },
  {
   "address": 7686,
   "type": "line",
   "text": "Runs the left side's wires a step, a column at a time from the edge (flow_column): column 6 from the first table, $4400, into $4410, then column 10 into $4420 and column 14 into $4430."
  },
  {
   "address": 7774,
   "type": "line",
   "text": "The same for the right side: column 33 from $4470 into $4460, 29 into $4450 and 25 into $4440."
  },
  {
   "address": 7862,
   "type": "line",
   "text": "Carries the power of the twelve rows across column Y, from the source table at ($1A) into the next one at ($14), row 1 at index 12. A row with no power has the wire beyond the column coloured $F8 (paint_dead). A pulse just planted ($B0 to $FF) powers the next segment and counts up, so it lasts 80 steps, and the planted pulser then becomes wire again. Any other power counts down by one and is passed on (power_next), the wire beyond painted in the colour of the cell at the column (paint_segment), which is how a colour changer turns the pulse to the other side's colour; except that an auto-pulser ($82) keeps its row powered for good once power reaches it (its power set back to 16 each step), a terminator ($7D) stops it, and a bar ($F5-$F7) works as a joiner, whose middle row is powered only while both outer rows are, or a splitter, whose middle row powers both outer rows."
  },
  {
   "address": 8135,
   "type": "line",
   "text": "Powers row Y of the next table: ($14),Y = 1."
  },
  {
   "address": 8140,
   "type": "line",
   "text": "Paints the wire beyond column Y in colour $F8, unpowered (paint_segment)."
  },
  {
   "address": 8148,
   "type": "line",
   "text": "Paints the segment of wire beyond column Y of the row at ($1C): the three cells in from it, and the fourth if it is wire, in the colour of the cell at the column (or the colour given at $1FDB), leaving $1C as it was."
  },
  {
   "address": 8197,
   "type": "line",
   "text": "Points $1C/$1D at screen row A + 11 (board row A) through the row tables at $0CFB and $0D14, and $1E/$1F at its colour RAM."
  },
  {
   "address": 8215,
   "type": "line",
   "text": "Swaps the two sides' variables, like swap_sides at $E413, so the same code runs the other side: wire characters $8C/$8D, pulser and end characters $82/$7D, colours $7F/$87, cursor rows $81/$85, pulsers left $80/$84, cursor columns $8E/$86, and the step $7A/$7B negated."
  },
  {
   "address": 8279,
   "type": "line",
   "text": "At the end of a side's turn: for each row whose last segment is powered (the table at ($1A), cleared as it is read), the middle column, columns 19 and 20, takes the colour of that row's cell at column Y (14 or 25). Then it counts the rows whose middle cell is in this side's colour into $7C: 7 or more and this side leads, 5 or fewer the other side, 6 a draw ($F8), shown at the top of the middle column (set_leader). Then the turn passes to the other side (swap_turn)."
  },
  {
   "address": 8384,
   "type": "line",
   "text": "Colours the middle column's two cells above the board, rows 10 and 11 (from $D9A3), in X, the colour that leads, and keeps it in $8B."
  },
  {
   "address": 8410,
   "type": "line",
   "text": "On every other pass, while $8A is not 0, counts $8A down by one in BCD and shows it after \"Finish -\" on the status bar (the string at $69BE, digits written at $69C8 and $69C9); at 0, effect $1B on voice 2."
  },
  {
   "address": 8457,
   "type": "line",
   "text": "The stick for the side whose turn it is. The player's side ($7F = $7E) reads the joystick. The robot's side alternates: on odd passes its fire is let go ($18 = $10); on even passes its cursor moves a row towards its target row $8F (from row 0, up and round for a target of 7 or more), and on reaching it fires and picks a new target, a random 1-16 with 13-16 made 5-8, so rows 5-8 are twice as likely as the others. While the cursor moves it leaves $18 as it was, which is the player's fire button as read_stick last read it, so a player holding fire makes the robot's side fire as it moves too."
  },
  {
   "address": 8531,
   "type": "line",
   "text": "Once the countdown $8A has reached 0, neither side has pulsers left and $89 counts down the passes left, 85 from the deal, $25 ending the transfer at 0."
  },
  {
   "address": 8550,
   "type": "line",
   "text": "The transfer game, a pass at a time: waits for the frame flag $4B to be set, then the left side's turn (opponent, pulser at $4400, flow_left, count_middle at column 14), waits again and the right side's (at $4470, flow_right, count_middle at column 25), the countdown and the board's animated characters at $6C6C. On the last pass ($89 = 1) the right side's turn is left out half the time, by the noise of voice 3. Ends when $25 is set (round_end)."
  },
  {
   "address": 8655,
   "type": "line",
   "text": "The result of a transfer, by the colour that leads ($8B) at the end against the side the player chose ($7E). Won: the player takes the robot's type and energy, scores the points for its class at $6DEC, gets the new host's weapon and speed (host_stats), \"Complete\" and effect $0B. Lost with a host: the points for the host's class at $6DF6 taken off the score (score_down), back to the 001 keeping its energy, \"Rejected\" and effect $0C. Lost as the 001: energy 0, \"Burnt Out\" and effect $0D, which ends the game. Either way the robot is gone afterwards (transfer_done)."
  },
  {
   "address": 8766,
   "type": "line",
   "text": "Sets up the player's host: its number on sprite 7, the maximum energy $66 = $40, the weapon $54 from $EA80 and the top speed $36 from $6D97[$EA40[type]], with $39 = \u2212$36."
  },
  {
   "address": 8800,
   "type": "line",
   "text": "After a transfer: 40 steps of the delay with the board's characters turning, the sprites put back, and the robot that was the target taken out whatever the result: its energy 0, its sprite freed and its place in the ship cleared (unpopulate). The transfer, the player's speed and $25 are reset."
  },
  {
   "address": 8861,
   "type": "line",
   "text": "A transfer, from the main loop when the player touched a robot in transfer mode: the sprites saved, \"Captured\", the two droids' pages (transfer_intro), once fire is let go (wait_release) multicolour on, the board dealt and the side chosen (transfer_board, effect 9 on voice 2), the game itself (transfer_loop, effect $1B). A draw ($8B = $F8) shows \"Deadlock\" with effect $0E, waits 64 steps and deals a new board; otherwise transfer_result."
  },
  {
   "address": 8962,
   "type": "line",
   "text": "Moves $1C/$1D one cell towards the middle, by the side's step $7A/$7B, like step_in at $E3C6."
  },
  {
   "address": 8976,
   "type": "line",
   "text": "Moves $1C/$1D one cell towards the edge, like step_out at $E3D4."
  },
  {
   "address": 8990,
   "type": "line",
   "text": "The disruptor's flash, run once a pass while $94 is set, from the main loop and frame_step. Step 4, the hit: every slot after the player's whose sprite is on, robots, their shots and explosions alike, unless its type is one of the five at $6E5B (420, 711, 742, 821, 999), loses 2 x (40 - type) of its energy, and one left with 0 or less joins the alert, leaves the ship and explodes, scoring the points for its class at $6DEC when the player fired ($AF clear) with effect $12. The subtraction wraps: an explosion (type and energy $40) is left $70 by one flash and destroyed by a second, starting again as a new explosion, its points read with the class at $EA40 (4, 100 points). The player's host, unless it is one of the five, loses $20 + the ship number $67 - its type, stopping at 0; with no slot but the player's ($59 = 1) the host is not hit. Effect $84. Then the background turns white, black and white again while the screen shakes (random fine scroll $48 and $49), and step 1 puts the background back."
  },
  {
   "address": 9228,
   "type": "line",
   "text": "Lights or unlights deck $33 in the ship's side view by moving its characters between two sets, $10 apart: the deck's rectangle is $F140[deck] rows from row $F120[deck] + 10 and $F150[deck] cells wide from column $F130[deck] + 1; a row stops at a hull character ($92, $95, $98 or $9B), and a deck one row deep has its own ranges. Doing it twice puts the deck back. Three calls."
  },
  {
   "address": 9390,
   "type": "line",
   "text": "Whether the player can see the robot at map cell $12/$13: steps from the player's cell $4C/$4D towards it, a little under a cell at a time along the longer axis (sight_scale, sight_step), and returns with the carry set at the first wall cell met and clear if the robot's cell is reached."
  },
  {
   "address": 9613,
   "type": "line",
   "text": "One step of the line of sight: adds the step $5E/$5F and $60/$61 (8.8 fixed point, the fractions in $1C and $1D) to the map address in $14/$15 and returns with the carry set if the cell there is a wall (bit 7)."
  },
  {
   "address": 9647,
   "type": "line",
   "text": "Scales the distance in $5E (across) and $60 (down), both made positive, so the larger becomes just under 256 with the other in proportion, by doubling both and then adding the originals while neither overflows; the step goes back into $5E and $60, $14/$15 starts at the player's cell and the fractions at 0."
  },
  {
   "address": 9733,
   "type": "line",
   "text": "Animates A characters of the deck's set from the list at ($1A), 34 bytes to an entry: byte 0 has the delay in bits 0-2 counting down, the frame in bits 3-4 and the delay to reload in bits 5-7; byte 1 is the character; then four frames of 8 bytes. When the delay runs out the next frame is copied into the character at $7800 + 8 \u00d7 character. Used with two entries at $6C28 in play and the console (characters $14, the energiser, and $A0, the deck plan's marker) and two at $6C6C on the transfer board (the wires, $F1 and $F2)."
  },
  {
   "address": 9841,
   "type": "line",
   "text": "animate_tiles' store, the low byte of the operand of STA $7800,x at $2670: eight times the character, kept to a byte."
  },
  {
   "address": 9842,
   "type": "line",
   "text": "High byte of animate_tiles' store: the character's top three bits plus $78, built here by shifting them in (a work byte until then)."
  },
  {
   "address": 9850,
   "type": "line",
   "text": "The lift. With the sprites saved, the ship's side view is drawn (from $3069) and the lift the player stands in is found (find_lift); if there is none, back to play. Otherwise \"Lift\" and effect $16 on voice 2, and once fire is let go up and down move between the decks the lift serves (lift_move) until fire is pressed. The view then goes to the lift's place on the new deck, from $6D26 (row) and $6D07 (column) in cells, keeping its position within the 4-cell block, and play goes on. $65 keeps the deck the lift was entered from, so deck_start loads only a new one."
  },
  {
   "address": 9989,
   "type": "line",
   "text": "Moves the lift one entry up or down the table by the stick ($16), if the entry is in the same shaft ($6CE7 = $63): effect $10 on voice 2, the old deck's light off and the new one's on (mark_deck), $33 the new deck from $6CC8, effect $10 on voice 1 and the deck built (build_deck)."
  },
  {
   "address": 10031,
   "type": "line",
   "text": "Searches lift entries 31 down to 1 of the tables at $6D26, $6D07 and $6CC8 for one at the view's cell ($32 and $31, rounded down to 4) on deck $33; entry 31 is made of the first bytes of the next tables and matches no cell. Found: $62 is the entry and $63 its shaft ($6CE7), and the shaft is coloured in the side view, $6CC0 rows in colour 9 from row $6CB8 + 10 and column $6CB0 + 1, with the carry clear. Not found: carry set."
  },
  {
   "address": 10133,
   "type": "line",
   "text": "Points $1E/$1F at the colour RAM for the screen cell at $1C/$1D ($1D + $90), like colour_ptr at $E3E2."
  },
  {
   "address": 10145,
   "type": "line",
   "text": "A colour scheme for the title pages: one of schemes 2-5 at random from the 12-byte schemes at $6A44, copied to $0215, with its first byte as the background ($2C) and its fourth as the border ($5A, $D020); then all 16 entries take the scheme's fifth byte, so the pages are in one colour (colour_status)."
  },
  {
   "address": 10213,
   "type": "line",
   "text": "Sets the deck's colours from the 12-byte schemes at $6A44: scheme 7 when only the player is left ($59 = 1, the deck cleared), scheme 0 in black and white ($50 set), otherwise the deck's at $F160[deck]. The scheme goes to $0215, its first byte the background ($2C, $95), its fourth the border ($5A, $D020), entry 15 is $FE, then the status bar (colour_status) and the colour of the alert's characters at $0816 from $6D45. Five calls."
  },
  {
   "address": 10308,
   "type": "line",
   "text": "Colours the status area: rows 0-5 of colour RAM in the border colour $5A, columns 2-37 of rows 2 and 3 in red ($F2), then the colour table from the scheme (recolour)."
  },
  {
   "address": 10340,
   "type": "line",
   "text": "Waits until fire has been released for 8 steps of the delay in a row. Five calls."
  },
  {
   "address": 10361,
   "type": "line",
   "text": "The title: the picture at $CC00 copied to the screen at $4800 with each character's colour from the table at $0800, the interrupt irq_screen, the deck's colours, the deck map from $8000 to $BEFF cleared to $30 and the title pages' records at $D000, under the I/O, printed into it (print_page) with the I/O banked out. Then, a frame at a time, it plays the title's sound (sound_frame) for up to 256 frames or until fire is pressed, which leaves $53 = 0."
  },
  {
   "address": 10530,
   "type": "line",
   "text": "The single interrupt of the title and transfer screens, which the game installs from $1092 and title_screen ($2892). Each time it sets the deck character set at $7800 ($D018 = $2F), border and background from $2C (kept in $5A), 25 rows, no scroll, and alternates its own line between 0 and 128 through its operand at $293D, storing that operand in $4B: the main code waits on $4B changing, twice a frame. Also calls cassette_motor. Unlike the play chain, it does not call the sound driver."
  },
  {
   "address": 10557,
   "type": "line",
   "text": "irq_screen's next line, the operand of its LDA #$00 at $293C: 0 and 128 in turn, put into $4B and $D012 and flipped each interrupt."
  },
  {
   "address": 10581,
   "type": "line",
   "text": "The console's first page: the host's line (unit_line), \"Access granted.\", the ship's name (word $69 + the ship number \u2212 1), the deck's name (word $7A + deck) and the alert's word (word $D0 + the alert's top two bits)."
  },
  {
   "address": 10650,
   "type": "line",
   "text": "Turns slot position $41/$42 (X) and $43/$44 (Y) into its deck map address, column X / 8 and row Y / 8, in $12/$13 and $76/$77."
  },
  {
   "address": 10689,
   "type": "line",
   "text": "Stops the player at walls, from twelve probe points around it (probe_cell): points 11-9 on the right, 8-6 on the left, 5-3 below and 2-0 above. Points 11-9 and 5-3 act only while the player moves right or down (a negative speed); points 8-6 and 2-0 act whenever the speed across or down is not negative, standing still included. When a point that acts is in a wall, that speed is set to 0 and the scroll position is put on the cell's edge ($2D or $2F rounded to a multiple of 8, plus 1 one way)."
  },
  {
   "address": 10814,
   "type": "line",
   "text": "Reads the deck map cell at one of the twelve probe points around the player. X picks the point: its column offset from $6B52 and row offset from $6B5E are added to the player's map address in $4C/$4D and written into the operand of the LDA at $2A50. A cell of $20, the cell a door is opened by, is passed to door_touch. Returns the cell in A and in $0F, with X kept. Four calls, all in the wall push-back at $29C1."
  },
  {
   "address": 10833,
   "type": "line",
   "text": "probe_cell's map read, the low byte of the operand of LDA $8000 at $2A50: the player's cell $4C plus the probe point's column offset. Read back as the door's address for door_touch."
  },
  {
   "address": 10834,
   "type": "line",
   "text": "High byte of probe_cell's map read: $4D plus the probe point's row offset."
  },
  {
   "address": 10861,
   "type": "line",
   "text": "Opens a door a droid is touching. The deck map is built of blocks of 4 by 4 cells, and the block holding the cell at $76/$77 (both bytes rounded down to a multiple of 4) is looked up in the open-door list: rows at $0230, columns at $0238, states at $0240, $3B entries. A new door is added if fewer than 7 are open, its state $40, or $C0 when the touched cell is in one of the block's two middle columns. On each touch the state gets bit 6 (touched this pass) and the door opens one step further, up to four: a step clears bit 7, the wall bit, of two cells, the next row of the block's middle columns for a $40 door, the next column of its middle rows for a $C0 door. Called from probe_cell for the player and from $1D41 for the robots."
  },
  {
   "address": 11016,
   "type": "line",
   "text": "Once a pass of the main loop: walks the open-door list ($0230, $0238, $0240, $3B entries). A door touched this pass (bit 6 of its state) stays as it is and loses the bit; one left alone closes a step, setting bit 7 again on the two cells door_touch last opened; a door closed all the way is dropped and the list is packed down."
  },
  {
   "address": 11173,
   "type": "line",
   "text": "Clears the 17 rows of the play window from row 8: colour RAM from $D940 to A, the screen from $4940 to $30, the blank character. Leaves $1C/$1D at $D940 for the caller's next fill_rows. Eight calls."
  },
  {
   "address": 11210,
   "type": "line",
   "text": "Builds the dictionary index: from $C001 it finds each word of the dictionary at $C000 (a word starts with a byte with bit 7 set) and puts its address in the tables at $4400 (low bytes) and $4500 (high bytes), as many as the count in $C000, 249."
  },
  {
   "address": 11268,
   "type": "line",
   "text": "The console, called from the console mode at $1517 each step. $3C holds its state: bit 6 means the menu is still to be drawn, bit 7 that the menu is up, the low bits the item. With bit 6 set it switches to the text page (text_page), clears the window (orange background, $F8 in $2C, yellow text), puts the four menu pictures up from the 11-byte sprite records at $6B89 (show_sprite) and prints the host's console page ($2955) and \"Console\". While the menu is up, up and down move the choice between items 0 and 3 (effect $15), the chosen item's picture, sprite item + 1, turning white and the one before back to the colour at $6B9D, and fire chooses (effect $16). Otherwise, with an item below 5 in $3C, it rewrites the jump at $2C21 from the table at $6BE1: item 0 returns to play ($2C24, the RTS), 1 the robot enquiry, 2 the deck plan, 3 the side view."
  },
  {
   "address": 11298,
   "type": "line",
   "text": "console's jump to the item chosen, the low byte of the JMP operand at $2C21, from the table at $6BE1."
  },
  {
   "address": 11299,
   "type": "line",
   "text": "High byte of console's jump to the item, from $6BE2."
  },
  {
   "address": 11451,
   "type": "line",
   "text": "Sets bits 6 and 7 of the console state $3C, so the menu is drawn again, and asks for effect $16. Each console page jumps here when fire is pressed."
  },
  {
   "address": 11462,
   "type": "line",
   "text": "The console's robot enquiry, item 1: fire goes back to the menu. Otherwise it switches to the text page, colours rows 8-11 cyan and jumps through the table at $6BE9 to the step in $5B, by rewriting the JMP at $2CED: 0 clears the window ($2D79), 1 shows a droid and its first line ($2CF0), 2 prints a page of its description ($2D34), 3 waits for the next page ($2D40), 4 waits at the end ($2D6A)."
  },
  {
   "address": 11502,
   "type": "line",
   "text": "enquiry's jump to its step, the low byte of the JMP operand at $2CED, from the table at $6BE9."
  },
  {
   "address": 11503,
   "type": "line",
   "text": "High byte of enquiry's jump to the step, from $6BEA."
  },
  {
   "address": 11504,
   "type": "line",
   "text": "Enquiry step 1. Up and down choose the droid type $58, from 0 (the 001) to the host's own type $0340 and round again, so only types up to the host's can be looked up (effect $15). It draws the droid's picture ($3629) and its first line (unit_line), resets the field counter in the operand at $2DA1 to $0D, \"entry\", and moves to step 2 when the stick is pushed left or right."
  },
  {
   "address": 11572,
   "type": "line",
   "text": "Enquiry step 2: sets the print position to the row in $46 and column in $45 and prints the next page of the description (describe)."
  },
  {
   "address": 11584,
   "type": "line",
   "text": "Enquiry step 3: shows \"More...\" in the status bar. Left or right turns the page: \"Console\" again, step 2, the window cleared in red with the droid's first line, rows 8-11 coloured cyan (effect $15)."
  },
  {
   "address": 11626,
   "type": "line",
   "text": "Enquiry step 4, the end of the description: any push of the stick starts again at step 0 (effect $15)."
  },
  {
   "address": 11641,
   "type": "line",
   "text": "Enquiry step 0: clears the window in red, colours rows 8-11 cyan, sets the left margin $45 and the first row $46 to 12 and moves to step 1."
  },
  {
   "address": 11666,
   "type": "line",
   "text": "Prints the droid description at ($5C) a page at a time. The field counter in the operand at $2DA1 runs from $0D: each field prints its label (the dictionary word of that number, \"entry\" to \"sensors 3\"), \": \" and its value (field_value), two rows apart; a page ends at row 24 (step 3, \"More...\"). From field $17 it prints \"notes:\" and then the words of the record from byte $10, counted in the operand at $2DE9: $FE ends a sentence (a full stop, the next word with a capital), $FF ends the notes (a full stop, step 4), and a word that will not fit on the page ends it (step 3). $0248 asks for a capital letter."
  },
  {
   "address": 11681,
   "type": "line",
   "text": "describe's field counter, the operand of LDA #$0D at $2DA0: the dictionary word of the field being printed, $0D \"entry\" up to $17, where the notes begin. enquiry_pick sets it to $0D ($2D21) and field_value reads it."
  },
  {
   "address": 11753,
   "type": "line",
   "text": "describe's place in the notes, the operand of LDY #$10 at $2DE8: the byte of the droid record reached, from $10, set at $2DBB and moved on at $2DF9."
  },
  {
   "address": 11806,
   "type": "line",
   "text": "Prints dictionary word A through the index at $4400/$4500 (print_word). With $0248 set, capital first sets the word's first letter to a capital for the print and the original byte is put back after it. Returns with the flags print_word left. Fourteen calls."
  },
  {
   "address": 11837,
   "type": "line",
   "text": "For word: keeps the word's first byte in $0249 and, if $0248 is set, rewrites it as its capital: the small letters $0A-$23 become $3A-$53, and the w, m and i ($54, $42, $12) become $50, $46 and $16. $0248 is cleared either way."
  },
  {
   "address": 11899,
   "type": "line",
   "text": "Acts on the cell under the player, $4E, once a pass of the main loop. On an energiser ($14) it adds a point of energy every fourth pass while $0360 is below the host's maximum $66, at 5 points each (score_down, effect $14). With fire held (the fire state $3A not $80), standing on a lift ($2B-$2E) for 5 passes sets $25 and standing on a console ($42) for 5 passes sets $3C to $FF, the console menu. Anywhere else the count in $3C goes back to 5."
  },
  {
   "address": 11971,
   "type": "line",
   "text": "Saves the sprites before a screen of a different kind (console, transfer, lift): their shapes from the shadow table $020D, their positions ($D000-$D00F), the border, background and multicolour registers $D020-$D026, the sprite colours, and the X high bit, enable, expand and multicolour registers, into $02A7-$02D2, with the background colour $2C in $02D3, and zeroes the fine scroll $48/$49. Three calls."
  },
  {
   "address": 12048,
   "type": "line",
   "text": "The reverse of save_sprites: puts the sprites and the background colour back from $02A7-$02D3. Three calls."
  },
  {
   "address": 12119,
   "type": "line",
   "text": "Prints the value of the description field in $2DA1. \"Entry\" is the type number $58 plus 1, printed as a space and two decimal digits, 01 to 24; \"class\" is the dictionary word of the type's class from $EA00 (influence, disposal and so on); \"height\" is byte 8 of the record, its two digits put into the word at $6C15, which prints as 1.dd m; \"weight\" is byte 9 as a three-digit number, the word at $6C1C; every other field is the dictionary word in its byte of the record at ($5C)."
  },
  {
   "address": 12289,
   "type": "line",
   "text": "The console's deck plan, item 2: fire goes back to the menu. Once ($5B = 0) it switches to the deck's character set ($2F, at $7800), turns the sprites off, takes this deck's plan from the pointers at $F100/$F110 by the deck in $33, draws it with its own colours (draw_plan) and puts a flashing marker, $A0 in colour $F1, at the player's place, from $4C/$4D."
  },
  {
   "address": 12386,
   "type": "line",
   "text": "The console's side view of the ship, item 3: fire goes back to the menu (to_menu); otherwise it draws the side view, once (draw_side)."
  },
  {
   "address": 12393,
   "type": "line",
   "text": "The side view, drawn once a visit (step $5B at 0, then moved on): the deck's character set ($2F into irq_deck's operand $6F55), the sprites off, multicolour on ($D0 into $6F1C) with $D022 white, $D023 black and a light blue background ($FE in $2C), then the ship's picture at $F180 with $80 added to each character (draw_plan, through its ORA operand at $3110) and the player's deck marked (mark_deck). Also called by the lift."
  },
  {
   "address": 12448,
   "type": "line",
   "text": "Draws a picture of 16 rows of 64 cells, packed, from ($1A) onto the window from row 9, after clearing 41 bytes from row 8 ($4940). A byte with bit 7 set is a cell repeated the number of times the next byte gives; any other is one cell. Cells 3-41 of each row reach the screen, as columns 0-38; each code has the value in the ORA operand at $3110 added (0 for the plan, $80 for the side view), $29 always shows as 0, and its colour comes from the colour table at $0800. The CMP at $3140 has no effect, as the DEC after it sets the flags again."
  },
  {
   "address": 12560,
   "type": "line",
   "text": "draw_plan's ORA operand, added to every cell drawn: 0 for the deck plan (deck_plan, $3024) and $80 for the side view (draw_side, $307C)."
  },
  {
   "address": 12568,
   "type": "line",
   "text": "draw_plan's colour store, the low byte of the operand of STA $D940,y at $3117, moved on a row with the screen pointer $1C."
  },
  {
   "address": 12569,
   "type": "line",
   "text": "High byte of draw_plan's colour store, $D9 at the start, stepped with $1D."
  },
  {
   "address": 12617,
   "type": "line",
   "text": "Prints the enquiry's first line for droid type $58: \"Unit type\" and its number (its class from $EA00 and its last two digits from $EA20, written into the string at $6B84-$6B86), \"-\", the class word with a capital and the kind: robot for classes 1-4, droid for 5-8, cyborg for 9 and device for the 001, so \"Unit type 123 - Disposal robot\". Then it pads the row with spaces (pad_row). Seven calls."
  },
  {
   "address": 12691,
   "type": "line",
   "text": "Prints spaces from the current column to column 39."
  },
  {
   "address": 12708,
   "type": "line",
   "text": "Sets the window to show text: character set $2D in the split at $6F55, background $F1, multicolour off ($6F1C = $C0), the fine scroll $48/$49 zeroed. Six calls."
  },
  {
   "address": 12729,
   "type": "line",
   "text": "The fire button in play, once a pass of the main loop. $3A holds the state: $80 \"Mobile\" (fire released), 1 \"Weapon\" (firing), 2 fire held with the stick centred, 0 \"Transfer\". Fire held with the stick pushed shoots (shoot) and gives state 1, which shoots again while it is held; held with the stick centred it gives state 2, and if the stick stays centred for 8 passes (the operand of the LDA at $3835), state 0, transfer mode. Releasing fire in any state goes back to $80. The status bar shows the state's word."
  },
  {
   "address": 12830,
   "type": "line",
   "text": "Turns a droid's deck position $41/$42 (X) and $43/$44 (Y) into window coordinates against the scroll position $2D/$2E and $2F/$30: X + 16 into $3D/$3E and Y + 32 into $3F/$40. Returns with the carry set if they fall inside the window, clear if not."
  },
  {
   "address": 12926,
   "type": "line",
   "text": "Turns the window coordinates in $3D-$3F into sprite coordinates in the work copy: Y ($07) = $3F + $44, X ($05) = $3D/$3E \u2212 4 with its ninth bit in $06."
  },
  {
   "address": 12949,
   "type": "line",
   "text": "Turns hardware sprite $04 off and marks it free in the sprite table at $0205. Five calls."
  },
  {
   "address": 12968,
   "type": "line",
   "text": "Looks for a free hardware sprite among 6 down to 1 in the sprite table at $0205. Returns it in Y and $04, with Z set if none is free (Y = 0)."
  },
  {
   "address": 12983,
   "type": "line",
   "text": "Sets colour or black and white from the key code in $19: with bit 4 clear, bit 7 set means f1, \"Colour\" and $50 = 0, and bit 7 clear means f2, \"Blk-Whte\" and $50 = $FF. Five calls, four of them on the title pages."
  },
  {
   "address": 13017,
   "type": "line",
   "text": "Moves the player's shot, sprite 0, once a pass while it is on: Y by its speed $52 plus the scroll step $2B, X by $51 plus $29, with the ninth bit kept. Its colour flickers through the eight at $6D51 (picked by the noise of voice 3), and a shape from $56 up flips between two frames. It is turned off when it leaves the window at the top or reaches a wall (wall_at). Also counts down the player's fire delay $03A0."
  },
  {
   "address": 13167,
   "type": "line",
   "text": "Turns the sprite position in the work copy into a deck map address in $1A/$1B, the cell 8 pixels to a cell from the player's cell $4C/$4D (sprite position $AC), and returns with the carry set if that cell has bit 7, a wall."
  },
  {
   "address": 13237,
   "type": "line",
   "text": "The player fires, unless the fire delay $03A0 is running, the shot sprite is still on or the stick is centred. A host with the disruptor ($54 = 3) starts the flash ($94 = 4) instead, if one is not already on. Otherwise sprite 0 starts where the player's sprite 7 is, with effect $54 + 1, a shape from $6E4C by the weapon and the direction (four per weapon: up or down, left or right, two diagonals) and a speed of 12 pixels a pass in each direction pushed (from $6E58, into $51 and $52); against a wall it is turned off at once. The fire delay becomes $20 less twice the host's class."
  },
  {
   "address": 13392,
   "type": "line",
   "text": "Lets the robot in slot $10 fire, if its type's weapon at $EA80 is not 0. A disruptor (3) flashes ($94 = 4, $AF = 4) when a random number below 128 is less than the difficulty $67. Any other weapon fires when slots and a sprite are free, its delay $03A0,x is 0 and a random number below 32 is less than $67: a new slot gets type $25, a shot, with its sprite (aim_shot)."
  },
  {
   "address": 13493,
   "type": "line",
   "text": "Sets up the shot in new slot $59 fired by the robot in slot $10: its velocity from the aim in $5E/$5F (X) and $60/$61 (Y), each shifted right 5 bits, its position the robot's, the robot's fire delay $1A less its type, a pause of 1-4 passes for the robot, effect weapon + 1, and the shot's shape from its direction, after which both velocities are negated. The shape test has a gap: when the shot moves more steeply than 45 degrees, the second SBC at $3544 always leaves the carry set, so every such shot gets the up-and-down shape, while a shallower one gets a diagonal until it is twice as wide as it is tall."
  },
  {
   "address": 13687,
   "type": "line",
   "text": "Applies the colour scheme to the colour table at $0800: for each of its 256 entries the high four bits pick a colour from the 12-byte scheme at $0215 and the low four bits are replaced by it. Called from $2860."
  },
  {
   "address": 13712,
   "type": "line",
   "text": "Builds the deck in $33 into the deck map at $8000-$BFFF, 64 rows of 256 cells. The deck's plan, found through $F100/$F110, is packed as draw_plan reads it, 16 rows of 64 cells; each cell's low five bits pick a block of 4 by 4 cells from the 32 at $E800 (16 bytes each, a row of 4 after another), and the block is copied into the map, 4 columns along per cell and 4 map rows down per plan row. Two calls: the ship start and the lift ($272B)."
  },
  {
   "address": 13865,
   "type": "line",
   "text": "Draws the picture of droid type $58 with the hardware sprites, and points $5C/$5D at the type's 64-byte record at $EB00 + 64 \u00d7 type. The sprite settings start from the 10 bytes at $6B6A; the colours come from the type's entry at $EA60, multicolour 2 ($D026) from $6D63 and the sprite colour from $6D59. Sprites 0-7 make four rows of two. The left sprite n takes its shape from byte n of the record, and that shape is mirrored into shape $44 + n/2 (mirror_shape); the right sprite takes the mirror image, or the shape in byte n + 1 when that is not 0. Bit 7 of the left shape's last byte turns multicolour on for the pair, and its low five bits are the step down to the next row. The left column is at X $28, or the value written into the operand at $365F. Seven calls."
  },
  {
   "address": 13919,
   "type": "line",
   "text": "droid_picture's X position, the operand of LDA #$28 at $365E: $28 for every picture but the game over's, $A0 ($37EA), and put back to $28 after each picture ($36B5)."
  },
  {
   "address": 14009,
   "type": "line",
   "text": "The briefing at the start of each ship: the text page cleared in red, the first line and picture of droid type $58, then \"This is the unit that you currently control. Prepare to board Robo-Freighter ... to eliminate all rogue robots.\", from the word list at $6DA0, with the ship's name, dictionary word $68 plus the ship number $67 (Paradroid, Metahawk, Hewstromo, Graftgold, Blabgorius IV, Red Barchetta, Retta-beast, Itsnotardenuff), written into it at $6DAD."
  },
  {
   "address": 14043,
   "type": "line",
   "text": "Prints a list of dictionary words at ($1A) from row 12, column 9 (also the margins $46 and $45), the first with a capital: $FE puts a full stop and gives the next word a capital, $FF ends the list, and the word after \"Robo-Freighter\" ($64) gets a capital too. Then it waits for fire to be released (wait_release) and up to 72 steps of the delay for it to be pressed. Four calls."
  },
  {
   "address": 14132,
   "type": "line",
   "text": "The two pages before a transfer: in green, the host's first line and picture, \"This is the unit that you currently control.\" (effect $0B); then in blue, the target's (slot $6B), \"This is the unit that you wish to control. Prepare to transfer.\" (effect $0C). Ends by clearing the dictionary index (clear_index). Called from $22A7."
  },
  {
   "address": 14206,
   "type": "line",
   "text": "Zeroes the 512 bytes at $4400-$45FF, the dictionary index, which is screen space shared with other pictures. Four calls."
  },
  {
   "address": 14219,
   "type": "line",
   "text": "The end of a game: fills the window with random characters $7A-$7D in black on white ($2C = $F1), the static of a lost signal (effect $0F), and rolls it with the vertical fine scroll $49 for 52 steps of the delay while the score finishes counting. Then the text page, cleared in cyan, shows the picture of type $17 at X $A0 and \"Transmission terminated\", and 88 steps of the delay count the score out before the score pages (high_scores at $E013). Called from $14D0."
  },
  {
   "address": 14358,
   "type": "line",
   "text": "The page when a ship is cleared: in green, the host's first line and picture and \"Congratulations! Ship is now clear of all robot activity. Bonus of 2000 awarded.\", the word list at $6DCE. Called from $1286."
  },
  {
   "address": 14389,
   "type": "line",
   "text": "Puts the fire state back to \"Mobile\": $3A = $80, the transfer wait $93 = 8, the console count $3C = 5, and prints the word. Three calls."
  },
  {
   "address": 14390,
   "type": "line",
   "text": "The passes fire must be held with the stick centred before transfer mode, the operand of LDA #$08 at $3835: mobile puts it into $93, and fire_state reads it at $31DA, $31F8 and $3211."
  },
  {
   "address": 14409,
   "type": "line",
   "text": "Moves the view by the player's speed: the scroll position $2D/$2E loses the whole-pixel part of the horizontal speed $29 and $2F/$30 that of the vertical speed $2B (each sign-extended), then the fine scroll is set from them, $48 = (8 \u2212 $2D) AND 7 and $49 = (8 \u2212 $2F) AND 7. Two calls."
  },
  {
   "address": 14501,
   "type": "line",
   "text": "Rotates a group of four characters of the deck's set at $7800: each moves one place on (the first into the second and so on, the last back to the first), eight rows each. The addresses in its instructions are written by next_anim."
  },
  {
   "address": 14504,
   "type": "line",
   "text": "rotate_chars' first read, the low byte of the operand of LDY $7818,x at $38A7: the group's fourth character (base + 24), kept in Y."
  },
  {
   "address": 14505,
   "type": "line",
   "text": "High byte of rotate_chars' read of the fourth character; next_anim writes the group's high byte into all eight of its operands."
  },
  {
   "address": 14507,
   "type": "line",
   "text": "rotate_chars' read of the third character (base + 16), the operand of LDA at $38AA, low byte."
  },
  {
   "address": 14508,
   "type": "line",
   "text": "High byte of rotate_chars' read of the third character."
  },
  {
   "address": 14510,
   "type": "line",
   "text": "rotate_chars' store into the fourth character (base + 24), the operand of STA at $38AD, low byte."
  },
  {
   "address": 14511,
   "type": "line",
   "text": "High byte of rotate_chars' store into the fourth character."
  },
  {
   "address": 14513,
   "type": "line",
   "text": "rotate_chars' read of the second character (base + 8), the operand of LDA at $38B0, low byte."
  },
  {
   "address": 14514,
   "type": "line",
   "text": "High byte of rotate_chars' read of the second character."
  },
  {
   "address": 14516,
   "type": "line",
   "text": "rotate_chars' store into the third character (base + 16), the operand of STA at $38B3, low byte."
  },
  {
   "address": 14517,
   "type": "line",
   "text": "High byte of rotate_chars' store into the third character."
  },
  {
   "address": 14519,
   "type": "line",
   "text": "rotate_chars' read of the first character (the base), the operand of LDA at $38B6, low byte."
  },
  {
   "address": 14520,
   "type": "line",
   "text": "High byte of rotate_chars' read of the first character."
  },
  {
   "address": 14522,
   "type": "line",
   "text": "rotate_chars' store into the second character (base + 8), the operand of STA at $38B9, low byte."
  },
  {
   "address": 14523,
   "type": "line",
   "text": "High byte of rotate_chars' store into the second character."
  },
  {
   "address": 14526,
   "type": "line",
   "text": "rotate_chars' store of the old fourth character, from Y, into the first (the base), the operand of STA at $38BD, low byte."
  },
  {
   "address": 14527,
   "type": "line",
   "text": "High byte of rotate_chars' store into the first character."
  },
  {
   "address": 14532,
   "type": "line",
   "text": "Every second pass ($4A even), runs next_anim for each entry of the list at $6C23, whose first byte counts its bytes (4, two groups). Four calls, in play, the pause and the game over."
  },
  {
   "address": 14547,
   "type": "line",
   "text": "Takes the group of four characters whose address is at $6C23,y (high byte at y, low byte at y \u2212 1), writes it into rotate_chars' instructions and runs it, and returns with Y two lower and Z set when the list is done."
  },
  {
   "address": 14618,
   "type": "line",
   "text": "Draws the deck view from the deck map: the top left cell is ($2D/$2E + 7) / 8 across, into $31, and ($2F/$30 + 7) / 8 down, into $32. It fills 17 rows of 39 columns of the screen from $4940 with the map's cells (the LDA at $3998 has the map address written into it), and colour RAM from $D940 with each cell's colour from the table at $0800; rows above or below the map's 64 are left blank. Then the player's cell, the one at row 8, column 19 of the view, is put in $4C/$4D and its contents in $4E. Two calls."
  },
  {
   "address": 14745,
   "type": "line",
   "text": "draw_deck's map read, the low byte of the operand of LDA $4940,y at $3998: the view's left column $31."
  },
  {
   "address": 14746,
   "type": "line",
   "text": "High byte of draw_deck's map read: the map row plus $80, one more for each screen row."
  },
  {
   "address": 14754,
   "type": "line",
   "text": "draw_deck's colour store, the low byte of the operand of STA $D940,y at $39A1, moved on 40 a row with the screen pointer."
  },
  {
   "address": 14755,
   "type": "line",
   "text": "High byte of draw_deck's colour store, $D9 at the start."
  },
  {
   "address": 14841,
   "type": "line",
   "text": "The player's speed from the stick, once a pass of the main loop. Each axis is a signed 16-bit speed, $28/$29 across and $2A/$2B down, positive to the left and up, in 256ths of a pixel. A push adds $35, or $38 the other way (stored as the low byte of a negative number); with the stick centred on that axis the speed runs down by $34 or $37 a pass to 0. The whole-pixel part is held to $36 one way and $39 the other. The host's type sets all six ($223E)."
  },
  {
   "address": 15080,
   "type": "line",
   "text": "Writes the left-right mirror image of sprite shape A into sprite shape X, both in the video bank at $4000 (shape \u00d7 64): 21 rows of three bytes, each row's bytes in reverse order and the bits of each reversed, in pairs when bit 7 of the shape's last byte marks it multicolour. The store address goes into the operands at $3B39 and $3B69. Called from droid_picture."
  },
  {
   "address": 15161,
   "type": "line",
   "text": "mirror_shape's store for a one-colour shape, the low byte of the operand of STA $8000,x at $3B38, copied from $3B69."
  },
  {
   "address": 15162,
   "type": "line",
   "text": "High byte of mirror_shape's one-colour store, copied from $3B6A."
  },
  {
   "address": 15209,
   "type": "line",
   "text": "mirror_shape's store for a multicolour shape, the low byte of the operand of STA $8000,x at $3B68: worked out here first, shape X \u00d7 64, by the shifts at $3AEC-$3B02."
  },
  {
   "address": 15210,
   "type": "line",
   "text": "High byte of mirror_shape's multicolour store: $40 plus shape X / 4."
  },
  {
   "address": 15228,
   "type": "line",
   "text": "Run/stop pauses the game: \"Pause\" on the status bar, the sound off ($90 = 0). While paused the pass count $4A still runs, f7 and f8 freeze and free the animation (cheese), f1 and f2 change the colours (colour_key), the characters and the droid symbols still turn; clr/home ends the game (back to $10D3, the title). Run/stop or fire again goes on: \"Continue\", the colour scheme back ($27E5), the pass count as it was before the pause, the sound back on ($90 = $12). Called from the main loop."
  },
  {
   "address": 15380,
   "type": "line",
   "text": "Prints one record of the title pages into the deck map, where the view scrolls across them: the first two bytes give the address (the first's low six bits, plus $80, the high byte), then characters two rows tall (big_char) up to one with bit 7 set, after which ($1A) is moved to the next record. A record with nothing before that byte, or one whose count reaches 125, sets $25, the end of the pages: the BMI at $3C2D tests the count the INY left, not the character. Called from $28F7."
  },
  {
   "address": 15438,
   "type": "line",
   "text": "Puts character $B6 into the deck map at ($1C), and its lower half (bit 7 set) in the row below, 256 bytes on; a capital letter, $3A-$59, also gets its right half, the code plus $20, in the next cell. Moves $1C on by one or two cells."
  },
  {
   "address": 15479,
   "type": "line",
   "text": "Writes the number of droid type $58 into its sprite's shape, shape $48 plus the sprite in $04, from its row 6: the class digit from $EA00 and the two from $EA20, each eight rows of the digit shapes at $6AAE, three bytes apart, from the offset at $6AA4. Four calls, wherever a droid takes a new type or sprite."
  },
  {
   "address": 15521,
   "type": "line",
   "text": "sprite_number's first digit, the low byte of the operand of LDA $6AAE,y at $3CA0: $6AAE plus the offset in $6AA4 of the class digit, from $EA00."
  },
  {
   "address": 15522,
   "type": "line",
   "text": "High byte of sprite_number's first digit, $6A plus the carry."
  },
  {
   "address": 15561,
   "type": "line",
   "text": "sprite_number's second digit, the low byte of the operand of LDA at $3CC8: the tens, the high four bits of the type's byte at $EA20."
  },
  {
   "address": 15562,
   "type": "line",
   "text": "High byte of sprite_number's second digit."
  },
  {
   "address": 15599,
   "type": "line",
   "text": "sprite_number's third digit, the low byte of the operand of LDA at $3CEE: the units, the low four bits of the byte at $EA20."
  },
  {
   "address": 15600,
   "type": "line",
   "text": "High byte of sprite_number's third digit."
  },
  {
   "address": 15611,
   "type": "line",
   "text": "Turns the symbol on each droid's sprite at a speed set by its energy. For every slot holding a droid with a sprite, $0390,x counts down; at below 0 it restarts at (64 \u2212 energy) / 8, and the phase in the shape's byte $3F moves on (0-7), drawing the next frame of the turning symbol into the shape from the tables at $6B0E-$6B50, mirrored top and bottom. Then the player's sprite 7: below 8 energy it flashes through the colours at $6D49 (outside transfer mode) or $6D51 (in it), with effect 8 every 32 passes; otherwise it is white outside transfer mode and the colour at $021B in it, with effect $1C every 8 passes. Three calls."
  },
  {
   "address": 15922,
   "type": "line",
   "text": "Every 16 passes ($4A): the alert count $64 falls by one, its top two bits (green, yellow, amber, red) set colour table entry $0816 from $6D45 and award the points at $6DE8 (0, 5, 10 or 25, score_up). Then the host burns out: when the pass count AND the mask for its class at $6DDE is 0 (every 128 passes for the 001, 64 for classes 1-4, 32 for 5-8, 16 for 9), its maximum energy $66 falls by one and the energy $0360 is held at it. On pass 17 of every 32, with no effect playing on voice 2, effect $18. Called from the main loop."
  },
  {
   "address": 16006,
   "type": "line",
   "text": "Copies an 11-byte sprite record at ($1A) into the work copy $04-$0E (sprite, X, X high, Y, enable, expand Y, priority, multicolour, expand X, colour, shape) and puts it on (sprite_put). Three calls."
  },
  {
   "address": 16020,
   "type": "line",
   "text": "Owes the player A more points, added to the count in $26 that score_tick pays out a point at a time; when the count passes 255, 255 go straight onto the BCD score at $21-$24 and one into the count, with 99999999 at most. Eight calls."
  },
  {
   "address": 16068,
   "type": "line",
   "text": "The same for points owed back, in $27: when the count passes 255, 255 come straight off the score, which stops at 0. Two calls: the transfer's penalty and the energiser."
  },
  {
   "address": 19456,
   "type": "line",
   "text": "Sprite shapes of the video bank, 64 bytes each from $4000 + 64 \u00d7 shape: shape $30, the 001's twin laser fired left or right, two short bars."
  },
  {
   "address": 19520,
   "type": "line",
   "text": "Shape $31, the twin laser fired up-left or down-right; also the shape in the unused sprite record at $6A23."
  },
  {
   "address": 19584,
   "type": "line",
   "text": "Shapes $32-$38, the small explosion, seven frames that explosion_step steps through, for a robot's shot that reaches a wall (shot_step)."
  },
  {
   "address": 20032,
   "type": "line",
   "text": "Shapes $39-$43, the big explosion, eleven frames, for everything explode blows up, a robot or a robot's shot, and for the player's end (out_of_energy)."
  },
  {
   "address": 21504,
   "type": "line",
   "text": "Shape $50, the console menu's picture for the robot enquiry."
  },
  {
   "address": 21568,
   "type": "line",
   "text": "Shapes $51-$53, parts of the console pictures of the 296, 420 and 516, as their records name them."
  },
  {
   "address": 21760,
   "type": "line",
   "text": "Shape $54, the 001's twin laser fired up or down, two short upright bars."
  },
  {
   "address": 21824,
   "type": "line",
   "text": "Shape $55, the twin laser fired up-right or down-left."
  },
  {
   "address": 21888,
   "type": "line",
   "text": "Shapes $56-$65, left halves of the console pictures (droid_picture mirrors each for the right) of the 123, 247, 249, 420, 476, 571, 614, 711 and 742."
  },
  {
   "address": 22912,
   "type": "line",
   "text": "Shapes $66-$75, picture halves of the 001, 139, 249, 296, 302, 476, 493, 516, 629, 821, 883 and 999."
  },
  {
   "address": 23936,
   "type": "line",
   "text": "Shapes $76-$85, picture halves of the 302, 329, 420, 476, 493, 571, 615, 629, 834 and 999."
  },
  {
   "address": 24960,
   "type": "line",
   "text": "Shapes $86-$90, picture halves of the 493, 598, 742 and 751."
  },
  {
   "address": 25664,
   "type": "line",
   "text": "Shapes $91-$A0, the shots of weapons 1 and 2, the player's and the robots', four directions each in two frames that the shot flips between."
  },
  {
   "address": 26688,
   "type": "line",
   "text": "Shape $A1, the console menu's picture for the deck plan, shown in one colour at double width (menu_sprites)."
  },
  {
   "address": 26752,
   "type": "line",
   "text": "Shape $A2, the console menu's picture for the side view, shown in one colour at double width (menu_sprites)."
  },
  {
   "address": 26816,
   "type": "line",
   "text": "Shape $A3, a striped block that no table or record names."
  },
  {
   "address": 26880,
   "type": "line",
   "text": "The status bar's frame, print_string records printed by the restart ($1135-$114A): row 0, its top edge ($55, nineteen $56 and $57, each two rows tall)."
  },
  {
   "address": 26903,
   "type": "line",
   "text": "The status bar's middle row, row 2 from column 0: the left edge $7C, the logo's characters $31-$37 at columns 15-23 and spaces. With no end byte of its own it runs on into str_bar_right and prints those bytes as characters at columns 30-33, where print_score's digits then land."
  },
  {
   "address": 26935,
   "type": "line",
   "text": "The status bar's right edge, row 2, column 38: a space and $7C."
  },
  {
   "address": 26940,
   "type": "line",
   "text": "The status bar's bottom edge, row 4 from column 0: $58, eighteen $59, $7A and $7B."
  },
  {
   "address": 26964,
   "type": "line",
   "text": "The player's accelerations, which deck_start copies to $34-$38: $50, the slowdown of a positive speed, as the low byte of \u2212$B0."
  },
  {
   "address": 26965,
   "type": "line",
   "text": "$D0, the push left or up, into $35."
  },
  {
   "address": 26966,
   "type": "line",
   "text": "$B0, the slowdown of a negative speed, into $37."
  },
  {
   "address": 26967,
   "type": "line",
   "text": "$30, the push right or down with the carry (\u2212$CF), into $38."
  },
  {
   "address": 26968,
   "type": "line",
   "text": "Status line word, row 2, column 2: \"Game on!\", at the start of a game."
  },
  {
   "address": 26980,
   "type": "line",
   "text": "Status line word: \"Continue\", after the pause."
  },
  {
   "address": 26993,
   "type": "line",
   "text": "Status line word: \"Game over\", when the 001 runs out of energy."
  },
  {
   "address": 27005,
   "type": "line",
   "text": "Status line word: \"Transfer\", fire held long enough for transfer mode."
  },
  {
   "address": 27018,
   "type": "line",
   "text": "Status line word: \"Mobile\", fire released (mobile)."
  },
  {
   "address": 27031,
   "type": "line",
   "text": "Status line word: \"Weapon\", while the host fires."
  },
  {
   "address": 27044,
   "type": "line",
   "text": "Status line word: \"Deadlock\", a transfer that ended in a draw, six of the middle column's twelve rows to each side ($8B = $F8); a new board follows."
  },
  {
   "address": 27057,
   "type": "line",
   "text": "Status line word: \"Colour\", set by f1 (colour_key)."
  },
  {
   "address": 27070,
   "type": "line",
   "text": "Status line word: \"Finish -\" and two digits, the transfer's countdown."
  },
  {
   "address": 27080,
   "type": "line",
   "text": "The countdown's tens digit in str_finish, written by countdown."
  },
  {
   "address": 27081,
   "type": "line",
   "text": "The countdown's units digit in str_finish, written by countdown."
  },
  {
   "address": 27083,
   "type": "line",
   "text": "Status line word: \"Captured\", shown as a transfer starts."
  },
  {
   "address": 27096,
   "type": "line",
   "text": "Status line word: \"Blk-Whte\", set by f2 (colour_key)."
  },
  {
   "address": 27108,
   "type": "line",
   "text": "Status line word: \"Console\", on the console's pages."
  },
  {
   "address": 27121,
   "type": "line",
   "text": "Status line word: \"Burnt Out\", a transfer lost as the 001."
  },
  {
   "address": 27133,
   "type": "line",
   "text": "Status line word: \"Complete\", a transfer won."
  },
  {
   "address": 27145,
   "type": "line",
   "text": "Status line word: \"Rejected\", a transfer lost with a host, which drops the player back to the 001."
  },
  {
   "address": 27158,
   "type": "line",
   "text": "Status line word: \"Briefing\", over the briefing at the start of each ship."
  },
  {
   "address": 27171,
   "type": "line",
   "text": "An 11-byte sprite record in show_sprite's form that nothing reads: sprite 0 at 0, 0, on, multicolour, colour $FA, shape $31."
  },
  {
   "address": 27182,
   "type": "line",
   "text": "The player's sprite record for show_sprite, used by ship_start: sprite 7 at X $AC, Y $AC, white ($F1), shape $4F, sprite 7's own shape, which sprite_number numbers."
  },
  {
   "address": 27193,
   "type": "line",
   "text": "The explosion's sprite record for out_of_energy: sprite 0 at the player's place, X $AC, Y $AC, multicolour, yellow ($F7), shape $39."
  },
  {
   "address": 27204,
   "type": "line",
   "text": "The eight colour schemes, 12 bytes each, which title_colours and deck_colours copy to $0215: the colours recolour gives the colour table's groups 0-11, entry 0 also the background and entry 3 the border. Each deck takes the one at $F160 (0-6), black and white mode scheme 0, the title 2-5 and a cleared deck 7."
  },
  {
   "address": 27300,
   "type": "line",
   "text": "The offset of each digit, 0-9, in digit_shapes, for sprite_number: three digits side by side in each band of 24 bytes."
  },
  {
   "address": 27310,
   "type": "line",
   "text": "The ten digits sprite_number writes onto a droid's sprite, eight rows each, laid out as sprite rows (three bytes to a row), three digits across each band."
  },
  {
   "address": 27406,
   "type": "line",
   "text": "The turning symbol on a droid's sprite, eight frames (energy_symbols, by the phase in the shape's byte $3F): row 2's left byte, copied to row 17 as well."
  },
  {
   "address": 27414,
   "type": "line",
   "text": "The turning symbol: row 2's middle byte, and row 17's; the right byte is always $80."
  },
  {
   "address": 27422,
   "type": "line",
   "text": "The turning symbol: row 3's left byte, and row 16's."
  },
  {
   "address": 27430,
   "type": "line",
   "text": "The turning symbol: row 3's middle byte, and row 16's."
  },
  {
   "address": 27438,
   "type": "line",
   "text": "The turning symbol: row 3's right byte, and row 16's."
  },
  {
   "address": 27446,
   "type": "line",
   "text": "The turning symbol: row 4's left byte, and row 15's."
  },
  {
   "address": 27454,
   "type": "line",
   "text": "The turning symbol: row 4's middle byte, and row 15's."
  },
  {
   "address": 27462,
   "type": "line",
   "text": "The turning symbol: row 4's right byte, and row 15's."
  },
  {
   "address": 27470,
   "type": "line",
   "text": "The turning symbol's top and bottom: row 0's middle byte by the phase / 4 (0 or $38), with row 19 taking the other entry."
  },
  {
   "address": 27472,
   "type": "line",
   "text": "The turning symbol: row 1's middle byte by the phase / 4, with row 18 taking the other entry."
  },
  {
   "address": 27474,
   "type": "line",
   "text": "The twelve probe points around the player that probe_cell reads, as column offsets from the player's cell: \u22121 to +2."
  },
  {
   "address": 27486,
   "type": "line",
   "text": "The probe points' row offsets from the player's cell, \u22122 to +2, beside probe_cols."
  },
  {
   "address": 27498,
   "type": "line",
   "text": "The first ten bytes of each sprite of a droid's picture, which droid_picture copies to $04-$0D: sprite 0 at X $28, Y $90, on, colour $F7, before the type's own shapes and colours."
  },
  {
   "address": 27508,
   "type": "line",
   "text": "Three bytes nothing reads: \"on\" and an end byte."
  },
  {
   "address": 27511,
   "type": "line",
   "text": "The first line of a droid's console pages, row 10, column 2: \" Unit type 000\", whose three digits unit_line fills in."
  },
  {
   "address": 27524,
   "type": "line",
   "text": "The class digit of str_unit, from $EA00."
  },
  {
   "address": 27525,
   "type": "line",
   "text": "The tens digit of str_unit, from $EA20."
  },
  {
   "address": 27526,
   "type": "line",
   "text": "The units digit of str_unit; $6B87 ends the string, and the $FF after it at $6B88 is read by nothing."
  },
  {
   "address": 27529,
   "type": "line",
   "text": "The console menu's eight sprite records, 11 bytes each, in show_sprite's form: sprite 0 off, the four pictures of the menu items on sprites 1-4 (shapes $4F and $50 at X $34, $A1 and $A2 at X $28 at double width, all in one colour, at Y $90, $AC, $C8 and $E0), and sprites 5-7 off."
  },
  {
   "address": 27549,
   "type": "line",
   "text": "The colour byte of the menu's second record, light grey ($FF): console puts it back on the item the choice leaves."
  },
  {
   "address": 27617,
   "type": "line",
   "text": "The console's four items, as addresses for console_jump: play ($2C24, an RTS), the robot enquiry, the deck plan and the side view."
  },
  {
   "address": 27625,
   "type": "line",
   "text": "The robot enquiry's five steps, as addresses for enquiry_jump: clear, choose, page, more and end."
  },
  {
   "address": 27635,
   "type": "line",
   "text": "The routine for each kind of slot, by bits 5-6 of its type, for update_droids: droid_step (a robot), shot_step (a robot's shot), explosion_step, and shot_step again for kind 3."
  },
  {
   "address": 27643,
   "type": "line",
   "text": "Status line word: \"Lift\", in the lift."
  },
  {
   "address": 27656,
   "type": "line",
   "text": "Status line word: \"More...\", while the enquiry waits to turn the page."
  },
  {
   "address": 27669,
   "type": "line",
   "text": "The height field's value for print_word: \"1.\" and two digits, then \" m\"."
  },
  {
   "address": 27671,
   "type": "line",
   "text": "The first digit of the height after the point, the high four bits of the record's byte 8."
  },
  {
   "address": 27672,
   "type": "line",
   "text": "The second digit of the height, the low four bits of byte 8."
  },
  {
   "address": 27676,
   "type": "line",
   "text": "The weight field's value for print_word: three digits and \" kg\", from the record's byte 9 counted out in hundreds, tens and units. This byte is the hundreds."
  },
  {
   "address": 27677,
   "type": "line",
   "text": "The tens digit of the weight."
  },
  {
   "address": 27678,
   "type": "line",
   "text": "The units digit of the weight."
  },
  {
   "address": 27683,
   "type": "line",
   "text": "animate_chars' list: its length in bytes (4), then the address of each group of four characters to rotate, low byte first: characters $4C-$4F ($7A60) and $7A-$7D ($7BD0) of the deck's set."
  },
  {
   "address": 27688,
   "type": "line",
   "text": "animate_tiles' entries for play, two of 34 bytes: the energiser, character $14, a swirl in four frames, and the deck plan's marker, $A0, on for three frames and off for one."
  },
  {
   "address": 27756,
   "type": "line",
   "text": "animate_tiles' entries for the transfer board: the two wire characters, $F1 and $F2, whose four frames move a pattern along the wire."
  },
  {
   "address": 27824,
   "type": "line",
   "text": "For each of the eight lift shafts, the column of its line in the side view, less one (find_lift)."
  },
  {
   "address": 27832,
   "type": "line",
   "text": "For each shaft, the first row of its line in the side view, less 10."
  },
  {
   "address": 27840,
   "type": "line",
   "text": "For each shaft, how many rows its line in the side view is long."
  },
  {
   "address": 27848,
   "type": "line",
   "text": "The deck of each lift entry. The four lift tables, $6CC8, $6CE7, $6D07 and $6D26, are read with entries 1-31: entries 1-30 are the lifts, eight shafts serving 2 to 6 decks each, and entry 31 is the first byte of the next table, whose row, $E5, matches no cell."
  },
  {
   "address": 27879,
   "type": "line",
   "text": "The shaft of each lift entry, 0-7: lift_move moves only between entries of one shaft, which are the decks it serves."
  },
  {
   "address": 27911,
   "type": "line",
   "text": "For each lift entry, the column of the view's left edge, in map cells, when the player stands on the lift: a multiple of 4, compared with $31 rounded down to 4 (find_lift) and made the scroll position by lift."
  },
  {
   "address": 27942,
   "type": "line",
   "text": "For each lift entry, the row of the view's top edge, in map cells, when the player stands on the lift (the player's cell is 8 rows below it): a multiple of 4, compared with $32 rounded down to 4 (find_lift) and made the scroll position by lift."
  },
  {
   "address": 27973,
   "type": "line",
   "text": "The alert's four colours, by the top two bits of the alert count: green, yellow, orange and red ($E5, $E7, $E8, $E2), for colour table entry $0816."
  },
  {
   "address": 27977,
   "type": "line",
   "text": "The colours the player's sprite flashes through below 8 energy outside transfer mode: greys, black and white."
  },
  {
   "address": 27985,
   "type": "line",
   "text": "The colours of the flicker of shots, and of the player's sprite in transfer mode below 8 energy: yellow, orange, red, light red and white."
  },
  {
   "address": 27993,
   "type": "line",
   "text": "A droid picture's sprite colour, by the colour pair in $EA60 for its type."
  },
  {
   "address": 28003,
   "type": "line",
   "text": "A droid picture's second multicolour ($D026), by the colour pair in $EA60."
  },
  {
   "address": 28013,
   "type": "line",
   "text": "What happens to an object when it meets another, for pair_rules, 8 bytes for each kind of the first (a robot, a robot's shot, an explosion, the player's shot) and one for each kind of the second, its first four used: robots bounce off robots ($08) and take damage from shots and explosions ($20, $04 for the player's); a robot's shot is removed on a robot ($10) and explodes on anything else ($40); an explosion and the player's shot are unchanged ($80, $02)."
  },
  {
   "address": 28045,
   "type": "line",
   "text": "The ten bytes choose_way reads for the eight ways, 0 for \u2212speed, 1 for none and 2 for +speed: the speed down for way y is way_y[y] and the speed across way_x[y], the same table two places on, so that turning the way by 90 degrees is a shift of two."
  },
  {
   "address": 28047,
   "type": "line",
   "text": "The speed across for each way, 0-7 (bit 7 left to bit 0 up-left), two places into way_y's table."
  },
  {
   "address": 28055,
   "type": "line",
   "text": "The host's top speed in pixels a pass, by its speed in $EA40 (1, 2, 4 or 8 give 5, 6, 7 and 7)."
  },
  {
   "address": 28064,
   "type": "line",
   "text": "The briefing's word list for print_words, dictionary words with $FE for a full stop and $FF at the end: \"This is the unit that you currently control. Prepare to board Robo-Freighter [ship] to eliminate all rogue robots.\""
  },
  {
   "address": 28077,
   "type": "line",
   "text": "The ship's name in the briefing, dictionary word $68 plus the ship number, written by briefing."
  },
  {
   "address": 28085,
   "type": "line",
   "text": "transfer_intro's first page: \"This is the unit that you currently control.\""
  },
  {
   "address": 28095,
   "type": "line",
   "text": "transfer_intro's second page: \"This is the unit that you wish to control. Prepare to transfer.\""
  },
  {
   "address": 28110,
   "type": "line",
   "text": "ship_clear's page: \"Congratulations! Ship is now clear of all robot activity. Bonus of 2000 awarded.\""
  },
  {
   "address": 28126,
   "type": "line",
   "text": "How often a host burns out a point of its maximum energy, by its class 0-9: alert tests the pass count against the mask, $7F for the 001, $3F for classes 1-4, $1F for 5-8 and $0F for 9."
  },
  {
   "address": 28136,
   "type": "line",
   "text": "The points the alert awards every 16 passes, by its colour: 0, 5, 10 or 25."
  },
  {
   "address": 28140,
   "type": "line",
   "text": "The points for a robot destroyed by a shot or the disruptor, or taken over, by its class 0-9: 0, 25, 50 and so on in 25s to 200, then 250 for class 9."
  },
  {
   "address": 28150,
   "type": "line",
   "text": "The points for a robot rammed to death, and those taken off for a transfer lost with a host, by class 0-9: 0, 10, 20 and so on to 80, then 200 for class 9."
  },
  {
   "address": 28160,
   "type": "line",
   "text": "The console's first page, row 12, column 12: \"Access granted.\""
  },
  {
   "address": 28178,
   "type": "line",
   "text": "The console's first page, row 15: \"Ship  :\", followed by the ship's name."
  },
  {
   "address": 28188,
   "type": "line",
   "text": "The console's first page, row 18: \"Deck  :\", followed by the deck number."
  },
  {
   "address": 28198,
   "type": "line",
   "text": "The console's first page, row 21: \"Alert :\", followed by the alert colour."
  },
  {
   "address": 28208,
   "type": "line",
   "text": "The game over page, row 10, column 13: \"Transmission\"."
  },
  {
   "address": 28223,
   "type": "line",
   "text": "The game over page, row 22, column 14: \"Terminated\"."
  },
  {
   "address": 28236,
   "type": "line",
   "text": "The shot shapes, four for each weapon 0-2, by the direction index shoot works out from the stick: 0 up-left or down-right, 1 up or down, 2 up-right or down-left, 3 left or right. aim_shot takes a robot's shot's shape from the same table."
  },
  {
   "address": 28248,
   "type": "line",
   "text": "The player's shot's speed by the stick, \u22121, 0 or +1 on each axis: \u221212, 0, +12 pixels a pass."
  },
  {
   "address": 28251,
   "type": "line",
   "text": "The five droid types the disruptor cannot hurt, as type indexes: 8, 17, 18, 20 and 23, the 420, 711, 742, 821 and 999."
  },
  {
   "address": 28256,
   "type": "line",
   "text": "Each deck's hum, the alert's effect $18, made a little different by deck_start: byte 5 of the effect, the slide period's first count, for decks 0-15."
  },
  {
   "address": 28272,
   "type": "line",
   "text": "Each deck's hum: byte 6 of effect $18, the slide period's reload, for decks 0-15."
  },
  {
   "address": 28288,
   "type": "line",
   "text": "Each deck's hum: byte 7 of effect $18, its count of slide periods, for decks 0-15."
  },
  {
   "address": 28304,
   "type": "line",
   "text": "\"VERSION 1.0\" in ASCII, ended by a zero: a version mark nothing prints or reads."
  },
  {
   "address": 28352,
   "type": "line",
   "text": "Raster interrupt at line 254, the last of the play screen's chain of four. Sets up the top of the next frame, the status line: the text font at $7000 ($D018 = $2D), a white background, 24 rows with no scroll ($D011 = $10, $D016 = $C8). Acknowledges the raster and sprite collision interrupts, chains to irq_top at line 91, counts the frame in $4B, and points sprites 0-6 at shape 0 (blank) so none shows over the status line."
  },
  {
   "address": 28420,
   "type": "line",
   "text": "Raster interrupt at line 91, where the deck view starts. After a short delay it sets the deck's background colour from $5A, the vertical and horizontal fine scroll from $49 and $48, the text mode from $6F1C (one colour, $C0, on the deck; multicolour, $D0, on the side view and the transfer board), and the blank character set at $4000 ($D018 = $21) for the band above the deck. Chains to irq_deck at line 118, and sets that handler's delay ($6F4F) to 1 when the vertical scroll $49 is 6, otherwise 7, so its writes land at the same place on the line."
  },
  {
   "address": 28444,
   "type": "line",
   "text": "irq_top's value for $D016, the operand of LDA #$D0 at $6F1B (the fine scroll is ORed in): $C0, one-colour text, for the deck, the title pages and the text pages; $D0, multicolour text, for the side view and the transfer board. Six writes: $C0 by restart, back_to_play, lift and text_page; $D0 by draw_side and transfer."
  },
  {
   "address": 28492,
   "type": "line",
   "text": "Raster interrupt at line 118. After the delay set by irq_top it switches to the character set chosen in its operand at $6F55 ($2F, the deck's tiles at $7800, during play; the game rewrites it to $2D for the text font or $21 for the blank set), sets the background from $2C, enables the sprite collision interrupt as well, and sets the next interrupt at line 246, with the screen's 25th row bit cleared. Copies the sprite shapes the game chose ($020D-$0214) into the screen's sprite pointers, clears the frame flag $4B, chains to irq_collide and calls the sound driver."
  },
  {
   "address": 28495,
   "type": "line",
   "text": "irq_deck's delay loop count, the operand of LDA #$07 at $6F4E: irq_top makes it 1 when the vertical fine scroll is 6, otherwise 7."
  },
  {
   "address": 28501,
   "type": "line",
   "text": "irq_deck's value for $D018, the operand of LDA #$2F at $6F54: $2F the deck's characters at $7800, $2D the text font at $7000, $21 the blank set at $4000."
  },
  {
   "address": 28608,
   "type": "line",
   "text": "The interrupt at line 246, below the deck, or earlier, at the moment two sprites first touch on the deck, since irq_deck enabled the collision interrupt for this stretch. Turns the sprite collision interrupt off again, sets the next interrupt at line 254 (irq_bottom), keeps the sprite-to-sprite collisions the frame produced in $4F (reading $D01E clears it), and calls cassette_motor."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "The text font ($D018 = $2D), 256 characters of 8 bytes: the status line above the deck (irq_bottom) and the console's text pages (text_page). Letters and digits are two rows tall, the top half at the code and the bottom at the code plus $80; the capitals and the wide m and w are two columns wide as well, their right half at the code plus $20."
  },
  {
   "address": 29696,
   "type": "line",
   "text": "The text font's characters $80-$FF, the bottom halves of the two-row letters and digits."
  },
  {
   "address": 30720,
   "type": "line",
   "text": "The deck's character set ($D018 = $2F), shown in one colour on the deck, the title pages and the deck plan, and in multicolour on the side view and the transfer board: the tiles of the deck map's blocks, the two-row letters of the title pages, and the board's wires and pieces. This is character 0; rotate_chars' instructions name characters 0-3 until next_anim first rewrites them."
  },
  {
   "address": 30728,
   "type": "line",
   "text": "Character 1 of the deck's set, named by rotate_chars' instructions as loaded."
  },
  {
   "address": 30736,
   "type": "line",
   "text": "Character 2 of the deck's set, named by rotate_chars' instructions as loaded."
  },
  {
   "address": 30744,
   "type": "line",
   "text": "Character 3 of the deck's set, named by rotate_chars' instructions as loaded."
  },
  {
   "address": 31744,
   "type": "line",
   "text": "The deck's characters $80-$FF: the bottom halves of the title's letters, the side view's characters (the ship picture's cells plus $80) and the transfer board's $F1-$FD."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "The dictionary of the droid descriptions and console pages: a count, 249, then the words, each starting with a byte with bit 7 set, in the game's alphabet. index_words lists their addresses at $4400/$4500, and a word is printed by its number: 0 \"influence\" to 248 \"awarded\"."
  },
  {
   "address": 50176,
   "type": "line",
   "text": "The dictionary from inside word 160, \"clamp\": words 161, \"lower\", to 248, \"awarded\", whose end runs up to the effects at $C610."
  },
  {
   "address": 50704,
   "type": "line",
   "text": "The sound effects, 31 records of 16 bytes for numbers 1-31 (start_effect): an instrument from $EAA0, then the channel's frequency, pitch slide, slide period count and reload, count of periods, pulse width, pulse slide, mode, restart frequency and follow-on effect. 1-4 are the four weapons' shots, 5 the game over, 6 a new game, 7 the beam-in, 8 low energy, 9-$0E the transfer and its results, $0F the static, $10 the lift, $11 a hit, $12 an explosion, $13 the 001's end, $14 the energiser, $15 and $16 the console, $17 a deck cleared, $18 the hum, $19 the player hit, $1A a ram, $1B the countdown, $1C transfer mode, $1D-$1F the title."
  },
  {
   "address": 51077,
   "type": "line",
   "text": "Bytes 5-7 of effect $18, the alert's hum (at $C780): deck_start writes the deck's three from hum_count, hum_period and hum_length here."
  },
  {
   "address": 51078,
   "type": "line",
   "text": "Byte 6 of effect $18, the hum's slide period reload, from hum_period."
  },
  {
   "address": 51079,
   "type": "line",
   "text": "Byte 7 of effect $18, the hum's count of slide periods, from hum_length."
  },
  {
   "address": 51200,
   "type": "line",
   "text": "The number of waypoints on each deck, 0-15: 5 to 24, 239 in all."
  },
  {
   "address": 51216,
   "type": "line",
   "text": "The address of each deck's waypoint list, low bytes; the lists follow at $C840-$CB0C, 3 bytes a waypoint (column, row and the ways on from it), in order of row, the first the deck's start point."
  },
  {
   "address": 51232,
   "type": "line",
   "text": "The high bytes of the waypoint lists' addresses."
  },
  {
   "address": 51248,
   "type": "line",
   "text": "For build_ship, each deck's base type before the ship number is added: places 12 down to 6 get the base plus the ship number plus a random 0-3; the deck's other places get smaller types."
  },
  {
   "address": 51264,
   "type": "line",
   "text": "The waypoint lists of decks 0-15: each waypoint a map cell, column and row, and a byte with a bit for each of the eight ways a robot may go on from it."
  },
  {
   "address": 52224,
   "type": "line",
   "text": "The title screen, the screen codes of 25 rows of 40, copied whole to the screen at $4800 by title_screen with the four pages after it; its colours come from the colour table. $CFE8-$CFFF, copied with it, are not part of the picture."
  },
  {
   "address": 53248,
   "type": "line",
   "text": "The title pages, in the RAM under the I/O: print_page records, each the map address (row and column, the row's high bits $80) and characters two rows tall up to a byte with bit 7 set, printed into the deck map, which the view then scrolls across. The first page: \"Hewson Consultants Ltd. presents Paradroid\", the copyright, \"Plug your joystick into port 2\" and the controls."
  },
  {
   "address": 53913,
   "type": "line",
   "text": "The second title page, from column 42: the story of the fleet of Robo-Freighters, the radionic beam from the asteroids and the prototype Influence Device."
  },
  {
   "address": 54851,
   "type": "line",
   "text": "The third title page, from column 82: the 001 Influence Device, its lasers, and why the host must be changed before it burns out."
  },
  {
   "address": 55378,
   "type": "line",
   "text": "Text of the third title page (\"channelled towards holding control\"). The code names $D852 only as colour RAM, row 2 from column 2, which colour_status fills with the I/O banked in."
  },
  {
   "address": 55418,
   "type": "line",
   "text": "Text of the third title page (\"of the host robot, as it attempts\"); the code names $D87A only as colour RAM, row 3 from column 2 (colour_status)."
  },
  {
   "address": 55616,
   "type": "line",
   "text": "Text of the third title page (\"to a new robot requires the device\"); the code names $D940 only as colour RAM, the play window's first row (draw_deck, draw_plan)."
  },
  {
   "address": 55797,
   "type": "line",
   "text": "The fourth title page, from column 122: what the remote terminal shows, the consoles and the three-digit numbers, whose first digit is the class."
  },
  {
   "address": 56697,
   "type": "line",
   "text": "The fifth title page, from column 170: the top and worst scores of the day, then the pause keys: fire and run-stop restart, clr-home quits, f7 cheese and f8 pause."
  },
  {
   "address": 56721,
   "type": "line",
   "text": "The top score's line, which score_line rewrites from its third byte ($DD93): \"6809 - AEB\" until it is beaten."
  },
  {
   "address": 56764,
   "type": "line",
   "text": "The worst score's line, rewritten from $DDBE: \"6502 - TSO\" until a lower score takes its place."
  },
  {
   "address": 56970,
   "type": "line",
   "text": "The credits, at the foot of the fifth page: \"Paradroid programmed by Andrew Braybrook. Sound advice by Steve Turner.\" The record at $DEDA, with no characters, ends the pages."
  },
  {
   "address": 57360,
   "type": "line",
   "text": "Entry to the transfer board in this block, a jump to $E016. Called from $22C3."
  },
  {
   "address": 57363,
   "type": "line",
   "text": "Entry to the score check at the end of a game, a jump to $E4E5. Called from game_over."
  },
  {
   "address": 57366,
   "type": "line",
   "text": "Draws and deals the transfer board, then lets the player choose a side. The board is drawn on a red background from the rows at $E613 (three), $E68B (twelve times) and $E6B3: a bar at column 3 and one at column 36, twelve wires from each running in to the middle column at 19-20, the pulsers' columns 1 and 38. Colour RAM gives the left side yellow ($FF in $7F) and the right purple ($FC in $87), both multicolour, with the middle column's cells alternating. Then each of the twelve rows gets a piece dealt at two places on each side, columns 10 and 14 on the left and 29 and 25 on the right (place_piece), the side variables swapped between sides (swap_sides). Sprite 7, the player, and the target's sprite (slot $6B) are put at either end of row 10, each showing its own numbered shape ($48 plus its sprite), with the two hosts' classes in $88 and $83. For up to 99 steps of the delay the stick moves the player to the left (yellow) or the right (purple), $7E holding the choice, with \"Colour?\" and the steps left, $8A in BCD, on the status bar; fire ends the choice early. $8A is left at $99 for the transfer itself."
  },
  {
   "address": 57890,
   "type": "line",
   "text": "Deals a piece onto the wire at row ($1C), column y. On a wire cell (below $F3) a random number from the noise of voice 3, 0-15, picks from the table at $E607 by rewriting the JMP at $E243: 0 an auto-pulser, 1 a terminator, 2 a colour changer, 3 a splitter, 4 a joiner, each 1 in 16, and plain wire, 11 in 16. On an empty cell, left by a piece in the row above, a splitter is dealt 1 time in 16 when three rows are left, and otherwise the wire on its inner side is cleared (cut_inner). A cell already holding a piece ($F3 and above) is left alone."
  },
  {
   "address": 57924,
   "type": "line",
   "text": "place_piece's jump to the piece dealt, the low byte of the JMP operand at $E243, from the table at $E607."
  },
  {
   "address": 57925,
   "type": "line",
   "text": "High byte of place_piece's jump to the piece, from $E608."
  },
  {
   "address": 57945,
   "type": "line",
   "text": "Piece 0: the side's pulser character, $82, on the wire in the side's colour, so the wire is fed without a pulser being spent on it."
  },
  {
   "address": 57954,
   "type": "line",
   "text": "Piece 1: the side's end character, $7D, on the wire in the side's colour, and the wire on its inner side cleared (cut_inner), so a pulse stops there. Not dealt at the outer place of a row (column 10 or 29)."
  },
  {
   "address": 57974,
   "type": "line",
   "text": "Piece 2: the square $F4 in the other side's colour, so a pulse through it arrives as the opponent's. Not dealt at the outer place of a row."
  },
  {
   "address": 57991,
   "type": "line",
   "text": "Piece 3, when at least three rows are left: if the next cell in is wire and no bar is in the way, a bar three rows tall ($F5, $F6, $F7, draw_bar) whose middle row keeps its wire from the side and whose top and bottom rows keep their wires to the middle, so one pulse reaches two segments. The top and bottom rows lose their wires from the side (cut_outer), the middle row its wire to the middle (cut_inner)."
  },
  {
   "address": 58100,
   "type": "line",
   "text": "Piece 4, when at least three rows are left: a bar three rows tall like the splitter's, the other way round: the top and bottom rows keep their wires from the side and the middle row its wire to the middle, so two wires feed one segment."
  },
  {
   "address": 58197,
   "type": "line",
   "text": "Clears the three cells beyond column y on the middle side of row ($1C), and the fourth too if it is the side's wire, keeping $1C and Y."
  },
  {
   "address": 58245,
   "type": "line",
   "text": "Clears the three cells beyond column y on the edge side of row ($1C); the fourth, unless it is empty or part of a bar, gets the side's end character $7D in the side's colour, so the cut wire ends in a terminator. Keeps $1C and Y."
  },
  {
   "address": 58310,
   "type": "line",
   "text": "Moves $1C/$1D one cell towards the middle: adds the side's step $7A/$7B, +1 on the left, \u22121 on the right."
  },
  {
   "address": 58324,
   "type": "line",
   "text": "Moves $1C/$1D one cell towards the edge, subtracting the side's step $7A/$7B."
  },
  {
   "address": 58338,
   "type": "line",
   "text": "Points $1E/$1F at the colour RAM cell for the screen cell at $1C/$1D ($1D + $90)."
  },
  {
   "address": 58350,
   "type": "line",
   "text": "Draws a bar three rows tall at column y of row ($1C) in the side's colour: $F5 on that row, $F6 and $F7 on the two below."
  },
  {
   "address": 58387,
   "type": "line",
   "text": "Swaps the variables of the two sides, so the same code deals the other side: wire characters $8C/$8D, pulser and end characters $82/$7D, colours $7F/$87, $81/$85, pulsers $80/$84, $8E/$86, and negates the step $7A/$7B."
  },
  {
   "address": 58451,
   "type": "line",
   "text": "Colours the top two rows of the middle column, $D9A3, in the colour in X, the side chosen, and keeps it in $8B."
  },
  {
   "address": 58477,
   "type": "line",
   "text": "Gives each side its pulsers: the player's host's class $88 plus 3, the target's class $83 plus 4, into $80 for the yellow side and $84 for the purple, by the side in $7E. Then colours the pulser columns down rows 12-23, column 1 in yellow and 38 in purple, one cell fewer than each count, the rest in the background's red."
  },
  {
   "address": 58579,
   "type": "line",
   "text": "Points $1C/$1D at the start of screen row A + 11 through the row address tables at $0CFB and $0D14, and $1E/$1F at its colour RAM."
  },
  {
   "address": 58597,
   "type": "line",
   "text": "At the end of a game: compares the 8-digit BCD score at $21-$24 with the top score of the day at $E70C. If higher, it takes the top score's place, \"Great Score!\" and \"Please enter your initials -\" are shown, the initials are entered (initials) and the line on the title page at $DD93 is rewritten (score_line). Otherwise, if lower than the worst score of the day at $E710, it takes that place, with \"Lowest Score of the Day!\" and the line at $DDBE. A score equal to either changes nothing."
  },
  {
   "address": 58678,
   "type": "line",
   "text": "Takes three initials into $E6EA-$E6EC (enter_letter). The second LDX #$00 repeats the first."
  },
  {
   "address": 58733,
   "type": "line",
   "text": "Lets the player choose initial $10: any push of the stick steps the letter back (up or left) or on (down or right) through the 27 at $E6F1, A to Z and a space, round at either end, shown at row 22, column 31 (the string at $E6E8) after each step of the delay; fire takes it, once released."
  },
  {
   "address": 58796,
   "type": "line",
   "text": "Writes a line of the title page's scores at ($1C) in the RAM under the I/O, which it banks in with interrupts off: the initials at columns 11-13, then the 8-digit score from column 0, its leading zeros as spaces (the last digit always shown)."
  },
  {
   "address": 58887,
   "type": "line",
   "text": "place_piece's six routines, for piece_jump: the auto-pulser, terminator, colour changer, splitter, joiner and, for every number from 5 to 15, plain wire ($E258, an RTS)."
  },
  {
   "address": 58888,
   "type": "line",
   "text": "The high bytes of place_piece's six routines, beside piece_routines."
  },
  {
   "address": 58899,
   "type": "line",
   "text": "The transfer board's top three rows, 40 characters each, which transfer_setup copies to the screen, mostly blank: the head of the middle column and the tops of the bars."
  },
  {
   "address": 59019,
   "type": "line",
   "text": "The board's wire row, copied twelve times: the pulser characters $FD and $F3 at columns 1 and 38, the bars ($F6) at 3 and 36, and the wires, $F1 on the left and $F2 on the right, running in to the middle column at 19-20."
  },
  {
   "address": 59059,
   "type": "line",
   "text": "The board's bottom row."
  },
  {
   "address": 59099,
   "type": "line",
   "text": "The transfer's status line while the player chooses a side: \"Colour?\" and the two digits of the steps left."
  },
  {
   "address": 59109,
   "type": "line",
   "text": "The tens digit of str_colour_q."
  },
  {
   "address": 59110,
   "type": "line",
   "text": "The units digit of str_colour_q."
  },
  {
   "address": 59112,
   "type": "line",
   "text": "The initials being entered, row 22, column 31: three letters and three spaces."
  },
  {
   "address": 59114,
   "type": "line",
   "text": "The first initial, a space until enter_letter sets it."
  },
  {
   "address": 59115,
   "type": "line",
   "text": "The second initial, set to a full stop ($28) by score_check before the entry."
  },
  {
   "address": 59116,
   "type": "line",
   "text": "The third initial, set to a full stop by score_check."
  },
  {
   "address": 59121,
   "type": "line",
   "text": "The 27 letters enter_letter steps through: A to Z and a space."
  },
  {
   "address": 59148,
   "type": "line",
   "text": "The top score of the day, 8 BCD digits, 00006809 at the start."
  },
  {
   "address": 59152,
   "type": "line",
   "text": "The worst score of the day, 8 BCD digits, 00006502 at the start."
  },
  {
   "address": 59156,
   "type": "line",
   "text": "Row 22, column 1: \"Please enter your initials -\"."
  },
  {
   "address": 59187,
   "type": "line",
   "text": "Row 10, column 13: \"Great Score!\", for a new top score."
  },
  {
   "address": 59202,
   "type": "line",
   "text": "Row 10, column 5: \"Lowest Score of the Day!\", for a new worst score."
  },
  {
   "address": 59392,
   "type": "line",
   "text": "The 32 blocks of 4 by 4 deck characters that build_deck lays down for the cells of a deck's plan, 16 bytes each, row by row; block 0 is sixteen of character 0."
  },
  {
   "address": 59904,
   "type": "line",
   "text": "Each droid type's class, 0-9, for types 0-23 (the 001 to the 999); the eight bytes after the 24 are not used, in this table and the four after it."
  },
  {
   "address": 59936,
   "type": "line",
   "text": "The last two digits of each type's number, in BCD, beside its class: $01 for the 001, $23 for the 123, $99 for the 999."
  },
  {
   "address": 59968,
   "type": "line",
   "text": "Each type's speed: 1, 2, 4 or 8, a robot's pixels a pass (choose_way) and, through top_speeds, the host's top speed."
  },
  {
   "address": 60000,
   "type": "line",
   "text": "Each type's colour pair for its console picture, 1-9, an index into picture_colour and picture_mc2."
  },
  {
   "address": 60032,
   "type": "line",
   "text": "Each type's weapon: 0 none for a robot (the 001's twin laser for the player), 1 and 2 the two guns, 3 the disruptor (the 711 and 742)."
  },
  {
   "address": 60064,
   "type": "line",
   "text": "The twelve instruments of start_effect, 8 bytes each: frequency, pulse width, control, attack/decay, sustain/release for the SID voice, then the gate time in frames."
  },
  {
   "address": 60160,
   "type": "line",
   "text": "The 001's record (type 0), an influence device: \"Robot activity influence device\", no drive, no brain, lasers, sensors none; height byte $00, weight 27 kg."
  },
  {
   "address": 60224,
   "type": "line",
   "text": "The 123's record (type 1), a disposal robot: \"Simple rubbish disposal robot\", tracks drive, no brain, no weapon, sensors spectral, infra-red; height byte $37, weight 85 kg."
  },
  {
   "address": 60288,
   "type": "line",
   "text": "The 139's record (type 2), a disposal robot: \"Created by Dr. Masternak to clean up large heaps of rubbish\", anti-grav drive, no brain, no weapon, sensors spectral; height byte $22, weight 61 kg."
  },
  {
   "address": 60352,
   "type": "line",
   "text": "The 247's record (type 3), a servant robot: \"Light duty servant robot\", anti-grav drive, neutronic brain, no weapon, sensors spectral; height byte $56, weight 78 kg."
  },
  {
   "address": 60416,
   "type": "line",
   "text": "The 249's record (type 4), a servant robot: \"Cheaper version of the anti-grav servant robot\", tripedal drive, neutronic brain, no weapon, sensors spectral; height byte $63, weight 83 kg."
  },
  {
   "address": 60480,
   "type": "line",
   "text": "The 296's record (type 5), a servant robot: \"This robot is used mainly for serving drinks\", tracks drive, neutronic brain, no weapon, sensors spectral; height byte $20, weight 47 kg."
  },
  {
   "address": 60544,
   "type": "line",
   "text": "The 302's record (type 6), a messenger robot: \"Common device for moving small packages\", anti-grav drive, no brain, no weapon, sensors spectral; height byte $07, weight 23 kg."
  },
  {
   "address": 60608,
   "type": "line",
   "text": "The 329's record (type 7), a messenger robot: \"Early type messenger robot\", wheels drive, no brain, no weapon, sensors spectral; height byte $07, weight 31 kg."
  },
  {
   "address": 60672,
   "type": "line",
   "text": "The 420's record (type 8), a maintenance robot: \"Slow maintenance robot\", tracks drive, neutronic brain, no weapon, sensors spectral; height byte $41, weight 57 kg."
  },
  {
   "address": 60736,
   "type": "line",
   "text": "The 476's record (type 9), a maintenance robot: \"Ship maintenance robot\", anti-grav drive, neutronic brain, lasers, sensors spectral, infra-red; height byte $32, weight 42 kg."
  },
  {
   "address": 60800,
   "type": "line",
   "text": "The 493's record (type 10), a maintenance robot: \"Slave maintenance droid\", anti-grav drive, neutronic brain, no weapon, sensors spectral; height byte $48, weight 51 kg."
  },
  {
   "address": 60864,
   "type": "line",
   "text": "The 516's record (type 11), a crew droid: \"Early crew droid\", bipedal drive, neutronic brain, no weapon, sensors spectral; height byte $57, weight 74 kg."
  },
  {
   "address": 60928,
   "type": "line",
   "text": "The 571's record (type 12), a crew droid: \"Standard crew droid\", bipedal drive, neutronic brain, no weapon, sensors spectral; height byte $76, weight 62 kg."
  },
  {
   "address": 60992,
   "type": "line",
   "text": "The 598's record (type 13), a crew droid: \"A highly sophisticated device\", bipedal drive, neutronic brain, no weapon, sensors spectral; height byte $72, weight 93 kg."
  },
  {
   "address": 61056,
   "type": "line",
   "text": "The 614's record (type 14), a sentinel droid: \"Low security sentinel droid\", bipedal drive, neutronic brain, laser rifle, sensors spectral, subsonic; height byte $93, weight 121 kg."
  },
  {
   "address": 61120,
   "type": "line",
   "text": "The 615's record (type 15), a sentinel droid: \"Sophisticated sentinel droid\", anti-grav drive, neutronic brain, lasers, sensors spectral, infra-red; height byte $20, weight 29 kg."
  },
  {
   "address": 61184,
   "type": "line",
   "text": "The 629's record (type 16), a sentinel droid: \"Slow sentinel droid\", tracks drive, neutronic brain, lasers, sensors spectral, subsonic; height byte $09, weight 59 kg."
  },
  {
   "address": 61248,
   "type": "line",
   "text": "The 711's record (type 17), a battle droid: \"Heavy duty battle droid\", bipedal drive, neutronic brain, disruptor, sensors ultra-sonic, radar; height byte $93, weight 102 kg."
  },
  {
   "address": 61312,
   "type": "line",
   "text": "The 742's record (type 18), a battle droid: \"This version is the one mainly used by the Military\", bipedal drive, neutronic brain, disruptor, sensors spectral, radar; height byte $87, weight 140 kg."
  },
  {
   "address": 61376,
   "type": "line",
   "text": "The 751's record (type 19), a battle droid: \"Very heavy duty battle droid\", bipedal drive, neutronic brain, lasers, sensors spectral; height byte $93, weight 227 kg."
  },
  {
   "address": 61440,
   "type": "line",
   "text": "The 821's record (type 20), a security droid: \"A very reliable anti-grav unit is fitted into this droid\", anti-grav drive, neutronic brain, lasers, sensors spectral, radar, infra-red; height byte $00, weight 28 kg."
  },
  {
   "address": 61504,
   "type": "line",
   "text": "The 834's record (type 21), a security droid: \"Early type anti-grav security droid\", anti-grav drive, neutronic brain, lasers, sensors spectral, radar; height byte $10, weight 34 kg."
  },
  {
   "address": 61568,
   "type": "line",
   "text": "The 883's record (type 22), a security droid: \"This droid was designed from archive data\", wheels drive, neutronic brain, exterminator, sensors spectral, radar; height byte $62, weight 79 kg."
  },
  {
   "address": 61632,
   "type": "line",
   "text": "The 999's record (type 23), a command cyborg: \"Experimental command cyborg\", anti-grav drive, primode brain, lasers, sensors infra-red, radar, subsonic; height byte $87, weight 162 kg."
  },
  {
   "address": 61696,
   "type": "line",
   "text": "Each deck's plan address, low bytes; the plans follow from $F249, packed as draw_plan reads them."
  },
  {
   "address": 61712,
   "type": "line",
   "text": "The high bytes of the decks' plan addresses."
  },
  {
   "address": 61728,
   "type": "line",
   "text": "Each deck's rectangle in the side view, for mark_deck: its first row, less 10."
  },
  {
   "address": 61744,
   "type": "line",
   "text": "Each deck's first column in the side view, less one."
  },
  {
   "address": 61760,
   "type": "line",
   "text": "How many rows deep each deck is in the side view."
  },
  {
   "address": 61776,
   "type": "line",
   "text": "How many cells wide each deck is in the side view."
  },
  {
   "address": 61792,
   "type": "line",
   "text": "Each deck's colour scheme, 0-6, an index into colour_schemes."
  },
  {
   "address": 61808,
   "type": "line",
   "text": "One more than the number of places build_ship fills on each deck; it fills 12 at most, so decks 10-12, whose bytes are 20, 18 and 16, get 12."
  },
  {
   "address": 61824,
   "type": "line",
   "text": "The ship's side view, 16 rows of 64 cells packed for draw_plan, with $80 added to every cell when it is drawn."
  },
  {
   "address": 62025,
   "type": "line",
   "text": "Deck 0's plan: 16 rows of 64 cells packed for draw_plan and build_deck, each cell a block from map_blocks."
  },
  {
   "address": 62089,
   "type": "line",
   "text": "Deck 1's plan."
  },
  {
   "address": 62245,
   "type": "line",
   "text": "Deck 2's plan."
  },
  {
   "address": 62300,
   "type": "line",
   "text": "Deck 3's plan."
  },
  {
   "address": 62572,
   "type": "line",
   "text": "Deck 4's plan."
  },
  {
   "address": 62811,
   "type": "line",
   "text": "Deck 5's plan."
  },
  {
   "address": 63067,
   "type": "line",
   "text": "Deck 6's plan."
  },
  {
   "address": 63352,
   "type": "line",
   "text": "Deck 7's plan."
  },
  {
   "address": 63559,
   "type": "line",
   "text": "Deck 8's plan."
  },
  {
   "address": 63737,
   "type": "line",
   "text": "Deck 9's plan."
  },
  {
   "address": 63862,
   "type": "line",
   "text": "Deck 10's plan."
  },
  {
   "address": 64152,
   "type": "line",
   "text": "Deck 11's plan."
  },
  {
   "address": 64485,
   "type": "line",
   "text": "Deck 12's plan."
  },
  {
   "address": 64800,
   "type": "line",
   "text": "Deck 13's plan."
  },
  {
   "address": 64943,
   "type": "line",
   "text": "Deck 14's plan."
  },
  {
   "address": 65227,
   "type": "line",
   "text": "Deck 15's plan, the last, to $FFF7."
  }
 ]
}