{
 "schema": 1,
 "platform": "c64",
 "game": "doctor-who-and-the-mines-of-terror",
 "build": "single packed program file, 29,175 bytes, SHA-256 8d143c7ac59882fe54844aa41d9996679e35bb100932e80f851191a3afb889bb",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    30720,
    31743,
    "screen RAM"
   ],
   [
    512,
    1023,
    "a backup copy of the object tables, written at run time from $1B20"
   ],
   [
    1024,
    2047,
    "status screen and its font, built at start-up from $4B00-$4EFF and the character ROM; the image holds the loader's picture there"
   ],
   [
    2048,
    2351,
    "programmer font glyphs copied from the character ROM at run time"
   ],
   [
    7568,
    7935,
    "object state cleared at every start ($9478-$9486)"
   ],
   [
    31744,
    32767,
    "second play-area screen and sprite pointers, drawn at run time"
   ],
   [
    56217,
    56567,
    "RAM under the I/O area: the game never banks the I/O out, so nothing reads these leftover bytes"
   ]
  ],
  "extra": [
   [
    16384,
    18431,
    "character set"
   ],
   [
    57344,
    64607,
    "the cavern map, 56 rows of 128 blocks, and the bytes after it"
   ],
   [
    20480,
    29695,
    "sprite images, pointers $40-$CF"
   ],
   [
    2352,
    2431,
    "Splinx Programmer box glyphs, authored"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 278,
   "type": "Undefined"
  },
  {
   "start": 279,
   "end": 303,
   "type": "Byte"
  },
  {
   "start": 304,
   "end": 990,
   "type": "Undefined"
  },
  {
   "start": 991,
   "end": 11599,
   "type": "Byte"
  },
  {
   "start": 11600,
   "end": 11605,
   "type": "Code"
  },
  {
   "start": 11606,
   "end": 11649,
   "type": "Byte"
  },
  {
   "start": 11650,
   "end": 11775,
   "type": "Undefined"
  },
  {
   "start": 11776,
   "end": 18508,
   "type": "Byte"
  },
  {
   "start": 18509,
   "end": 19021,
   "type": "Code"
  },
  {
   "start": 19022,
   "end": 19045,
   "type": "Word"
  },
  {
   "start": 19046,
   "end": 19071,
   "type": "Byte"
  },
  {
   "start": 19072,
   "end": 19077,
   "type": "Code"
  },
  {
   "start": 19078,
   "end": 20383,
   "type": "Byte"
  },
  {
   "start": 20384,
   "end": 20479,
   "type": "Undefined"
  },
  {
   "start": 20480,
   "end": 29759,
   "type": "Byte"
  },
  {
   "start": 29760,
   "end": 29887,
   "type": "Code"
  },
  {
   "start": 29888,
   "end": 29929,
   "type": "Byte"
  },
  {
   "start": 29930,
   "end": 30058,
   "type": "Code"
  },
  {
   "start": 30059,
   "end": 30096,
   "type": "Byte"
  },
  {
   "start": 30097,
   "end": 30281,
   "type": "Code"
  },
  {
   "start": 30282,
   "end": 30517,
   "type": "Byte"
  },
  {
   "start": 30518,
   "end": 30567,
   "type": "Lo/Hi Address"
  },
  {
   "start": 30568,
   "end": 30718,
   "type": "Byte"
  },
  {
   "start": 30719,
   "end": 30719,
   "type": "Undefined"
  },
  {
   "start": 30720,
   "end": 30847,
   "type": "Byte"
  },
  {
   "start": 30848,
   "end": 31735,
   "type": "Undefined"
  },
  {
   "start": 31736,
   "end": 31863,
   "type": "Byte"
  },
  {
   "start": 31864,
   "end": 31999,
   "type": "Undefined"
  },
  {
   "start": 32000,
   "end": 32119,
   "type": "Byte"
  },
  {
   "start": 32120,
   "end": 32759,
   "type": "Undefined"
  },
  {
   "start": 32760,
   "end": 32771,
   "type": "Byte"
  },
  {
   "start": 32772,
   "end": 33223,
   "type": "Code"
  },
  {
   "start": 33224,
   "end": 33241,
   "type": "Byte"
  },
  {
   "start": 33242,
   "end": 33352,
   "type": "Code"
  },
  {
   "start": 33353,
   "end": 33551,
   "type": "Byte"
  },
  {
   "start": 33552,
   "end": 34271,
   "type": "Code"
  },
  {
   "start": 34272,
   "end": 34272,
   "type": "Byte"
  },
  {
   "start": 34273,
   "end": 34373,
   "type": "Code"
  },
  {
   "start": 34374,
   "end": 34385,
   "type": "Byte"
  },
  {
   "start": 34386,
   "end": 34620,
   "type": "Code"
  },
  {
   "start": 34621,
   "end": 34699,
   "type": "Byte"
  },
  {
   "start": 34700,
   "end": 34843,
   "type": "Code"
  },
  {
   "start": 34844,
   "end": 34844,
   "type": "Byte"
  },
  {
   "start": 34845,
   "end": 34876,
   "type": "Code"
  },
  {
   "start": 34877,
   "end": 34986,
   "type": "Byte"
  },
  {
   "start": 34987,
   "end": 35553,
   "type": "Code"
  },
  {
   "start": 35554,
   "end": 35889,
   "type": "Byte"
  },
  {
   "start": 35890,
   "end": 36100,
   "type": "Code"
  },
  {
   "start": 36101,
   "end": 36102,
   "type": "Byte"
  },
  {
   "start": 36103,
   "end": 36150,
   "type": "Code"
  },
  {
   "start": 36151,
   "end": 36152,
   "type": "Byte"
  },
  {
   "start": 36153,
   "end": 36192,
   "type": "Code"
  },
  {
   "start": 36193,
   "end": 36203,
   "type": "Byte"
  },
  {
   "start": 36204,
   "end": 36558,
   "type": "Code"
  },
  {
   "start": 36559,
   "end": 36559,
   "type": "Byte"
  },
  {
   "start": 36560,
   "end": 36952,
   "type": "Code"
  },
  {
   "start": 36953,
   "end": 36988,
   "type": "Byte"
  },
  {
   "start": 36989,
   "end": 37098,
   "type": "Code"
  },
  {
   "start": 37099,
   "end": 37117,
   "type": "Byte"
  },
  {
   "start": 37118,
   "end": 37120,
   "type": "Code"
  },
  {
   "start": 37121,
   "end": 37121,
   "type": "Byte"
  },
  {
   "start": 37122,
   "end": 37283,
   "type": "Code"
  },
  {
   "start": 37284,
   "end": 37287,
   "type": "Byte"
  },
  {
   "start": 37288,
   "end": 38133,
   "type": "Code"
  },
  {
   "start": 38134,
   "end": 38136,
   "type": "Byte"
  },
  {
   "start": 38137,
   "end": 38141,
   "type": "PETSCII Text"
  },
  {
   "start": 38142,
   "end": 38142,
   "type": "Byte"
  },
  {
   "start": 38143,
   "end": 38346,
   "type": "Code"
  },
  {
   "start": 38347,
   "end": 39180,
   "type": "Byte"
  },
  {
   "start": 39181,
   "end": 39469,
   "type": "Code"
  },
  {
   "start": 39470,
   "end": 39470,
   "type": "Byte"
  },
  {
   "start": 39471,
   "end": 40029,
   "type": "Code"
  },
  {
   "start": 40030,
   "end": 40030,
   "type": "Byte"
  },
  {
   "start": 40031,
   "end": 40458,
   "type": "Code"
  },
  {
   "start": 40459,
   "end": 40459,
   "type": "Byte"
  },
  {
   "start": 40460,
   "end": 41169,
   "type": "Code"
  },
  {
   "start": 41170,
   "end": 41171,
   "type": "Undefined"
  },
  {
   "start": 41172,
   "end": 41258,
   "type": "Code"
  },
  {
   "start": 41259,
   "end": 41275,
   "type": "Byte"
  },
  {
   "start": 41276,
   "end": 41647,
   "type": "Code"
  },
  {
   "start": 41648,
   "end": 41655,
   "type": "Byte"
  },
  {
   "start": 41656,
   "end": 42205,
   "type": "Code"
  },
  {
   "start": 42206,
   "end": 42221,
   "type": "Byte"
  },
  {
   "start": 42222,
   "end": 42506,
   "type": "Code"
  },
  {
   "start": 42507,
   "end": 42507,
   "type": "Undefined"
  },
  {
   "start": 42508,
   "end": 42695,
   "type": "Code"
  },
  {
   "start": 42696,
   "end": 42697,
   "type": "Byte"
  },
  {
   "start": 42698,
   "end": 43303,
   "type": "Code"
  },
  {
   "start": 43304,
   "end": 43304,
   "type": "Undefined"
  },
  {
   "start": 43305,
   "end": 43529,
   "type": "Code"
  },
  {
   "start": 43530,
   "end": 43571,
   "type": "Byte"
  },
  {
   "start": 43572,
   "end": 43935,
   "type": "Code"
  },
  {
   "start": 43936,
   "end": 43979,
   "type": "Byte"
  },
  {
   "start": 43980,
   "end": 44457,
   "type": "Code"
  },
  {
   "start": 44458,
   "end": 44545,
   "type": "Byte"
  },
  {
   "start": 44546,
   "end": 44768,
   "type": "Code"
  },
  {
   "start": 44769,
   "end": 44887,
   "type": "Byte"
  },
  {
   "start": 44888,
   "end": 45460,
   "type": "Code"
  },
  {
   "start": 45461,
   "end": 45471,
   "type": "Byte"
  },
  {
   "start": 45472,
   "end": 46189,
   "type": "Code"
  },
  {
   "start": 46190,
   "end": 46198,
   "type": "Byte"
  },
  {
   "start": 46199,
   "end": 46692,
   "type": "Code"
  },
  {
   "start": 46693,
   "end": 46719,
   "type": "Byte"
  },
  {
   "start": 46720,
   "end": 47486,
   "type": "Code"
  },
  {
   "start": 47487,
   "end": 47541,
   "type": "Byte"
  },
  {
   "start": 47542,
   "end": 47816,
   "type": "Code"
  },
  {
   "start": 47817,
   "end": 47819,
   "type": "Byte"
  },
  {
   "start": 47820,
   "end": 48019,
   "type": "Code"
  },
  {
   "start": 48020,
   "end": 48059,
   "type": "Byte"
  },
  {
   "start": 48060,
   "end": 48144,
   "type": "Code"
  },
  {
   "start": 48145,
   "end": 48168,
   "type": "Byte"
  },
  {
   "start": 48169,
   "end": 48345,
   "type": "Code"
  },
  {
   "start": 48346,
   "end": 48351,
   "type": "Byte"
  },
  {
   "start": 48352,
   "end": 48436,
   "type": "Code"
  },
  {
   "start": 48437,
   "end": 48680,
   "type": "Byte"
  },
  {
   "start": 48681,
   "end": 49113,
   "type": "Code"
  },
  {
   "start": 49114,
   "end": 49133,
   "type": "Byte"
  },
  {
   "start": 49134,
   "end": 49280,
   "type": "Code"
  },
  {
   "start": 49281,
   "end": 49305,
   "type": "Byte"
  },
  {
   "start": 49306,
   "end": 49760,
   "type": "Code"
  },
  {
   "start": 49761,
   "end": 49804,
   "type": "Byte"
  },
  {
   "start": 49805,
   "end": 50179,
   "type": "Code"
  },
  {
   "start": 50180,
   "end": 50251,
   "type": "Byte"
  },
  {
   "start": 50252,
   "end": 50420,
   "type": "Code"
  },
  {
   "start": 50421,
   "end": 50446,
   "type": "Byte"
  },
  {
   "start": 50447,
   "end": 50806,
   "type": "Code"
  },
  {
   "start": 50807,
   "end": 51142,
   "type": "Byte"
  },
  {
   "start": 51143,
   "end": 51221,
   "type": "Code"
  },
  {
   "start": 51222,
   "end": 51223,
   "type": "Byte"
  },
  {
   "start": 51224,
   "end": 52245,
   "type": "Code"
  },
  {
   "start": 52246,
   "end": 52299,
   "type": "Byte"
  },
  {
   "start": 52300,
   "end": 53237,
   "type": "Code"
  },
  {
   "start": 53238,
   "end": 53247,
   "type": "Byte"
  },
  {
   "start": 53248,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 57344,
   "end": 64651,
   "type": "Byte"
  },
  {
   "start": 64652,
   "end": 65390,
   "type": "Code"
  },
  {
   "start": 65391,
   "end": 65465,
   "type": "Byte"
  },
  {
   "start": 65466,
   "end": 65482,
   "type": "Code"
  },
  {
   "start": 65483,
   "end": 65495,
   "type": "Byte"
  },
  {
   "start": 65496,
   "end": 65510,
   "type": "Code"
  },
  {
   "start": 65511,
   "end": 65529,
   "type": "Byte"
  },
  {
   "start": 65530,
   "end": 65535,
   "type": "Word"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "cpu_port_ddr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "glyph_merge_lo_ptrs",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13,
   "name": "glyph_merge_hi_ptrs",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 23,
   "name": "pixel_pair_masks",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 27,
   "name": "countdown_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28,
   "name": "countdown_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29,
   "name": "countdown_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30,
   "name": "lives",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31,
   "name": "splinx_battery",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32,
   "name": "camera_x_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33,
   "name": "camera_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34,
   "name": "camera_y_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35,
   "name": "camera_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36,
   "name": "camera_col_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37,
   "name": "camera_col_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38,
   "name": "camera_row_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39,
   "name": "camera_row_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40,
   "name": "sprite_origin_x_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41,
   "name": "sprite_origin_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42,
   "name": "sprite_origin_y_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "sprite_origin_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44,
   "name": "sprite_origin_y2_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45,
   "name": "sprite_origin_y2_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47,
   "name": "prog_cursor",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48,
   "name": "splinx_program",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "prog_command_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59,
   "name": "prog_frame_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60,
   "name": "pocket_selected",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "pockets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 66,
   "name": "marker_slots",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 67,
   "name": "marker_slot_2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 68,
   "name": "marker_slot_3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 69,
   "name": "marker_slot_4",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 70,
   "name": "thrown_obj",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 72,
   "name": "thrown_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 74,
   "name": "thrown_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 76,
   "name": "thrown_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 78,
   "name": "event_flag_4e",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 79,
   "name": "heatonite_state",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 80,
   "name": "event_flag_50",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 81,
   "name": "hazard_timer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 82,
   "name": "screen_buffer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 83,
   "name": "frame_count_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 84,
   "name": "frame_count_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 85,
   "name": "frame_count_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 86,
   "name": "zone",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 87,
   "name": "score_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 88,
   "name": "score_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 89,
   "name": "score_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 90,
   "name": "tmp_ptr_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 91,
   "name": "tmp_ptr_a_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 92,
   "name": "tmp_ptr_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 93,
   "name": "tmp_ptr_b_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 94,
   "name": "fine_scroll_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 95,
   "name": "fine_scroll_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 96,
   "name": "pos_x_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 97,
   "name": "pos_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 98,
   "name": "pos_y_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 99,
   "name": "pos_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 100,
   "name": "probe_x_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 101,
   "name": "probe_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 102,
   "name": "probe_y_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 103,
   "name": "probe_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 104,
   "name": "tmp_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 105,
   "name": "tmp_flag",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 106,
   "name": "f3_latch",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 107,
   "name": "irq_save_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 108,
   "name": "irq_save_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 109,
   "name": "irq_save_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 110,
   "name": "scroll_stage",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 111,
   "name": "scroll_block_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 112,
   "name": "scroll_block_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 113,
   "name": "scroll_pending",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 114,
   "name": "scroll_direction",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 115,
   "name": "scroll_table_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 116,
   "name": "scroll_copy_flag",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 117,
   "name": "move_blocked",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 120,
   "name": "probe_block",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 121,
   "name": "sprite_slot_obj",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 129,
   "name": "sprite_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 130,
   "name": "overlay_obj",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 131,
   "name": "overlay_state",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 132,
   "name": "irq_band3_line",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 133,
   "name": "overlay_col_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 134,
   "name": "overlay_col_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 135,
   "name": "overlay_row_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 136,
   "name": "overlay_row_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 137,
   "name": "throw_stand",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 138,
   "name": "doctor_facing",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 139,
   "name": "overlay_list",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 146,
   "name": "overlay_list_7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 171,
   "name": "overlay_list_20",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 174,
   "name": "overlay_list_23",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 175,
   "name": "overlay_list_24",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 180,
   "name": "overlay_list_29",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 192,
   "name": "overlay_list_35",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 203,
   "name": "move_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 204,
   "name": "move_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 205,
   "name": "fire_pressed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 206,
   "name": "key_unused",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 207,
   "name": "key_f3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 208,
   "name": "key_f1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 209,
   "name": "key_f7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 210,
   "name": "key_f5",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 211,
   "name": "key_s",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 212,
   "name": "stick_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 213,
   "name": "stick_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 214,
   "name": "f1_latch",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 215,
   "name": "s_latch",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 216,
   "name": "fire_latch",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 217,
   "name": "dist_x_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 218,
   "name": "dist_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 219,
   "name": "dist_y_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 220,
   "name": "dist_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 221,
   "name": "dir_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 222,
   "name": "dir_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 223,
   "name": "terrain_result",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 224,
   "name": "busy_flag",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 225,
   "name": "music_running",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 226,
   "name": "tune",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 227,
   "name": "music_v1_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 228,
   "name": "music_v1_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 229,
   "name": "music_v2_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 230,
   "name": "music_v2_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 231,
   "name": "event_flag_e7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 232,
   "name": "event_code",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 233,
   "name": "pickup_cooldown",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 234,
   "name": "status_scroll_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 235,
   "name": "terrain_prop_1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 236,
   "name": "terrain_prop_2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 237,
   "name": "terrain_prop_3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 238,
   "name": "terrain_prop_4",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 239,
   "name": "bottom_band_bg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 241,
   "name": "air_timer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 242,
   "name": "throw_slot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 243,
   "name": "sfx3_freq_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 244,
   "name": "sfx3_freq_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 245,
   "name": "sfx_current",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 246,
   "name": "sfx_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 247,
   "name": "lift_riding",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 248,
   "name": "lift_dir",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 249,
   "name": "lift_stop",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 250,
   "name": "lift_wait",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 251,
   "name": "car_riding",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 252,
   "name": "car_dir",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 253,
   "name": "car_stop",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 254,
   "name": "car_wait",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 255,
   "name": "prog_column",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 256,
   "name": "stack_page",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 512,
   "name": "obj_backup_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 592,
   "name": "obj_backup_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 672,
   "name": "obj_backup_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 752,
   "name": "obj_backup_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 768,
   "name": "obj_backup_page2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 832,
   "name": "obj_backup_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 912,
   "name": "obj_backup_1cb0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 991,
   "name": "loader_leftover_03df",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1024,
   "name": "status_screen",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1064,
   "name": "status_row1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1070,
   "name": "status_score",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1103,
   "name": "status_msg_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1104,
   "name": "status_msg_src",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1106,
   "name": "status_item_name",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1143,
   "name": "status_msg_entry",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1144,
   "name": "status_row3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1280,
   "name": "status_font_page1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1536,
   "name": "status_font_page2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1760,
   "name": "status_font_letters",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1792,
   "name": "status_font_page3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1960,
   "name": "status_font_z_slot",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2016,
   "name": "status_font_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2040,
   "name": "status_sprite_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2048,
   "name": "prog_font",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2056,
   "name": "prog_font_letters",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2264,
   "name": "prog_font_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2312,
   "name": "prog_font_digits_6",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2344,
   "name": "prog_font_box",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2352,
   "name": "programmer_box_glyphs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2432,
   "name": "ending_pos_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2440,
   "name": "ending_pos_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2448,
   "name": "ending_pos_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2456,
   "name": "ending_pos_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2464,
   "name": "dissolve_order",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2532,
   "name": "ending_sprite_images",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2688,
   "name": "map_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2752,
   "name": "map_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2816,
   "name": "prog_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3008,
   "name": "prog_gauge_sprite",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3072,
   "name": "prog_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3341,
   "name": "prog_screen_row8",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3970,
   "name": "prog_screen_steps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4088,
   "name": "prog_sprite_ptr_0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4089,
   "name": "prog_sprite_ptr_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4090,
   "name": "prog_sprite_ptr_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4091,
   "name": "prog_sprite_ptr_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "prog_colour_ram",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4146,
   "name": "prog_colour_title",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5120,
   "name": "block_ptr_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5376,
   "name": "block_ptr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5632,
   "name": "char_terrain_class",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5792,
   "name": "char_class_a0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5840,
   "name": "item_icon_char",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5920,
   "name": "obj_name_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5936,
   "name": "digit_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6000,
   "name": "name_lives",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6010,
   "name": "name_splinx",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6020,
   "name": "name_marker_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6030,
   "name": "name_marker_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6040,
   "name": "name_marker_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6050,
   "name": "name_marker_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6060,
   "name": "name_pick_axe",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6070,
   "name": "name_mat",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6080,
   "name": "name_crystal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6090,
   "name": "name_pass_card",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6100,
   "name": "name_spanner",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6110,
   "name": "name_platform",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6120,
   "name": "name_air_mask",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6130,
   "name": "name_box",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6140,
   "name": "name_detonator",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6150,
   "name": "name_explosives",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6160,
   "name": "name_capsule",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6170,
   "name": "name_activator",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6180,
   "name": "name_circuit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6190,
   "name": "name_egg",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6200,
   "name": "name_chemicals",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6210,
   "name": "name_gem",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6224,
   "name": "obj_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6225,
   "name": "obj_colour_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6250,
   "name": "obj_colour_1a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6251,
   "name": "obj_colour_1b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6304,
   "name": "obj_expand",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6384,
   "name": "obj_width",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6464,
   "name": "obj_height",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6496,
   "name": "item_icon_width",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6544,
   "name": "item_icon_height",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6576,
   "name": "obj_hit_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6656,
   "name": "obj_hit_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6688,
   "name": "obj_hit_vert",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6708,
   "name": "obj_hit_vert_14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6740,
   "name": "obj_hit_vert_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6768,
   "name": "obj_frame_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6778,
   "name": "obj_1a70_0a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6816,
   "name": "chase_range",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6864,
   "name": "obj_behind",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6865,
   "name": "obj_behind_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6944,
   "name": "obj_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6958,
   "name": "obj_state_0e",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6992,
   "name": "obj_state_30",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6993,
   "name": "obj_state_31",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6994,
   "name": "obj_state_32",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6995,
   "name": "obj_state_33",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6996,
   "name": "obj_state_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6997,
   "name": "obj_state_35",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6998,
   "name": "obj_state_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7024,
   "name": "obj_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7025,
   "name": "obj_x_lo_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7067,
   "name": "obj_x_lo_2b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7078,
   "name": "obj_x_lo_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7104,
   "name": "obj_x_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7105,
   "name": "obj_x_hi_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7147,
   "name": "obj_x_hi_2b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7156,
   "name": "obj_x_hi_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7158,
   "name": "obj_x_hi_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7184,
   "name": "obj_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7185,
   "name": "obj_y_lo_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7200,
   "name": "obj_tables_page2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7227,
   "name": "obj_y_lo_2b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7236,
   "name": "obj_y_lo_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7238,
   "name": "obj_y_lo_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7264,
   "name": "obj_y_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7265,
   "name": "obj_y_hi_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7307,
   "name": "obj_y_hi_2b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7316,
   "name": "obj_y_hi_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7318,
   "name": "obj_y_hi_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7344,
   "name": "obj_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7356,
   "name": "obj_flags_0c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7370,
   "name": "obj_flags_1a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7371,
   "name": "obj_flags_1b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7379,
   "name": "obj_flags_23",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7404,
   "name": "obj_flags_3c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7405,
   "name": "obj_flags_3d",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7416,
   "name": "obj_flags_48",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7420,
   "name": "obj_flags_4c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7424,
   "name": "cell_states",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7432,
   "name": "cell_state_8",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7435,
   "name": "cell_state_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7439,
   "name": "cell_state_f",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7442,
   "name": "spanner_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7450,
   "name": "hit_counts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7454,
   "name": "restart_visited",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7455,
   "name": "restart_visited_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7464,
   "name": "first_restart_done",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7465,
   "name": "restart_point",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7472,
   "name": "obj_sprite",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7473,
   "name": "obj_sprite_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7474,
   "name": "obj_sprite_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7524,
   "name": "obj_sprite_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7532,
   "name": "obj_sprite_3c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7533,
   "name": "obj_sprite_3d",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7544,
   "name": "obj_sprite_48",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7548,
   "name": "obj_sprite_4c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7552,
   "name": "obj_holding",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7554,
   "name": "splinx_holding",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7562,
   "name": "obj_holding_0a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7564,
   "name": "obj_holding_0c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7600,
   "name": "obj_facing",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7648,
   "name": "obj_vert_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7680,
   "name": "obj_tables_tail",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7696,
   "name": "sprite_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7704,
   "name": "sprite_x_msb",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7712,
   "name": "sprite_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7728,
   "name": "chase_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7776,
   "name": "chase_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7824,
   "name": "chase_flag",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7872,
   "name": "chase_lock",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7936,
   "name": "tune0_v1_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8144,
   "name": "tune0_v2_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8205,
   "name": "a_200D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 8269,
   "name": "tune_data_204d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8296,
   "name": "tune0_v1_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8712,
   "name": "tune0_v2_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9008,
   "name": "tune1_v1_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9128,
   "name": "tune1_v2_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9264,
   "name": "tune1_v1_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9504,
   "name": "tune1_v2_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9768,
   "name": "tune2_v1_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9920,
   "name": "tune3_v2_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9944,
   "name": "tune2_v2_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10080,
   "name": "tune2_v1_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10088,
   "name": "tune3_v1_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10392,
   "name": "tune3_v2_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10432,
   "name": "tune2_v2_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10728,
   "name": "tune4_v1_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10888,
   "name": "tune4_v2_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11016,
   "name": "tune4_v1_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11336,
   "name": "tune4_v2_notes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11584,
   "name": "orphan_fragment_2d40",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11600,
   "name": "tardis_music_off",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11606,
   "name": "fill_2d56",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11776,
   "name": "alt_glyphs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12032,
   "name": "char_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12090,
   "name": "char_colour_3a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12193,
   "name": "char_colour_a1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12288,
   "name": "block_defs_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13312,
   "name": "block_defs_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14336,
   "name": "block_defs_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15360,
   "name": "block_defs_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "play_charset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17408,
   "name": "play_charset_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18432,
   "name": "startup_unused_clear_0800",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18509,
   "name": "game_entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18611,
   "name": "b_48B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18618,
   "name": "b_48BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18628,
   "name": "b_48C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18637,
   "name": "b_48CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18646,
   "name": "b_48D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18655,
   "name": "b_48DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18666,
   "name": "b_48EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18677,
   "name": "startup_build_alphabet_glyphs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18685,
   "name": "b_48FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18700,
   "name": "b_490C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18708,
   "name": "b_4914",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18721,
   "name": "b_4921",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18732,
   "name": "b_492C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18741,
   "name": "b_4935",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18754,
   "name": "b_4942",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18772,
   "name": "b_4954",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18784,
   "name": "startup_init_variables",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18848,
   "name": "b_49A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18857,
   "name": "b_49A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18886,
   "name": "startup_restore_saved_game",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18896,
   "name": "b_49D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18907,
   "name": "b_49DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18937,
   "name": "b_49F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18951,
   "name": "startup_final_setup",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 18953,
   "name": "b_4A09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19022,
   "name": "zp_word_table_init",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19046,
   "name": "zp_init_last_byte",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19072,
   "name": "startup_exit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 19078,
   "name": "startup_padding",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19200,
   "name": "status_screen_src",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19240,
   "name": "f_4B28",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19456,
   "name": "status_font_src_4c00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19712,
   "name": "status_font_src_4d00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19968,
   "name": "status_font_src_4e00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20224,
   "name": "status_colour_src",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20480,
   "name": "sprite_images_5000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21504,
   "name": "sprite_images_5400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22528,
   "name": "sprite_images_5800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23552,
   "name": "sprite_images_5c00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24576,
   "name": "sprite_images_6000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25600,
   "name": "sprite_images_6400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26624,
   "name": "sprite_images_6800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27648,
   "name": "sprite_images_6c00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28672,
   "name": "sprite_images_7000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29696,
   "name": "tardis_sprite_image",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29760,
   "name": "main_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29774,
   "name": "b_744E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29776,
   "name": "a_7450",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29811,
   "name": "b_7473",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29814,
   "name": "main_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 29849,
   "name": "b_7499",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29888,
   "name": "music_v1_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29889,
   "name": "music_v2_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29890,
   "name": "music_v1_dur_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29895,
   "name": "music_v1_dur_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29900,
   "name": "music_v2_dur_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29905,
   "name": "music_v2_dur_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29910,
   "name": "music_v1_notes_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29915,
   "name": "music_v1_notes_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29920,
   "name": "music_v2_notes_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29925,
   "name": "music_v2_notes_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29930,
   "name": "music_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29941,
   "name": "b_74F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29976,
   "name": "b_7518",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29986,
   "name": "b_7522",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29996,
   "name": "b_752C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30006,
   "name": "b_7536",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30010,
   "name": "r_753A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30011,
   "name": "music_even_frame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30024,
   "name": "music_start",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 30041,
   "name": "b_7559",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30059,
   "name": "sid_init_list",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30097,
   "name": "music_select_tune",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30144,
   "name": "music_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30161,
   "name": "b_75D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30178,
   "name": "r_75E2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30179,
   "name": "b_75E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30192,
   "name": "b_75F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30205,
   "name": "b_75FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30211,
   "name": "a_7603",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30212,
   "name": "a_7604",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30226,
   "name": "b_7612",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30229,
   "name": "b_7615",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30242,
   "name": "b_7622",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30255,
   "name": "b_762F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30261,
   "name": "a_7635",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30262,
   "name": "a_7636",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30276,
   "name": "b_7644",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30279,
   "name": "b_7647",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30282,
   "name": "route_waypoints",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30294,
   "name": "a_7656",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30306,
   "name": "a_7662",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30318,
   "name": "a_766E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30330,
   "name": "a_767A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30338,
   "name": "a_7682",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30346,
   "name": "a_768A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30354,
   "name": "a_7692",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30362,
   "name": "a_769A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30374,
   "name": "a_76A6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30382,
   "name": "a_76AE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30390,
   "name": "a_76B6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30398,
   "name": "a_76BE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30402,
   "name": "a_76C2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30406,
   "name": "a_76C6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30414,
   "name": "a_76CE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30422,
   "name": "a_76D6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30434,
   "name": "a_76E2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30446,
   "name": "a_76EE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30454,
   "name": "a_76F6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30462,
   "name": "a_76FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30478,
   "name": "a_770E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30494,
   "name": "a_771E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30502,
   "name": "route_ptr_lo_base",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30510,
   "name": "a_772E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30518,
   "name": "route_ptr_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30527,
   "name": "f_773F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30552,
   "name": "f_7758",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30568,
   "name": "route_last_offset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30577,
   "name": "f_7771",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30593,
   "name": "entity_x_reach",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30602,
   "name": "f_778A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30618,
   "name": "entity_kind_flag",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30643,
   "name": "entity_anim_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30647,
   "name": "f_77B7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30651,
   "name": "f_77BB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30653,
   "name": "f_77BD",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30660,
   "name": "f_77C4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30669,
   "name": "entity_toggle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30678,
   "name": "f_77D6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30694,
   "name": "entity_anim_count",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30720,
   "name": "screen_a_and_save_block",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30784,
   "name": "f_7840",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 31736,
   "name": "sprite_ptrs_screen_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31744,
   "name": "screen_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32000,
   "name": "saved_status_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32760,
   "name": "sprite_ptrs_screen_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "irq_bottom_d018_by_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32770,
   "name": "irq_play_d018_by_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32772,
   "name": "irq_exit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32784,
   "name": "irq_raster",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32792,
   "name": "irq_band_select",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32793,
   "name": "b_8019",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32864,
   "name": "b_8060",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32866,
   "name": "b_8062",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32935,
   "name": "b_80A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32947,
   "name": "irq_lower_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32962,
   "name": "b_80C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32986,
   "name": "wait_frame_and_update_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33037,
   "name": "b_810D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33066,
   "name": "b_812A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33075,
   "name": "sprite_update_from_list",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33099,
   "name": "b_814B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33145,
   "name": "b_8179",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33159,
   "name": "b_8187",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33166,
   "name": "b_818E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33177,
   "name": "b_8199",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33192,
   "name": "b_81A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33224,
   "name": "pad_81c8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33225,
   "name": "sprite_enable_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33234,
   "name": "sprite_bit_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33242,
   "name": "sprite_list_add_object",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33264,
   "name": "b_81F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33299,
   "name": "j_8213",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33324,
   "name": "r_822C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33325,
   "name": "b_822D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33353,
   "name": "pad_8249",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33354,
   "name": "charobj_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33355,
   "name": "charobj_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33356,
   "name": "charobj_bg_char",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33357,
   "name": "charobj_cell_code",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33358,
   "name": "charobj_list_end",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33359,
   "name": "charobj_slot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33360,
   "name": "slot_char_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33392,
   "name": "slot_char_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33424,
   "name": "slot_char_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33456,
   "name": "slot_char_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33472,
   "name": "charobj_drawn_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33488,
   "name": "slot_bg_char",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33520,
   "name": "charobj_drawn_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33552,
   "name": "charobj_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33568,
   "name": "b_8320",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33573,
   "name": "b_8325",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33581,
   "name": "b_832D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33590,
   "name": "b_8336",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33681,
   "name": "b_8391",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33684,
   "name": "b_8394",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33689,
   "name": "j_8399",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33718,
   "name": "b_83B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33758,
   "name": "b_83DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33795,
   "name": "b_8403",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33805,
   "name": "b_840D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33814,
   "name": "b_8416",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33817,
   "name": "b_8419",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33827,
   "name": "b_8423",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33833,
   "name": "b_8429",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33838,
   "name": "b_842E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33846,
   "name": "b_8436",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33892,
   "name": "b_8464",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33910,
   "name": "charobj_bg_char_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33961,
   "name": "patch_maprow_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33962,
   "name": "patch_maprow_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33979,
   "name": "patch_tilechars_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33980,
   "name": "patch_tilechars_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33983,
   "name": "charobj_remove_cell",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33996,
   "name": "b_84CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34009,
   "name": "b_84D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34038,
   "name": "b_84F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34047,
   "name": "b_84FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34053,
   "name": "b_8505",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34075,
   "name": "b_851B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34086,
   "name": "b_8526",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34088,
   "name": "b_8528",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34097,
   "name": "b_8531",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34106,
   "name": "b_853A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34115,
   "name": "b_8543",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34125,
   "name": "b_854D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34264,
   "name": "b_85D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34272,
   "name": "charobj_scan_cursor",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34273,
   "name": "charobj_scan_wrap",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 34275,
   "name": "b_85E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34281,
   "name": "charobj_find_work",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34306,
   "name": "b_8602",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34342,
   "name": "b_8626",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34362,
   "name": "b_863A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34374,
   "name": "charobj_merge_entry_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34380,
   "name": "charobj_merge_loop_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34386,
   "name": "charobj_composite_char",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34440,
   "name": "b_8688",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34475,
   "name": "b_86AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34494,
   "name": "b_86BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34539,
   "name": "patch_bgchar_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34540,
   "name": "patch_bgchar_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34546,
   "name": "b_86F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34551,
   "name": "b_86F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34552,
   "name": "patch_merge_entry",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34553,
   "name": "b_86F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34556,
   "name": "b_86FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34557,
   "name": "patch_merge_loop",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34558,
   "name": "j_86FE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34587,
   "name": "b_871B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34596,
   "name": "b_8724",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34611,
   "name": "j_8733",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34621,
   "name": "slot_redraw_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34622,
   "name": "slot_redraw_start",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34630,
   "name": "screen_row_offset_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34655,
   "name": "screen_row_offset_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34680,
   "name": "scroll_dir_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34688,
   "name": "scroll_dir_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34696,
   "name": "screen_hi_by_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34698,
   "name": "screen_hi_other_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34700,
   "name": "slot_redraw_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34713,
   "name": "slot_draw_on_screens",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34727,
   "name": "b_87A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34837,
   "name": "b_8815",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34844,
   "name": "unused_loop_counter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34845,
   "name": "charobj_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34849,
   "name": "b_8821",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34859,
   "name": "b_882B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34868,
   "name": "b_8834",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34877,
   "name": "unreferenced_find_loop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34891,
   "name": "scroll_phase_limit_h",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34907,
   "name": "scroll_phase_limit_v",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34923,
   "name": "scroll_diag_decision",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34987,
   "name": "scroll_decide_motion",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35014,
   "name": "b_88C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35019,
   "name": "b_88CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35032,
   "name": "b_88D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35042,
   "name": "b_88E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35054,
   "name": "b_88EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35058,
   "name": "b_88F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35068,
   "name": "r_88FC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35069,
   "name": "b_88FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35079,
   "name": "b_8907",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35080,
   "name": "patch_diag_branch_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35090,
   "name": "b_8912",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35096,
   "name": "b_8918",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35112,
   "name": "b_8928",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35120,
   "name": "b_8930",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35121,
   "name": "patch_diag_branch_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35130,
   "name": "b_893A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35133,
   "name": "b_893D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35149,
   "name": "j_894D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35162,
   "name": "b_895A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35176,
   "name": "b_8968",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35188,
   "name": "b_8974",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35192,
   "name": "b_8978",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35202,
   "name": "r_8982",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35203,
   "name": "b_8983",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35211,
   "name": "b_898B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35212,
   "name": "patch_diag_branch_c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35221,
   "name": "b_8995",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35227,
   "name": "b_899B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35243,
   "name": "b_89AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35253,
   "name": "b_89B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35254,
   "name": "patch_diag_branch_d",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35263,
   "name": "b_89BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35279,
   "name": "j_89CF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35285,
   "name": "j_89D5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35308,
   "name": "b_89EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35320,
   "name": "b_89F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35324,
   "name": "b_89FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35334,
   "name": "r_8A06",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35335,
   "name": "j_8A07",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35358,
   "name": "b_8A1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35370,
   "name": "b_8A2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35374,
   "name": "b_8A2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35384,
   "name": "r_8A38",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35385,
   "name": "b_8A39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35390,
   "name": "apply_motion_and_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35418,
   "name": "b_8A5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35431,
   "name": "b_8A67",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35455,
   "name": "b_8A7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35472,
   "name": "b_8A90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35554,
   "name": "scroll1_src_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35570,
   "name": "scroll1_src_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35586,
   "name": "scroll1_dst_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35602,
   "name": "scroll1_dst_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35618,
   "name": "scroll1_start_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35634,
   "name": "scroll2_src_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35650,
   "name": "scroll2_src_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35666,
   "name": "scroll2_dst_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35682,
   "name": "scroll2_dst_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35698,
   "name": "scroll2_start_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35714,
   "name": "newrow_dst_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35730,
   "name": "newrow_dst_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35746,
   "name": "newrow_dx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35762,
   "name": "newrow_dx_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35778,
   "name": "newrow_dy_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35794,
   "name": "newrow_dy_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35810,
   "name": "newcol_dst_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35826,
   "name": "newcol_dst_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35842,
   "name": "newcol_dx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35858,
   "name": "newcol_dx_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35874,
   "name": "newcol_dy_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35890,
   "name": "coarse_scroll_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35897,
   "name": "b_8C39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35904,
   "name": "r_8C40",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35905,
   "name": "b_8C41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35910,
   "name": "b_8C46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35911,
   "name": "patch_scroll_phase",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35919,
   "name": "b_8C4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35928,
   "name": "b_8C58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36018,
   "name": "b_8CB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36101,
   "name": "colour_src_hi_top",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36103,
   "name": "flip_buffer_colour_top",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36151,
   "name": "colour_src_hi_bottom",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36153,
   "name": "colour_bottom_half",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36193,
   "name": "tile_row_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36204,
   "name": "draw_map_row",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36232,
   "name": "b_8D88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36233,
   "name": "patch_rowtiles_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36234,
   "name": "patch_rowtiles_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36257,
   "name": "b_8DA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36259,
   "name": "b_8DA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36292,
   "name": "b_8DC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36293,
   "name": "patch_rowsrc_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36294,
   "name": "patch_rowsrc_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36296,
   "name": "patch_rowdst_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36297,
   "name": "patch_rowdst_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36333,
   "name": "r_8DED",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36334,
   "name": "draw_map_column",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36343,
   "name": "b_8DF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36360,
   "name": "patch_coltiles_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36361,
   "name": "patch_coltiles_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36419,
   "name": "b_8E43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36420,
   "name": "patch_colsrc_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36421,
   "name": "patch_colsrc_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36423,
   "name": "patch_coldst_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36424,
   "name": "patch_coldst_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36439,
   "name": "b_8E57",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36470,
   "name": "r_8E76",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36471,
   "name": "copy_screen_pages",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36475,
   "name": "b_8E7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36476,
   "name": "patch_copysrc_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36477,
   "name": "patch_copysrc_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36479,
   "name": "patch_copydst_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36480,
   "name": "patch_copydst_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36495,
   "name": "map_pos_to_tile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36536,
   "name": "colour_from_chars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36537,
   "name": "patch_colsrc_screen_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36538,
   "name": "patch_colsrc_screen_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36543,
   "name": "patch_colour_ram_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36544,
   "name": "patch_colour_ram_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36559,
   "name": "redraw_row_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36560,
   "name": "redraw_play_area",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36596,
   "name": "b_8EF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36644,
   "name": "read_input",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36679,
   "name": "b_8F47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36695,
   "name": "b_8F57",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36708,
   "name": "j_8F64",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36724,
   "name": "b_8F74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36737,
   "name": "j_8F81",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36796,
   "name": "b_8FBC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36831,
   "name": "b_8FDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36846,
   "name": "b_8FEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36858,
   "name": "j_8FFA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36864,
   "name": "input_keys_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36873,
   "name": "b_9009",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36885,
   "name": "j_9015",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36927,
   "name": "r_903F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36928,
   "name": "b_9040",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36931,
   "name": "b_9043",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36934,
   "name": "b_9046",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36937,
   "name": "b_9049",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36940,
   "name": "b_904C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36943,
   "name": "b_904F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36948,
   "name": "b_9054",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36953,
   "name": "restart_point_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36962,
   "name": "restart_point_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36971,
   "name": "restart_point_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36980,
   "name": "restart_point_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36989,
   "name": "check_restart_points",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36993,
   "name": "j_9081",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37046,
   "name": "b_90B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37052,
   "name": "r_90BC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37053,
   "name": "j_90BD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37077,
   "name": "b_90D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37098,
   "name": "r_90EA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37099,
   "name": "end_item_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37100,
   "name": "a_90EC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37101,
   "name": "a_90ED",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37103,
   "name": "end_message_by_cause",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37115,
   "name": "end_item_message",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37118,
   "name": "goto_save_menu",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 37122,
   "name": "game_event_handler",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37164,
   "name": "b_912C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37167,
   "name": "b_912F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37179,
   "name": "b_913B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37187,
   "name": "b_9143",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37205,
   "name": "b_9155",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37219,
   "name": "j_9163",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37264,
   "name": "b_9190",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37270,
   "name": "b_9196",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37284,
   "name": "heatonite_item_ids",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37288,
   "name": "end_bonus_heatonite_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 37291,
   "name": "b_91AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37303,
   "name": "b_91B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37308,
   "name": "j_91BC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37352,
   "name": "b_91E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37373,
   "name": "b_91FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37382,
   "name": "b_9206",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37391,
   "name": "b_920F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37393,
   "name": "b_9211",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37413,
   "name": "b_9225",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37429,
   "name": "b_9235",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37437,
   "name": "j_923D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37443,
   "name": "b_9243",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37494,
   "name": "b_9276",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37506,
   "name": "b_9282",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37516,
   "name": "item_bonus_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37531,
   "name": "double_bonus",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37555,
   "name": "save_status_bar",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37557,
   "name": "b_92B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37568,
   "name": "b_92C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37579,
   "name": "b_92CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37594,
   "name": "b_92DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37603,
   "name": "print_scrolling_message",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37615,
   "name": "j_92EF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37631,
   "name": "b_92FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37649,
   "name": "b_9311",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37652,
   "name": "b_9314",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37668,
   "name": "b_9324",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37684,
   "name": "b_9334",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37703,
   "name": "restore_status_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37705,
   "name": "b_9349",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37715,
   "name": "resume_after_message",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37720,
   "name": "start_or_resume_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37743,
   "name": "b_936F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37772,
   "name": "b_938C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37774,
   "name": "b_938E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37787,
   "name": "b_939B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37794,
   "name": "b_93A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37830,
   "name": "b_93C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37847,
   "name": "b_93D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37857,
   "name": "b_93E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37896,
   "name": "j_9408",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37935,
   "name": "b_942F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37951,
   "name": "b_943F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37958,
   "name": "b_9446",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37968,
   "name": "b_9450",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37980,
   "name": "b_945C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37989,
   "name": "b_9465",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38002,
   "name": "b_9472",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38008,
   "name": "j_9478",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38012,
   "name": "b_947C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38018,
   "name": "b_9482",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38054,
   "name": "b_94A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38066,
   "name": "b_94B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38076,
   "name": "b_94BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38134,
   "name": "save_menu_messages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38142,
   "name": "save_device",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38143,
   "name": "save_menu",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 38145,
   "name": "b_9501",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38175,
   "name": "b_951F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38182,
   "name": "b_9526",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38189,
   "name": "b_952D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38195,
   "name": "b_9533",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38210,
   "name": "b_9542",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38220,
   "name": "b_954C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38231,
   "name": "b_9557",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38259,
   "name": "b_9573",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38347,
   "name": "message_ptr_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38438,
   "name": "message_ptr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38529,
   "name": "msg_final_score_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38540,
   "name": "msg_your_final_score_is",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38561,
   "name": "msg_the_doctor_regenerates_after",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38591,
   "name": "msg_game_over",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38602,
   "name": "msg_press",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38609,
   "name": "msg_f1_to",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38616,
   "name": "msg_f3_to",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38623,
   "name": "msg_f5_to",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38630,
   "name": "msg_play_again",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38642,
   "name": "msg_forced_regeneration",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38663,
   "name": "msg_the_crystal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38676,
   "name": "msg_the_tiru_plans",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38692,
   "name": "msg_splinx",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38700,
   "name": "msg_the_explosion",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38715,
   "name": "msg_exposure_to_radiation",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38738,
   "name": "msg_a_shock_from_a_controller",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38765,
   "name": "msg_a_fall",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38773,
   "name": "msg_falling_on_a_stalagmite",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38798,
   "name": "msg_suffocating",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38811,
   "name": "msg_suffering_a_madrag_bite",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38836,
   "name": "msg_being_attacked_by_a_baby_madrag",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38869,
   "name": "msg_eight_spaces",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38878,
   "name": "msg_after",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38885,
   "name": "msg_you_have_returned_to_gallifrey_in",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38920,
   "name": "msg_the_tardis",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38932,
   "name": "msg_an_escape_pod",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38947,
   "name": "msg_with",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38953,
   "name": "msg_and_have_successfully",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38976,
   "name": "msg_but_have_not",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38990,
   "name": "msg_halted_the_production_of_heatonite",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39026,
   "name": "msg_the_time_lords_are",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39046,
   "name": "msg_with_your_performance",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39069,
   "name": "msg_save_on",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39078,
   "name": "msg_cassette",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39088,
   "name": "msg_disc",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39094,
   "name": "msg_return_to_game",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39110,
   "name": "msg_displeased",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39122,
   "name": "msg_pleased",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39131,
   "name": "msg_very",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39137,
   "name": "terrain_class_eb",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39148,
   "name": "terrain_class_ec",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39159,
   "name": "terrain_class_ed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39170,
   "name": "terrain_class_ee",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39181,
   "name": "terrain_probe",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 39254,
   "name": "a_9956",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39255,
   "name": "a_9957",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39273,
   "name": "a_9969",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39274,
   "name": "a_996A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39301,
   "name": "next_x_from_cb",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39327,
   "name": "b_999F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39341,
   "name": "b_99AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39352,
   "name": "next_y_from_cc",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 39378,
   "name": "b_99D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39394,
   "name": "b_99E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39405,
   "name": "check_up_blocked",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39432,
   "name": "r_9A08",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39433,
   "name": "terrain_probe_centre",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39470,
   "name": "walk_above_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39471,
   "name": "move_walk_stop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 39481,
   "name": "move_walk",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39507,
   "name": "b_9A53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39537,
   "name": "b_9A71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39538,
   "name": "a_9A72",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39551,
   "name": "b_9A7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39554,
   "name": "b_9A82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39558,
   "name": "b_9A86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39569,
   "name": "b_9A91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39583,
   "name": "b_9A9F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39606,
   "name": "b_9AB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39624,
   "name": "j_9AC8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39640,
   "name": "b_9AD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39647,
   "name": "b_9ADF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39659,
   "name": "b_9AEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39664,
   "name": "b_9AF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39675,
   "name": "b_9AFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39680,
   "name": "b_9B00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39684,
   "name": "b_9B04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39694,
   "name": "j_9B0E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39717,
   "name": "b_9B25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39733,
   "name": "j_9B35",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39749,
   "name": "b_9B45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39756,
   "name": "j_9B4C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39780,
   "name": "b_9B64",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39781,
   "name": "a_9B65",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39796,
   "name": "b_9B74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39800,
   "name": "b_9B78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39811,
   "name": "b_9B83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39825,
   "name": "b_9B91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39872,
   "name": "b_9BC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39876,
   "name": "b_9BC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39886,
   "name": "move_turn_or_walk",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39912,
   "name": "b_9BE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39931,
   "name": "b_9BFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39953,
   "name": "j_9C11",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39990,
   "name": "b_9C36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40000,
   "name": "b_9C40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40010,
   "name": "r_9C4A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40011,
   "name": "b_9C4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40030,
   "name": "saved_cb",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40031,
   "name": "move_climb_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40058,
   "name": "b_9C7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40122,
   "name": "b_9CBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40138,
   "name": "b_9CCA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40145,
   "name": "b_9CD1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40163,
   "name": "r_9CE3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40164,
   "name": "b_9CE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40213,
   "name": "move_vertical",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40224,
   "name": "b_9D20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40280,
   "name": "b_9D58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40289,
   "name": "b_9D61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40310,
   "name": "j_9D76",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 40329,
   "name": "b_9D89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40381,
   "name": "b_9DBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40415,
   "name": "b_9DDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40453,
   "name": "b_9E05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40459,
   "name": "y_fine_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40460,
   "name": "move_slide_horizontal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40511,
   "name": "b_9E3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40515,
   "name": "b_9E43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40542,
   "name": "b_9E5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40546,
   "name": "b_9E62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40552,
   "name": "b_9E68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40557,
   "name": "b_9E6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40562,
   "name": "b_9E72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40590,
   "name": "b_9E8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40594,
   "name": "b_9E92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40621,
   "name": "b_9EAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40625,
   "name": "b_9EB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40631,
   "name": "b_9EB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40638,
   "name": "b_9EBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40648,
   "name": "move_object_general",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40665,
   "name": "b_9ED9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40670,
   "name": "b_9EDE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40693,
   "name": "b_9EF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40748,
   "name": "b_9F2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40764,
   "name": "b_9F3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40816,
   "name": "b_9F70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40821,
   "name": "b_9F75",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40826,
   "name": "j_9F7A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 40863,
   "name": "j_9F9F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 40880,
   "name": "b_9FB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40935,
   "name": "b_9FE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40957,
   "name": "b_9FFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40960,
   "name": "p_A000",
   "type": "Pointer",
   "kind": "auto"
  },
  {
   "address": 40961,
   "name": "move_check_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41015,
   "name": "move_blocked_80",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 41020,
   "name": "move_blocked_ff",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 41025,
   "name": "move_check_left_level",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41062,
   "name": "move_check_vertical",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41113,
   "name": "b_A099",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41145,
   "name": "b_A0B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41169,
   "name": "r_A0D1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41170,
   "name": "jump_frame_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41171,
   "name": "jump_saved_horizontal",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41172,
   "name": "jump_arc_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41191,
   "name": "b_A0E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41203,
   "name": "b_A0F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41207,
   "name": "b_A0F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41209,
   "name": "b_A0F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41212,
   "name": "b_A0FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41246,
   "name": "r_A11E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41247,
   "name": "b_A11F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41259,
   "name": "unused_byte_a12b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41260,
   "name": "lift_stop_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41268,
   "name": "lift_stop_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41276,
   "name": "lift_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41286,
   "name": "b_A146",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41335,
   "name": "b_A177",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41346,
   "name": "b_A182",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41350,
   "name": "b_A186",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41361,
   "name": "b_A191",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41387,
   "name": "b_A1AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41392,
   "name": "b_A1B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41400,
   "name": "j_A1B8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41416,
   "name": "b_A1C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41427,
   "name": "b_A1D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41430,
   "name": "b_A1D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41448,
   "name": "b_A1E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41457,
   "name": "lift_doctor_near",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41507,
   "name": "b_A223",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41512,
   "name": "lift_step_y",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41535,
   "name": "r_A23F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41536,
   "name": "b_A240",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41554,
   "name": "lift_check_board",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41610,
   "name": "b_A28A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41637,
   "name": "b_A2A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41642,
   "name": "b_A2AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41648,
   "name": "truck_stop_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41652,
   "name": "truck_stop_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41656,
   "name": "truck_return",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 41657,
   "name": "truck_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41676,
   "name": "b_A2CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41684,
   "name": "b_A2D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41698,
   "name": "b_A2E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41710,
   "name": "b_A2EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41765,
   "name": "b_A325",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41769,
   "name": "b_A329",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41774,
   "name": "b_A32E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41807,
   "name": "b_A34F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41812,
   "name": "j_A354",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41848,
   "name": "b_A378",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41856,
   "name": "j_A380",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41869,
   "name": "b_A38D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41877,
   "name": "truck_check_board",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 41932,
   "name": "b_A3CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41937,
   "name": "truck_step_x",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41960,
   "name": "r_A3E8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41961,
   "name": "b_A3E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41979,
   "name": "distance_to_point",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42010,
   "name": "b_A41A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42016,
   "name": "b_A420",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42037,
   "name": "b_A435",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42067,
   "name": "b_A453",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42072,
   "name": "b_A458",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42094,
   "name": "object_step_due",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42120,
   "name": "b_A488",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42123,
   "name": "b_A48B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42145,
   "name": "b_A4A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42148,
   "name": "object_step_pixel",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42163,
   "name": "b_A4B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42169,
   "name": "b_A4B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42178,
   "name": "b_A4C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42193,
   "name": "b_A4D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42197,
   "name": "b_A4D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42205,
   "name": "r_A4DD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42206,
   "name": "pocket_screen_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42211,
   "name": "pocket_screen_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42212,
   "name": "pocket_frame_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42217,
   "name": "marker_screen_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42221,
   "name": "marker_screen_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42222,
   "name": "status_and_pockets",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42240,
   "name": "b_A500",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42253,
   "name": "b_A50D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42283,
   "name": "j_A52B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42288,
   "name": "b_A530",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42296,
   "name": "b_A538",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42318,
   "name": "b_A54E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42335,
   "name": "b_A55F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42351,
   "name": "b_A56F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42356,
   "name": "r_A574",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42357,
   "name": "b_A575",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42366,
   "name": "b_A57E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42380,
   "name": "b_A58C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42429,
   "name": "b_A5BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42431,
   "name": "b_A5BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42477,
   "name": "b_A5ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42479,
   "name": "b_A5EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42506,
   "name": "r_A60A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42507,
   "name": "marker_take_slot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42508,
   "name": "pocket_take",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 42514,
   "name": "b_A612",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42523,
   "name": "b_A61B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42530,
   "name": "b_A622",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42536,
   "name": "j_A628",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42582,
   "name": "pocket_clear_box",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 42606,
   "name": "b_A66E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42611,
   "name": "b_A673",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42634,
   "name": "fkeys_throw_pickup",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 42651,
   "name": "b_A69B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42661,
   "name": "b_A6A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42669,
   "name": "b_A6AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42672,
   "name": "b_A6B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42695,
   "name": "r_A6C7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42696,
   "name": "unused_bytes_a6c8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42698,
   "name": "thrown_return",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 42699,
   "name": "thrown_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42703,
   "name": "b_A6CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42732,
   "name": "b_A6EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42756,
   "name": "b_A704",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42765,
   "name": "b_A70D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42783,
   "name": "b_A71F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42796,
   "name": "b_A72C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42800,
   "name": "b_A730",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42815,
   "name": "b_A73F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42835,
   "name": "j_A753",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42846,
   "name": "b_A75E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42869,
   "name": "b_A775",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42903,
   "name": "j_A797",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42926,
   "name": "b_A7AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42958,
   "name": "b_A7CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42967,
   "name": "throw_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 42974,
   "name": "b_A7DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42982,
   "name": "r_A7E6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42983,
   "name": "b_A7E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43016,
   "name": "place_held_item",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43047,
   "name": "b_A827",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43050,
   "name": "held_item_fits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43059,
   "name": "item_fits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43075,
   "name": "b_A843",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43085,
   "name": "b_A84D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43107,
   "name": "b_A863",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43115,
   "name": "b_A86B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43124,
   "name": "b_A874",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43131,
   "name": "b_A87B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43135,
   "name": "r_A87F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43136,
   "name": "b_A880",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43152,
   "name": "b_A890",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43159,
   "name": "b_A897",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43167,
   "name": "b_A89F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43177,
   "name": "b_A8A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43185,
   "name": "item_follow_holder",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43208,
   "name": "b_A8C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43220,
   "name": "b_A8D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43229,
   "name": "b_A8DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43242,
   "name": "b_A8EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43260,
   "name": "b_A8FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43272,
   "name": "r_A908",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43273,
   "name": "j_A909",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43291,
   "name": "b_A91B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43303,
   "name": "r_A927",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43304,
   "name": "pickup_candidate",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43305,
   "name": "pickup_nearby",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43314,
   "name": "r_A932",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43315,
   "name": "b_A933",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43353,
   "name": "b_A959",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43383,
   "name": "j_A977",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43413,
   "name": "b_A995",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43428,
   "name": "b_A9A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43440,
   "name": "b_A9B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43502,
   "name": "b_A9EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43529,
   "name": "r_AA09",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43530,
   "name": "zone0_objects",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43540,
   "name": "zone1_objects",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43544,
   "name": "zone2_objects",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43551,
   "name": "zone3_objects",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43557,
   "name": "zone4_objects",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43563,
   "name": "zone5_objects",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43565,
   "name": "zone6_objects",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43572,
   "name": "zone_return",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 43573,
   "name": "zone_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43581,
   "name": "zone_classify",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43601,
   "name": "b_AA51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43616,
   "name": "b_AA60",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43629,
   "name": "b_AA6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43647,
   "name": "b_AA7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43662,
   "name": "b_AA8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43680,
   "name": "b_AAA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43689,
   "name": "b_AAA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43702,
   "name": "b_AAB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43716,
   "name": "b_AAC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43730,
   "name": "b_AAD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43744,
   "name": "b_AAE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43758,
   "name": "b_AAEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43772,
   "name": "b_AAFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43786,
   "name": "b_AB0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43800,
   "name": "r_AB18",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43801,
   "name": "zone_wake_0",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43803,
   "name": "b_AB1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43818,
   "name": "zone_wake_1",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43820,
   "name": "b_AB2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43835,
   "name": "zone_wake_2",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43837,
   "name": "b_AB3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43852,
   "name": "zone_wake_3",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43854,
   "name": "b_AB4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43869,
   "name": "zone_wake_4",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43871,
   "name": "b_AB5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43886,
   "name": "zone_wake_5",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43888,
   "name": "b_AB70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43903,
   "name": "zone_wake_6",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43905,
   "name": "b_AB81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43920,
   "name": "zone_sleep_all",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43922,
   "name": "b_AB92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43936,
   "name": "charset_bank_slot",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43939,
   "name": "zone_charset_bank",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43946,
   "name": "charset_swap_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43947,
   "name": "charset_wanted_bank",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43948,
   "name": "swap_char_codes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43964,
   "name": "swap_char_store_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43980,
   "name": "zone_graphics_done",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 43983,
   "name": "zone_graphics",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44001,
   "name": "b_ABE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44052,
   "name": "b_AC14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44112,
   "name": "b_AC50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44120,
   "name": "b_AC58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44135,
   "name": "distance_between",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44162,
   "name": "b_AC82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44183,
   "name": "b_AC97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44197,
   "name": "b_ACA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44229,
   "name": "b_ACC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44234,
   "name": "b_ACCA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44256,
   "name": "chase_direction",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44280,
   "name": "b_ACF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44285,
   "name": "r_ACFD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44286,
   "name": "b_ACFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44298,
   "name": "b_AD0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44304,
   "name": "b_AD10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44310,
   "name": "creature_blocked",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44344,
   "name": "b_AD38",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44350,
   "name": "b_AD3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44379,
   "name": "b_AD5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44423,
   "name": "b_AD87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44430,
   "name": "b_AD8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44449,
   "name": "b_ADA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44457,
   "name": "r_ADA9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44458,
   "name": "switch_value",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44459,
   "name": "switch_map_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44476,
   "name": "switch_map_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44493,
   "name": "unknown_17_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44510,
   "name": "switch_screen_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44527,
   "name": "switch_screen_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44544,
   "name": "switch_draw_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44545,
   "name": "switch_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44546,
   "name": "switch_set_tile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44614,
   "name": "j_AE46",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 44627,
   "name": "b_AE53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44646,
   "name": "b_AE66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44669,
   "name": "b_AE7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44673,
   "name": "recolour_screen",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 44700,
   "name": "b_AE9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44701,
   "name": "recolour_src_operand",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44702,
   "name": "a_AE9E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 44707,
   "name": "a_AEA3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 44708,
   "name": "a_AEA4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 44723,
   "name": "switch_write_map",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44746,
   "name": "switch_restore_all",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44751,
   "name": "b_AECF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44769,
   "name": "prog_table_aee1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44772,
   "name": "prog_table_aee4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44782,
   "name": "prog_table_aeee",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44792,
   "name": "prog_table_aef8",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44802,
   "name": "prog_table_af02",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44813,
   "name": "gauge_mask_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44838,
   "name": "gauge_mask_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44863,
   "name": "gauge_mask_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44888,
   "name": "splinx_programmer_open",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44902,
   "name": "b_AF66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44905,
   "name": "b_AF69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45056,
   "name": "splinx_programmer_screen_loop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45094,
   "name": "b_B026",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45118,
   "name": "j_B03E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45155,
   "name": "b_B063",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45178,
   "name": "b_B07A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45193,
   "name": "b_B089",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45208,
   "name": "b_B098",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45239,
   "name": "b_B0B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45241,
   "name": "b_B0B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45250,
   "name": "b_B0C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45278,
   "name": "b_B0DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45290,
   "name": "b_B0EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45301,
   "name": "j_B0F5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45318,
   "name": "b_B106",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45327,
   "name": "b_B10F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45336,
   "name": "b_B118",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45347,
   "name": "b_B123",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45353,
   "name": "b_B129",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45356,
   "name": "splinx_programmer_exit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45398,
   "name": "b_B156",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45421,
   "name": "swap_colour_ram_with_1000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45439,
   "name": "b_B17F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45461,
   "name": "splinx_wander_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45462,
   "name": "splinx_pickup_scan_slot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45463,
   "name": "splinx_frames_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45467,
   "name": "splinx_frames_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45472,
   "name": "splinx_update",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45482,
   "name": "b_B1AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45507,
   "name": "b_B1C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45516,
   "name": "b_B1CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45517,
   "name": "splinx_command_branch_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45539,
   "name": "b_B1E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45546,
   "name": "b_B1EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45558,
   "name": "b_B1F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45561,
   "name": "b_B1F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45568,
   "name": "b_B200",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45571,
   "name": "b_B203",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45579,
   "name": "b_B20B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45599,
   "name": "b_B21F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45603,
   "name": "b_B223",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45607,
   "name": "b_B227",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45611,
   "name": "b_B22B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45615,
   "name": "b_B22F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45636,
   "name": "b_B244",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45638,
   "name": "b_B246",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45645,
   "name": "b_B24D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45657,
   "name": "b_B259",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45669,
   "name": "b_B265",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45675,
   "name": "b_B26B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45703,
   "name": "b_B287",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45706,
   "name": "j_B28A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45716,
   "name": "b_B294",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45717,
   "name": "splinx_move_class_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45726,
   "name": "b_B29E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45733,
   "name": "b_B2A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45739,
   "name": "b_B2AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45745,
   "name": "b_B2B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45748,
   "name": "j_B2B4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45765,
   "name": "b_B2C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45779,
   "name": "b_B2D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45792,
   "name": "b_B2E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45795,
   "name": "j_B2E3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45805,
   "name": "b_B2ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45857,
   "name": "b_B321",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45873,
   "name": "b_B331",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45878,
   "name": "b_B336",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45888,
   "name": "b_B340",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45891,
   "name": "b_B343",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45894,
   "name": "b_B346",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45913,
   "name": "b_B359",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45927,
   "name": "b_B367",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45934,
   "name": "b_B36E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45942,
   "name": "j_B376",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45993,
   "name": "j_B3A9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46004,
   "name": "b_B3B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46011,
   "name": "j_B3BB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46043,
   "name": "b_B3DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46058,
   "name": "b_B3EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46060,
   "name": "b_B3EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46063,
   "name": "j_B3EF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46070,
   "name": "b_B3F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46082,
   "name": "b_B402",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46094,
   "name": "b_B40E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46100,
   "name": "b_B414",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46138,
   "name": "b_B43A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46161,
   "name": "b_B451",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46164,
   "name": "j_B454",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46181,
   "name": "b_B465",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46184,
   "name": "b_B468",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46190,
   "name": "master_wait_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46191,
   "name": "obj0c_frames_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46195,
   "name": "obj0c_frames_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46199,
   "name": "obj0c_wait_state",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 46216,
   "name": "r_B488",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46217,
   "name": "r_B489",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46218,
   "name": "crystal_thief_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46240,
   "name": "b_B4A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46246,
   "name": "b_B4A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46252,
   "name": "b_B4AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46253,
   "name": "crystal_thief_state_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46257,
   "name": "crystal_thief_jmp_carry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46260,
   "name": "crystal_thief_jmp_deliver",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46263,
   "name": "crystal_thief_approach",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46293,
   "name": "b_B4D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46301,
   "name": "b_B4DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46326,
   "name": "b_B4F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46336,
   "name": "crystal_thief_fetch",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46368,
   "name": "b_B520",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46377,
   "name": "b_B529",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46397,
   "name": "b_B53D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46402,
   "name": "j_B542",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46407,
   "name": "j_B547",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46417,
   "name": "b_B551",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46422,
   "name": "b_B556",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46425,
   "name": "b_B559",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46449,
   "name": "crystal_thief_deliver",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46471,
   "name": "b_B587",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46516,
   "name": "j_B5B4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46525,
   "name": "b_B5BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46526,
   "name": "crystal_thief_move_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46535,
   "name": "b_B5C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46542,
   "name": "b_B5CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46548,
   "name": "b_B5D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46554,
   "name": "b_B5DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46557,
   "name": "j_B5DD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46571,
   "name": "b_B5EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46585,
   "name": "b_B5F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46595,
   "name": "crystal_thief_draw",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46623,
   "name": "egg_nest_x_hi_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46624,
   "name": "b_B620",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46625,
   "name": "egg_nest_x_lo_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46627,
   "name": "egg_nest_y_hi_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46629,
   "name": "egg_nest_y_lo_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46648,
   "name": "b_B638",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46657,
   "name": "crystal_thief_stop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46674,
   "name": "crystal_thief_to_home",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46693,
   "name": "egg_nest_positions",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46701,
   "name": "madrag_legs_frames_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46705,
   "name": "madrag_legs_frames_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46709,
   "name": "madrag_top_frames_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46713,
   "name": "madrag_top_frames_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46717,
   "name": "madrag_carry_frame_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46718,
   "name": "madrag_carry_frame_right",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46719,
   "name": "madrag_target_egg",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46720,
   "name": "madrag_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46729,
   "name": "madrag_think",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46748,
   "name": "r_B69C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46749,
   "name": "b_B69D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46752,
   "name": "b_B6A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46768,
   "name": "b_B6B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46774,
   "name": "b_B6B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46775,
   "name": "madrag_state_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46779,
   "name": "madrag_jmp_home",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46782,
   "name": "madrag_jmp_fetch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46785,
   "name": "madrag_jmp_carry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46788,
   "name": "madrag_chase",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46807,
   "name": "b_B6D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46822,
   "name": "b_B6E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46835,
   "name": "madrag_guard",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46840,
   "name": "b_B6F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46868,
   "name": "b_B714",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46877,
   "name": "b_B71D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46880,
   "name": "madrag_go_home",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46930,
   "name": "madrag_fetch_egg",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46973,
   "name": "j_B77D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46986,
   "name": "b_B78A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46989,
   "name": "b_B78D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47021,
   "name": "madrag_carry_egg",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47103,
   "name": "b_B7FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47106,
   "name": "madrag_stand",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47121,
   "name": "madrag_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47130,
   "name": "b_B81A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47131,
   "name": "madrag_move_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47140,
   "name": "b_B824",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47147,
   "name": "b_B82B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47153,
   "name": "b_B831",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47159,
   "name": "b_B837",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47162,
   "name": "j_B83A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47176,
   "name": "b_B848",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47190,
   "name": "b_B856",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47201,
   "name": "madrag_draw_and_eggs",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47267,
   "name": "b_B8A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47277,
   "name": "b_B8AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47298,
   "name": "b_B8C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47305,
   "name": "j_B8C9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47322,
   "name": "b_B8DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47334,
   "name": "b_B8E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47392,
   "name": "b_B920",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47402,
   "name": "r_B92A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47403,
   "name": "b_B92B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47411,
   "name": "madrag_spot_doctor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47445,
   "name": "r_B955",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47446,
   "name": "madrag_bite_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47481,
   "name": "b_B979",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47482,
   "name": "conveyor_reset_hi_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47484,
   "name": "b_B97C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47486,
   "name": "conveyor_reset_lo_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47487,
   "name": "machine_parts_set_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47490,
   "name": "conveyor_limit_hi_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47494,
   "name": "conveyor_limit_lo_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47497,
   "name": "machine_parts_set_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47506,
   "name": "machine_slot_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47516,
   "name": "machine_slot_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47526,
   "name": "conveyor_tables",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47542,
   "name": "machinery_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47559,
   "name": "b_B9C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47575,
   "name": "b_B9D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47621,
   "name": "r_BA05",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47622,
   "name": "b_BA06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47634,
   "name": "b_BA12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47676,
   "name": "j_BA3C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47678,
   "name": "b_BA3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47700,
   "name": "b_BA54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47706,
   "name": "b_BA5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47714,
   "name": "j_BA62",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47742,
   "name": "b_BA7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47816,
   "name": "r_BAC8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47817,
   "name": "use_first_press_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47818,
   "name": "use_key_latch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47820,
   "name": "use_item_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47826,
   "name": "r_BAD2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47827,
   "name": "b_BAD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47877,
   "name": "b_BB05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47888,
   "name": "b_BB10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47893,
   "name": "b_BB15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47907,
   "name": "b_BB23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47912,
   "name": "b_BB28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47934,
   "name": "r_BB3E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47935,
   "name": "b_BB3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47948,
   "name": "b_BB4C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47996,
   "name": "b_BB7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47999,
   "name": "b_BB7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48002,
   "name": "b_BB82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48005,
   "name": "b_BB85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48008,
   "name": "b_BB88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48011,
   "name": "b_BB8B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48014,
   "name": "b_BB8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48017,
   "name": "b_BB91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48020,
   "name": "spanner_bolt_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48028,
   "name": "spanner_bolt_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48036,
   "name": "spanner_bolt_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48044,
   "name": "spanner_bolt_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48052,
   "name": "spanner_bolt_from_below",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48060,
   "name": "use_spanner",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48064,
   "name": "b_BBC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48122,
   "name": "b_BBFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48141,
   "name": "b_BC0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48144,
   "name": "r_BC10",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48145,
   "name": "pickaxe_rock_tables",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48148,
   "name": "pickaxe_map_codes_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48152,
   "name": "pickaxe_map_codes_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48156,
   "name": "pickaxe_site_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48159,
   "name": "pickaxe_site_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48162,
   "name": "pickaxe_site_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48165,
   "name": "pickaxe_site_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48168,
   "name": "pickaxe_swing_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48169,
   "name": "use_pickaxe",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48192,
   "name": "b_BC40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48197,
   "name": "b_BC45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48201,
   "name": "b_BC49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48292,
   "name": "b_BCA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48298,
   "name": "b_BCAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48301,
   "name": "r_BCAD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48302,
   "name": "use_detonator_3c",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48312,
   "name": "r_BCB8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48313,
   "name": "use_detonator_48",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48324,
   "name": "use_detonator_4c",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48335,
   "name": "use_explosives",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48346,
   "name": "activator_points",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48349,
   "name": "activator_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48352,
   "name": "use_activator",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48356,
   "name": "b_BCE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48407,
   "name": "b_BD17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48411,
   "name": "use_empty_hands",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48434,
   "name": "b_BD32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48437,
   "name": "code_lock_shown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48438,
   "name": "code_lock_shown_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48439,
   "name": "code_lock_shown_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48440,
   "name": "code_lock_sequence",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48446,
   "name": "code_lock_position",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48447,
   "name": "code_lock_seeds",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48448,
   "name": "code_lock_seed_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48449,
   "name": "code_lock_seed_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48450,
   "name": "code_lock_occurrence",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48451,
   "name": "code_lock_decoy_source",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48452,
   "name": "code_lock_clue_cycle",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48453,
   "name": "code_lock_next_digit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48454,
   "name": "code_lock_shuffle_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48455,
   "name": "code_lock_right_button",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48479,
   "name": "code_lock_clue1_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48484,
   "name": "code_lock_digit_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48490,
   "name": "code_lock_clue3_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48495,
   "name": "code_lock_deck",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48559,
   "name": "code_lock_deck_part2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48623,
   "name": "code_lock_deck_part3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48681,
   "name": "code_lock_press",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48725,
   "name": "r_BE55",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48726,
   "name": "b_BE56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48761,
   "name": "b_BE79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48768,
   "name": "b_BE80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48769,
   "name": "code_lock_clue_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48778,
   "name": "b_BE8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48788,
   "name": "b_BE94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48798,
   "name": "b_BE9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48808,
   "name": "b_BEA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48814,
   "name": "b_BEAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48827,
   "name": "b_BEBB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48840,
   "name": "b_BEC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48853,
   "name": "b_BED5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48861,
   "name": "b_BEDD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48876,
   "name": "code_lock_deal_buttons",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48895,
   "name": "b_BEFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48913,
   "name": "b_BF11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48926,
   "name": "b_BF1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48933,
   "name": "b_BF25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48945,
   "name": "j_BF31",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 48973,
   "name": "b_BF4D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48985,
   "name": "b_BF59",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49001,
   "name": "code_lock_new_sequence",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 49020,
   "name": "b_BF7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49036,
   "name": "b_BF8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49054,
   "name": "b_BF9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49072,
   "name": "b_BFB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49073,
   "name": "b_BFB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49081,
   "name": "b_BFB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49095,
   "name": "b_BFC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49097,
   "name": "b_BFC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49114,
   "name": "code_lock_display",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49115,
   "name": "code_lock_button_char_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49116,
   "name": "code_lock_button_char_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49117,
   "name": "code_lock_button_char_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49118,
   "name": "bfef_tables",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49122,
   "name": "bfef_table_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49126,
   "name": "bfef_table_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49130,
   "name": "bfef_table_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49134,
   "name": "bfef_return",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 49135,
   "name": "every8_mode3_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49154,
   "name": "fixed_cells_draw_loop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49163,
   "name": "b_C00B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49277,
   "name": "b_C07D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49281,
   "name": "fuse_object_ids",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49285,
   "name": "blast_radius",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49286,
   "name": "fuse_countdown",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49290,
   "name": "fuse_frame_on",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49294,
   "name": "fuse_frame_off",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49298,
   "name": "fuse_flash_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49302,
   "name": "fuse_sound",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49306,
   "name": "fuse_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49348,
   "name": "b_C0C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49350,
   "name": "b_C0C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49364,
   "name": "b_C0D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49375,
   "name": "b_C0DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49378,
   "name": "j_C0E2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 49395,
   "name": "r_C0F3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49396,
   "name": "blast_countdown_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49414,
   "name": "b_C106",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49443,
   "name": "b_C123",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49459,
   "name": "b_C133",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49466,
   "name": "b_C13A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49475,
   "name": "b_C143",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49478,
   "name": "b_C146",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49485,
   "name": "b_C14D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49495,
   "name": "b_C157",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49505,
   "name": "r_C161",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49506,
   "name": "fuse_flash_frame",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 49529,
   "name": "b_C179",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49538,
   "name": "fuse_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49580,
   "name": "b_C1AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49610,
   "name": "r_C1CA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49611,
   "name": "blast_damage",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49613,
   "name": "b_C1CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49642,
   "name": "b_C1EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49662,
   "name": "b_C1FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49709,
   "name": "r_C22D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49710,
   "name": "b_C22E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49761,
   "name": "trio_route_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49768,
   "name": "trio_route_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49775,
   "name": "trio_route_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49782,
   "name": "trio_route_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49786,
   "name": "f_C27A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49789,
   "name": "trio_home_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49792,
   "name": "trio_home_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49795,
   "name": "trio_home_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49798,
   "name": "trio_home_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49799,
   "name": "f_C287",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49801,
   "name": "trio_partner",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49805,
   "name": "r_C28D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49806,
   "name": "trio_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49818,
   "name": "trio_think",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49838,
   "name": "b_C2AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49844,
   "name": "b_C2B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49855,
   "name": "trio_state_dispatch",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 49856,
   "name": "trio_branch_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49865,
   "name": "b_C2C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49913,
   "name": "b_C2F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49927,
   "name": "b_C307",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49930,
   "name": "trio_state7_seek_obj34",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 49982,
   "name": "b_C33E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50024,
   "name": "b_C368",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50029,
   "name": "b_C36D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50032,
   "name": "b_C370",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50035,
   "name": "trio_go_home",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50086,
   "name": "b_C3A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50089,
   "name": "b_C3A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50135,
   "name": "b_C3D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50148,
   "name": "b_C3E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50151,
   "name": "trio_state_c",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50172,
   "name": "b_C3FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50180,
   "name": "patrol_routes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50234,
   "name": "f_C43A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50238,
   "name": "f_C43E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50240,
   "name": "patrol_route_lo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50242,
   "name": "f_C442",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50244,
   "name": "patrol_route_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50248,
   "name": "patrol_last_index",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50252,
   "name": "r_C44C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50253,
   "name": "patrol_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50270,
   "name": "patrol_think",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50290,
   "name": "b_C472",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50296,
   "name": "b_C478",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50378,
   "name": "b_C4CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50392,
   "name": "b_C4D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50404,
   "name": "b_C4E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50408,
   "name": "b_C4E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50410,
   "name": "b_C4EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50418,
   "name": "b_C4F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50421,
   "name": "patrol_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50441,
   "name": "climb_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50443,
   "name": "carry_idle_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50447,
   "name": "object_move_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50486,
   "name": "b_C536",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50497,
   "name": "b_C541",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50512,
   "name": "b_C550",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50538,
   "name": "b_C56A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50566,
   "name": "b_C586",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50569,
   "name": "b_C589",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50579,
   "name": "object_mode_dispatch",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 50580,
   "name": "object_mode_branch_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50595,
   "name": "b_C5A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50601,
   "name": "b_C5A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50607,
   "name": "b_C5AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50613,
   "name": "b_C5B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50619,
   "name": "b_C5BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50629,
   "name": "b_C5C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50632,
   "name": "j_C5C8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50635,
   "name": "j_C5CB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50649,
   "name": "b_C5D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50663,
   "name": "b_C5E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50673,
   "name": "object_pick_frame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50707,
   "name": "b_C613",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50729,
   "name": "b_C629",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50739,
   "name": "j_C633",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50742,
   "name": "b_C636",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50759,
   "name": "b_C647",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50777,
   "name": "b_C659",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50785,
   "name": "b_C661",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50807,
   "name": "sfx_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50831,
   "name": "sfx_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50879,
   "name": "sfx_freq_limit",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50903,
   "name": "sfx_sweep_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50927,
   "name": "sfx_sweep_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50951,
   "name": "sfx_pw_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50975,
   "name": "sfx_pw_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50999,
   "name": "sfx_waveform",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51023,
   "name": "sfx_attack_decay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51047,
   "name": "sfx_sustain_release",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51071,
   "name": "sfx_length_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51095,
   "name": "sfx_length_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51119,
   "name": "sfx_repeat",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51143,
   "name": "sound_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51147,
   "name": "sound_start_now",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51221,
   "name": "r_C815",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51222,
   "name": "sfx_time_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51223,
   "name": "sfx_time_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51224,
   "name": "sound_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51243,
   "name": "b_C82B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51248,
   "name": "j_C830",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 51257,
   "name": "b_C839",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51262,
   "name": "j_C83E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 51270,
   "name": "b_C846",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51288,
   "name": "b_C858",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51324,
   "name": "b_C87C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51331,
   "name": "j_C883",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 51342,
   "name": "sound_stop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51346,
   "name": "b_C892",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51355,
   "name": "r_C89B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51356,
   "name": "sound_silence_all",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51376,
   "name": "doctor_state4_exit",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 51387,
   "name": "r_C8BB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51388,
   "name": "doctor_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51424,
   "name": "b_C8E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51430,
   "name": "b_C8E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51449,
   "name": "b_C8F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51452,
   "name": "b_C8FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51474,
   "name": "b_C912",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51502,
   "name": "b_C92E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51505,
   "name": "life_end_reset",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 51538,
   "name": "b_C952",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51550,
   "name": "b_C95E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51558,
   "name": "b_C966",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51565,
   "name": "b_C96D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51621,
   "name": "b_C9A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51670,
   "name": "b_C9D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51681,
   "name": "b_C9E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51691,
   "name": "doctor_move_by_mode",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 51701,
   "name": "doctor_mode_dispatch",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 51702,
   "name": "doctor_mode_branch_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51717,
   "name": "b_CA05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51733,
   "name": "b_CA15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51739,
   "name": "b_CA1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51745,
   "name": "b_CA21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51751,
   "name": "b_CA27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51757,
   "name": "doctor_fall",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 51773,
   "name": "b_CA3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51792,
   "name": "j_CA50",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 51800,
   "name": "doctor_tile_checks",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 51813,
   "name": "b_CA65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51819,
   "name": "b_CA6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51847,
   "name": "b_CA87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51881,
   "name": "b_CAA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51889,
   "name": "b_CAB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51900,
   "name": "b_CABC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51908,
   "name": "b_CAC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51912,
   "name": "b_CAC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51928,
   "name": "b_CAD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51942,
   "name": "b_CAE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51972,
   "name": "b_CB04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51986,
   "name": "b_CB12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51994,
   "name": "b_CB1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52008,
   "name": "b_CB28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52022,
   "name": "b_CB36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52075,
   "name": "doctor_draw",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 52095,
   "name": "b_CB7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52111,
   "name": "b_CB8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52121,
   "name": "b_CB99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52150,
   "name": "b_CBB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52165,
   "name": "b_CBC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52175,
   "name": "b_CBCF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52196,
   "name": "b_CBE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52198,
   "name": "b_CBE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52224,
   "name": "b_CC00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52245,
   "name": "r_CC15",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52246,
   "name": "doctor_frames_top_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52254,
   "name": "doctor_frames_top_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52262,
   "name": "doctor_frames_climb_top",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52266,
   "name": "doctor_frames_low_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52274,
   "name": "doctor_frames_low_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52282,
   "name": "doctor_frames_climb_low",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52286,
   "name": "doctor_frame_low_holding_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52287,
   "name": "doctor_frame_low_holding_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52288,
   "name": "fall_start_y_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52289,
   "name": "fall_start_y_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52290,
   "name": "fall_tracking",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52291,
   "name": "death_countdown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52292,
   "name": "tile_bd_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52293,
   "name": "death_frame_top",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52294,
   "name": "death_frame_low",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52295,
   "name": "cc47_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52296,
   "name": "death_copy_dest_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52298,
   "name": "death_copy_dest_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52300,
   "name": "doctor_pick_frames",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52308,
   "name": "b_CC54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52309,
   "name": "doctor_frames_branch_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52324,
   "name": "b_CC64",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52333,
   "name": "b_CC6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52341,
   "name": "b_CC75",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52358,
   "name": "b_CC86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52386,
   "name": "b_CCA2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52414,
   "name": "b_CCBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52425,
   "name": "b_CCC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52428,
   "name": "j_CCCC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52449,
   "name": "r_CCE1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52450,
   "name": "doctor_ride_platform",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52467,
   "name": "b_CCF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52486,
   "name": "b_CD06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52489,
   "name": "b_CD09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52505,
   "name": "b_CD19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52528,
   "name": "b_CD30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52538,
   "name": "fall_track",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52552,
   "name": "b_CD48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52577,
   "name": "r_CD61",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52578,
   "name": "fall_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52606,
   "name": "b_CD7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52612,
   "name": "b_CD84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52623,
   "name": "fall_dist_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52624,
   "name": "fall_dist_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52625,
   "name": "r_CD91",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52626,
   "name": "controller_state3",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 52634,
   "name": "controllers_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52636,
   "name": "b_CD9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52665,
   "name": "b_CDB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52688,
   "name": "b_CDD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52694,
   "name": "b_CDD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52721,
   "name": "b_CDF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52727,
   "name": "controller_state_dispatch",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 52728,
   "name": "controller_state_branch_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52744,
   "name": "controller_touch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52798,
   "name": "b_CE3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52806,
   "name": "b_CE46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52829,
   "name": "b_CE5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52844,
   "name": "b_CE6C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52855,
   "name": "controller_state6",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 52856,
   "name": "controller_stop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52867,
   "name": "controller_patrol",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52874,
   "name": "b_CE8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52885,
   "name": "b_CE95",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52920,
   "name": "b_CEB8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52932,
   "name": "b_CEC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52940,
   "name": "j_CECC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 53017,
   "name": "b_CF19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53028,
   "name": "controller_wait",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 53060,
   "name": "b_CF44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53079,
   "name": "controller_move",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 53093,
   "name": "b_CF65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53094,
   "name": "controller_mode_branch_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53103,
   "name": "b_CF6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53110,
   "name": "b_CF76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53116,
   "name": "b_CF7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53122,
   "name": "b_CF82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53125,
   "name": "j_CF85",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 53142,
   "name": "b_CF96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53156,
   "name": "b_CFA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53166,
   "name": "controller_pick_frame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 53195,
   "name": "b_CFCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53200,
   "name": "b_CFD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53205,
   "name": "b_CFD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53221,
   "name": "b_CFE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53226,
   "name": "b_CFEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53229,
   "name": "b_CFED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53232,
   "name": "controller_next",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 53238,
   "name": "fill_cff6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53632,
   "name": "f_D180",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53736,
   "name": "f_D1E8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55336,
   "name": "f_D828",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "map_e000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58368,
   "name": "map_e400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59392,
   "name": "map_e800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60416,
   "name": "map_ec00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61440,
   "name": "map_f000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62464,
   "name": "map_f400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63488,
   "name": "map_f800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64512,
   "name": "map_tail_fc00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64608,
   "name": "arrival_counter",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64609,
   "name": "arrival_mask_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64610,
   "name": "arrival_pixel_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64611,
   "name": "arrival_variant",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64612,
   "name": "arrival_done_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64613,
   "name": "dissolve_all_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64614,
   "name": "dissolve_keep_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 64619,
   "name": "f_FC6B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64624,
   "name": "tardis_sprite_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 64636,
   "name": "arrival_entity_slots",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 64644,
   "name": "doctor_walk_targets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 64646,
   "name": "f_FC86",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64648,
   "name": "f_FC88",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64650,
   "name": "f_FC8A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64652,
   "name": "arrival_sequence",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 64674,
   "name": "b_FCA2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64687,
   "name": "b_FCAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64730,
   "name": "b_FCDA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64770,
   "name": "s_FD02",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 64776,
   "name": "b_FD08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64782,
   "name": "b_FD0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64789,
   "name": "s_FD15",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 64799,
   "name": "arrival_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 64813,
   "name": "b_FD2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64847,
   "name": "doctor_leave_script",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 64848,
   "name": "s_FD50",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 64858,
   "name": "b_FD5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64867,
   "name": "b_FD63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64868,
   "name": "a_FD64",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64875,
   "name": "b_FD6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64914,
   "name": "b_FD92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64928,
   "name": "b_FDA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64931,
   "name": "s_FDA3",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 64933,
   "name": "b_FDA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64981,
   "name": "b_FDD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 64992,
   "name": "b_FDE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65016,
   "name": "b_FDF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65033,
   "name": "b_FE09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65040,
   "name": "b_FE10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65054,
   "name": "b_FE1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65059,
   "name": "departure_sequence",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65073,
   "name": "b_FE31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65110,
   "name": "r_FE56",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 65111,
   "name": "screen_on",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65120,
   "name": "load_tardis_source",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65131,
   "name": "b_FE6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65133,
   "name": "b_FE6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65144,
   "name": "set_tardis_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65165,
   "name": "b_FE8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65176,
   "name": "b_FE98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65193,
   "name": "dissolve_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65201,
   "name": "b_FEB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65252,
   "name": "b_FEE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65256,
   "name": "b_FEE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65266,
   "name": "b_FEF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65278,
   "name": "r_FEFE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 65279,
   "name": "place_arrival_entities",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65280,
   "name": "a_FF00",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 65283,
   "name": "b_FF03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65327,
   "name": "arrival_sprite_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65338,
   "name": "normal_sprite_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65360,
   "name": "copy_sprite_source",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65362,
   "name": "b_FF52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65370,
   "name": "b_FF5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65371,
   "name": "s_FF5B",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65377,
   "name": "wait_15_frames",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65382,
   "name": "b_FF66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 65391,
   "name": "kernal_area_leftovers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65392,
   "name": "f_FF70",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65410,
   "name": "loader_leftover_ff82",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65412,
   "name": "s_FF84",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65466,
   "name": "s_FFBA",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65469,
   "name": "s_FFBD",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65496,
   "name": "s_FFD8",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65512,
   "name": "loader_leftover_ffe8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65530,
   "name": "cpu_vectors",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 0,
   "type": "line",
   "text": "6510 data-direction register. The game only writes it indirectly: start-up clears $02-$FF ($48B3), the resume path clears $5A-$FF ($939B), a new game clears $20-$FF ($943F); $49DE restores $02-$7F from a saved game. $9557 reads zero page by index during the save routine."
  },
  {
   "address": 1,
   "type": "line",
   "text": "6510 port: memory banking. Start-up sets $35 (RAM at $A000/$E000, I/O at $D000; $485D-$4863), clears bit 2 to read the character ROM while copying glyphs ($48F5, the $0800 font), then sets it again ($495A). The save routine banks the KERNAL back in ($9586)."
  },
  {
   "address": 3,
   "type": "line",
   "text": "Five pointers ($03-$0C), copied from $4A4E at start-up: the operand low bytes of the five LDA $FF00,Y instructions at $86C7-$86EA. $869C/$86A0 write the glyph addresses of up to five character codes from the $8B list into that unrolled code (sta ($0D,x) high byte, sta ($03,x) low byte), so $86C7 merges those glyphs into one overlay character."
  },
  {
   "address": 13,
   "type": "line",
   "text": "Five pointers ($0D-$16), copied from $4A4E+10 at start-up: the operand high bytes ($86C9...$86E5) of the unrolled LDA $FF00,Y loads at $86C7; written through sta ($0D,X) at $869C."
  },
  {
   "address": 23,
   "type": "line",
   "text": "Four multicolour pixel-pair masks $C0,$30,$0C,$03 ($17-$1A), copied from $4A4E+20 at start-up; ANDed with glyph bytes at $86CA-$86ED (AND $17,X) by the overlay-character builder at $8652."
  },
  {
   "address": 27,
   "type": "line",
   "text": "Countdown, low byte of a three-byte BCD number ($1D:$1C:$1B, high byte at $1D). New game: 1,08,05 = 10805 ($940C-$9414). $80DA subtracts 1 every 64 frames. At the end of the game $91BC adds it to the score $57-$59 as a bonus, unless the Doctor (object 0) is below Y high 3, in which case $9124 zeroes it first. No reader that prints it was found in the code read so far."
  },
  {
   "address": 28,
   "type": "line",
   "text": "Countdown, middle BCD byte of $1D:$1C:$1B; 08 at a new game ($9414) and at start-up ($499C). Decremented with borrow by $8100; added to score byte $58 at $91C6."
  },
  {
   "address": 29,
   "type": "line",
   "text": "Countdown, high BCD byte of $1D:$1C:$1B; 01 at a new game ($9410, $4998). Decremented with borrow by $8106; added to score byte $57 at $91CC."
  },
  {
   "address": 30,
   "type": "line",
   "text": "Regenerations left. 5 at a new game ($9408, $49B2); $912F/$9143 decrement it at a death, and below 0 the game is over; $9119 sets $FF at the end of the game (so the next start is a new game, tested at $9385). $94AC draws that many life figures ($99) into the status name field $1770-$1779. $C949 also reads it."
  },
  {
   "address": 31,
   "type": "line",
   "text": "Splinx's battery level, $18 (24) at a new game ($4984, $9458). Decremented while Splinx works ($B1F4, $B257, $B400) and increased when recharging ($B3EA); the programmer screen draws the gauge from it ($B076 indexes $AF0D/$AF26/$AF3F)."
  },
  {
   "address": 32,
   "type": "line",
   "text": "Scroll position X (pixels), low byte; with $21. Moved by $CB at $8A42-$8A65 when the view scrolls; its low 3 bits become the fine scroll $5E ($810D). $8A90 derives $24-$2D from $20-$23. Start-up $F7/$02 ($498A)."
  },
  {
   "address": 33,
   "type": "line",
   "text": "Scroll position X, high byte (pixels, with $20)."
  },
  {
   "address": 34,
   "type": "line",
   "text": "Scroll position Y (pixels), low byte; with $23. Moved by $CC at $8A6B-$8A8E; low 3 bits become the fine scroll $5F ($8113). Start-up $D4/$00."
  },
  {
   "address": 35,
   "type": "line",
   "text": "Scroll position Y, high byte (pixels, with $22)."
  },
  {
   "address": 36,
   "type": "line",
   "text": "Scroll position in character columns: ($21:$20) >> 3, low byte; written by $8A9F. Subtracted from object positions at $8568, $87AB, $AE1C, $C00F to place things on screen."
  },
  {
   "address": 37,
   "type": "line",
   "text": "Scroll position in character columns, high byte ($8AA3)."
  },
  {
   "address": 38,
   "type": "line",
   "text": "Scroll position in character rows: ($23:$22) >> 3, low byte ($8AB4)."
  },
  {
   "address": 39,
   "type": "line",
   "text": "Scroll position in character rows, high byte ($8AB8)."
  },
  {
   "address": 40,
   "type": "line",
   "text": "Camera X - $1E ($8ABF): subtracted from an object X ($1B70/$1BC0) at $81DE to give its sprite X; with $29."
  },
  {
   "address": 41,
   "type": "line",
   "text": "High byte of camera X - $1E ($8AC5); objects whose difference is above $155 are not shown ($81E4-$81EE)."
  },
  {
   "address": 42,
   "type": "line",
   "text": "Camera Y + $E2 ($8ACC). Sprite Y = this - object Y ($81FA-$8203): world Y grows upwards (the map rows at $0A80 run bottom-up), screen Y downwards. With $2B."
  },
  {
   "address": 43,
   "type": "line",
   "text": "High byte of camera Y + $E2 ($8AD2)."
  },
  {
   "address": 44,
   "type": "line",
   "text": "Camera Y + $CD ($8AD9): the alternative sprite-Y origin used at $822D for objects whose $18A0 (Y-expand) flag is set, 21 lines lower. With $2D."
  },
  {
   "address": 45,
   "type": "line",
   "text": "High byte of camera Y + $CD ($8ADF); cleared at the end of the sprite pass ($81C5)."
  },
  {
   "address": 47,
   "type": "line",
   "text": "Splinx Programmer: the program step (0-9) the cursor is on; moved with left/right ($B118-$B127) and advanced after a command is stored ($B0D9). Read at $B04E for the cursor sprite position ($AEEE/$AEF8)."
  },
  {
   "address": 48,
   "type": "line",
   "text": "Splinx Programmer: the ten program steps $30-$39, one command code each (the row chosen in $3A); stored at $B0D0, drawn into the programmer screen at $0F82 by $B063 via $AF02, and read by Splinx's executor at $B1C5."
  },
  {
   "address": 58,
   "type": "line",
   "text": "Splinx Programmer: the command row (0-9) under the pointer; moved with up/down ($B0FB-$B10A); row 0 selects the right-hand column instead of a command ($B0CA). Sprite Y from $AEE4."
  },
  {
   "address": 59,
   "type": "line",
   "text": "Splinx Programmer: frame counter of the programmer loop ($B034); the loop acts on every 10th value of its low four bits."
  },
  {
   "address": 60,
   "type": "line",
   "text": "Status-bar box highlighted by F1 (0-4; $A553 steps it and wraps at 5): 0 = the marker box ($42-$45), 1-4 = the four pockets $3E-$41. $A53E/$A55F move the highlight ($95/$97 characters via $A4E4)."
  },
  {
   "address": 61,
   "type": "line",
   "text": "Pocket contents: $3E-$41 are pockets 1-4 (indexed $3D,Y with Y 1-4; $3D itself is never used as a pocket). Each holds an object id or 0. $A5BD puts a picked-up item ($1D80 >= $34) in the first empty pocket and draws its icon; $A622/$A658 take one out. $C13A compares against them."
  },
  {
   "address": 66,
   "type": "line",
   "text": "Markers 1-4 in hand: $42-$45 hold object ids $30-$33 while carried ($496E-$497C, $944E), 0 when placed in the mines. $A5A3 returns a picked-up marker ($1D80 in $30-$33) to its slot; $A612 drops the first one still held. $95B9/$95BD are in the save routine."
  },
  {
   "address": 67,
   "type": "line",
   "text": "Marker 2 slot ($31 when carried); see $42."
  },
  {
   "address": 68,
   "type": "line",
   "text": "Marker 3 slot ($32 when carried); see $42."
  },
  {
   "address": 69,
   "type": "line",
   "text": "Marker 4 slot ($33 when carried); see $42."
  },
  {
   "address": 70,
   "type": "line",
   "text": "Thrown items, two slots (Y = 0,1): object id of the item in flight ($A7F9 from $1D80,X; read $A6DA)."
  },
  {
   "address": 72,
   "type": "line",
   "text": "Thrown items, two slots: flight counter, $FF = slot free. Set 0 when thrown ($A7E9), incremented each step ($A734); arcs up then down by count (>= $28 fall, $30/$60 thresholds at $A6F6-$A722); $FF when it lands ($A7B2, $A7CA) or its object leaves state $0E."
  },
  {
   "address": 74,
   "type": "line",
   "text": "Thrown items, two slots: horizontal direction copied from $CB when thrown ($A7EE); cleared when the item hits a wall ($A767, $A789)."
  },
  {
   "address": 76,
   "type": "line",
   "text": "Thrown items, two slots: vertical direction ($CC form) copied when thrown ($A7F3); $82/$81 after it hits something ($A762, $A784)."
  },
  {
   "address": 78,
   "type": "line",
   "text": "Flag set to $FF at $BF5B (with sound 7); tested at $BB05 (clears or sets $16A0, a terrain class, making a cell passable or not) and at $BE29. Which event sets it was not traced."
  },
  {
   "address": 79,
   "type": "line",
   "text": "Set $FF by $B9FC when four objects (list $B989) are all at their target places, cleared by $BA39 when the other set ($B97F) is; only in zone 2 ($56) every 8th frame. Non-zero at the end of the game lets the heatonite items at $91A4 double the bonus ($9190)."
  },
  {
   "address": 80,
   "type": "line",
   "text": "Flag: bit 7 kept across a regeneration ($937F-$9383). When positive non-zero, $C9AB checks whether the Doctor is within $10,$08 of $0BBC,$0588 and then sets $FF ($C9D4). Also read at $CADD, $CE8A. Meaning not established."
  },
  {
   "address": 81,
   "type": "line",
   "text": "Zero until $C22B sets 1 (when the Doctor is within $20,$10 of a point tested at $C212). While non-zero, $C09A plays sound 3 and every 128 frames increments it; when it passes the Doctor height (object 0 Y / 8), $C0C0 sets $E8=8 (end cause 4). Non-zero at the end of the game also counts as heatonite halted ($91AB). What it represents is not established."
  },
  {
   "address": 82,
   "type": "line",
   "text": "Which play-area screen is shown: 0 or 1, indexes $8002 ($D018 = $E3 or $F3: screen $7800 or $7C00) in the IRQ ($8086) and $8000 for the bottom band ($80C2). Flipped by $8D30 after a scroll; the other screen is drawn into."
  },
  {
   "address": 83,
   "type": "line",
   "text": "Frame counter, low byte of 24 bits ($53-$55); incremented by the frame wait $80DA. Its low bits pace most subsystems (every 2nd, 4th, 8th, 64th, 128th frame)."
  },
  {
   "address": 84,
   "type": "line",
   "text": "Frame counter, middle byte ($80EC); read at $B1EE, $B251, $B3FA (Splinx battery drain pacing)."
  },
  {
   "address": 85,
   "type": "line",
   "text": "Frame counter, high byte ($80F0); no reader found."
  },
  {
   "address": 86,
   "type": "line",
   "text": "Zone of the mines the Doctor is in (0-7), set by $AA3D from his position (called every 8 frames from $AA35 and at start-up with 3, $4A32). Selects the glyph/colour variant swapped in by $ABCF ($ABA3), and gates events ($A2E2, $B9B6). $A510 indexes $56,X with X 1-3 for the score bytes $57-$59."
  },
  {
   "address": 87,
   "type": "line",
   "text": "Score, high BCD byte (digits 1-2 of six); $57-$59. Printed at $0430-$0435 by $A50D (one byte per frame), and into the end message at $9681 ($923D). Rating thresholds at $9219."
  },
  {
   "address": 88,
   "type": "line",
   "text": "Score, middle BCD byte; see $57."
  },
  {
   "address": 89,
   "type": "line",
   "text": "Score, low BCD byte; see $57. Additions at $90D1-$90E7 (restart points) and $91BC (end of game)."
  },
  {
   "address": 90,
   "type": "line",
   "text": "General scratch: a pointer ($5A/$5B, used as ($5A),Y at $49FB, $8164, $85A1...) or a temporary byte. Used by almost every routine, never kept across calls; the bonus $5A-$5C at $9163 is BCD."
  },
  {
   "address": 91,
   "type": "line",
   "text": "Scratch, high byte of the $5A pointer or a temporary; see $5A. Set $D0 at $813D so that ($5A),Y reaches the sprite registers."
  },
  {
   "address": 92,
   "type": "line",
   "text": "Scratch: pointer $5C/$5D (source in copies, ($5C),Y at $49F9) or a temporary (multicolour mask in the sprite pass $8192)."
  },
  {
   "address": 93,
   "type": "line",
   "text": "Scratch, high byte of the $5C pointer or a temporary (priority mask in the sprite pass $819E)."
  },
  {
   "address": 94,
   "type": "line",
   "text": "Fine X scroll of the play area, camera X & 7 ($8111); the IRQ writes it, inverted, to $D016 ($8093). Also indexes the scroll tables at $88BC-$8951."
  },
  {
   "address": 95,
   "type": "line",
   "text": "Fine Y scroll of the play area, camera Y & 7 ($8117); the IRQ ORs it into $D011 ($809F). When 6, the bottom band starts one line earlier ($8119-$8131)."
  },
  {
   "address": 96,
   "type": "line",
   "text": "Scratch position, X low byte, with $61: a candidate or sprite X (sprite pass $8143-$81F3), the next X from $9985, the thrown item ($A73F)."
  },
  {
   "address": 97,
   "type": "line",
   "text": "Scratch position, X high byte; also the $D010 bit mask built in the sprite pass ($8172)."
  },
  {
   "address": 98,
   "type": "line",
   "text": "Scratch position, Y low byte, with $63; also the $D017 mask in the sprite pass ($8187) and the sprite Y at $8211."
  },
  {
   "address": 99,
   "type": "line",
   "text": "Scratch position, Y high byte; see $62."
  },
  {
   "address": 100,
   "type": "line",
   "text": "Probe point X low byte ($64/$65): the point $990D looks up in the map and $A3FB measures distances to. Also an overlay record coordinate at $8441."
  },
  {
   "address": 101,
   "type": "line",
   "text": "Probe point X high byte; see $64."
  },
  {
   "address": 102,
   "type": "line",
   "text": "Probe point Y low byte ($66/$67); see $64."
  },
  {
   "address": 103,
   "type": "line",
   "text": "Probe point Y high byte; see $64."
  },
  {
   "address": 104,
   "type": "line",
   "text": "Scratch: a saved Y register ($92E3, $A808) or a loop counter ($B16D, $B9CD)."
  },
  {
   "address": 105,
   "type": "line",
   "text": "Scratch: a saved X in $990D ($990D stx/$9982 ldx) and the \"first item line\" flag in the end tally ($91E6)."
  },
  {
   "address": 106,
   "type": "line",
   "text": "Edge latch for F3 ($CF): the marker drop at $A57E acts only when F3 goes from released to pressed."
  },
  {
   "address": 107,
   "type": "line",
   "text": "IRQ handler: saved A ($8010, restored $8009)."
  },
  {
   "address": 108,
   "type": "line",
   "text": "IRQ handler: saved X ($8012, restored $800B)."
  },
  {
   "address": 109,
   "type": "line",
   "text": "IRQ handler: saved Y ($8014, restored $800D)."
  },
  {
   "address": 110,
   "type": "line",
   "text": "Coarse-scroll pipeline stage: 0, 2, 4 (dispatch offset at $8C41) as the screen rebuild after a coarse scroll is spread over frames; compared with the scroll tables at $88E7-$8A23."
  },
  {
   "address": 111,
   "type": "line",
   "text": "$FF when horizontal scrolling is not allowed this frame, 0 when it is ($88AD, $88F4...); read at $8A3E, $A36B, $CB0A."
  },
  {
   "address": 112,
   "type": "line",
   "text": "$FF when vertical scrolling is not allowed this frame, 0 when it is ($88AF, $88FA...); read at $8A67, $A1A3, $CB12."
  },
  {
   "address": 113,
   "type": "line",
   "text": "$FF: a coarse scroll step is due ($88EE...); $8C39 then starts it; 0 after $8C3D. $8D3B sets $FF."
  },
  {
   "address": 114,
   "type": "line",
   "text": "Direction of the coarse scroll in progress, 0-7 (the eight stick directions, $88DE-$8A18); with $52 selects the entries in the tables at $8AE2-$8C22 ($8C4F)."
  },
  {
   "address": 115,
   "type": "line",
   "text": "Index into the coarse-scroll tables at $8AE2-$8C22: direction $72, +8 when the screen being drawn is the second buffer ($8C58)."
  },
  {
   "address": 116,
   "type": "line",
   "text": "Coarse-scroll state: 0 when the colour-RAM rebuild and buffer flip at $8D39 is due ($8C32); set $FF by $8D3D and 0 by $8D09."
  },
  {
   "address": 117,
   "type": "line",
   "text": "Result of the movement routines ($9EC8, $A833, $9D15...): negative when the move is blocked by terrain. Read by the throw code ($A73B, $A77C) and pick-up ($A632)."
  },
  {
   "address": 120,
   "type": "line",
   "text": "Map block number found at the probe point by $990D ($9958); read at $B3D2, $BD20, $C905, $CA5B."
  },
  {
   "address": 121,
   "type": "line",
   "text": "Sprite slots 0-7 ($79-$80): the object shown in each hardware sprite this frame, stored by $8219 as objects are found on screen, read by the sprite pass $814E. $B409 reads slot 0."
  },
  {
   "address": 129,
   "type": "line",
   "text": "Number of sprite slots filled this frame (0-8), incremented by $822A, reset by the sprite pass ($81C3); $8133 turns on that many sprites ($81C9)."
  },
  {
   "address": 130,
   "type": "line",
   "text": "Object being drawn as characters or being picked up: set at $8633/$863F, $A7CE, $A9FF, $B315...; read by $8310, $86FE."
  },
  {
   "address": 131,
   "type": "line",
   "text": "State of the character-overlay/pick-up process for $82: 0 idle, $FF in progress, 1 ($8643, $A9FF) another phase; set by $8637, $A7D2, $B313...; dispatched at $8312."
  },
  {
   "address": 132,
   "type": "line",
   "text": "Raster line for the IRQ that starts the bottom band: $55, or $56 when the Y fine scroll is 6 ($811F-$8131); written to $D012 at $8067."
  },
  {
   "address": 133,
   "type": "line",
   "text": "Object $82 X in character columns ($1B70/$1BC0 >> 3), low byte ($8354); base for the overlay record."
  },
  {
   "address": 134,
   "type": "line",
   "text": "Object $82 X in character columns, high byte ($8341-$8351)."
  },
  {
   "address": 135,
   "type": "line",
   "text": "Object $82 Y in character rows, low byte ($836C)."
  },
  {
   "address": 136,
   "type": "line",
   "text": "Object $82 Y in character rows, high byte ($8359-$8369)."
  },
  {
   "address": 137,
   "type": "line",
   "text": "Set $FF when F7 is held with no direction ($A698), 0 otherwise ($A6B2); while set the Doctor does not move ($C9E1 clears $CB/$CC). As $89,X also the start of the list shift at $851B."
  },
  {
   "address": 138,
   "type": "line",
   "text": "The Doctor's facing ($8A,X with X=0 at $A80E; $A8D4, $A939): negative = left; copied into $CB when he throws or drops. Also the byte before the overlay list $8B, used as $8A,X by $846E/$853A."
  },
  {
   "address": 139,
   "type": "line",
   "text": "List of 64 bytes $8B-$CA searched from the top ($8462 LDX #$40): values below $20 are overlay record numbers (tables $8250-$82EF), values $20 and up are character codes stacked in a screen cell; $8684 feeds them to the glyph builder. $83FF-$854F insert and remove entries."
  },
  {
   "address": 146,
   "type": "line",
   "text": "Entry 7 of the overlay list $8B ($8B+7); $832D tests it and abandons the overlay process when it is non-zero."
  },
  {
   "address": 171,
   "type": "line",
   "text": "Byte $AB, inside the overlay list $8B; the only other access is a STA from the code block at $FFD8 (not reached from known code)."
  },
  {
   "address": 174,
   "type": "line",
   "text": "Byte $AE, inside the overlay list $8B; the only other access is at $FFC5, in the $FFB9-$FFCA block, which is not reached from known code."
  },
  {
   "address": 175,
   "type": "line",
   "text": "Byte $AF, inside the overlay list $8B; the only other access is at $FFC7 (see $AE)."
  },
  {
   "address": 180,
   "type": "line",
   "text": "Byte $B4, inside the overlay list $8B; the only other access is at $FFE2 (see $AB)."
  },
  {
   "address": 192,
   "type": "line",
   "text": "Byte $C0, inside the overlay list $8B (auto symbol; no instruction names it directly in the code read)."
  },
  {
   "address": 203,
   "type": "line",
   "text": "Horizontal movement request: from the stick/keys at $8F24 ($81 left, $01 right, 0 none), then rewritten by each object's updater before calling the movement routines (bits 0-1 give the step in pixels)."
  },
  {
   "address": 204,
   "type": "line",
   "text": "Vertical movement request: $81 down, $01 up, 0 none (input $8F24); like $CB, reused by every object updater as its own vertical step."
  },
  {
   "address": 205,
   "type": "line",
   "text": "$FF while fire or RETURN is held ($8F45, $8FDD), else 0. Jump ($C9EB); in the programmer, stores the command ($B0B9)."
  },
  {
   "address": 206,
   "type": "line",
   "text": "Cleared by the input reader at $8F30 with the other key flags; nothing else reads or writes it."
  },
  {
   "address": 207,
   "type": "line",
   "text": "$FF while F3 is held alone ($9043): drop a marker ($A575), and in the save menu SAVE ON DISC ($9512)."
  },
  {
   "address": 208,
   "type": "line",
   "text": "$FF while F1 is held alone ($9040): move the pocket highlight ($A530), SAVE ON CASSETTE in the save menu ($950E), continue after the end of game ($9285)."
  },
  {
   "address": 209,
   "type": "line",
   "text": "$FF while F7 is held alone ($9049): throw ($A68A)."
  },
  {
   "address": 210,
   "type": "line",
   "text": "$FF while F5 is held alone ($9046): drop or use the pocket item ($A6B4), RETURN TO GAME in the save menu ($9516), $BB28."
  },
  {
   "address": 211,
   "type": "line",
   "text": "$FF while S is held ($904C): opens the Splinx Programmer ($AF60) and leaves it ($B0A8)."
  },
  {
   "address": 212,
   "type": "line",
   "text": "Horizontal stick/key direction, same values as $CB but not rewritten by the object code ($8F2C-$8FF8): read by the programmer entry ($AF58), throw ($A68E)."
  },
  {
   "address": 213,
   "type": "line",
   "text": "Vertical stick/key direction ($81 down, $01 up): read by the programmer entry ($AF5C), throw ($A692) and $99ED."
  },
  {
   "address": 214,
   "type": "line",
   "text": "Edge latch for F1: the pocket highlight moves once per press ($A534-$A53C)."
  },
  {
   "address": 215,
   "type": "line",
   "text": "Edge latch for S: the programmer opens or closes once per press ($AF64-$AF6F, $B0AC-$B0B7); $FF at start-up ($4980)."
  },
  {
   "address": 216,
   "type": "line",
   "text": "Edge latch for fire in the Splinx Programmer ($B0BD-$B0C8)."
  },
  {
   "address": 217,
   "type": "line",
   "text": "Distance from object X to the probe point $64/$65, absolute value, low byte (written by $A3FB); with $DA. Used everywhere for \"is it near\" tests."
  },
  {
   "address": 218,
   "type": "line",
   "text": "Absolute X distance, high byte ($A3FB)."
  },
  {
   "address": 219,
   "type": "line",
   "text": "Distance from object X to the probe point $66/$67 in Y, absolute value, low byte ($A3FB)."
  },
  {
   "address": 220,
   "type": "line",
   "text": "Absolute Y distance, high byte ($A3FB)."
  },
  {
   "address": 221,
   "type": "line",
   "text": "Sign of the X difference from $A3FB in movement form: 0 equal, $81 object to the right of the point, $01 to the left. Copied into $CB by chasers ($ACE0)."
  },
  {
   "address": 222,
   "type": "line",
   "text": "Sign of the Y difference from $A3FB: 0 equal, $81 object above the point, $01 below. Copied into $CC by chasers ($ACE4)."
  },
  {
   "address": 223,
   "type": "line",
   "text": "Set by the movement routines ($9A3B...$9BC2: 5 or $82 by terrain class, 0 at $B28C, $C58B); a non-zero value is copied into $1E60,X by the chaser at $AD87."
  },
  {
   "address": 224,
   "type": "line",
   "text": "While non-zero, the pocket and F-key handling at $A52B is skipped. Set $FF at $C8D4, $C9DC; cleared by the lift ($A1D1, $A220, $A225); read at $BB4C."
  },
  {
   "address": 225,
   "type": "line",
   "text": "Music player: 0 = the tune in $E2 must be (re)started; set 1 at $754A after the start. Cleared when the tune changes ($7538)."
  },
  {
   "address": 226,
   "type": "line",
   "text": "Tune number 0-4, chosen every other frame by $74EA from where the Doctor is ($1BC0 X high, $1C60 Y high); 5 = silence ($C89E). Indexes the tune tables $74C2-$74E5."
  },
  {
   "address": 227,
   "type": "line",
   "text": "Music: pointer into voice 1 note data (frequency high, low pairs), $E3/$E4; set from $74D6/$74DB ($7596)."
  },
  {
   "address": 228,
   "type": "line",
   "text": "Music: voice 1 note pointer, high byte."
  },
  {
   "address": 229,
   "type": "line",
   "text": "Music: pointer into voice 2 note data, $E5/$E6; set from $74E0/$74E5 ($75A0)."
  },
  {
   "address": 230,
   "type": "line",
   "text": "Music: voice 2 note pointer, high byte."
  },
  {
   "address": 231,
   "type": "line",
   "text": "Flag set $FF at $C99B (with the Doctor put into state $0A) and cleared at $CD11/$CD32; while set $C966 skips to $CCE2, and $A9E8 refuses to pick up object $39 (PLATFORM)."
  },
  {
   "address": 232,
   "type": "line",
   "text": "Event request for $9102: 0 none; negative = save menu (D $80, CTRL+D $C0, L $FF); 2 escape pod, 4 TARDIS (end of game); 6-$16 deaths (e.g. $08 at $C0C2, $10 suffocation at $CAC2); $12 forced regeneration (R). Cleared at start-up and new game."
  },
  {
   "address": 233,
   "type": "line",
   "text": "Frames to wait ($0A set at $AA07 after a pick-up) before $BACC does its work again."
  },
  {
   "address": 234,
   "type": "line",
   "text": "Fine X scroll of the status bar ($8046); stepped by the message scroller at $9327."
  },
  {
   "address": 235,
   "type": "line",
   "text": "Terrain property 1 of the cell found by $990D (from $98E1 by class $1600); many movement tests ($9A6C...)."
  },
  {
   "address": 236,
   "type": "line",
   "text": "Terrain property 2 of the probed cell (from $98EC); negative = solid for $99F6."
  },
  {
   "address": 237,
   "type": "line",
   "text": "Terrain property 3 of the probed cell (from $98F7)."
  },
  {
   "address": 238,
   "type": "line",
   "text": "Terrain property 4 of the probed cell (from $9902)."
  },
  {
   "address": 239,
   "type": "line",
   "text": "Background colour for the bottom raster band ($80D2 writes $D021). No writer found in the code read: it holds the start-up value 0 (cleared by $48B3)."
  },
  {
   "address": 241,
   "type": "line",
   "text": "Air countdown: while non-zero it is decremented ($CABC) and reloaded to $32 while the AIR MASK (object $3A) is held ($CAB1); reaching 0 sets $E8=$10 (suffocation)."
  },
  {
   "address": 242,
   "type": "line",
   "text": "Loop index over the two thrown-item slots ($46-$4D), 1 then 0 ($A6CB)."
  },
  {
   "address": 243,
   "type": "line",
   "text": "Sound effect on voice 3: current frequency low byte, swept by $C858 each frame from $C6D7 steps."
  },
  {
   "address": 244,
   "type": "line",
   "text": "Sound effect on voice 3: current frequency high byte, swept against the limit $C6BF."
  },
  {
   "address": 245,
   "type": "line",
   "text": "Sound effect playing on voice 3 (index into $C677...$C797), $FF none. $C7C7 starts effect Y only if Y is lower than this (lower number wins); $C88E stops effect Y. $FF at start-up."
  },
  {
   "address": 246,
   "type": "line",
   "text": "Frames before the voice-3 effect starts sweeping (3, $C813)."
  },
  {
   "address": 247,
   "type": "line",
   "text": "Lift (object $0E, $A13C): non-zero while the Doctor rides it; copied to $1CB0 (object 0)."
  },
  {
   "address": 248,
   "type": "line",
   "text": "Lift direction: $02 up, $82 down, copied to $CC ($A191)."
  },
  {
   "address": 249,
   "type": "line",
   "text": "Lift stop index 0-7 (heights at $A12C/$A134); changes at each end."
  },
  {
   "address": 250,
   "type": "line",
   "text": "Lift wait timer, $7F at a stop, counted down ($A1C0)."
  },
  {
   "address": 251,
   "type": "line",
   "text": "Horizontal car (object $0F, $A2B9): $FF while the Doctor rides it; copied to $1CB0."
  },
  {
   "address": 252,
   "type": "line",
   "text": "Horizontal car direction: $02 right, $82 left, copied to $CB ($A354)."
  },
  {
   "address": 253,
   "type": "line",
   "text": "Horizontal car end index 0-3 (positions at $A2B0/$A2B4); bit 0 flips at each end."
  },
  {
   "address": 254,
   "type": "line",
   "text": "Horizontal car wait timer, $BE at an end, counted down ($A388)."
  },
  {
   "address": 255,
   "type": "line",
   "text": "Splinx Programmer: which part the pointer is in (0-2; $B0DE); 2 resets the cursor $2F. Sprite Y from $AEE1."
  },
  {
   "address": 256,
   "type": "line",
   "text": "Stack page. $0100-$013F is zeroed at start-up ($4954): that is sprite block 4 in VIC bank 0, the blank sprite image all eight status-band sprite pointers ($07F8-$07FF) are set to. $0100 itself also takes the first byte of $7800 at start-up ($49C9: non-zero = a saved game is present) and is read at $745C. The rest is the 6510 stack. In the image: depacker leftovers."
  },
  {
   "address": 512,
   "type": "line",
   "text": "Runtime copy of the object tables: start-up copies $1B20-$1D1F here ($49A0-$49AF) and every new game or regeneration copies it back ($93A2-$93C3, $945C-$9468). $0200 holds the $1B20 (state) copy; in the image it holds KERNAL/depacker leftovers."
  },
  {
   "address": 592,
   "type": "line",
   "text": "Runtime copy of $1B70 (object X low), restored at $93A8."
  },
  {
   "address": 672,
   "type": "line",
   "text": "Runtime copy of $1BC0 (object X high), restored at $93AE."
  },
  {
   "address": 752,
   "type": "line",
   "text": "Runtime copy of $1C10 (object Y low), restored at $93B4."
  },
  {
   "address": 768,
   "type": "line",
   "text": "Runtime copy of $1C20-$1D1F (second page of the object tables), copied at start-up ($49A9) and back at a new game ($9465)."
  },
  {
   "address": 832,
   "type": "line",
   "text": "Runtime copy of $1C60 (object Y high), restored at $93BA."
  },
  {
   "address": 912,
   "type": "line",
   "text": "Runtime copy of $1CB0 (object flags), restored at $93C0."
  },
  {
   "address": 991,
   "type": "line",
   "text": "Target of a JMP at $FFE4 in a code block ($FFD8-$FFE6) not reached from the game code read; the bytes here are loader leftovers overwritten by the object-table backup at start-up. Not game code."
  },
  {
   "address": 1005,
   "type": "line",
   "text": "Operand of LDA $03ED,Y at $FF82, in bytes the brief lists as false code ($FF82-$FF8D); in the image this is depacker leftover. No game access known."
  },
  {
   "address": 1024,
   "type": "line",
   "text": "Status bar, VIC bank 0 ($D018=$10/$11: screen $0400, glyphs from $0000). At start-up $4B00-$4EFF is copied over $0400-$07FF ($48C2-$48E6): rows 0-3 ($0400-$049F) are the status bar, and $04A0-$07FF becomes the glyphs of character codes $94-$FF (the private alphabet: code*8). In this image the page still holds the loading screen, overwritten."
  },
  {
   "address": 1064,
   "type": "line",
   "text": "Status row 1 ($0428-$044F): saved to $7800 and restored ($92C0, $9391, $9432, $49D3); blanked to $94 for messages ($92CD)."
  },
  {
   "address": 1070,
   "type": "line",
   "text": "Score digits base: $A51A/$A528 write the six BCD digits of $57-$59 to $0430-$0435 (Y = 2,4,6 and one less), one byte per frame, via the digit table $1730."
  },
  {
   "address": 1103,
   "type": "line",
   "text": "Status row 2 ($0450-$0477): the scrolling message line. $9334/$9337 shift it one cell left; $0477 is where each new letter enters ($9341)."
  },
  {
   "address": 1104,
   "type": "line",
   "text": "Status row 2, read at $9334 (shift source, one byte to the right of $044F)."
  },
  {
   "address": 1106,
   "type": "line",
   "text": "Item-name field: $A500 writes the 10-character name of the item held ($1D80) to $0453-$045C, or the life figures when nothing is held."
  },
  {
   "address": 1143,
   "type": "line",
   "text": "Last cell of the message row: each new letter is written here by $9341."
  },
  {
   "address": 1144,
   "type": "line",
   "text": "Status row 3 ($0478-$049F): filled with character $97 for messages ($92DC)."
  },
  {
   "address": 1280,
   "type": "line",
   "text": "Status font: $0500-$05FF, glyphs of codes $A0-$BF (code*8), copied from $4C00 at start-up ($48CD). Loading-screen bytes in this image."
  },
  {
   "address": 1536,
   "type": "line",
   "text": "Status font: $0600-$06DF glyphs of codes $C0-$DB, copied from $4D00 ($48D6); $06E0 on is overwritten with letters from the character ROM."
  },
  {
   "address": 1760,
   "type": "line",
   "text": "Glyphs of codes $DC-$FB (A-Z then digits 0-5 of the private alphabet): start-up copies them from the $0808 ROM copy ($492C, 256 bytes), so the private alphabet uses the C64 ROM letter shapes."
  },
  {
   "address": 1792,
   "type": "line",
   "text": "Status font: $0700-$07FF from $4E00 ($48DF), then partly replaced by ROM letters/digits ($06E0, $07E0) and sprite pointers ($07F8)."
  },
  {
   "address": 1960,
   "type": "line",
   "text": "Glyph of code $F5 (Z): start-up copies the glyph of code $FF (digit 9) here ($4945) before $07F8-$07FF becomes sprite pointers, so code $F5 draws a 9. The digit table $1730 maps 9 to $F5."
  },
  {
   "address": 2016,
   "type": "line",
   "text": "Glyphs of codes $FC-$FF (digits 6-9), copied from $0908 ($4935)."
  },
  {
   "address": 2040,
   "type": "line",
   "text": "Sprite pointers for screen $0400: all set to 4 ($4948), a blank sprite at $0100. They overlie the glyph of code $FF, hence the moved 9 ($07A8)."
  },
  {
   "address": 2048,
   "type": "line",
   "text": "Character set of the Splinx Programmer screen ($D018=$32: screen $0C00, glyphs $0800). Start-up copies the ROM glyphs of screen codes 0-26 here ($48FD, $D000-$D0D7), then clears code 0 to a blank ($490A). Zero in this image."
  },
  {
   "address": 2056,
   "type": "line",
   "text": "ROM glyphs of A-Z (screen codes 1-26), also the source of the status font letters ($492C -> $06E0)."
  },
  {
   "address": 2264,
   "type": "line",
   "text": "ROM glyphs of 0-9 copied from $D180 ($4914), screen codes $1B-$24 here."
  },
  {
   "address": 2312,
   "type": "line",
   "text": "Glyphs of digits 6-9 read at $4935 for the status font ($07E0)."
  },
  {
   "address": 2344,
   "type": "line",
   "text": "Screen code $25 gets the ROM \"=\" ($4921, from $D1E8); codes $26-$2F at $0930-$097F are box-drawing glyphs in the image: horizontal and vertical lines, corners and tees, used for the programmer screen frame."
  },
  {
   "address": 2352,
   "type": "line",
   "text": "Ten 8-byte glyphs for codes $26-$2F of the Splinx Programmer font at $0800: the lines and corners of the boxes drawn on the programmer screen at $0C00. The rest of that font is copied from the character ROM at run time; these are the game's own."
  },
  {
   "address": 2432,
   "type": "line",
   "text": "Four 8-entry position tables read by $FF03 (placing objects listed at $FC7C, Y stepping by 2): $0980 X high, $0988 X low, $0990 Y high, $0998 Y low."
  },
  {
   "address": 2440,
   "type": "line",
   "text": "X low bytes for the objects placed by $FF03 (see $0980)."
  },
  {
   "address": 2448,
   "type": "line",
   "text": "Y high bytes for the objects placed by $FF03 (see $0980)."
  },
  {
   "address": 2456,
   "type": "line",
   "text": "Y low bytes for the objects placed by $FF03 (see $0980)."
  },
  {
   "address": 2464,
   "type": "line",
   "text": "A shuffled order of the numbers 0-$43 (68 entries to $09E3), used by $FEA9 (index $FC60, counting down) to clear the sprite image at $7800 byte by byte in a random-looking order: a dissolve effect."
  },
  {
   "address": 2532,
   "type": "line",
   "text": "Two 64-byte multicolour sprite images ($09E4-$0A23, $0A24-$0A63); $FE60 copies one to $7800 (bank 1 sprite $E0), the second when the Doctor is at Y high 2 or more."
  },
  {
   "address": 2688,
   "type": "line",
   "text": "Map row addresses, low bytes, 64 rows (index = Y in blocks); rows alternate $80/$00. With $0AC0. The map is 128 blocks per row at $E000-$FBFF stored from the top row down, so row 0 (bottom of the world) is $FB80. Read by $8491, $8D78, $8DF9, $9935, $AEB6."
  },
  {
   "address": 2752,
   "type": "line",
   "text": "Map row addresses, high bytes ($FB, $FB, $FA ... $E0, then $FC and zeros for rows 56-63)."
  },
  {
   "address": 2816,
   "type": "line",
   "text": "Splinx Programmer sprites (VIC bank 0, pointers $2C-$2F written at $AFF9): $0B00, $0B40 and $0B80 are the pointer and frame shapes (not matched to the screen live), $0BC0 the battery gauge."
  },
  {
   "address": 3008,
   "type": "line",
   "text": "Battery gauge sprite (pointer $2F): $B07D-$B09B draw the level from $1F into rows 9-12 (bytes $0BDB-$0BE6) through $AF0D/$AF26/$AF3F."
  },
  {
   "address": 3072,
   "type": "line",
   "text": "Splinx Programmer screen, 40x25 screen codes (glyph set $0800, code 0 blank, $26-$2F box lines). Rows: SPLINX PROGRAMMER; left column CHANGE MODE, 1-4 GOTO MARKER 1-4, R RETURN TO DOCTOR, W WAIT, P PICK UP OBJECT, D DROP OBJECT, C RECHARGE; right column SHUT DOWN, FOLLOW DOCTOR, EXECUTE PROGRAM, BATTERY FULL/EMPTY; bottom row: the ten program cells."
  },
  {
   "address": 3341,
   "type": "line",
   "text": "Programmer screen, inside row 8 (GOTO MARKER 2 line). Auto symbol from a data byte at $C8AB read as ORA $0D0D; no real access."
  },
  {
   "address": 3970,
   "type": "line",
   "text": "Programmer screen row 23: the ten program cells; $B070 writes each step ($30-$39) at every other column from $0F82."
  },
  {
   "address": 4088,
   "type": "line",
   "text": "Sprite pointer 0 of screen $0C00: $2C, the arrow ($AFFB)."
  },
  {
   "address": 4089,
   "type": "line",
   "text": "Sprite pointer 1 of screen $0C00: $2D ($B000)."
  },
  {
   "address": 4090,
   "type": "line",
   "text": "Sprite pointer 2 of screen $0C00: $2E ($B005)."
  },
  {
   "address": 4091,
   "type": "line",
   "text": "Sprite pointer 3 of screen $0C00: $2F, the battery gauge ($B00A)."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "Colour map of the Splinx Programmer screen, 1024 bytes: $B16D swaps $1000-$13FF with colour RAM $D800-$DBFF when the programmer opens and again when it closes, so between visits it holds the play-area colours."
  },
  {
   "address": 4146,
   "type": "line",
   "text": "Colour of screen cell $0C32 (the title row): set to 7 (yellow) at $AF7E before the swap."
  },
  {
   "address": 5120,
   "type": "line",
   "text": "Block definition addresses, low bytes, 256 entries (block number = map byte): n*16 mod 256. With $1500: block n is 16 character codes (4x4) at $3000+16n."
  },
  {
   "address": 5376,
   "type": "line",
   "text": "Block definition addresses, high bytes ($30-$3F)."
  },
  {
   "address": 5632,
   "type": "line",
   "text": "Terrain class of each play-area character code (256 entries, $1600-$16FF), 0-10: $996B looks it up for the character at the probe point and $98E1-$9902 give the four properties. Codes 0-$1F hold bytes like $FF and $0D, out of range for those tables; of these only $0A-$0F appear in block definitions. $16D0-$16FF also serve as the item icon table below."
  },
  {
   "address": 5792,
   "type": "line",
   "text": "Terrain class of character $A0; $BB0B-$BB25 set it to 0 or 1 by $4E and another test: a cell that opens and closes."
  },
  {
   "address": 5840,
   "type": "line",
   "text": "Item icon, first character code, per object ($16D0,X; items $30-$4F at $1700-$171F: $9A, $9C...): $A5AF/$A5E9 draw the icon in the status bar (markers two characters, $16D0 and +1); $83BA/$84FA use it for object overlays. $16D0-$16FF overlap the terrain classes of characters $D0-$FF."
  },
  {
   "address": 5920,
   "type": "line",
   "text": "Name offset per object id ($1720,X, X = $1D80): the object name is the 10 bytes at $1770 + this ($A4F7). Object 2 -> $0A (SPLINX); $30-$33 markers; $34.. items. The entries for objects $10-$19 are the digit table $1730."
  },
  {
   "address": 5936,
   "type": "line",
   "text": "Private-alphabet code of each decimal digit 0-9: $F6-$FE, then $F5 for 9 (code $FF is overwritten by sprite pointers, see $07A8). Used for the score ($A517) and the end-of-game score ($924A)."
  },
  {
   "address": 6000,
   "type": "line",
   "text": "Name field 0, shown when nothing is held: the life figures, $99 at every other byte, one per life in $1E ($94A2-$94BA)."
  },
  {
   "address": 6010,
   "type": "line",
   "text": "Object name \"  SPLINX  \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $02."
  },
  {
   "address": 6020,
   "type": "line",
   "text": "Object name \" MARKER 1 \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $30."
  },
  {
   "address": 6030,
   "type": "line",
   "text": "Object name \" MARKER 2 \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $31."
  },
  {
   "address": 6040,
   "type": "line",
   "text": "Object name \" MARKER 3 \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $32."
  },
  {
   "address": 6050,
   "type": "line",
   "text": "Object name \" MARKER 4 \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $33."
  },
  {
   "address": 6060,
   "type": "line",
   "text": "Object name \"PICK AXE  \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $34."
  },
  {
   "address": 6070,
   "type": "line",
   "text": "Object name \"   MAT    \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $35."
  },
  {
   "address": 6080,
   "type": "line",
   "text": "Object name \"  CRYSTAL \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $36."
  },
  {
   "address": 6090,
   "type": "line",
   "text": "Object name \"PASS CARD \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $37."
  },
  {
   "address": 6100,
   "type": "line",
   "text": "Object name \"  SPANNER \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $38, $4D, $4E, $4F."
  },
  {
   "address": 6110,
   "type": "line",
   "text": "Object name \" PLATFORM \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $39."
  },
  {
   "address": 6120,
   "type": "line",
   "text": "Object name \" AIR MASK \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $3A."
  },
  {
   "address": 6130,
   "type": "line",
   "text": "Object name \"    BOX   \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $3B."
  },
  {
   "address": 6140,
   "type": "line",
   "text": "Object name \"DETONATOR \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $3C, $48, $4C."
  },
  {
   "address": 6150,
   "type": "line",
   "text": "Object name \"EXPLOSIVES\" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $3D."
  },
  {
   "address": 6160,
   "type": "line",
   "text": "Object name \"  CAPSULE \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $3E."
  },
  {
   "address": 6170,
   "type": "line",
   "text": "Object name \"ACTIVATOR \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $3F."
  },
  {
   "address": 6180,
   "type": "line",
   "text": "Object name \"  CIRCUIT \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $40, $41, $42, $43, $44, $45, $4A."
  },
  {
   "address": 6190,
   "type": "line",
   "text": "Object name \"    EGG   \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $46, $47."
  },
  {
   "address": 6200,
   "type": "line",
   "text": "Object name \"CHEMICALS \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $49."
  },
  {
   "address": 6210,
   "type": "line",
   "text": "Object name \"      GEM \" (10 bytes, private alphabet: letter = ASCII+155, $94 space), for object id $4B."
  },
  {
   "address": 6224,
   "type": "line",
   "text": "Sprite colour per object (80 entries, $1850-$189F), written to $D027+slot by the sprite pass ($815B). $949C/$949F reset objects 0 and 1 to 0 (black) at a new game; $CD94 changes one."
  },
  {
   "address": 6225,
   "type": "line",
   "text": "Sprite colour of object 1, reset to 0 at a new game ($949F)."
  },
  {
   "address": 6250,
   "type": "line",
   "text": "Sprite colour of object $1A, set to 6 at a new game ($9427)."
  },
  {
   "address": 6251,
   "type": "line",
   "text": "Sprite colour of object $1B, set to 6 at a new game ($942A)."
  },
  {
   "address": 6304,
   "type": "line",
   "text": "Sprite expansion per object ($18A0-$18EF): 0 none, positive = Y expanded (use sprite origin $2C), negative = X and Y expanded ($8179, $81F5). Objects $0C,$0D (1) and $0E,$0F ($FF: the lift and the car)."
  },
  {
   "address": 6384,
   "type": "line",
   "text": "Object width in pixels per object ($18F0-$193F), used for collision and terrain probes ($9A09 takes half of it as the centre; $9A56...)."
  },
  {
   "address": 6464,
   "type": "line",
   "text": "Object height in pixels per object ($1940,X; $9A1A halves it for the centre, $9D40...). The entries for objects $20 and up are the bytes at $1960."
  },
  {
   "address": 6496,
   "type": "line",
   "text": "Item icon width in characters, read as $1960,X with X an item id $30-$4F (bytes $1990-$19AF, 2 for all but the last three): $A5DF, $A664; also the overlay size loop at $83A0/$84E0 and $8706."
  },
  {
   "address": 6544,
   "type": "line",
   "text": "Item icon height in character rows, read as $1990,X with item ids $30-$4F (bytes $19C0-$19DF, 1 or 2): $A5E4, $A669; $8711."
  },
  {
   "address": 6576,
   "type": "line",
   "text": "Object collision table read by the object-versus-object test at $A83C/$A8C9 (added to one X, subtracted from the other)."
  },
  {
   "address": 6656,
   "type": "line",
   "text": "Object collision table read at $A85C/$A8F4/$A864 in the object-versus-object test."
  },
  {
   "address": 6688,
   "type": "line",
   "text": "Object collision table read at $A889/$A913/$A898/$A91C in the object-versus-object test (vertical extents)."
  },
  {
   "address": 6708,
   "type": "line",
   "text": "Entry of $1A20 for object $14: set to $0E or $0C by $BB36/$BC2B (the object changes size)."
  },
  {
   "address": 6740,
   "type": "line",
   "text": "Entry of $1A20 for object $34: set to $0C or $0E by $BB3B/$BC30."
  },
  {
   "address": 6768,
   "type": "line",
   "text": "Per-object table compared with the frame counter at $A480/$A499 (animation or action timing)."
  },
  {
   "address": 6778,
   "type": "line",
   "text": "Entry $0A of $1A70: $B6A0-$B6A5 read and rewrite it."
  },
  {
   "address": 6816,
   "type": "line",
   "text": "Per-object distance threshold for the chaser AI ($AD05, $AD32, $AD55, $AD81): compared with the X distance high part $DA."
  },
  {
   "address": 6864,
   "type": "line",
   "text": "Sprite priority per object: non-zero = behind the background ($8199 -> $D01B). $B61A, $CBE6-$CBEC change it."
  },
  {
   "address": 6865,
   "type": "line",
   "text": "Priority of object 1, set by $CB39/$CBE9 together with object 0."
  },
  {
   "address": 6944,
   "type": "line",
   "text": "Object state per object (80 entries): 0 inactive/still, 2 carried or moving, 4 in a pocket, 6, 8, $0A, $0C, $0E thrown, and more (values set all over the object code). Saved to $0200 at start-up."
  },
  {
   "address": 6958,
   "type": "line",
   "text": "State of object $0E (the lift), read at $A280."
  },
  {
   "address": 6992,
   "type": "line",
   "text": "State of marker 1 (object $30): 4 at start-up ($4962), i.e. carried."
  },
  {
   "address": 6993,
   "type": "line",
   "text": "State of marker 2 (object $31): 4 at start-up ($4965)."
  },
  {
   "address": 6994,
   "type": "line",
   "text": "State of marker 3 (object $32): 4 at start-up ($4968)."
  },
  {
   "address": 6995,
   "type": "line",
   "text": "State of marker 4 (object $33): 4 at start-up ($496B)."
  },
  {
   "address": 6996,
   "type": "line",
   "text": "State of object $34 (PICK AXE): cleared at $93DE when it was held at a regeneration, written at $C35B."
  },
  {
   "address": 6997,
   "type": "line",
   "text": "State of object $35 (MAT), read at $CDD6."
  },
  {
   "address": 6998,
   "type": "line",
   "text": "State of object $36 (CRYSTAL), read at $B4B7."
  },
  {
   "address": 7024,
   "type": "line",
   "text": "Object X position, low byte (80 objects; with $1BC0, pixels). Object 0 is the Doctor, 2 is Splinx."
  },
  {
   "address": 7025,
   "type": "line",
   "text": "X low of object 1, set at $CB3F."
  },
  {
   "address": 7067,
   "type": "line",
   "text": "X low of object $2B, set at $C10F."
  },
  {
   "address": 7078,
   "type": "line",
   "text": "X low of object $36 (CRYSTAL): $B589 sets $C8 (the crystal is put at X $06C8, Y $06A8 by $B587-$B598)."
  },
  {
   "address": 7104,
   "type": "line",
   "text": "Object X position, high byte (80 objects)."
  },
  {
   "address": 7105,
   "type": "line",
   "text": "X high of object 1, set at $CB45."
  },
  {
   "address": 7147,
   "type": "line",
   "text": "X high of object $2B, set at $C109."
  },
  {
   "address": 7156,
   "type": "line",
   "text": "X high of object $34 (PICK AXE), read at $C327."
  },
  {
   "address": 7158,
   "type": "line",
   "text": "X high of object $36 (CRYSTAL): 6, set at $B58E."
  },
  {
   "address": 7184,
   "type": "line",
   "text": "Object Y position, low byte (80 objects; with $1C60; Y grows upwards)."
  },
  {
   "address": 7185,
   "type": "line",
   "text": "Y low of object 1, set at $CB4E."
  },
  {
   "address": 7200,
   "type": "line",
   "text": "Start of the second page of the object tables, copied to $0300 at start-up ($49A9) and back at a new game ($9468)."
  },
  {
   "address": 7227,
   "type": "line",
   "text": "Y low of object $2B, set at $C11B."
  },
  {
   "address": 7236,
   "type": "line",
   "text": "Y low of object $34 (PICK AXE), read at $C337."
  },
  {
   "address": 7238,
   "type": "line",
   "text": "Y low of object $36 (CRYSTAL): $A8, set at $B593."
  },
  {
   "address": 7264,
   "type": "line",
   "text": "Object Y position, high byte (80 objects). Object 0 value selects the tune ($74F5) and the countdown bonus ($911D)."
  },
  {
   "address": 7265,
   "type": "line",
   "text": "Y high of object 1, set at $CB56."
  },
  {
   "address": 7307,
   "type": "line",
   "text": "Y high of object $2B, set at $C115."
  },
  {
   "address": 7316,
   "type": "line",
   "text": "Y high of object $34 (PICK AXE), read at $C32E."
  },
  {
   "address": 7318,
   "type": "line",
   "text": "Y high of object $36 (CRYSTAL): 6, set at $B598."
  },
  {
   "address": 7344,
   "type": "line",
   "text": "Per-object flag byte (80 entries): object 0 riding flag of the lift ($A16A) and car ($A362); other objects various ($AB1E...). Restored from $0390."
  },
  {
   "address": 7356,
   "type": "line",
   "text": "Flag of object $0C, written at $B485."
  },
  {
   "address": 7370,
   "type": "line",
   "text": "Flag of object $1A: $BA86 reads, $BAB2 writes."
  },
  {
   "address": 7371,
   "type": "line",
   "text": "Flag of object $1B, written at $BAB5."
  },
  {
   "address": 7379,
   "type": "line",
   "text": "Flag of object $23: read and rewritten at $CA79/$CA82."
  },
  {
   "address": 7404,
   "type": "line",
   "text": "Flag of object $3C (DETONATOR): $BCAE/$BCB5."
  },
  {
   "address": 7405,
   "type": "line",
   "text": "Flag of object $3D (EXPLOSIVES): $BCCF/$BCD6."
  },
  {
   "address": 7416,
   "type": "line",
   "text": "Flag of object $48 (DETONATOR): $BCB9/$BCC0."
  },
  {
   "address": 7420,
   "type": "line",
   "text": "Flag of object $4C (DETONATOR): $BCC4/$BCCB."
  },
  {
   "address": 7424,
   "type": "line",
   "text": "Switchable map cells, 17 entries ($1D00-$1D10): the current character pattern number of each; $AE08 sets one and $AEB3 draws it, $AECA redraws all 17. Part of the saved state."
  },
  {
   "address": 7432,
   "type": "line",
   "text": "Switchable cell 8: $B2 until $BADD changes it to $1B (when the Doctor is at X high 8 or more)."
  },
  {
   "address": 7435,
   "type": "line",
   "text": "Switchable cell $0B, read at $CE8E."
  },
  {
   "address": 7439,
   "type": "line",
   "text": "Switchable cell $0F, set to $1B at $BAFD."
  },
  {
   "address": 7442,
   "type": "line",
   "text": "Three flags $1D12-$1D14 set $FF by $BBFC when a spanner job is done (index Y)."
  },
  {
   "address": 7450,
   "type": "line",
   "text": "Three counters $1D1A-$1D1C (0-3) at $BC49-$BC93, incremented when the Doctor is near target Y; 3 = finished."
  },
  {
   "address": 7454,
   "type": "line",
   "text": "Restart points visited, 9 flags $1D1E-$1D26 ($FF once reached, $90BD-$90C4); $1D1F-$1D2A cleared at a new game ($9472)."
  },
  {
   "address": 7455,
   "type": "line",
   "text": "Base used at $9472 (X 11..1) to clear $1D20-$1D2A at a new game."
  },
  {
   "address": 7464,
   "type": "line",
   "text": "Zero until the first restart point is reached, then $64 ($90C7-$90CE)."
  },
  {
   "address": 7465,
   "type": "line",
   "text": "Current restart point 0-8 (set $90B0), where the Doctor reappears after a regeneration ($93EA)."
  },
  {
   "address": 7472,
   "type": "line",
   "text": "Sprite image pointer per object (80 entries), VIC bank 1 ($44 = $5100 ...): copied to both screens pointer sets by the sprite pass ($8152); animation code writes it everywhere."
  },
  {
   "address": 7473,
   "type": "line",
   "text": "Sprite pointer of object 1 (written at $CBCC, $CC93-$CCDA; read $C925)."
  },
  {
   "address": 7474,
   "type": "line",
   "text": "Sprite pointer of object 2 (Splinx), set to $79 at $B21B."
  },
  {
   "address": 7524,
   "type": "line",
   "text": "Sprite pointer of object $34, set at $BB31, $BC3B, $BC42."
  },
  {
   "address": 7532,
   "type": "line",
   "text": "Sprite pointer of object $3C (DETONATOR), $40 at a new game ($948A)."
  },
  {
   "address": 7533,
   "type": "line",
   "text": "Sprite pointer of object $3D (EXPLOSIVES), $41 at a new game ($9495)."
  },
  {
   "address": 7544,
   "type": "line",
   "text": "Sprite pointer of object $48 (DETONATOR), $40 at a new game ($948D)."
  },
  {
   "address": 7548,
   "type": "line",
   "text": "Sprite pointer of object $4C (DETONATOR), $40 at a new game ($9490)."
  },
  {
   "address": 7552,
   "type": "line",
   "text": "Object held by each object ($1D80,X): $1D80 = the item the Doctor holds (shown in the status bar, $A4F4), $1D82 = what Splinx holds. Zeroed $1D80-$1D90 at a new game."
  },
  {
   "address": 7554,
   "type": "line",
   "text": "The object Splinx (object 2) carries ($B31C, read $A99B, $B2E3, $C322)."
  },
  {
   "address": 7562,
   "type": "line",
   "text": "Holding slot of object $0A, written at $B782 with the object it takes."
  },
  {
   "address": 7564,
   "type": "line",
   "text": "Holding slot of object $0C, read at $B603."
  },
  {
   "address": 7600,
   "type": "line",
   "text": "Per-object horizontal direction ($81/$01 form) for movers and chasers ($ACF1, $B20D...); $1DB0 = the Doctor, read at $A6B8/$BAD3."
  },
  {
   "address": 7648,
   "type": "line",
   "text": "Per-object vertical movement state (e.g. climbing/falling); $1DE0 = the Doctor ($A6BD, $BAD8)."
  },
  {
   "address": 7680,
   "type": "line",
   "text": "Last page of the object tables, cleared at every start of play ($9482, $1E00-$1EFF)."
  },
  {
   "address": 7696,
   "type": "line",
   "text": "Hardware sprite X low byte per slot (8), filled at $821D, written to $D000+2n by the sprite pass ($8161)."
  },
  {
   "address": 7704,
   "type": "line",
   "text": "Hardware sprite X bit 8 per slot (8): non-zero sets the $D010 bit ($816D)."
  },
  {
   "address": 7712,
   "type": "line",
   "text": "Hardware sprite Y per slot (8), written to $D001+2n ($8168)."
  },
  {
   "address": 7728,
   "type": "line",
   "text": "Chaser AI: direction override per object ($81/$01), set by $ACF8/$AD22 and used as $CB."
  },
  {
   "address": 7776,
   "type": "line",
   "text": "Chaser AI: timer/direction per object, bits 1-6 count down ($AD62); loaded from $DF."
  },
  {
   "address": 7824,
   "type": "line",
   "text": "Chaser AI: flag per object, cleared at $AD9E."
  },
  {
   "address": 7872,
   "type": "line",
   "text": "Chaser AI: lock flag per object; zero means test the range $1AA0 ($ACFE)."
  },
  {
   "address": 7936,
   "type": "line",
   "text": "Music data $1F00-$2D3F for five tunes, read by the player at $7548-$7647 through the tables $74C2-$74E5: tune 0 voice 1 note lengths in frames (206 notes, 0 ends the tune and restarts both voices)."
  },
  {
   "address": 8144,
   "type": "line",
   "text": "Tune 0 voice 2 note lengths (145 notes, 0-terminated at $2061)."
  },
  {
   "address": 8205,
   "type": "line",
   "text": "Inside tune 0 voice 2 lengths; auto symbol from a data byte at $C8AE read as ORA $200D, no real access."
  },
  {
   "address": 8269,
   "type": "line",
   "text": "Continuation of the music data block $1F00-$2D3F (note lengths and frequency pairs); a label here only because the tracer minted a spurious symbol at $200D inside the data."
  },
  {
   "address": 8296,
   "type": "line",
   "text": "Tune 0 voice 1 notes: SID frequency pairs, high byte first ($D401 then $D400), one per length in $1F00."
  },
  {
   "address": 8712,
   "type": "line",
   "text": "Tune 0 voice 2 notes: frequency pairs, high first, one per length in $1FD0."
  },
  {
   "address": 9008,
   "type": "line",
   "text": "Tune 1 voice 1 note lengths; runs on through $23A8 to the 0 at $242B (251 notes)."
  },
  {
   "address": 9128,
   "type": "line",
   "text": "Tune 1 voice 2 note lengths (131 notes), the tail of the voice 1 list."
  },
  {
   "address": 9264,
   "type": "line",
   "text": "Tune 1 voice 1 notes (frequency high, low pairs)."
  },
  {
   "address": 9504,
   "type": "line",
   "text": "Tune 1 voice 2 notes, inside the voice 1 list."
  },
  {
   "address": 9768,
   "type": "line",
   "text": "Tunes 2 and 3 voice 1 note lengths (174 notes, 0 at $26D6)."
  },
  {
   "address": 9920,
   "type": "line",
   "text": "Tune 3 voice 2 note lengths: the last 22 entries of the $2628 list."
  },
  {
   "address": 9944,
   "type": "line",
   "text": "Tune 2 voice 2 note lengths (132 notes)."
  },
  {
   "address": 10080,
   "type": "line",
   "text": "Tune 2 voice 1 notes (frequency pairs)."
  },
  {
   "address": 10088,
   "type": "line",
   "text": "Tune 3 voice 1 notes: the tune 2 list from its fifth note."
  },
  {
   "address": 10392,
   "type": "line",
   "text": "Tune 3 voice 2 notes, inside the tune 2 voice 1 list."
  },
  {
   "address": 10432,
   "type": "line",
   "text": "Tune 2 voice 2 notes."
  },
  {
   "address": 10728,
   "type": "line",
   "text": "Tune 4 voice 1 note lengths (138 notes)."
  },
  {
   "address": 10888,
   "type": "line",
   "text": "Tune 4 voice 2 note lengths (121 notes)."
  },
  {
   "address": 11016,
   "type": "line",
   "text": "Tune 4 voice 1 notes."
  },
  {
   "address": 11336,
   "type": "line",
   "text": "Tune 4 voice 2 notes (to $2D39)."
  },
  {
   "address": 11584,
   "type": "line",
   "text": "Sixteen bytes that decode as code (LDA #0 / STA $DB / STA $DA / STA $98BB / RTS, then LDA $18F0,X ...) but that no instruction reaches: a leftover of an earlier build, beside tardis_music_off at $2D50."
  },
  {
   "address": 11600,
   "type": "line",
   "text": "Called from $C8B0 (end-of-game path): JSR $C89C (music off, tune 5), then JMP $FD4F. Sits among leftover bytes: $2D40-$2D4F look like a code fragment nothing calls."
  },
  {
   "address": 11606,
   "type": "line",
   "text": "Filler: $0D bytes then zeros and $FF after tardis_music_off; nothing reads them."
  },
  {
   "address": 11776,
   "type": "line",
   "text": "Alternative glyphs: 16 characters x 2 variants x 8 bytes. $ABCF swaps the glyphs of play characters $A1-$A5 and $F5-$FF ($ABAC) with variant 0 ($2E00+16n) or 1 (+8) by zone $56, and their colours with $3E60/$3E70."
  },
  {
   "address": 12032,
   "type": "line",
   "text": "Colour of each play-area character code (256 entries, multicolour values $08-$0F): the screen rebuild copies the screen through it into colour RAM ($8EB8), and the overlay code copies entries ($845C). $ABCF swaps entries for the variant characters."
  },
  {
   "address": 12090,
   "type": "line",
   "text": "Colour of character $3A: $0D at a new game ($9422), rewritten at $BABD."
  },
  {
   "address": 12193,
   "type": "line",
   "text": "Colour of character $A1: $0D at a new game ($941F), rewritten at $BABA."
  },
  {
   "address": 12288,
   "type": "line",
   "text": "Block definitions 00-3F: 16 character codes each, 4 rows of 4 (row-major), addressed through $1400/$1500. The map ($E000-$FBFF) is made of these blocks."
  },
  {
   "address": 13312,
   "type": "line",
   "text": "Block definitions 40-7F: 16 character codes each, 4 rows of 4 (row-major), addressed through $1400/$1500. The map ($E000-$FBFF) is made of these blocks."
  },
  {
   "address": 14336,
   "type": "line",
   "text": "Block definitions 80-BF: 16 character codes each, 4 rows of 4 (row-major), addressed through $1400/$1500. The map ($E000-$FBFF) is made of these blocks."
  },
  {
   "address": 15360,
   "type": "line",
   "text": "Block definitions C0-FF: 16 character codes each, 4 rows of 4 (row-major), addressed through $1400/$1500. The map ($E000-$FBFF) is made of these blocks. $3E60-$3E7F (blocks $E6-$E7, never in the map) are the alternative colours swapped by $ABCF."
  },
  {
   "address": 16384,
   "type": "line",
   "text": "Play-area character set, bank 1 ($D018=$F1 below the top 8 lines: glyphs $4000), codes 0-$7F, multicolour. $8652 builds overlay characters into it ($4000+8*code)."
  },
  {
   "address": 17408,
   "type": "line",
   "text": "Play-area character set, codes $80-$FF; $A1-$A5 and $F5-$FF are swapped with $2E00 by zone ($ABCF)."
  },
  {
   "address": 18432,
   "type": "line",
   "text": "Unreached prologue of the unpacked file: LDA #0/TAX/STA $0800,X loop then NOP padding to $484C. The loader stub at $7F40 does the same $0800 clear itself and jumps straight to $484D, so these bytes never run; zeroed by main_start ($7440) with the rest of $4800-$4FFF."
  },
  {
   "address": 18509,
   "type": "line",
   "text": "Start-up, runs once from the loader's JMP $484D. Blanks the screen ($D011 bit4), stops CIA1 timer A, sets $01=$35 (RAM under BASIC/KERNAL, I/O in), 38 columns, 24 rows, multicolour text, colours (border/background 0, $D022=9, $D023=8, sprite MC $D025=2 $D026=8), points IRQ $FFFE at $8010 and NMI $FFFA at $800F, zeroes zero page $02-$FF, copies the word table $4A4E to $03-$1B, copies $4B00-$4EFF to $0400-$07FF (status-bar screen plus its glyphs) and $4F00-$4F9F to colour RAM $D800 (4 status rows), then continues at $48F5."
  },
  {
   "address": 18677,
   "type": "line",
   "text": "Start-up, part 2: switches the character ROM in ($01 bit2 clear), copies ROM chars 0-26 (@,A-Z), the digits 0-9 and '=' to $0800, then moves them to $06E0-$07FF so the private alphabet codes $DC-$F5 (A-Z), $F6-$FF (0-9) draw with ROM letter shapes (code = char*8 offset from $0000 in bank 0); moves the '=' glyph to $07A8 (code $F5), sets the status-band sprite pointers $07F8-$07FF to 4 (sprite data $0100) and clears $0100-$013F so those sprites are blank. Switches I/O back in at $495A."
  },
  {
   "address": 18784,
   "type": "line",
   "text": "Start-up, part 3: $1B50-$1B53 = 4, $42-$45 = $30-$33, $D7=$FF, $1F=$18, $20/$21=$F7/$02, $22/$23=$D4/$00, BCD counter $1D/$1C = $01/$08 (with $1B=$03 from the $4A4E table: $010803), copies $1B20-$1D1F to $0200-$03FF, $1E=5. Meanings of these variables belong to their readers; not established here."
  },
  {
   "address": 18886,
   "type": "line",
   "text": "Start-up, part 4: $0100 := $7800 (the 'restored game' flag main_start tests). If $7800 <> 0 the block $7800-$7D7F is a saved game (the layout save_game $9542 writes): $7D00-$7D77 -> status rows $0428, $7802-$787F -> zero page $02-$7F, $7920-$7CFF -> $1B20-$1EFF. In the hand-over image $7800 = 0, so a fresh start skips to $4A07. How a loaded save file comes to run this code is not traced."
  },
  {
   "address": 18951,
   "type": "line",
   "text": "Start-up, part 5: copies $4B28-$4B9F (status rows 1-3) to $7C00, clears $E8 and $BAC9, $F5=$FF, raster IRQ at line $3C with $D011 bit7 clear, enables the raster IRQ ($D01A=1), $56=3, then calls initialisers $AA3D, $ABCF, $AECA, $881D, $8ED0, $92B3, $9358 (other ranges) and falls into $4A80."
  },
  {
   "address": 19022,
   "type": "line",
   "text": "25 bytes copied to zero page $03-$1B at $48B8: words $86E4,$86DD,$86D6,$86CF,$86C8,$86E5,$86DE,$86D7,$86D0,$86C9 (two runs stepping by -7), $30C0, then byte $03 at $4A66 -> $1B (low byte of the BCD counter $1B-$1D). Readers not traced here."
  },
  {
   "address": 19046,
   "type": "line",
   "text": "Last byte of the zero-page init copy: $03 lands in $1B, the low byte of the three-byte BCD counter. $4A67-$4A7F are zero padding (not copied)."
  },
  {
   "address": 19072,
   "type": "line",
   "text": "End of start-up: JSR $C89C (sets music tune $E2=5, i.e. off, and gate bytes $D404/$D40B=$FF), then JMP $7440 main_start."
  },
  {
   "address": 19078,
   "type": "line",
   "text": "Zero padding $4A86-$4AFF between the start-up code and the status-bar screen data; not read by the game."
  },
  {
   "address": 19200,
   "type": "line",
   "text": "Source of the bank-0 screen $0400-$07FF, copied at $48C2. $4B00-$4B9F: the 4-row status bar in the private alphabet ($94 space, letters ASCII+155, $96-$A1 panel pieces); row 1 at $4B28 is also copied to $7C00 at $4A07. From $4BA0 on: glyph bytes for character codes $94-$FF (the VIC's character base is $0000 in this band, lead's live capture), later overlaid for letters and digits by startup_build_alphabet_glyphs."
  },
  {
   "address": 19240,
   "type": "line",
   "text": "Status row 1 of the bank-0 status bar (40 bytes from $4B28), copied with rows 2-3 ($4B28-$4B9F) into $7C00 as well as to $0428."
  },
  {
   "address": 19456,
   "type": "line",
   "text": "Status-bar glyph data, second page (-> $0500-$05FF, codes $A0-$BF). Pixel data for panel graphics; not decoded individually."
  },
  {
   "address": 19712,
   "type": "line",
   "text": "Status-bar glyph data, third page (-> $0600-$06FF, codes $C0-$DF; $06E0 onward is replaced by ROM letters at start-up)."
  },
  {
   "address": 19968,
   "type": "line",
   "text": "Status-bar glyph data, fourth page (-> $0700-$07FF, codes $E0-$FF); replaced at start-up by ROM letter/digit glyphs and the blank-sprite pointers at $07F8."
  },
  {
   "address": 20224,
   "type": "line",
   "text": "160 colour-RAM bytes for the 4 status rows, copied to $D800-$D89F at $48E8."
  },
  {
   "address": 20480,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 1 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $40-$4F (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 21504,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 2 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $50-$5F (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 3 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $60-$6F (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 23552,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 4 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $70-$7F (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 24576,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 5 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $80-$8F (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 25600,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 6 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $90-$9F (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 26624,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 7 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $A0-$AF (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 27648,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 8 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $B0-$BF (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "Sprite images, VIC bank 1, part 9 of 9 ($5000-$73FF): sixteen 64-byte multicolour frames, pointer values $C0-$CF (address = $4000 + pointer*64). The objects' current frames are in $1D30 and are copied to the sprite pointers at $7BF8/$7FF8 by $814E."
  },
  {
   "address": 29696,
   "type": "line",
   "text": "64-byte sprite image at sprite pointer $D0 of bank 1 ($4000+$D0*64). During the arrival sequence all six sprites point here (set_tardis_sprites $FE78); copy_sprite_source $FF50 fills it from $7800 and dissolve_sprite $FEA9 clears pixel pairs in it."
  },
  {
   "address": 29760,
   "type": "line",
   "text": "Entered from start-up. Clears $4800-$4FFF (8 pages, high byte self-modified at $7450), erasing the start-up code. Reads and clears $0100 (restored-game flag set at $49C6): if zero runs the arrival sequence $FC8C; otherwise turns the screen on and sets $FC64=1. Falls into main_loop."
  },
  {
   "address": 29776,
   "type": "line",
   "text": "Self-modified high byte of the STA $4800,X in main_start: stepped $48..$4F to clear 8 pages."
  },
  {
   "address": 29814,
   "type": "line",
   "text": "Per-frame loop: $8F24 input, $80DA frame wait, $74EA music, $878C, $BFEF, $AA35, $BACC, $C8BC, $A13C, $AF58 (only while $FC64 <> 0), $CD9A (entities 16-40 on routes, see route tables $7736), $B9B6, $B48A, $C28E, $B680, $C44D, $C09A, $A2B9, $A4EE, $A6CB, $8C32, $C818, then JMP back. Never returns."
  },
  {
   "address": 29888,
   "type": "line",
   "text": "Music voice 1 note-length countdown (frames/2); $74C1 is voice 2's. Set to 1 at tune start, reloaded from the duration list, a 0 duration restarts the tune."
  },
  {
   "address": 29889,
   "type": "line",
   "text": "Music voice 2 note-length countdown (see $74C0)."
  },
  {
   "address": 29890,
   "type": "line",
   "text": "Per-tune tables, 5 entries each, index = tune $E2 (0-4): $74C2/$74C7 voice-1 duration list lo/hi ($1F00,$2330,$2628,$2628,$29E8), $74CC/$74D1 voice-2 duration lists, $74D6/$74DB voice-1 note lists, $74E0/$74E5 voice-2 note lists. Tunes 2 and 3 share voice-1 durations."
  },
  {
   "address": 29895,
   "type": "line",
   "text": "High bytes of voice-1 duration lists (see $74C2)."
  },
  {
   "address": 29900,
   "type": "line",
   "text": "Voice-2 duration lists lo; with $74D1: $1FD0,$23A8,$26D8,$26C0,$2A88."
  },
  {
   "address": 29905,
   "type": "line",
   "text": "Voice-2 duration lists hi (see $74CC)."
  },
  {
   "address": 29910,
   "type": "line",
   "text": "Voice-1 note lists lo; with $74DB: $2068,$2430,$2760,$2768,$2B08. Notes are SID frequency words stored hi byte first."
  },
  {
   "address": 29915,
   "type": "line",
   "text": "Voice-1 note lists hi (see $74D6)."
  },
  {
   "address": 29920,
   "type": "line",
   "text": "Voice-2 note lists lo; with $74E5: $2208,$2520,$28C0,$2898,$2C48."
  },
  {
   "address": 29925,
   "type": "line",
   "text": "Voice-2 note lists hi (see $74E0)."
  },
  {
   "address": 29930,
   "type": "line",
   "text": "Two-voice music, called once a frame from main_loop. Odd frames ($53 bit0 set): choose tune $E2 from game state: $1C60 < 3 -> 2; else $1BC0 < 8 -> 1; $1BC0 < 13 -> 0; else $1C60 >= 4 -> 0, otherwise 4 (entity 0's position bytes, presumably the Doctor's), and clear $E1 so the tune restarts; the 'same tune' test compares Y, not $E2 (see note). Even frames: $E2 = 5 means silent; $E1 = 0 starts the tune (music_start $7548), else music_step $75C0."
  },
  {
   "address": 30011,
   "type": "line",
   "text": "Even-frame half of music_update: nothing if $E2=5, start the tune if $E1=0, else step it."
  },
  {
   "address": 30024,
   "type": "line",
   "text": "Start tune $E2: $E1=1, both countdowns =1, writes the SID register list $756B (volume $0F, saw/pulse settings, ADSR), then music_select_tune."
  },
  {
   "address": 30059,
   "type": "line",
   "text": "Register/value pairs written to $D400+reg by music_start, $FF ends: $17=0 $15=0 $03=$0B $02=$56 $0A=$0B $09=$56 $04=0 $0B=0 $0F=0 $0E=0 $06=$22 $05=$05 $0D=$44 $0C=$24 $16=0 $18=$0F (filter off, volume 15, voice 1 AD=$05 SR=$22, voice 2 AD=$24 SR=$44, pulse width $0B56)."
  },
  {
   "address": 30097,
   "type": "line",
   "text": "Loads tune $E2's pointers: note list pointers into $E3/$E4 (voice 1) and $E5/$E6 (voice 2), duration list pointers into the self-modified operands $7603/$7604 and $7635/$7636."
  },
  {
   "address": 30144,
   "type": "line",
   "text": "Counts down both voices; at 1 the gate is released (control register 0), at 0 the next note is played: frequency word (hi, lo) from the note list, control $21 (sawtooth, gate on), new length from the duration list; a zero length restarts the tune (music_start)."
  },
  {
   "address": 30211,
   "type": "line",
   "text": "Self-modified operand of LDA $FF00 in music_step: pointer into voice 1's duration list, set by music_select_tune, incremented per note."
  },
  {
   "address": 30212,
   "type": "line",
   "text": "High byte of voice 1's duration-list pointer (operand of the LDA at $7602)."
  },
  {
   "address": 30261,
   "type": "line",
   "text": "Self-modified operand of LDA $FF00 at $7634: pointer into voice 2's duration list."
  },
  {
   "address": 30262,
   "type": "line",
   "text": "High byte of voice 2's duration-list pointer (operand of the LDA at $7634)."
  },
  {
   "address": 30282,
   "type": "line",
   "text": "Patrol routes for entity slots 16-40, walked by the entity loop $CD9A (routine $CECC): records of 4 bytes (target position hi/lo pairs -> $65,$64,$67,$66, passed to $A3FB). Each slot's list starts at the pointer in $7736/$774F and its last record offset is in $7768; $1D80,x is the slot's current offset, advanced by 4 and wrapped to 0."
  },
  {
   "address": 30294,
   "type": "line",
   "text": "Route waypoint list for entity slot 17 (last offset 8); 4-byte records read by $CECC."
  },
  {
   "address": 30306,
   "type": "line",
   "text": "Route waypoint list for entity slot 18 (last offset 8); 4-byte records read by $CECC."
  },
  {
   "address": 30318,
   "type": "line",
   "text": "Route waypoint list for entity slot 19 (last offset 8); 4-byte records read by $CECC."
  },
  {
   "address": 30330,
   "type": "line",
   "text": "Route waypoint list for entity slot 20 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30338,
   "type": "line",
   "text": "Route waypoint list for entity slot 21 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30346,
   "type": "line",
   "text": "Route waypoint list for entity slot 22 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30354,
   "type": "line",
   "text": "Route waypoint list for entity slot 23 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30362,
   "type": "line",
   "text": "Route waypoint list for entity slot 24 (last offset 8); 4-byte records read by $CECC."
  },
  {
   "address": 30374,
   "type": "line",
   "text": "Route waypoint list for entity slot 25 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30382,
   "type": "line",
   "text": "Route waypoint list for entity slot 26 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30390,
   "type": "line",
   "text": "Route waypoint list for entity slot 27 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30398,
   "type": "line",
   "text": "Route waypoint list for entity slot 28 (last offset 0); 4-byte records read by $CECC."
  },
  {
   "address": 30402,
   "type": "line",
   "text": "Route waypoint list for entity slot 29 (last offset 0); 4-byte records read by $CECC."
  },
  {
   "address": 30406,
   "type": "line",
   "text": "Route waypoint list for entity slot 30 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30414,
   "type": "line",
   "text": "Route waypoint list for entity slot 31 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30422,
   "type": "line",
   "text": "Route waypoint list for entity slot 32 (last offset 8); 4-byte records read by $CECC."
  },
  {
   "address": 30434,
   "type": "line",
   "text": "Route waypoint list for entity slot 33 (last offset 8); 4-byte records read by $CECC."
  },
  {
   "address": 30446,
   "type": "line",
   "text": "Route waypoint list for entity slot 34 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30454,
   "type": "line",
   "text": "Route waypoint list for entity slot 35 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30462,
   "type": "line",
   "text": "Route waypoint list for entity slot 36 (last offset 12); 4-byte records read by $CECC."
  },
  {
   "address": 30478,
   "type": "line",
   "text": "Route waypoint list for entity slot 37 (last offset 12); 4-byte records read by $CECC."
  },
  {
   "address": 30494,
   "type": "line",
   "text": "Route waypoint list for entity slot 38 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30502,
   "type": "line",
   "text": "Route waypoint list for slot 39 (last offset 4), $7726-$772D. The address is also the base of the $7726,X read at $CECF (X=16-40), whose low-byte entries start at $7736."
  },
  {
   "address": 30510,
   "type": "line",
   "text": "Route waypoint list for entity slot 40 (last offset 4); 4-byte records read by $CECC."
  },
  {
   "address": 30518,
   "type": "line",
   "text": "Route list pointers for entity slots 16-40: 25 low bytes $7736-$774E then 25 high bytes $774F-$7767 (read as $7726,X / $773F,X). All point into $764A-$7735."
  },
  {
   "address": 30527,
   "type": "line",
   "text": "Base used as $773F,X (X=16-40) at $CED4: the route pointer high bytes start at $774F; $773F-$774E are the last low bytes."
  },
  {
   "address": 30552,
   "type": "line",
   "text": "Base used as $7758,X (X=16-40) at $CF06: last-record offsets start at $7768; $7758-$7767 are route pointer high bytes."
  },
  {
   "address": 30568,
   "type": "line",
   "text": "Per slot 16-40 (read $7758,X at $CF06): offset of the route's last record; when $1D80,X equals it the offset resets to 0."
  },
  {
   "address": 30577,
   "type": "line",
   "text": "Base used as $7771,X at $CEAB (reach table from $7781); these 16 bytes are route_last_offset entries."
  },
  {
   "address": 30593,
   "type": "line",
   "text": "Per slot 16-40 (read $7771,X at $CEAB): horizontal distance ($D9) under which the slot reacts to the player; values $C0 or $12."
  },
  {
   "address": 30602,
   "type": "line",
   "text": "Base used as $778A,X at $CDB9/$CE21 (flag table from $779A); these 16 bytes are entity_x_reach entries."
  },
  {
   "address": 30618,
   "type": "line",
   "text": "Per slot 16-40 (read $778A,X at $CDB9/$CE21): negative, 0 or 1; 1 marks the slot handled at $CE28 (sets state 9 and $50=$79 on contact). Meaning in game terms not established."
  },
  {
   "address": 30643,
   "type": "line",
   "text": "Sprite pointer values for route entities, read by $CFCB-$CFEA with small indexes from bases $77B3, $77B7, $77BB, $77C4 (frames $A2-$A9 and $CB-$CD) -> $1D30,X."
  },
  {
   "address": 30647,
   "type": "line",
   "text": "Frame table base read as $77B7,Y at $CFD0 (Y = $1B70,X and 3), part of entity_anim_frames."
  },
  {
   "address": 30651,
   "type": "line",
   "text": "Frame table base read as $77BB,Y at $CFE5 (Y = animation counter), part of entity_anim_frames."
  },
  {
   "address": 30653,
   "type": "line",
   "text": "Base used as $77BD,X (X=16-40) at $CDC3/$CF5C: the toggle bytes start at $77CD."
  },
  {
   "address": 30660,
   "type": "line",
   "text": "Frame table base read as $77C4,Y at $CFCB (Y = counter and $7F), part of entity_anim_frames."
  },
  {
   "address": 30669,
   "type": "line",
   "text": "Per slot 16-40 (read/written $77BD,X at $CDC3/$CF5C): flips each pass in state 0, cleared at $CF5C."
  },
  {
   "address": 30678,
   "type": "line",
   "text": "Base used as $77D6,X (X=16-40) in $CFB9-$CFE2: the animation counters start at $77E6."
  },
  {
   "address": 30694,
   "type": "line",
   "text": "Per slot 16-40 ($77D6,X, $CFB9-$CFE2): animation frame counter; bit7 selects the direction set, reloaded with 8 or $88."
  },
  {
   "address": 30720,
   "type": "line",
   "text": "Bank-1 screen at $7800 (one of the two play-area buffers; sprite pointers at $7BF8). Also reused: the arrival sequence keeps its sprite source image in $7800-$787F ($FE60, $FEA9), and save_game $9542 builds its file here ($7800 = $FF marker, zero page at $7803-$78FF, $1B20-$1EFF at $7920-$7CFF, status rows at $7D00), which startup_restore_saved_game reads back."
  },
  {
   "address": 30784,
   "type": "line",
   "text": "Second 64 bytes of the $7800 block: dissolve_sprite also clears pixels here when $FC65 <> 0; otherwise part of screen A / the save block (zero page $40-$7F image)."
  },
  {
   "address": 31736,
   "type": "line",
   "text": "Sprite pointers for the $7800 screen, written with $7FF8 by $814E-$8158 and set_tardis_sprites $FE98."
  },
  {
   "address": 31744,
   "type": "line",
   "text": "Bank-1 screen at $7C00, the other play-area buffer; start-up puts status row 1 ($4B28-$4B9F) in its first 3 rows at $4A07."
  },
  {
   "address": 32000,
   "type": "line",
   "text": "120 bytes: copy of status rows 1-3 ($0428) inside the save block; save_game fills it from $7800 (itself from $0428 at $92C0), start-up restores it. In the hand-over image it holds the unpacked file's contents, not a real save."
  },
  {
   "address": 32760,
   "type": "line",
   "text": "Sprite pointers for the $7C00 screen (see $7BF8)."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "IRQ bottom band: $D018 value per displayed buffer ($52): $E1 = screen $7800, $F1 = screen $7C00, charset $4000 in bank 1. Read at $80C4."
  },
  {
   "address": 32770,
   "type": "line",
   "text": "IRQ play-area band: $D018 value per displayed buffer ($52): $E3 = screen $7800, $F3 = screen $7C00, charset bits %001 ($4800 in bank 1). Read at $8088."
  },
  {
   "address": 32772,
   "type": "line",
   "text": "Common IRQ exit: acknowledge the raster interrupt ($D019 = 1), restore A/X/Y from $6B/$6C/$6D (the IRQ saves registers in zero page, not on the stack), RTI. $800F is the bare RTI the NMI vector $FFFA points at."
  },
  {
   "address": 32784,
   "type": "line",
   "text": "Raster IRQ ($FFFE). Saves A/X/Y to $6B-$6D, then a three-way dispatch through a self-modified BCC offset at $8018 (0/2/4). 0 -> $8062 play-area band: next raster $84 ($55/$56), VIC bank 1, $D018 from $8002,$52, $D016 fine X = $5E EOR 7, $D011 fine Y = $5F. 2 -> $80A7 lower band: next raster $FF, a short NOP delay whose length is set at $80B3 by $8113, $D018 from $8000,$52, background $D021 = $EF. 4 -> $801D status band: next raster $4D, VIC bank 0, $D016 fine X from $EA, $D011 scroll bits cleared, $D018 = $10, background black."
  },
  {
   "address": 32792,
   "type": "line",
   "text": "Self-modified operand of the BCC at $8017: 0, 2 or 4 selects which raster band the next IRQ sets up (written at $801F, $8064, $80A9)."
  },
  {
   "address": 32947,
   "type": "line",
   "text": "Self-modified operand of the BCC at $80B2: $0C skips all NOPs, $00 runs 12 of them; written at $8121/$812C from the fine vertical scroll ($5F = 6 gives $00)."
  },
  {
   "address": 32986,
   "type": "line",
   "text": "Once per frame, called from the main loop and elsewhere: waits for raster line $FA and increments the 24-bit frame counter $53-$55. The BCD decrement of $1B-$1D (by 1) is reached only when $53 and $54 both wrap (BNEs at $80EA/$80EE), so once per 65536 frames; the AND #$3F test at $80F4 is then always true. Then sets fine scroll $5E = $20 AND 7, $5F = $22 AND 7, chooses the lower IRQ band raster ($84 = $55 or $56) and delay ($80B3), and falls into the sprite update at $8133."
  },
  {
   "address": 33075,
   "type": "line",
   "text": "Writes up to 8 hardware sprites from the list built by $81DA: $81 = count, enable mask from $81C9. For each sprite y: object $79,y; pointer $1D30,obj to both screens' pointer bytes $7BF8/$7FF8; colour $1850,obj to $D027; X $1E10,y and Y $1E20,y through the pointer ($5A)=$D000+y; MSB from $1E18,y; $18A0,obj nonzero = Y-expand, negative = X-expand too; $1AD0,obj nonzero = behind background. Multicolour is set for every sprite ($818E test is constant). Ends by clearing $81 and $2D."
  },
  {
   "address": 33224,
   "type": "line",
   "text": "One unreferenced $EA byte between the sprite update's RTS and its tables (no reference found in the snapshot scan)."
  },
  {
   "address": 33225,
   "type": "line",
   "text": "$D015 value for 0-8 sprites in use: $00,$01,$03,...,$FF, indexed by the sprite count $81 (read at $8135)."
  },
  {
   "address": 33234,
   "type": "line",
   "text": "Single-bit masks $01..$80 for sprite 0-7, used to build $D010/$D01D/$D017/$D01C/$D01B in $8174-$81A0."
  },
  {
   "address": 33242,
   "type": "line",
   "text": "Adds object X to the frame's sprite list if it is on screen. Screen X = $1B70/$1BC0,x - $28/$29 must be below $156; screen Y = $2A/$2B - $1C10/$1C60,x must be $20-$F9 (objects with $18A0,x set use $2C/$2D and $0B-$F9). Stores object, X low, X MSB and Y at $79,y, $1E10,y, $1E18,y, $1E20,y for slot y = $81 and increments $81; at most 8 (a ninth is dropped). Called from many places ($A17F...)."
  },
  {
   "address": 33353,
   "type": "line",
   "text": "Unreferenced byte before the char-object variables (no reference in the snapshot scan)."
  },
  {
   "address": 33354,
   "type": "line",
   "text": "Char-object drawer: current cell row within the object (0..height-1, compared with $1990,x at $8711); reset to 0 when a pass starts."
  },
  {
   "address": 33355,
   "type": "line",
   "text": "Char-object drawer: current cell column within the object; $FF = no pass in progress, otherwise 0..width-1 ($1960,x at $8706)."
  },
  {
   "address": 33356,
   "type": "line",
   "text": "Char-object drawer: background screen code under the cell being added (returned by $8476, stored into $82D0 for a new slot)."
  },
  {
   "address": 33357,
   "type": "line",
   "text": "Char-object drawer: the object's own character code for the current cell = $16D0,x + row*width + column (computed at $8399/$84D9)."
  },
  {
   "address": 33358,
   "type": "line",
   "text": "Char-object drawer: index into the overlay list $8B-$CA marking the end of the current slot's group (read by the compositor at $8684)."
  },
  {
   "address": 33359,
   "type": "line",
   "text": "Char-object drawer: dynamic character slot (0-31) the current cell uses."
  },
  {
   "address": 33360,
   "type": "line",
   "text": "32 dynamic character slots (codes $00-$1F): map column low byte of each slot's cell."
  },
  {
   "address": 33392,
   "type": "line",
   "text": "32 slots: map column high byte; $FF marks the slot free (set by $881D and when a slot is released at $85DA)."
  },
  {
   "address": 33424,
   "type": "line",
   "text": "32 slots: map row low byte of each slot's cell."
  },
  {
   "address": 33456,
   "type": "line",
   "text": "32 slots: map row high byte of each slot's cell."
  },
  {
   "address": 33472,
   "type": "line",
   "text": "Base of the per-object 'drawn as characters' flag, indexed by object number $30-$4F, so the flags live at $82F0-$830F (cleared by $881D). $82C0-$82CF itself is never indexed below $30 as far as traced."
  },
  {
   "address": 33488,
   "type": "line",
   "text": "32 slots: the background screen code the slot's cell replaced; the compositor draws it underneath and it is put back on screen when the slot is freed ($859E/$85D3)."
  },
  {
   "address": 33520,
   "type": "line",
   "text": "Per-object flag for objects $30-$4F (address $82C0+object): 1 while the object is drawn into the background as characters, 0 when not (written $8396, $84CE; read $84C4, $862E, $863A)."
  },
  {
   "address": 33552,
   "type": "line",
   "text": "Char-object drawer state machine, run for object $82 per state $83: 0 = look for an object to draw or erase ($85E9); $FF = add every cell of the object into the dynamic character slots (needs $A3FB's on-screen test to pass, and no pass in progress, $92 = 0); $01 = remove the object's cells ($84BF). Cells: width $1960,x by height $1990,x, codes from $16D0,x. Called from $8721 (loops until done) and $ABCC."
  },
  {
   "address": 33910,
   "type": "line",
   "text": "Returns in Y the background screen code at map cell ($64/$65,$66/$67): row pointer from $0A80/$0AC0 by y/4, tile number from the map, tile's char block from $1400/$1500, cell within the 4x4 tile from the low two bits of x and y. Self-modifies $84A9/$84AA and $84BB/$84BC."
  },
  {
   "address": 33961,
   "type": "line",
   "text": "Self-modified: low byte of the map row address read at $84A8 (from $0A80,y)."
  },
  {
   "address": 33962,
   "type": "line",
   "text": "Self-modified: high byte of the map row address read at $84A8 (from $0AC0,y)."
  },
  {
   "address": 33979,
   "type": "line",
   "text": "Self-modified: low byte of the tile's 4x4 char block read at $84BA (from $1400,y)."
  },
  {
   "address": 33980,
   "type": "line",
   "text": "Self-modified: high byte of the tile's char block read at $84BA (from $1500,y)."
  },
  {
   "address": 33983,
   "type": "line",
   "text": "Removes the object's current cell from the overlay list $8B-$CA; when the slot has no overlays left, puts its background code back on the visible screens ($859E, $85D3) and frees the slot ($8270,x = $FF); otherwise recomposites it via $8652."
  },
  {
   "address": 34272,
   "type": "line",
   "text": "Scan cursor for $85E9: last object number tried, $4F down to $30, wraps to $50."
  },
  {
   "address": 34273,
   "type": "line",
   "text": "Tail of $85E9: restart the cursor at $50 / save it, then JMP $907D (outside this range)."
  },
  {
   "address": 34281,
   "type": "line",
   "text": "Tests up to 4 objects per call (cursor $85E0, objects $4F..$30 with $1B20,x = 0) against the object at index 0 using $A3FB. An object that should be visible and is not drawn gets $82 = object, $83 = $FF (draw); one that should not and is drawn gets $83 = $01 (erase)."
  },
  {
   "address": 34374,
   "type": "line",
   "text": "Self-modified branch offsets for $86F7 by number of overlays (1-5), entering the unrolled merge chain at the right source; $00 = none."
  },
  {
   "address": 34380,
   "type": "line",
   "text": "Branch offsets for $86FC (loop back per pixel pair) by number of overlays; $00 falls out."
  },
  {
   "address": 34386,
   "type": "line",
   "text": "Builds the 8 bytes of dynamic char slot Y at $4000+Y*8: for each multicolour pixel pair (masks $C0/$30/$0C/$03 at zero page $17-$1A) takes the first overlay char (up to 5, from the list at $8B, their operands patched through the pointers at zero page $03-$16) whose pair is non-zero, else the background char ($82D0,y at $4000+code*8). Overlay operands get only code*8 as address (high byte 0-7). Heavily self-modifying."
  },
  {
   "address": 34539,
   "type": "line",
   "text": "Self-modified: low byte of the background char's graphics read at $86EA (code*8, written $8662)."
  },
  {
   "address": 34540,
   "type": "line",
   "text": "Self-modified: high byte of the background char's graphics, $40 + code/32 (written $8669): charset at $4000."
  },
  {
   "address": 34552,
   "type": "line",
   "text": "Self-modified offset of BPL $86F7 (from $8646): enters the merge chain at the first overlay source."
  },
  {
   "address": 34557,
   "type": "line",
   "text": "Self-modified offset of BPL $86FC (from $864C): loops the merge chain for the next pixel pair and row."
  },
  {
   "address": 34621,
   "type": "line",
   "text": "Loop counter for $8799: slots left to draw this call (3 = four slots)."
  },
  {
   "address": 34622,
   "type": "line",
   "text": "First slot to redraw per frame phase ($53 AND 7): 0,4,...,28, so all 32 slots are refreshed every 8 frames."
  },
  {
   "address": 34630,
   "type": "line",
   "text": "Low byte of a screen row's offset, 25 entries indexed from the bottom: entry 0 = row 24 ($3C0), entry 24 = row 0. Also read from $AE27 and elsewhere."
  },
  {
   "address": 34655,
   "type": "line",
   "text": "High byte of the same bottom-up row offsets (added to the screen base $78/$7C)."
  },
  {
   "address": 34680,
   "type": "line",
   "text": "Column offset per scroll direction $72 (0-7), used to place a slot char on the back buffer where it will be after the pending coarse scroll."
  },
  {
   "address": 34688,
   "type": "line",
   "text": "Row offset per scroll direction $72 (0-7), paired with $8778."
  },
  {
   "address": 34696,
   "type": "line",
   "text": "High byte of the screen $52 shows: $78 / $7C."
  },
  {
   "address": 34698,
   "type": "line",
   "text": "High byte of the other screen (the back buffer): $7C / $78."
  },
  {
   "address": 34700,
   "type": "line",
   "text": "Main-loop step: redraws four dynamic char slots per frame (start from $873E by frame counter $53) via $8799."
  },
  {
   "address": 34713,
   "type": "line",
   "text": "Draws slot X (and the following $873D slots) on screen: if the slot's map cell is within the 40x21 window at $24-$27, stores the slot code at that position on the shown screen and, offset by the pending scroll direction $72 ($8778/$8780), on the back buffer."
  },
  {
   "address": 34844,
   "type": "line",
   "text": "Byte used only by the unreferenced code at $883D ($881C referenced at $8840/$8846 only)."
  },
  {
   "address": 34845,
   "type": "line",
   "text": "Frees all 32 dynamic char slots ($8270 = $FF), clears the overlay list $8B-$CA and the drawn flags of objects $30-$4E ($82F0-$830E; $4F is not cleared, loop stops at $4F). Called at start-up $4A3F and from $94ED."
  },
  {
   "address": 34877,
   "type": "line",
   "text": "14 bytes of code shape nothing references (snapshot scan for $883D found none): LDA #7, STA $881C, JSR $85E9, DEC $881C, BPL, RTS, i.e. calling $85E9 eight times. Left as bytes."
  },
  {
   "address": 34891,
   "type": "line",
   "text": "Per fine-scroll value (index = ($CB AND 2)*4 + $5E): the coarse-scroll phase at which horizontal motion may continue; negative = scroll allowed at once. Read at $88E2 and $89EC."
  },
  {
   "address": 34907,
   "type": "line",
   "text": "The same for the other direction sense (read at $8968, $8A1E)."
  },
  {
   "address": 34923,
   "type": "line",
   "text": "64 bytes indexed by (7-$5F)*8+$5E: for diagonal stick input, a self-modified branch offset (low bits) choosing whether to move diagonally or along one axis; bit 7 selects which half applies. Read at $88FD, $8928, $8983, $89AB."
  },
  {
   "address": 34987,
   "type": "line",
   "text": "From the stick flags $CB/$CC and the fine scroll $5E/$5F picks the scroll direction $72 (0-7), resets the coarse-scroll phase $6E on a change of direction, and returns $6F/$70 = 0 when motion along X/Y is allowed ($FF blocked) and $71 = $FF when no coarse scroll is due. Called from $A19D, $A365, $CB04."
  },
  {
   "address": 35080,
   "type": "line",
   "text": "Self-modified offset of BPL $8907 (from $886B AND 7): picks axis handling for left+up/down diagonal input."
  },
  {
   "address": 35121,
   "type": "line",
   "text": "Self-modified offset of BPL $8930 (from $886B): diagonal choice, left+down case."
  },
  {
   "address": 35212,
   "type": "line",
   "text": "Self-modified offset of BPL $898B (from $886B): diagonal choice, right+up case."
  },
  {
   "address": 35254,
   "type": "line",
   "text": "Self-modified offset of BPL $89B5 (from $886B AND 7): diagonal choice, right+down case."
  },
  {
   "address": 35390,
   "type": "line",
   "text": "Moves the world position $20/$21 (X) and $22/$23 (Y) by $CB/$CC (magnitude low 2 bits) where $6F/$70 allow, then derives the view: $24/$25 = X/8, $26/$27 = Y/8 (map char coords), $28/$29 = X-$1E, $2A/$2B = Y+$E2, $2C/$2D = Y+$CD (sprite clipping bases for $81DA). $8A90 is the entry that only recomputes the view (from $94DA)."
  },
  {
   "address": 35554,
   "type": "line",
   "text": "Coarse scroll phase 1: table set indexed by $73 = direction $72 + 8 when $52 = 0. $8AE2 = source low, $8AF2 source high, $8B02 dest low, $8B12 dest high, $8B22 start Y for the page copy at $8E77."
  },
  {
   "address": 35570,
   "type": "line",
   "text": "Coarse scroll phase 1 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll1_src_hi."
  },
  {
   "address": 35586,
   "type": "line",
   "text": "Coarse scroll phase 1 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll1_dst_lo."
  },
  {
   "address": 35602,
   "type": "line",
   "text": "Coarse scroll phase 1 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll1_dst_hi."
  },
  {
   "address": 35618,
   "type": "line",
   "text": "Coarse scroll phase 1 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll1_start_y."
  },
  {
   "address": 35634,
   "type": "line",
   "text": "Coarse scroll phase 2 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll2_src_lo."
  },
  {
   "address": 35650,
   "type": "line",
   "text": "Coarse scroll phase 2 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll2_src_hi."
  },
  {
   "address": 35666,
   "type": "line",
   "text": "Coarse scroll phase 2 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll2_dst_lo."
  },
  {
   "address": 35682,
   "type": "line",
   "text": "Coarse scroll phase 2 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll2_dst_hi."
  },
  {
   "address": 35698,
   "type": "line",
   "text": "Coarse scroll phase 2 (page copy $8E77): 16 entries by $73 (direction + 8*buffer), field scroll2_start_y."
  },
  {
   "address": 35714,
   "type": "line",
   "text": "Phase 1 new-row draw ($8D6C): 16 entries by $73 (direction + 8*buffer), field newrow_dst_lo."
  },
  {
   "address": 35730,
   "type": "line",
   "text": "Phase 1 new-row draw ($8D6C): 16 entries by $73 (direction + 8*buffer), field newrow_dst_hi."
  },
  {
   "address": 35746,
   "type": "line",
   "text": "Phase 1 new-row draw ($8D6C): 16 entries by $73 (direction + 8*buffer), field newrow_dx_lo."
  },
  {
   "address": 35762,
   "type": "line",
   "text": "Phase 1 new-row draw ($8D6C): 16 entries by $73 (direction + 8*buffer), field newrow_dx_hi."
  },
  {
   "address": 35778,
   "type": "line",
   "text": "Phase 1 new-row draw ($8D6C): 16 entries by $73 (direction + 8*buffer), field newrow_dy_lo."
  },
  {
   "address": 35794,
   "type": "line",
   "text": "Phase 1 new-row draw ($8D6C): 16 entries by $73 (direction + 8*buffer), field newrow_dy_hi."
  },
  {
   "address": 35810,
   "type": "line",
   "text": "Phase 2 new-column draw ($8DEE): 16 entries by $73 (direction + 8*buffer), field newcol_dst_lo."
  },
  {
   "address": 35826,
   "type": "line",
   "text": "Phase 2 new-column draw ($8DEE): 16 entries by $73 (direction + 8*buffer), field newcol_dst_hi."
  },
  {
   "address": 35842,
   "type": "line",
   "text": "Phase 2 new-column draw ($8DEE): 16 entries by $73 (direction + 8*buffer), field newcol_dx_lo."
  },
  {
   "address": 35858,
   "type": "line",
   "text": "Phase 2 new-column draw ($8DEE): 16 entries by $73 (direction + 8*buffer), field newcol_dx_hi."
  },
  {
   "address": 35874,
   "type": "line",
   "text": "Phase 2 new-column draw ($8DEE): 16 entries by $73 (direction + 8*buffer), field newcol_dy_lo."
  },
  {
   "address": 35890,
   "type": "line",
   "text": "Main-loop step: advances the coarse scroll of the play area over several frames. $74 = 0: colour the lower screen half ($8D39). $71 negative: JMP $ABCF. Else phase $6E via self-modified branch: 0 -> copy the shown screen shifted into the back buffer (first part) and draw the new map row; 2 -> second part and new column ($8DEE); 4 -> $8D07 colour upper half and flip buffers."
  },
  {
   "address": 35911,
   "type": "line",
   "text": "Self-modified offset of BPL $8C46 = coarse-scroll phase $6E (0, 2 or 4) selecting the step of $8C32."
  },
  {
   "address": 36101,
   "type": "line",
   "text": "Screen high byte ($7C/$78) for the top-half colour pass, by $52 (the buffer about to be shown)."
  },
  {
   "address": 36103,
   "type": "line",
   "text": "Waits for raster >= $5A (signed compare, BMI), colours $D8A0-$DA2F from the new screen through the char->colour table $2F00, then flips $52 (displayed buffer) and sets $74 = 0."
  },
  {
   "address": 36151,
   "type": "line",
   "text": "Screen high byte ($7A/$7E) for the bottom-half colour pass, by $52."
  },
  {
   "address": 36153,
   "type": "line",
   "text": "Colours $DA30-$DBFF from the shown screen through $2F00; sets $71 = $74 = $FF, $6E = 0."
  },
  {
   "address": 36193,
   "type": "line",
   "text": "11 tile numbers fetched from the map for the row or column being drawn ($8D6C, $8DEE)."
  },
  {
   "address": 36204,
   "type": "line",
   "text": "Draws one 40-char screen row at the patched destination $8DC8/$8DC9 from the map position $60-$63: fetches 11 tile numbers from the map row ($0A80/$0AC0 row pointers), then copies chars right to left out of each tile's 4x4 block ($1400/$1500)."
  },
  {
   "address": 36233,
   "type": "line",
   "text": "Self-modified: low byte of the map row address + tile X for the 11-tile fetch at $8D88."
  },
  {
   "address": 36234,
   "type": "line",
   "text": "Self-modified: high byte of that map row address."
  },
  {
   "address": 36293,
   "type": "line",
   "text": "Self-modified: low byte of the current tile's char row read at $8DC4."
  },
  {
   "address": 36294,
   "type": "line",
   "text": "Self-modified: high byte of the current tile's char row."
  },
  {
   "address": 36296,
   "type": "line",
   "text": "Self-modified: low byte of the screen row written at $8DC7 (set by $8CA6, $8EEC)."
  },
  {
   "address": 36297,
   "type": "line",
   "text": "Self-modified: high byte of the screen row written at $8DC7."
  },
  {
   "address": 36334,
   "type": "line",
   "text": "Draws one 21-char screen column at the patched destination $8E47/$8E48 from the map position $60-$63, fetching 6 tiles down the map."
  },
  {
   "address": 36360,
   "type": "line",
   "text": "Self-modified: low byte of the map row address for the column fetch at $8E07."
  },
  {
   "address": 36361,
   "type": "line",
   "text": "Self-modified: high byte of the map row address for the column fetch."
  },
  {
   "address": 36420,
   "type": "line",
   "text": "Self-modified: low byte of the current tile's char column read at $8E43."
  },
  {
   "address": 36421,
   "type": "line",
   "text": "Self-modified: high byte of the tile char block for the column."
  },
  {
   "address": 36423,
   "type": "line",
   "text": "Self-modified: low byte of the screen column written at $8E46 (from $8BE2)."
  },
  {
   "address": 36424,
   "type": "line",
   "text": "Self-modified: high byte of the screen column, incremented as the column crosses a page."
  },
  {
   "address": 36471,
   "type": "line",
   "text": "Copies two pages starting at Y with self-modified source $8E7C/$8E7D and destination $8E7F/$8E80: the shifted screen copy of a coarse scroll."
  },
  {
   "address": 36476,
   "type": "line",
   "text": "Self-modified: low byte of the scroll copy source at $8E7B."
  },
  {
   "address": 36477,
   "type": "line",
   "text": "Self-modified: high byte of the scroll copy source, incremented per page."
  },
  {
   "address": 36479,
   "type": "line",
   "text": "Self-modified: low byte of the scroll copy destination at $8E7E."
  },
  {
   "address": 36480,
   "type": "line",
   "text": "Self-modified: high byte of the scroll copy destination, incremented per page."
  },
  {
   "address": 36495,
   "type": "line",
   "text": "Converts the pixel position $60/$61 (X) and $62/$63 (Y) to tile coordinates: X reg = X/32, Y reg = Y/32."
  },
  {
   "address": 36536,
   "type": "line",
   "text": "Copies screen chars to colour RAM through the table $2F00 (colour per char code); source/dest patched at $8EB9/$8EBA and $8EBF/$8EC0; X start, $5A+1 pages."
  },
  {
   "address": 36537,
   "type": "line",
   "text": "Self-modified: low byte of the screen read by the colour pass at $8EB8."
  },
  {
   "address": 36538,
   "type": "line",
   "text": "Self-modified: high byte of the screen read by the colour pass."
  },
  {
   "address": 36543,
   "type": "line",
   "text": "Self-modified: low byte of the colour RAM address written at $8EBE."
  },
  {
   "address": 36544,
   "type": "line",
   "text": "Self-modified: high byte of the colour RAM address ($D8/$DA)."
  },
  {
   "address": 36559,
   "type": "line",
   "text": "Row counter for $8ED0 (starts $14: 21 rows)."
  },
  {
   "address": 36560,
   "type": "line",
   "text": "Redraws the whole play area: 21 map rows (screen rows 4-24 of $7800, destination from $78A0 stepping +40) via $8D6C, map Y from $22+$A0 stepping down 8, then both colour passes, displayed buffer $52 = 1 then flipped. Called at start-up $4A42 and from $94EA."
  },
  {
   "address": 36644,
   "type": "line",
   "text": "Reads joystick port 2 and the keyboard into flags: $CB horizontal ($81 left: stick or Z; $01 right: stick or X), $CC vertical ($81 down: stick or /; $01 up: stick or ;), copies in $D4/$D5; $CD = $FF for fire or RETURN; D sets $E8 = $80, CTRL+D $C0; tail $9000-$9058 does F-keys, S, R, L. Called from the main loop $7476, $9282, $9509, $B0A5."
  },
  {
   "address": 36864,
   "type": "line",
   "text": "Tail of the input reader begun at $8F24: stick down/up set $CC/$D5 ($81 down, $01 up); keyboard row byte $5A tested for F1/F3/F5/F7 (Y=$FF stored to $D0/$CF/$D2/$D1), $5D=$DF sets $D3 (S); when $E8 is 0, $5C=$FD sets $E8=$12 and $60=$FB sets $E8=$FF. Ends $9058."
  },
  {
   "address": 36953,
   "type": "line",
   "text": "Restart-point table, 9 entries (index = $1D29): X position high byte. With $9062 (X lo), $906B (Y hi), $9074 (Y lo). Read by $907D (proximity test) and $93ED (placing the Doctor, object 0, after a regeneration)."
  },
  {
   "address": 36962,
   "type": "line",
   "text": "Restart-point table: X position low byte for each of the 9 restart points; copied to $1B70 (object 0 X lo) at $93F3."
  },
  {
   "address": 36971,
   "type": "line",
   "text": "Restart-point table: Y position high byte for each of the 9 restart points; copied to $1C60 at $93F9."
  },
  {
   "address": 36980,
   "type": "line",
   "text": "Restart-point table: Y position low byte for each of the 9 restart points; copied to $1C10 at $93FF."
  },
  {
   "address": 36989,
   "type": "line",
   "text": "Called from $85E6. For restart points 8..0 loads the point into $64-$67 and calls $A3FB (distance into $D9-$DC); the first point with both distances under $14 (hi bytes 0) becomes the current restart point ($1D29). On the first visit to that point ($1D1E,y = 0, then set $FF): if $1D28 is 0 it is set to $64 and $59 is set to $64; otherwise the BCD score $57-$59 is doubled (SED, add to itself). The $64 store into a BCD byte is odd: open question."
  },
  {
   "address": 37099,
   "type": "line",
   "text": "Three flags set at end of game ($9174-$9184): $FF when the item with id $36, $3E, $02 (in order) is carried or in state 4 (s_928C); a set flag prints WITH + the item name (messages $1E/$20/$22: THE CRYSTAL, THE TIRU PLANS, SPLINX) and doubled the bonus. $90EE unused byte."
  },
  {
   "address": 37100,
   "type": "line",
   "text": "Second end-game item flag (object $3E, THE TIRU PLANS), written at $917C."
  },
  {
   "address": 37101,
   "type": "line",
   "text": "Third end-game item flag (object $02, SPLINX), written at $9184; $90EE after it is spare."
  },
  {
   "address": 37103,
   "type": "line",
   "text": "Message index by end cause, indexed by $E8/2 in $9102: 0 = $00 (overwritten at run time with the heatonite success flag), 1 = $58 (escape pod), 2 = $55 (TARDIS), 3 = $0C explosion, 4 = $2A GAME OVER, 5..8 = $10 controller, $12 fall, $14 stalagmite, $16 suffocating, 9 = $18 forced regeneration, 10 = $1A madrag bite, 11 = $1C baby madrag. Entries 12-14 double as $90FB."
  },
  {
   "address": 37115,
   "type": "line",
   "text": "Messages for the carried end-game items, indexed 0-2 at $91FD: $1E THE CRYSTAL, $20 THE TIRU PLANS, $22 SPLINX. Starts inside $90EF (entries 12-14)."
  },
  {
   "address": 37118,
   "type": "line",
   "text": "JMP $94FF: branch trampoline for $9107 when $E8 is negative (key D/CTRL+D/L) into the save menu. $9101 is a spare zero byte."
  },
  {
   "address": 37122,
   "type": "line",
   "text": "Called from $C93F with the event code in $E8. Saves the status bar ($92B3). $E8 negative: save menu ($94FF). Y=$E8/2: 9 (key R) = forced regeneration; 3-8,10,11 = a death cause: prints THE DOCTOR REGENERATES AFTER + cause, decrements lives $1E, and either resumes ($9353) or, below 0, GAME OVER. Y 0-2 = end of game: prints YOU HAVE RETURNED TO GALLIFREY IN (TARDIS for $E8=4, escape pod for 2), sets lives $1E=$FF, adds countdown $1B-$1D (zeroed unless $1C60 >= 3) and a bonus to the score $57-$59, prints items, heatonite result, final score and the Time Lords rating, then waits for F1 and restarts via $9358."
  },
  {
   "address": 37284,
   "type": "line",
   "text": "Four object ids $42,$43,$41,$4A tested by s_928C at $9196 when $4F is non-zero; the first one carried (or in state 4) doubles the bonus and sets the success flag at $90EF (AND HAVE SUCCESSFULLY vs BUT HAVE NOT HALTED THE PRODUCTION OF HEATONITE)."
  },
  {
   "address": 37288,
   "type": "line",
   "text": "Continuation of game_event_handler ($9102) after the id table at $91A4: loops the heatonite ids, then adds countdown and bonus to the score, prints items, heatonite verdict, final score, rating (score < 4100 VERY DISPLEASED, < 20000 DISPLEASED, < 40000 PLEASED, else VERY PLEASED; tests at $9219-$9233), and waits for F1 ($9282) before $9358."
  },
  {
   "address": 37516,
   "type": "line",
   "text": "X = object id. If X equals $1D80 (a held-item slot) or the object state $1B20,X is 4, falls into $929B (doubles the bonus, returns $FF); otherwise returns A=0."
  },
  {
   "address": 37531,
   "type": "line",
   "text": "Doubles the three-byte BCD bonus $5A-$5C (SED, adds it to itself) and returns A=$FF (negative)."
  },
  {
   "address": 37555,
   "type": "line",
   "text": "Saves status-bar colour $D828-$D89F to $FF70 and screen $0428-$049F to $7800, then blanks rows $0428-$0477 to $94 (space, colour 2) and fills row $0478-$049F with $97, ready for a scrolling message."
  },
  {
   "address": 37603,
   "type": "line",
   "text": "X = message index into $95CB/$9626. Prints each string of the chain (the next index is taken until a high byte of $FF) letter by letter onto status row $0450-$0477: for each character waits for raster $C8, steps fine scroll $EA by 2 and, once a character cell has passed, shifts the row left and puts the letter at $0477. Y preserved via $68."
  },
  {
   "address": 37703,
   "type": "line",
   "text": "Copies the saved status-bar colours $FF70-$FFE7 back to $D828-$D89F."
  },
  {
   "address": 37715,
   "type": "line",
   "text": "Prints message $24 (eight spaces, to scroll the text off) then falls into $9358."
  },
  {
   "address": 37720,
   "type": "line",
   "text": "Called at start-up ($4A48) and after every end-of-life or end-of-game message. Blanks the screen, stops sprites and raster IRQ, restores status colour, resets four $1CB0/$C086 entries. If lives $1E >= 0 (a regeneration): restores the status screen from $7800, clears zero page $5A-$FF, restores object tables $1B20-$1CD8 from the copies at $0200-$03BF (skipping objects $1A,$1B), puts the Doctor at the current restart point ($1D29, table $9059). If $1E < 0 (new game): lives=5, countdown $1B-$1D = 1,08,05 (BCD 10805), zero page $20-$FF cleared, $1B20-$1D1F copied from $0200-$03FF. Both: clears $1D90-$1EFF, draws life figures ($99) in $1770-$1779, sets scroll origin $20-$23, redraws and re-enables the raster IRQ."
  },
  {
   "address": 38134,
   "type": "line",
   "text": "Bytes $50,$4A,$44 are the message indices of the three save-menu prompts (F5 RETURN TO GAME, F3 SAVE ON DISC, F1 SAVE ON CASSETTE), read by $9501; the next five bytes $94F9-$94FD are the save file name DRWHO in PETSCII (SETNAM at $95B4). Together they read PJDDRWHO."
  },
  {
   "address": 38142,
   "type": "line",
   "text": "Device number for the save: 1 cassette (F1), 8 disc (F3); passed to SETLFS at $95A8."
  },
  {
   "address": 38143,
   "type": "line",
   "text": "Save menu, entered from $9102 when $E8 is negative. Cycles the three prompts on the status bar until F1 (cassette, device 1), F3 (disc, device 8) or F5 (return to game: restores the status bar, clears $E8, drops the caller and returns). A save copies $7800-$7877 to $7D00, zero page $03-$FF to $7803, $1B20-$1EFF to $7920-$7CFF, marks $7800=$FF, banks BASIC and KERNAL in ($01 |= 2), re-initialises the KERNAL (IOINIT, RAMTAS, RESTOR, CINT) and SAVEs $7800-$7D7F as DRWHO, then JMP ($A000): BASIC cold start. The game does not resume after a save."
  },
  {
   "address": 38347,
   "type": "line",
   "text": "Message table, low bytes, 91 entries ($00-$5A); high bytes at $9626. Messages are chains: printing index n continues with n+1 until an entry whose high byte is $FF. Read by $92E3."
  },
  {
   "address": 38438,
   "type": "line",
   "text": "Message table, high bytes (index as $95CB); $FF ends a chain."
  },
  {
   "address": 38529,
   "type": "line",
   "text": "Final-score digits, six bytes written at $924D from $57-$59 through the digit table $1730, then two spaces; message $06. Private alphabet, 0-terminated."
  },
  {
   "address": 38540,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $968C-$96A0: \"YOUR FINAL SCORE IS \""
  },
  {
   "address": 38561,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $96A1-$96BE: \"THE DOCTOR REGENERATES AFTER \""
  },
  {
   "address": 38591,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $96BF-$96C9: \"GAME OVER \""
  },
  {
   "address": 38602,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $96CA-$96D0: \"PRESS \""
  },
  {
   "address": 38609,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $96D1-$96D7: \"F1 TO \""
  },
  {
   "address": 38616,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $96D8-$96DE: \"F3 TO \""
  },
  {
   "address": 38623,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $96DF-$96E5: \"F5 TO \""
  },
  {
   "address": 38630,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $96E6-$96F1: \"PLAY AGAIN \""
  },
  {
   "address": 38642,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $96F2-$9706: \"FORCED REGENERATION \""
  },
  {
   "address": 38663,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9707-$9713: \"THE CRYSTAL \""
  },
  {
   "address": 38676,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9714-$9723: \"THE TIRU PLANS \""
  },
  {
   "address": 38692,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9724-$972B: \"SPLINX \""
  },
  {
   "address": 38700,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $972C-$973A: \"THE EXPLOSION \""
  },
  {
   "address": 38715,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $973B-$9751: \"EXPOSURE TO RADIATION \""
  },
  {
   "address": 38738,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9752-$976C: \"A SHOCK FROM A CONTROLLER \""
  },
  {
   "address": 38765,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $976D-$9774: \"A FALL \""
  },
  {
   "address": 38773,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9775-$978D: \"FALLING ON A STALAGMITE \""
  },
  {
   "address": 38798,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $978E-$979A: \"SUFFOCATING \""
  },
  {
   "address": 38811,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $979B-$97B3: \"SUFFERING A MADRAG BITE \""
  },
  {
   "address": 38836,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $97B4-$97D4: \"BEING ATTACKED BY A BABY MADRAG \""
  },
  {
   "address": 38869,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $97D5-$97DD: \"        \""
  },
  {
   "address": 38878,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $97DE-$97E4: \"AFTER \""
  },
  {
   "address": 38885,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $97E5-$9807: \"YOU HAVE RETURNED TO GALLIFREY IN \""
  },
  {
   "address": 38920,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9808-$9813: \"THE TARDIS \""
  },
  {
   "address": 38932,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9814-$9822: \"AN ESCAPE POD \""
  },
  {
   "address": 38947,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9823-$9828: \"WITH \""
  },
  {
   "address": 38953,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9829-$983F: \"AND HAVE SUCCESSFULLY \""
  },
  {
   "address": 38976,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9840-$984D: \"BUT HAVE NOT \""
  },
  {
   "address": 38990,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $984E-$9871: \"HALTED THE PRODUCTION OF HEATONITE \""
  },
  {
   "address": 39026,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9872-$9885: \"THE TIME LORDS ARE \""
  },
  {
   "address": 39046,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $9886-$989C: \"WITH YOUR PERFORMANCE \""
  },
  {
   "address": 39069,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $989D-$98A5: \"SAVE ON \""
  },
  {
   "address": 39078,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $98A6-$98AF: \"CASSETTE \""
  },
  {
   "address": 39088,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $98B0-$98B5: \"DISC \""
  },
  {
   "address": 39094,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $98B6-$98C5: \"RETURN TO GAME \""
  },
  {
   "address": 39110,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $98C6-$98D1: \"DISPLEASED \""
  },
  {
   "address": 39122,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $98D2-$98DA: \"PLEASED \""
  },
  {
   "address": 39131,
   "type": "line",
   "text": "Message text, private alphabet (letter = ASCII+155, $94 space), 0-terminated, $98DB-$98E0: \"VERY \""
  },
  {
   "address": 39137,
   "type": "line",
   "text": "Terrain property tables, 11 entries each, indexed by the tile class from $1600 in $990D: this one gives $EB (0,2,2,2,4,6,8,$0A,$0C,0,4), used as a computed branch offset at $9A6E/$9B61 and tested for 0/$0A/$0C by the movement routines."
  },
  {
   "address": 39148,
   "type": "line",
   "text": "Terrain property table 2 (11 entries) giving $EC at $9973: $01,$00,$01 x7,$FF,$FF; the sign is tested by the vertical movement code ($99F6, $9D4E)."
  },
  {
   "address": 39159,
   "type": "line",
   "text": "Terrain property table 3 (11 entries) giving $ED at $9978: $00,$FF,$FF,$00,$01,$FF,$00,$00,$00,$00,$01."
  },
  {
   "address": 39170,
   "type": "line",
   "text": "Terrain property table 4 (11 entries) giving $EE at $997D: $00,$FF,$00,$FF,$01,$00,$FF,$00,$00,$00,$01."
  },
  {
   "address": 39181,
   "type": "line",
   "text": "Terrain lookup at a point. In: X = object (saved in $69), $64/$65 = X, $66/$67 = Y in pixels. Row = Y/8 indexes $0A80/$0AC0 (patched into $9956), column = X/8 indexes the row ($FF00 page, self-modified) to get a block number ($78), which picks a tile address from $1400/$1500 (patched into $9969); the char within the block, from the low bits of X and Y, gives a tile byte whose class $1600 selects $EB-$EE from the tables at $98E1. Returns X restored."
  },
  {
   "address": 39254,
   "type": "line",
   "text": "Self-modified operand bytes: $9956/$9957 take the row base from $0A80/$0AC0 ($9938/$993E); $9969/$996A take the tile address from $1400/$1500 ($995D/$9963). The rest of terrain_probe continues here."
  },
  {
   "address": 39255,
   "type": "line",
   "text": "High byte of the row base patched at $993E; the code after it reads the column index and fetches the tile address from $1400/$1500 into $9969/$996A (self-modified) before the class lookup."
  },
  {
   "address": 39273,
   "type": "line",
   "text": "Tile-address operand of LDX at $9968, patched from $1400/$1500; the tile byte read here indexes the class table $1600, which selects the four terrain properties $EB-$EE from $98E1-$990C."
  },
  {
   "address": 39274,
   "type": "line",
   "text": "High byte of the tile-address operand, patched from $1500 at $9963."
  },
  {
   "address": 39301,
   "type": "line",
   "text": "Object X = $1B70/$1BC0,X moved by $CB (bit 7 = left, low two bits = step; positive adds $CB) into $60/$61. $CB = 0 copies it unchanged."
  },
  {
   "address": 39352,
   "type": "line",
   "text": "Object Y = $1C10/$1C60,X moved by $CC (bit 7 = subtract low two bits; positive adds $CC) into $62/$63."
  },
  {
   "address": 39405,
   "type": "line",
   "text": "Called from $CA31/$CA47/$CD19. If $D5 is positive (stick up), probes the object centre ($9A09); if $EC is negative, sets state $1B20,X = 8, stops $CB/$CC and clears $A0D2."
  },
  {
   "address": 39433,
   "type": "line",
   "text": "Probes the terrain at the object centre: X + width/2 ($18F0,X) and Y + height/2 ($1940,X), then $990D."
  },
  {
   "address": 39470,
   "type": "line",
   "text": "Flag for $9A39/$9B4C: $FF when the probe one pixel above the leading edge found non-zero $EB."
  },
  {
   "address": 39471,
   "type": "line",
   "text": "Shared exit of the movement code: object state $1B20,X = 0 and $CB/$CC cleared (object stands still)."
  },
  {
   "address": 39481,
   "type": "line",
   "text": "Horizontal movement against terrain for object X (callers $B2A5, $B5CE, $B82B, $C524, $C5A9, $CA15, $CF76). $CB = 0 stops (state 0). Probes the leading edge (right: X+width; left: X) and dispatches on $EB through a self-modified BPL chain ($9A6E, $9B61): free, step up/down, blocked, or special classes $0A/$0C which with $CC set start a climb (state 4 up / 6 down, $1E90,X = 1). Sets $DF to 5 or $82 for two classes (meaning open). Writes state $1B20,X and $CB/$CC, new position in $60-$63."
  },
  {
   "address": 39538,
   "type": "line",
   "text": "Operand of the BPL at $9A71, rewritten with $EB at $9A6E: a computed branch into the BPL chain $9A73-$9A7D, one landing per even $EB value (0 free, 2/4/6 step, 8 blocked, $0A/$0C special). Rest of move_walk (rightward) continues here."
  },
  {
   "address": 39781,
   "type": "line",
   "text": "Operand of the BPL at $9B64, rewritten with $EB at $9B61: computed branch into the chain $9B66-$9B72 for leftward walking (mirror of $9A72)."
  },
  {
   "address": 39886,
   "type": "line",
   "text": "Callers as $9A39. If $CB differs from the facing $1DB0,X the object turns: $CB flipped, state 6, $CC=$81. Otherwise probes ahead at foot level and one row lower: blocked ahead gives state 2; no floor ($EC 0) stops (state 0); else steps down one pixel ($CC=1)."
  },
  {
   "address": 40030,
   "type": "line",
   "text": "Copy of $CB kept by $9C5F."
  },
  {
   "address": 40031,
   "type": "line",
   "text": "Callers as $9A39. If $CB is set and differs from $1DB0,X, state 4 and $CC=1. Otherwise uses facing $1DB0,X and probes one pixel above the object at its leading corner using $ED/$EE (right/left) and $EB: open above moves up ($CC=$81, state $0C when nothing is under the trailing corner); blocked gives state 2 and clears $CB unless it was set."
  },
  {
   "address": 40213,
   "type": "line",
   "text": "Callers $C546, $C577, $C5C5, $CA27. Clears $75. With $CC set: moves Y ($99B8) and probes the head (up) or feet (down) at mid-width; $EC negative gives state 8, else $75=$FF and $CC=0. With $CC 0: when Y is not on an 8-pixel row forces $CC=$81; otherwise probes the corners ahead one pixel up (state 2 if blocked) and the centre ($EC positive gives state $0C)."
  },
  {
   "address": 40459,
   "type": "line",
   "text": "Y MOD 8 of the object, stored by $9E0C: 0 selects the $EB test, otherwise $ED/$EE."
  },
  {
   "address": 40460,
   "type": "line",
   "text": "Callers $C5BF, $CA34. Probes the object's left and right edges at its current row (using $EB on a row boundary, $ED/$EE between rows) and nudges X one pixel towards the open side ($CB = 1 or $81), or $CB=0 when neither side decides."
  },
  {
   "address": 40648,
   "type": "line",
   "text": "Callers $A103, $A738, $A779, $A79B, $CCF9; body continues past $A000. Clears $75, moves X ($9985) and Y ($99B8) and probes the leading corners in the direction of $CB/$CC with $EB-$EE, setting $75 to $80 or $FF when blocked and stopping the move. Full semantics not traced here."
  },
  {
   "address": 40961,
   "type": "line",
   "text": "Tail of the object move/collision test s_9EC8 (entered from $9FFD with the up/left case): probes the map with j_990D at the object's next position ($64-$67 = x,y) using the per-object size tables $18F0 (width) and $1940 (height) and the tile flags $EC/$ED/$EE it returns; leaves $75 = 0 when the move is clear."
  },
  {
   "address": 41015,
   "type": "line",
   "text": "Shared exit of the move test: $75 = $80 (move refused by the solid-tile test, flags $EC/$ED). Callers read $75 as negative = cannot move."
  },
  {
   "address": 41020,
   "type": "line",
   "text": "Shared exit of the move test: $75 = $FF (move refused by the other flag test, $ED/$EE). What distinguishes $FF from $80 in play is not established; A0D4 treats $80 as landing and $FF as a stop."
  },
  {
   "address": 41025,
   "type": "line",
   "text": "Move test, left with no vertical component (from $9FAD): checks the tile at the object's top-left and bottom-left edges ($18F0 width) via j_990D; $75 = $80 if blocked."
  },
  {
   "address": 41062,
   "type": "line",
   "text": "Move test for a purely vertical move ($CB = 0, from $9EDB): $CC positive = up, negative = down; probes both bottom corners (down) or top corners with $1940 height (up) through j_990D and sets $75 = $FF if blocked."
  },
  {
   "address": 41170,
   "type": "line",
   "text": "Frame counter of the jump arc run by jump_arc_step: 0 = not jumping; counts up each frame; reset to 0 on landing. Also read at $9A05 and $CA07."
  },
  {
   "address": 41171,
   "type": "line",
   "text": "Horizontal direction ($CB) latched at take-off by jump_arc_step and reimposed every frame of the jump, so the direction cannot change in mid air."
  },
  {
   "address": 41172,
   "type": "line",
   "text": "One frame of a jump for object X (called from $CA44): on the first frame latches $CB and sets $1B20 (object 0 state) = $0A; vertical $CC = $01 (up) for frames 0-23, 0 for frames 24-39, then $81 (down) until blocked; moves through s_9EC8. On landing ($75 = $80) or $FF, clears the counter, stops $CC (and $CB on $80) and sets state $1B20,X = $0C."
  },
  {
   "address": 41259,
   "type": "line",
   "text": "One zero byte between jump_arc_step and the lift stop tables; no reference found by address search."
  },
  {
   "address": 41260,
   "type": "line",
   "text": "Lift (object $0E) stop positions, Y low byte, indexed by the stop number $F9 (0-7). Pairs with lift_stop_y_hi: Y = $0140,$01E0,$0300,$0400,$0440,$0480,$04C0,$0640."
  },
  {
   "address": 41268,
   "type": "line",
   "text": "Lift (object $0E) stop positions, Y high byte, indexed by $F9 (0-7); see lift_stop_y_lo."
  },
  {
   "address": 41276,
   "type": "line",
   "text": "Main-loop subsystem: the vertical lift, object $0E. While moving ($1B20+$0E <> 0) it steps Y by 2 in direction $F8 (via lift_step_y), carrying the Doctor (object 0) when $F7 is set; on reaching the stop in lift_stop_y_lo/hi[$F9] it plays sound $16, sets pause timer $FA = $7F, stops, and chooses the next stop (bounces between stop 0 and stop 7, $F8 = $02 up / $82 down). While stopped it counts $FA down; at $FA = 5 lift_check_board tests whether the Doctor is standing on it; at 0 it restarts. Every frame it ends in j_81DA (sprite update for X)."
  },
  {
   "address": 41457,
   "type": "line",
   "text": "Sets $E0 = $FF when the Doctor (object 0) is within $3C horizontally and $10 vertically of the lift (object $0E, offset 7,8 pixels), else $E0 = 0. $E0 <> 0 suppresses the pocket keys in status_and_pockets."
  },
  {
   "address": 41512,
   "type": "line",
   "text": "Moves object X two pixels vertically: $CC positive adds 2 to Y ($1C10/$1C60), negative subtracts 2, zero does nothing. Used by the lift for itself and for the Doctor riding it."
  },
  {
   "address": 41554,
   "type": "line",
   "text": "Tests whether the Doctor (object X=0) stands on the lift (object $0E): within $96/$64 plays sound $16 (s_C7C7, only if $1B2E set), and if |dx| < $12 and |dy| = 8 exactly sets $1B20,X = 2, stops $CC and returns A = $FF (boarded); otherwise stops sound $16 when far and returns 0. Preserves $DA. Also called from $CAC8."
  },
  {
   "address": 41648,
   "type": "line",
   "text": "Horizontal mover (object $0F) end positions, X low byte, indexed by $FD (0-3): X = $0228,$0708,$0888,$0E48 with truck_stop_x_hi. $FD 0/1 is one track, 2/3 (via Y=3) the other."
  },
  {
   "address": 41652,
   "type": "line",
   "text": "Horizontal mover (object $0F) end positions, X high byte, indexed by $FD; see truck_stop_x_lo."
  },
  {
   "address": 41656,
   "type": "line",
   "text": "RTS used as the early exit of truck_update when zone $56 is 0."
  },
  {
   "address": 41657,
   "type": "line",
   "text": "Main-loop subsystem: the horizontal carrier, object $0F. First picks which of two tracks it serves from the mover's own X high byte ($1BC0+$0F < 8: stops 0/1, else stops 2/3, only on a change of track). Does nothing while zone $56 = 0. Moving: steps X by 2 in direction $FC, carrying the Doctor while $FB is set; plays sound $17 while the Doctor is within $96/$64. At an end stop: sound $17 off, pause $FE = $BE, flips $FD bit 0 and reverses $FC. At pause 5, truck_check_board decides whether the Doctor is aboard. Ends in j_81DA."
  },
  {
   "address": 41877,
   "type": "line",
   "text": "Sets $FB = $FF (and $1CB0 = $FF) when the Doctor is standing on the carrier: |dx| from carrier X+$0C < 8 and the Doctor's Y equals exactly $0450. The exact Y match means the Doctor must be at that one height."
  },
  {
   "address": 41937,
   "type": "line",
   "text": "Moves object X two pixels horizontally: $CB positive adds 2 to X ($1B70/$1BC0), negative subtracts 2."
  },
  {
   "address": 41979,
   "type": "line",
   "text": "Distance from object X to the point ($64/$65 = x, $66/$67 = y): |dx| to $D9/$DA with direction $DD ($81 when the object is right of the point, $01 left, 0 equal), |dy| to $DB/$DC with $DE ($81 below, $01 above, 0 equal). Called from many subsystems ($8382, $860F, $9097 and more)."
  },
  {
   "address": 42094,
   "type": "line",
   "text": "Decides whether object X moves this frame: when aligned to the 8-pixel grid in both X and Y, or not moving ($1DB0 and $1DE0 both 0), returns Y = 0 when the frame counter $53 AND 7 equals the object's phase $1A70,X, else Y = $FF; when off-grid and moving returns Y = 1 (keep going). Used by the creature routines at $B25B-$B694 and elsewhere."
  },
  {
   "address": 42148,
   "type": "line",
   "text": "Moves object X one pixel along its current direction: $1DB0,X (horizontal, bit 7 = left) changes X $1B70/$1BC0, $1DE0,X (vertical, bit 7 = up (decrement)) changes Y $1C10/$1C60."
  },
  {
   "address": 42206,
   "type": "line",
   "text": "Low bytes of the bottom-row screen addresses ($045F,$0464,$0469,$046E,$0473) of the five pocket boxes on the status bar, indexed by pocket 0-4; the high byte is pocket_screen_hi. Pocket items are drawn upward from here, $28 per row."
  },
  {
   "address": 42211,
   "type": "line",
   "text": "High byte ($04) shared by pocket_screen_lo and pocket_frame_lo."
  },
  {
   "address": 42212,
   "type": "line",
   "text": "Low bytes of the screen addresses ($0487-$049B, three characters each) under the five pockets where the selection marker is drawn: char $95 under the selected pocket, $97 under the others."
  },
  {
   "address": 42217,
   "type": "line",
   "text": "Low bytes of where the four markers are shown on the status bar ($0437,$0439,$045F,$0461), indexed by marker 0-3; two characters each; high byte marker_screen_hi."
  },
  {
   "address": 42221,
   "type": "line",
   "text": "High byte ($04) for marker_screen_lo."
  },
  {
   "address": 42222,
   "type": "line",
   "text": "Main-loop subsystem: status bar and the function keys. On frames with $53 AND 3 = 0 prints the 10-character name of the item the Doctor holds ($1D80 via offset table $1720 into names $1770) at $0453; on the other three frames prints one BCD byte of the score $57/$58/$59 as two digits (glyphs $1730) at $042F-$0434. Then, unless $E0 is set: F1 ($D0, edge-triggered by $D6) moves the pocket selector $3C round 0-4; F3 ($CF, edge $6A) puts the held item into a pocket or a marker slot (objects $30-$33) or, with empty hands, takes the selected one out (pocket_take); F7 ($D1) throws (throw_start) or with no direction sets $89; F5 ($D2) while standing still picks up (pickup_nearby)."
  },
  {
   "address": 42507,
   "type": "line",
   "text": "Scratch: which marker slot (0-3) pocket_take found when pocket 0 (the marker pocket) is selected."
  },
  {
   "address": 42508,
   "type": "line",
   "text": "F3 with empty hands: takes the item in the selected pocket $3C (pocket 0 = the most recently stored marker, $42-$45) and tries to place it beside the Doctor via place_held_item; on success clears the pocket ($3D+$3C or the marker slot) and blanks its box on the status bar with char $94."
  },
  {
   "address": 42582,
   "type": "line",
   "text": "Clears pocket X ($3D,X = 0) and blanks its item graphic on the status bar (width $1960,Y by height $1990,Y characters of $94, upward from pocket_screen_lo). Also entered from $C143."
  },
  {
   "address": 42634,
   "type": "line",
   "text": "F7 and F5 handling for status_and_pockets. F7 with a direction held ($D4/$D5) throws the held item with $CB/$CC = direction+1 (so $02 or $82) through throw_start; F7 alone sets $89 = $FF. F5 when the Doctor is not moving ($1DB0, $1DE0 = 0) goes to pickup_nearby."
  },
  {
   "address": 42696,
   "type": "line",
   "text": "Two bytes $02,$82 (the right and left direction values) between the key handler and the throw code; no reference found."
  },
  {
   "address": 42698,
   "type": "line",
   "text": "RTS: exit of thrown_update when both flight slots are done."
  },
  {
   "address": 42699,
   "type": "line",
   "text": "Main-loop subsystem: objects in flight. Two slots (Y = 1,0): $46,Y object number, $48,Y frame count ($FF = free), $4A,Y horizontal and $4C,Y vertical direction. An object whose state $1B20 is no longer $0E frees its slot. Thrown level: flies flat until frame $30, then drops ($81) and falls faster ($82) from frame $60; thrown up: rises until frame $28. Moves by s_9EC8; on hitting a wall it loses horizontal motion and snaps X to 8 pixels; on landing it gets state 0 and, except for Splinx (object 2), is reported in $82 with $83 = $FF. Sound $0B while flying."
  },
  {
   "address": 42967,
   "type": "line",
   "text": "Starts a throw of the item held by object X ($1D80,X): takes a free flight slot ($48,Y negative), stores $CB/$CC and the object, empties the hand and sets the item's state $1B20 = $0E. Also called from $B39E."
  },
  {
   "address": 43016,
   "type": "line",
   "text": "Tries to put item Y into the hand of object X: tests the space ahead in facing direction $8A,X with item_fits; if clear, $1D80,X = Y, the item's state $1B20 = 2 (carried) and item_follow_holder positions it. Returns $75 negative when blocked; Y preserved."
  },
  {
   "address": 43050,
   "type": "line",
   "text": "Entry used by $CAF2: $75 = 0, then item_fits for the item object X is holding (does nothing if none)."
  },
  {
   "address": 43059,
   "type": "line",
   "text": "Map test for placing item Y beside object X: aligns the bottoms using heights $19B0, then for facing left ($CB negative) or right uses the edge offsets $1A00/$1A20 and width $18F0 to find the cell, and asks j_990D; $75 = $FF when the space is solid."
  },
  {
   "address": 43185,
   "type": "line",
   "text": "Positions the item held by object X ($1D80,X) at its holder: bottoms aligned via $19B0, horizontally at the holder's X, or at its left/right hand edge ($1A00/$1A20) by facing $8A. Called from $B611, $CBF6."
  },
  {
   "address": 43304,
   "type": "line",
   "text": "Scratch: the object number pickup_nearby is trying to pick up."
  },
  {
   "address": 43305,
   "type": "line",
   "text": "F5 pick-up for object X (the Doctor): unless $83 is busy or the hands are full, scans objects $4F down to 3, then Splinx (2, only if Splinx holds nothing), skipping those with state 2 or 4 (carried, pocketed), for one inside a box from 8 above to $10 below and $0E/$18 either side depending on facing $8A. Object $39 is skipped while $E7 <> 0. Picks the first that place_held_item accepts; unless it is Splinx sets $82 = object, $83 = 1, $E9 = $0A."
  },
  {
   "address": 43530,
   "type": "line",
   "text": "Object numbers woken when the Doctor enters zone 0 (10 bytes, read by zone_wake_0): $03,$04,$05,$0A,$0B,$10-$14."
  },
  {
   "address": 43540,
   "type": "line",
   "text": "Object numbers woken in zone 1 (4 bytes): $15-$18."
  },
  {
   "address": 43544,
   "type": "line",
   "text": "Object numbers woken in zone 2 (7 bytes): $06-$09,$19-$1B."
  },
  {
   "address": 43551,
   "type": "line",
   "text": "Object numbers woken in zone 3 (6 bytes): $1E-$23."
  },
  {
   "address": 43557,
   "type": "line",
   "text": "Object numbers woken in zone 4 (6 bytes): $0C,$24-$28."
  },
  {
   "address": 43563,
   "type": "line",
   "text": "Object numbers woken in zone 5 (2 bytes): $1C,$1D."
  },
  {
   "address": 43565,
   "type": "line",
   "text": "Object numbers woken in zone 6 (7 bytes): $19-$1B,$23,$1E,$20,$1F."
  },
  {
   "address": 43572,
   "type": "line",
   "text": "RTS: zone_update exits here on seven frames out of eight."
  },
  {
   "address": 43573,
   "type": "line",
   "text": "Main-loop subsystem, every 8th frame ($53 AND 7 = 3): runs zone_classify."
  },
  {
   "address": 43581,
   "type": "line",
   "text": "Works out which of seven map zones (0-6) the Doctor is in from his Y ($1C60/$1C10 thresholds $02A0, $0440, $05E0) and X ($1BC0/$1B70 thresholds $0640, $0820, $09C0, $0700, $0900). When it differs from $56 it stores the new zone, puts every object 3-$2F to sleep (zone_sleep_all) and wakes that zone's list. Also called from start-up $4A36, $831A, $94E1."
  },
  {
   "address": 43801,
   "type": "line",
   "text": "Clears bit 7 of $1CB0 (asleep flag) for each object in zone0_objects."
  },
  {
   "address": 43818,
   "type": "line",
   "text": "Clears bit 7 of $1CB0 for each object in zone1_objects."
  },
  {
   "address": 43835,
   "type": "line",
   "text": "Clears bit 7 of $1CB0 for each object in zone2_objects."
  },
  {
   "address": 43852,
   "type": "line",
   "text": "Clears bit 7 of $1CB0 for each object in zone3_objects."
  },
  {
   "address": 43869,
   "type": "line",
   "text": "Clears bit 7 of $1CB0 for each object in zone4_objects."
  },
  {
   "address": 43886,
   "type": "line",
   "text": "Clears bit 7 of $1CB0 for each object in zone5_objects."
  },
  {
   "address": 43903,
   "type": "line",
   "text": "Clears bit 7 of $1CB0 for each object in zone6_objects."
  },
  {
   "address": 43920,
   "type": "line",
   "text": "Sets bit 7 of $1CB0,X for objects 3-$2F: every creature and item in that range stops being processed until its zone wakes it."
  },
  {
   "address": 43936,
   "type": "line",
   "text": "Three bytes, one per graphics set 0-2: the offset ($00, $08) within the store at $2E00 where that set is kept, or $FF for the set currently installed in the character set. Rewritten by zone_graphics."
  },
  {
   "address": 43939,
   "type": "line",
   "text": "Graphics set (0-2) each zone 0-6 uses: 0,0,1,2,2,2,0."
  },
  {
   "address": 43946,
   "type": "line",
   "text": "Loop counter of zone_graphics: which of the 16 swapped characters (15 down to 0)."
  },
  {
   "address": 43947,
   "type": "line",
   "text": "Scratch: the graphics set zone_graphics is installing."
  },
  {
   "address": 43948,
   "type": "line",
   "text": "The 16 character codes whose shapes change by zone: $A1-$A5 and $F5-$FF."
  },
  {
   "address": 43964,
   "type": "line",
   "text": "Offsets $00-$F0 (16 per character) into the $2E00 store for each of the 16 swapped characters; the set's slot offset from charset_bank_slot is added."
  },
  {
   "address": 43980,
   "type": "line",
   "text": "Graphics set already installed: continue at j_8310."
  },
  {
   "address": 43983,
   "type": "line",
   "text": "Installs the character shapes and colours for zone $56: if the set zone_charset_bank[$56] is not already in, swaps the 8 bytes of each of the 16 characters in swap_char_codes (at $4000 + 8*code) with its store at $2E00 + 16*n + slot, and swaps each character's colour byte $2F00,code with $3E60 + 2*slot + n; then records which slot is now free. Ends in j_8310 when nothing to do. Called from start-up $4A39, $8C3D, $941A, $94E4."
  },
  {
   "address": 44135,
   "type": "line",
   "text": "Distance from object X to object Y: |dx| $D9/$DA with direction $DD ($81 when X is right of Y, $01 left, 0 when within 8 pixels), |dy| $DB/$DC with $DE ($81 below, $01 above, 0 level). Used by creatures and the carrier."
  },
  {
   "address": 44256,
   "type": "line",
   "text": "Turns the direction from distance_between into movement for creature X: $CB/$CC = $DD/$DE; if the creature has a turned-away heading $1E30,X it keeps it until $1EC0 is clear and |dx| high byte reaches $1AA0,X; with no horizontal difference it starts wandering in its current direction $1DB0 (or left). Called from $B287, $B811, $C50F and others."
  },
  {
   "address": 44310,
   "type": "line",
   "text": "Reaction of creature X when its move was refused: in state $0C (landed/stopped) reverses its heading into $1E30, stops it and sets state 6; with no horizontal move it reverses and sets state 0; otherwise counts down its climb timer $1E60 and, at the end, reverses when the vertical direction $DE matches. Sets $1EC0 = 1 when far ($DA >= $1AA0,X). Called from $B2B4, $C5C8, $CAE3, $CF85."
  },
  {
   "address": 44458,
   "type": "line",
   "text": "Scratch: the tile value switch_set_tile writes."
  },
  {
   "address": 44459,
   "type": "line",
   "text": "Map column of each of the 17 switchable map cells (doors, bridges and the like; index 0-$10)."
  },
  {
   "address": 44476,
   "type": "line",
   "text": "Map row of each of the 17 switchable map cells; the row selects a row pointer from $0A80/$0AC0."
  },
  {
   "address": 44493,
   "type": "line",
   "text": "17 bytes of 0 and 1, one per switchable cell by their count, directly after switch_map_row. No reader found by address search (the only $CD $AD byte pair is inside an instruction at $8F46); purpose unknown."
  },
  {
   "address": 44510,
   "type": "line",
   "text": "For each switchable cell, its X in characters (column * 4) used to find it on screen."
  },
  {
   "address": 44527,
   "type": "line",
   "text": "For each switchable cell, its Y in characters (row * 4) used to find it on screen."
  },
  {
   "address": 44544,
   "type": "line",
   "text": "Scratch: character counter 0-15 while switch_set_tile draws a 4 x 4 block."
  },
  {
   "address": 44545,
   "type": "line",
   "text": "Scratch: which switchable cell (0-$10) is being set."
  },
  {
   "address": 44546,
   "type": "line",
   "text": "Sets switchable map cell Y to tile A: remembers it in $1D00,Y, writes it into the map (switch_write_map), then draws its 4 x 4 characters from the tile's pattern ($1400/$1500 pointer by tile) onto the back screen (page $8788,$52) at its position less the scroll $24/$26, clipping columns past 38, and recolours the screen (recolour_screen). Called from $B480, $BC0A, $BCA1, $BF66 and others."
  },
  {
   "address": 44673,
   "type": "line",
   "text": "Rewrites colour RAM $D8A0-$DBFF from the play screen (page $8788,$52, offsets $A0-$3FF): each character gets its colour from the table $2F00 by character code. Self-modifying (operands at $AE9D/$AE9E and $AEA3/$AEA4). Also entered from $BAC5."
  },
  {
   "address": 44701,
   "type": "line",
   "text": "Operand of the LDX abs,Y at $AE9C in recolour_screen, rewritten at run time: low byte $AE9D set to 0, high byte $AE9E set to the play-screen page ($8788,$52) and stepped one page per pass. Y runs $A0-$FF, then three whole pages, so screen offsets $A0-$3FF are recoloured."
  },
  {
   "address": 44702,
   "type": "line",
   "text": "High byte of the self-modified screen-read operand in recolour_screen: set from $8788,$52 at $AE86, incremented at $AEA8 after each page."
  },
  {
   "address": 44707,
   "type": "line",
   "text": "Low byte of the self-modified colour-RAM store operand (STA abs,Y at $AEA2) in recolour_screen, set to 0 at $AE8E."
  },
  {
   "address": 44708,
   "type": "line",
   "text": "High byte of the self-modified colour-RAM store operand in recolour_screen: set to $D8 at $AE93, incremented per page, so writes land in $D8A0-$DBFF."
  },
  {
   "address": 44723,
   "type": "line",
   "text": "Writes $ADAA into the map at switchable cell Y: row pointer from $0A80/$0AC0 by switch_map_row, column switch_map_col."
  },
  {
   "address": 44746,
   "type": "line",
   "text": "Writes all 17 switchable cells from $1D00 back into the map; called at start-up $4A3C and from $94E7."
  },
  {
   "address": 44769,
   "type": "line",
   "text": "Three bytes ($4B,$6B,$8B) read at $B040 by the Splinx Programmer code; meaning not established (they look like sprite coordinates)."
  },
  {
   "address": 44772,
   "type": "line",
   "text": "Ten bytes $4F-$DF in steps of $10, read at $B048 by the Splinx Programmer code; meaning not established."
  },
  {
   "address": 44782,
   "type": "line",
   "text": "Ten bytes $A3-$33 in steps of $10, read at $B050 by the Splinx Programmer code; meaning not established."
  },
  {
   "address": 44792,
   "type": "line",
   "text": "Ten bytes, six 0 then four 4, read at $B056 (probably the X high bit for the positions in prog_table_aeee, which wrap past $FF); not verified."
  },
  {
   "address": 44802,
   "type": "line",
   "text": "Eleven bytes ($00,$1C-$1F,$12,$17,$10,$04,$03,$0A) read at $B066 by the Splinx Programmer code; meaning not established."
  },
  {
   "address": 44813,
   "type": "line",
   "text": "25 bytes of fill masks ($00 x17 then $01,$03 ... $FF) read at $B07A: one of three 8-pixel cells of a bar gauge (probably Splinx's battery) indexed by level."
  },
  {
   "address": 44838,
   "type": "line",
   "text": "25 bytes of fill masks read at $B089: the middle cell of the bar gauge, full ($FF) from level 16."
  },
  {
   "address": 44863,
   "type": "line",
   "text": "25 bytes of fill masks read at $B098: the first cell of the bar gauge, full from level 8."
  },
  {
   "address": 44888,
   "type": "line",
   "text": "Main-loop subsystem (only when $FC64 <> 0): with no direction held and S newly pressed ($D3, edge $D7) opens the Splinx Programmer: blanks the display, calls s_C89C, sets $1032 = 7, turns off sprites and raster interrupts, switches to VIC bank 0 with $D018 = $32 (screen $0C00, characters $0800), sets text scroll 3/3, sprite 0 Y-expanded and sprite 3 X-expanded, sprite colours 2,7,8,$E and pointers at $0FF8, continuing past $B000. Otherwise goes to j_B1A0."
  },
  {
   "address": 45056,
   "type": "line",
   "text": "Splinx Programmer screen, second half of the routine entered at $AF58 (S key). Sets sprite pointers $0FF9-$0FFB (screen $0C00) to $2D-$2F and fixed sprite positions, then loops: waits for raster $FA, and every 16th pass ($3B & $0F = $0A) places cursor sprites (sprite 0 Y from $AEE1,$FF = mode row; sprite 1 Y from $AEE4,$3A = command row; sprite 2 X from $AEEE/$AEF8,$2F = program slot), writes the ten program steps $30-$39 through table $AF02 to screen $0F82+2n, and draws the battery gauge from $1F (tables $AF0D/$AF26/$AF3F) into sprite data $0BD4-$0BE6. Reads input via $8F24: up/down move command cursor $3A 0-9, left/right move slot $2F 0-9; fire with command 0 (CHANGE MODE) cycles $FF 0-1-2 (SHUT DOWN / FOLLOW DOCTOR / EXECUTE PROGRAM; entering 2 resets $2F), fire on any other command stores it in slot $30+$2F and advances $2F. Fire and S are edge-detected through $D8 and $D7. S again leaves via $B12C."
  },
  {
   "address": 45356,
   "type": "line",
   "text": "Leave the Splinx Programmer: clears $D4 $CB $D5 $CC, blanks the screen, re-enables raster IRQ ($D01A=1), clears multicolour and 24-row/38-column bits, swaps colour RAM back ($B16D), waits for raster $FA, unblanks, returns to the main loop."
  },
  {
   "address": 45421,
   "type": "line",
   "text": "Exchange the 1024 bytes of colour RAM $D800-$DBFF with the buffer $1000-$13FF (four pages, $68 page counter, pointers $5A/$5B and $5C/$5D). Called on entering ($AFAF) and leaving ($B153) the Splinx Programmer, so the play area's colours are parked while the programmer's are shown."
  },
  {
   "address": 45461,
   "type": "line",
   "text": "Splinx pick-up search: frames left (reset to 30) in the current random wander direction when no object is in reach ($B346-$B373)."
  },
  {
   "address": 45462,
   "type": "line",
   "text": "Splinx pick-up search cursor: next object slot to test, $34-$4F, four slots per frame, wraps to $34 ($B2E8-$B333)."
  },
  {
   "address": 45463,
   "type": "line",
   "text": "Splinx walking sprite frames facing left ($76 $78 $77 $76), indexed by x-position bits 1-2 ($B465)."
  },
  {
   "address": 45467,
   "type": "line",
   "text": "Splinx walking sprite frames facing right ($76 $77 $78 $76), indexed by x-position bits 1-2 ($B460); the fifth byte $B19F is not read."
  },
  {
   "address": 45472,
   "type": "line",
   "text": "Splinx (object 2) per-frame behaviour, reached from $AF66 when the programmer is not being opened. Skips if $1CB2 = $14; stops moving if the Doctor carries Splinx ($1D80 = 2) or $1B22 = $0E. Mode $FF: 0 shut down (stand), 1 follow Doctor ($B3EF), 2 execute program: runs step $30+$2F through a branch whose offset is written at $B1CD (command*2). Movement drains battery $1F by 1 every 1024 frames ($53 = 0 and $54 & 3 = 0); battery 0 stops Splinx."
  },
  {
   "address": 45517,
   "type": "line",
   "text": "Operand of the BPL at $B1CC, rewritten with command*2: 0 CHANGE MODE and 6 WAIT stand ($B203); 1-4 GOTO MARKER 1-4 (objects $30-$33, $B21F-$B22B); 5 RETURN TO DOCTOR ($B244); 7 PICK UP ($B1E3); 8 DROP ($B1F9); 9 RECHARGE ($B3BB)."
  },
  {
   "address": 45717,
   "type": "line",
   "text": "Operand of the BPL at $B294, rewritten with Splinx's movement class $1B22 (0, 2, 4, 6, 8): selects walk with $CB only, $9A39, $9BCE or $9C5F, then stores the new position from $60-$63 and directions $CB/$CC in $1DB0/$1DE0."
  },
  {
   "address": 46190,
   "type": "line",
   "text": "Countdown for object $0C in state 9 (set to $FF at $B5AA); at zero $B477 calls $AE02 (Y=$0C, A=$BC) and returns the object to state 0."
  },
  {
   "address": 46191,
   "type": "line",
   "text": "Sprite frames $9E-$A1 for object $0C moving left, indexed by x bits 2-3 ($B638)."
  },
  {
   "address": 46195,
   "type": "line",
   "text": "Sprite frames $9A-$9D for object $0C moving right or still, indexed by x bits 2-3 ($B62F)."
  },
  {
   "address": 46199,
   "type": "line",
   "text": "Object $0C state 9: count $B46E down each frame; at zero call $AE02 with Y=$0C, A=$BC and set state $1CBC to 0."
  },
  {
   "address": 46218,
   "type": "line",
   "text": "Main-loop subsystem for object $0C, the creature that goes for the CRYSTAL (object $36). State $1CBC: negative = inactive, 9 = wait ($B477), else dispatch through the branch offset at $B4AD: 0 approach ($B4B7), 3 carry the crystal home ($B500), 6 deliver ($B571). $A46E/$A4A4 handle it being off screen."
  },
  {
   "address": 46253,
   "type": "line",
   "text": "Operand of the BPL at $B4AC, rewritten with state $1CBC (0, 3, 6), selecting one of the three JMPs at $B4AE-$B4B6."
  },
  {
   "address": 46257,
   "type": "line",
   "text": "Dispatch slot for state 3: JMP $B500."
  },
  {
   "address": 46260,
   "type": "line",
   "text": "Dispatch slot for state 6: JMP $B571."
  },
  {
   "address": 46263,
   "type": "line",
   "text": "Object $0C state 0. If the crystal is free (class $1B56 = 0) and object $0C is within $80 x $20 of the crystal, or the crystal is held and object $0C is within $80 x $20 of the Doctor, go to state 3 (fetch). Otherwise, if away from its home point $0DA8,$0380 ($B652, dx low non-zero) go to state 6 (walk home), else stand."
  },
  {
   "address": 46336,
   "type": "line",
   "text": "Object $0C state 3: go for the crystal ($36). Further than $F0 from home gives state 6. If the crystal is free or class $0E, walk to it and take it within $20 when $83 is clear (sets $82/$83). If it is held and the Doctor is within $20: if in a pocket (scan $3D+Y, Y 4 down, for $36) remove it via $A656, else clear the Doctor's hands $1D80; set the Doctor's state $1CB0 = $79. Taking it sets crystal class 2, $1D8C = $36, state 6."
  },
  {
   "address": 46449,
   "type": "line",
   "text": "Object $0C state 6: walk to home point; there, if carrying the crystal, put it at x $06C8, y $06A8 (class 0), drop it ($1D8C=0), enter state 9 with timer $FF and call $AE02 (Y=$0C, A=$1C); if not carrying, return to state 0."
  },
  {
   "address": 46526,
   "type": "line",
   "text": "Operand of the BPL at $B5BD, rewritten with object $0C's movement class $1B2C; picks the walker ($9A39, $9BCE, $9C5F) as at $B295."
  },
  {
   "address": 46595,
   "type": "line",
   "text": "Draw object $0C: if it carries something ($1D8C), move the carried object with it via $A8B1 (facing $8A temporarily set from $1DB0), mark $1AD0,x and update it ($81DA); then set $1D3C from $B46F/$B473 by facing and x bits 2-3, and update ($81DA)."
  },
  {
   "address": 46623,
   "type": "line",
   "text": "Index base only: $B61F+$46/$47 = $B665, egg nest x high bytes (read at $B7B3 with Y = egg object $46 or $47). The bytes here are code."
  },
  {
   "address": 46625,
   "type": "line",
   "text": "Index base only: $B621+$46/$47 = $B667, egg nest x low bytes ($B7B8)."
  },
  {
   "address": 46627,
   "type": "line",
   "text": "Index base only: $B623+$46/$47 = $B669, egg nest y high bytes ($B7BD)."
  },
  {
   "address": 46629,
   "type": "line",
   "text": "Index base only: $B625+$46/$47 = $B66B, egg nest y low bytes ($B7C2)."
  },
  {
   "address": 46657,
   "type": "line",
   "text": "Object $0C: clear directions $1DB0/$1DE0, class $1B20 and $1E30, then draw ($B603)."
  },
  {
   "address": 46674,
   "type": "line",
   "text": "Distance from object X to the fixed point x $0DA8, y $0380 (object $0C's home) through $A3FB; results in $D9-$DE."
  },
  {
   "address": 46693,
   "type": "line",
   "text": "Nest positions for the two EGG objects $46 and $47, as four 2-byte columns: x hi 04 04, x lo $10 $24, y hi 0 0, y lo $60 $60, i.e. $0410,$0060 and $0424,$0060. Read through the index bases $B61F-$B625."
  },
  {
   "address": 46701,
   "type": "line",
   "text": "Madrag legs (object $0A, the lower sprite) frames $AA-$AD when facing left, by x bits 2-3 ($B8AD)."
  },
  {
   "address": 46705,
   "type": "line",
   "text": "Madrag legs (object $0A, the lower sprite) frames $AE-$B1 when facing right ($B88E)."
  },
  {
   "address": 46709,
   "type": "line",
   "text": "Madrag head and body (object $0B, the upper sprite) frames $B2-$B5 facing left, not carrying ($B8B9)."
  },
  {
   "address": 46713,
   "type": "line",
   "text": "Madrag head and body (object $0B, the upper sprite) frames $B6-$B9 facing right, not carrying ($B89A)."
  },
  {
   "address": 46717,
   "type": "line",
   "text": "Madrag head and body frame $BA while carrying an egg in her mouth, facing left ($B8C3)."
  },
  {
   "address": 46718,
   "type": "line",
   "text": "Madrag head and body frame $BB while carrying an egg in her mouth, facing right ($B8A4)."
  },
  {
   "address": 46719,
   "type": "line",
   "text": "Madrag: the egg object ($46 or $47) it is fetching or carrying; written $B719, read $B755, $B75D, $B7B0."
  },
  {
   "address": 46720,
   "type": "line",
   "text": "Main-loop subsystem for the madrag, objects $0A (legs, the one that moves) and $0B (head and body): runs the behaviour $B689 twice per frame (double speed), then $B861 positions the head and body, sets frames and checks for the Doctor touching an egg."
  },
  {
   "address": 46729,
   "type": "line",
   "text": "Madrag (object $0A) behaviour. Skips if state $1CBA is negative or $14; $A46E/$A4A4 when off screen. Toggles bit 2 of $1A7A each call. If carrying an egg ($1D8A) goes to $B7AD, else dispatches state through the branch offset at $B6B7: 0 guard ($B6F3), 3 go home ($B720), 6 fetch egg ($B752), 9 carry ($B7AD), $0C chase Doctor ($B6C4)."
  },
  {
   "address": 46775,
   "type": "line",
   "text": "Operand of the BPL at $B6B6, rewritten with madrag state $1CBA (0, 3, 6, 9, $0C)."
  },
  {
   "address": 46779,
   "type": "line",
   "text": "Madrag dispatch slot for state 3: JMP $B720."
  },
  {
   "address": 46782,
   "type": "line",
   "text": "Madrag dispatch slot for state 6: JMP $B752."
  },
  {
   "address": 46785,
   "type": "line",
   "text": "Madrag dispatch slot for state 9: JMP $B7AD."
  },
  {
   "address": 46788,
   "type": "line",
   "text": "Madrag state $0C: chase the Doctor. If $E8 is set, or $B956 reports a bite or the Doctor 256+ pixels away, give up (state 3, clear $1E30). While the Doctor is within $F0 x $60, steer toward him ($B811); otherwise state 3."
  },
  {
   "address": 46835,
   "type": "line",
   "text": "Madrag state 0: if the Doctor is within $A0 x $20 ($B933) switch to chase. Check both eggs $46,$47: an egg not free ($1B20 non-zero) or not 256-$13F pixels to the right of the madrag makes it state 6 with $B67F = that egg; otherwise stand ($B802)."
  },
  {
   "address": 46880,
   "type": "line",
   "text": "Madrag state 3: chase check ($B933), then walk to x $0540, y $0060; within $10 x $08 of it return to state 0."
  },
  {
   "address": 46930,
   "type": "line",
   "text": "Madrag state 6: bite check ($B956). If its egg is free, walk to it and when within $14 x $1E pick it up (egg class 2, $1D8A = egg, flags $82/$83, state 9). If the egg is held (class non-zero), walk to Splinx (object 2) and take it from him when close ($1D82 cleared, $B78D)."
  },
  {
   "address": 47021,
   "type": "line",
   "text": "Madrag state 9 or carrying: bite check, walk to the egg's nest ($B665 table via $B61F-$B625); within $10 put the egg there, flag $82/$83 = $FF, state 3, $1D8A = 0, egg class 0."
  },
  {
   "address": 47106,
   "type": "line",
   "text": "Madrag: clear $1DB0, $1DE0, $1B20 and $1E30 for object X (stop)."
  },
  {
   "address": 47121,
   "type": "line",
   "text": "Madrag: steer toward the target ($ACE0), then move through the walker selected by class $1B2A (branch offset at $B81B), store new position and directions."
  },
  {
   "address": 47131,
   "type": "line",
   "text": "Operand of the BPL at $B81A, rewritten with madrag movement class $1B2A."
  },
  {
   "address": 47201,
   "type": "line",
   "text": "Place the madrag's head and body (object X+1) at the legs' x and y+$15, 21 pixels higher (world y grows upward), pick frames for both from $B66D-$B67E by facing and x bits 2-3 (carry frame when $1D8A set), update both ($81DA). Then, if $E8 is 0, every 8 frames ($53&7=2) test the eggs $46/$47: a free egg within $14 x $0C of the Doctor sets $E8=$16 and places object $0D (baby madrag) at the egg; while $E8=$16 play sound $0E and update object $0D."
  },
  {
   "address": 47411,
   "type": "line",
   "text": "If $E8 is 0 and the Doctor is within $A0 x $20 of the madrag, set its state $1CB0,X to $0C (chase)."
  },
  {
   "address": 47446,
   "type": "line",
   "text": "Madrag bite test against the Doctor: returns A=$FF when 256+ pixels apart, A=0 when not within $14 x $1E; when within, sets $E8=$14 and plays sound 1 ($C7C7 Y=1) and returns non-zero."
  },
  {
   "address": 47482,
   "type": "line",
   "text": "Index base only: $B97A+X (X=$2C-$2F) = $B9A6, reset x high bytes for the moving objects $2C-$2F ($BA78). The byte here is code."
  },
  {
   "address": 47486,
   "type": "line",
   "text": "The RTS of $B956, and index base: $B97E+X (X=$2C-$2F) = $B9AA, reset x low bytes ($BA72)."
  },
  {
   "address": 47487,
   "type": "line",
   "text": "Objects checked when $4F is negative, Y 4..0 (or 9..5 via $B984): $40 $41 $42 $43 $4A / $40 $4A $42 $43 $41; each must sit exactly at its slot for $4F to be cleared ($BA12). $B982/$B986 are also index bases of the limit tables below."
  },
  {
   "address": 47490,
   "type": "line",
   "text": "Part of set B ($B982-$B985 = $43 $4A $40 $4A) and index base: $B982+X (X=$2C-$2F) = $B9AE, the limit x high bytes ($BA6D)."
  },
  {
   "address": 47494,
   "type": "line",
   "text": "Part of set B ($B986-$B988 = $42 $43 $41) and index base: $B986+X = $B9B2, the limit x low bytes ($BA65)."
  },
  {
   "address": 47497,
   "type": "line",
   "text": "Objects checked when $4F is positive, Y 3..0 (or 8..5): $40 $41 $44 $45 / $40 $4A $44 $45 (byte $B98D unused); all at their slots sets $4F=$FF ($B9D7)."
  },
  {
   "address": 47506,
   "type": "line",
   "text": "Slot x high byte per check index 0-9 (01 01 02 02 02 01 01 02 02 02); slot y is always $0390."
  },
  {
   "address": 47516,
   "type": "line",
   "text": "Slot x low byte per check index 0-9 ($C8 $E8 $08 $28 $48, twice): slots at x $01C8, $01E8, $0208, $0228, $0248."
  },
  {
   "address": 47526,
   "type": "line",
   "text": "Moving objects $2C-$2F: x high on wrap (07 06 03 06, $B9A6), x low on wrap ($D0 $30 $70 $70, $B9AA), limit x high (06 03 06 04, $B9AE), limit x low ($30 $70 $70 $D0, $B9B2). Read at $BA62-$BA7B."
  },
  {
   "address": 47542,
   "type": "line",
   "text": "Main-loop subsystem, active when $56 = 2. Every 8th frame tests whether the circuit objects sit exactly in their slots at y $0390 (set A while $4F >= 0: all in place sets $4F=$FF and plays sound 2; set B while negative: all in place clears $4F). While $4F >= 0, every other frame moves objects $2C,$2D,$2F left and $2E right by one pixel, wrapping each at its limit ($B9A6 tables). Then: if $1CCA <> 3 and CHEMICALS (object $49) lie within $50 of x $0290, y $0588, set $1CCA=$1CCB=3, write $0C to $2FA1 and $2F3A, sound 9, jump $AE81."
  },
  {
   "address": 47817,
   "type": "line",
   "text": "Zero until F5 is first pressed with this routine; then $FF, and $BF69 has dealt the code-lock sequence. Also cleared at $4A16 and $943A."
  },
  {
   "address": 47818,
   "type": "line",
   "text": "F5 edge latch: $FF while F5 is held after an action, 0 when released ($BB2C), so one press uses the item once."
  },
  {
   "address": 47820,
   "type": "line",
   "text": "Main-loop subsystem: use the held item (F5, $D2). Returns while cooldown $E9 counts down or the Doctor moves. If $1D08 = $B2 and Doctor x hi >= 8, sets $1D08/$1D0F to $1B via $AEB3. Sets $16A0 = 0 when holding the PASS CARD ($37), else 1 (the $4E test just before is overwritten). F5 released: pick axe drawn at rest ($1D64=$C0, $1A34=8, $1A54=6). F5 pressed: first time deals the code ($BF69); else, unless $E0, dispatch on $1D80: 0 empty hands $BD1B, $34 pick axe $BC29, $38 spanner $BBBC, $3C/$48/$4C detonators, $3D explosives, $3F activator."
  },
  {
   "address": 48020,
   "type": "line",
   "text": "Spanner points, 8 entries: x high ($BB94), x low ($BB9C), y high ($BBA4), y low ($BBAC), and 'must be above' flag ($BBB4, only entry 5 set). Read at $BBC0-$BBF0."
  },
  {
   "address": 48028,
   "type": "line",
   "text": "Spanner points: x low bytes for the 8 entries ($BBC0)."
  },
  {
   "address": 48036,
   "type": "line",
   "text": "Spanner points: y high bytes 05 05 06 06 06 05 05 05 ($BBCF)."
  },
  {
   "address": 48044,
   "type": "line",
   "text": "Spanner points: y low bytes ($BBCA)."
  },
  {
   "address": 48052,
   "type": "line",
   "text": "Spanner points: non-zero (entry 5 only) means the Doctor must be below the point ($BBF0)."
  },
  {
   "address": 48060,
   "type": "line",
   "text": "Use SPANNER ($38): for each of 8 points, if the Doctor is within $10 x $1E and point Y's flag $1D12,Y is clear (and for entry 5 he is below it, $DE negative is required), set $1D12,Y=$FF, play sound $14 and call $AE02 with Y and A=$E1."
  },
  {
   "address": 48145,
   "type": "line",
   "text": "Pick axe dig sites 0-2: $AE02 index ($0E $09 $0A, $BC11), map codes by hit count for sites 0-1 ($BC14: 0 $AF $B0 $1B) and site 2 ($BC18: 0 $FC $FD $1C), x hi ($BC1C), x lo ($BC1F), y hi ($BC22), y lo ($BC25)."
  },
  {
   "address": 48148,
   "type": "line",
   "text": "Pick axe: map code passed to $AE02 after hit 1, 2, 3 at dig sites 0 and 1 ($AF $B0 $1B; entry 0 unused)."
  },
  {
   "address": 48152,
   "type": "line",
   "text": "Pick axe: map code after hit 1, 2, 3 at dig site 2 ($FC $FD $1C)."
  },
  {
   "address": 48156,
   "type": "line",
   "text": "Pick axe dig sites: x high 05 05 09."
  },
  {
   "address": 48159,
   "type": "line",
   "text": "Pick axe dig sites: x low $C0 $E0 $00 (sites at x $05C0, $05E0, $0900)."
  },
  {
   "address": 48162,
   "type": "line",
   "text": "Pick axe dig sites: y high 0 0 1."
  },
  {
   "address": 48165,
   "type": "line",
   "text": "Pick axe dig sites: y low $74 $74 $54 (y $0074, $0074, $0154)."
  },
  {
   "address": 48168,
   "type": "line",
   "text": "Pick axe: swings left (1-3) before the next hit on a dig site counts ($BC84)."
  },
  {
   "address": 48169,
   "type": "line",
   "text": "Use PICK AXE ($34): recolour it ($1A34=$0E, $1A54=$0C) and choose swing frame $C8/$C9 by facing $8A. For dig sites 2..0 whose count $1D1A,Y is below 3 and within $16 x $08 of the Doctor: sound 4; every third swing increment $1D1A,Y and call $AE02 with the site's index and the map code for that count."
  },
  {
   "address": 48302,
   "type": "line",
   "text": "Use DETONATOR $3C: if its state $1CEC is 0 set it to $88."
  },
  {
   "address": 48313,
   "type": "line",
   "text": "Use DETONATOR $48: if $1CF8 is 0 set it to $88."
  },
  {
   "address": 48324,
   "type": "line",
   "text": "Use DETONATOR $4C: if $1CFC is 0 set it to $88."
  },
  {
   "address": 48335,
   "type": "line",
   "text": "Use EXPLOSIVES ($3D): if its state $1CED is 0 set it to $FF."
  },
  {
   "address": 48346,
   "type": "line",
   "text": "ACTIVATOR points x high ($0D $0D $0E) and x low ($08 $88 $08); y is $0648: $0D08, $0D88, $0E08."
  },
  {
   "address": 48349,
   "type": "line",
   "text": "Activator points: x low bytes $08 $88 $08."
  },
  {
   "address": 48352,
   "type": "line",
   "text": "Use ACTIVATOR ($3F): within $18 x $08 of any of the three points, set $E8=2 and play sound $15."
  },
  {
   "address": 48411,
   "type": "line",
   "text": "F5 with nothing held: if the character under the Doctor ($9A09 -> $78) is $B2 and his y is a multiple of 32, set $E8=4; otherwise try the code-lock buttons ($BE29)."
  },
  {
   "address": 48437,
   "type": "line",
   "text": "Code lock: the digit (0-5) shown on each of the three buttons, $BD35-$BD37; drawn through $BD64 into $BFDB-$BFDD."
  },
  {
   "address": 48438,
   "type": "line",
   "text": "Code lock: digit shown on the middle button (zone x $40-$5F)."
  },
  {
   "address": 48439,
   "type": "line",
   "text": "Code lock: digit shown on the right button (zone x $60-$7F)."
  },
  {
   "address": 48440,
   "type": "line",
   "text": "Code lock: the six-digit secret sequence (each 0-5), dealt at $BFC7 from table $BD6F."
  },
  {
   "address": 48446,
   "type": "line",
   "text": "Code lock: how many digits of the sequence are already entered (0-5)."
  },
  {
   "address": 48447,
   "type": "line",
   "text": "Code lock seeds, each 0-4, taken from frame counter $53 at $BF69: $BD3F, $BD40, $BD41; $BD42 is the occurrence counter used while searching $BD6F. Shown as clues at $BE8A-$BEA4."
  },
  {
   "address": 48448,
   "type": "line",
   "text": "Code lock seed 2 (0-4), from the inverted frame counter; also selects the second clue."
  },
  {
   "address": 48449,
   "type": "line",
   "text": "Code lock seed 3 (0-4): which occurrence in the deck to use; also the third clue."
  },
  {
   "address": 48450,
   "type": "line",
   "text": "Code lock dealer: occurrences skipped so far while searching the deck."
  },
  {
   "address": 48451,
   "type": "line",
   "text": "Read at $BF07 (shifted, & 7) as the decoy value for the two wrong buttons; not written anywhere in $B000-$BFFF."
  },
  {
   "address": 48452,
   "type": "line",
   "text": "Clue display: which clue (0-3) is shown next at $BFDA, counts down 3..0."
  },
  {
   "address": 48453,
   "type": "line",
   "text": "Code lock: the next correct digit, $BD38[$BD3E] ($BEF2)."
  },
  {
   "address": 48454,
   "type": "line",
   "text": "Index 0-$17 into $BD47 choosing which button carries the right digit; counts down each deal."
  },
  {
   "address": 48455,
   "type": "line",
   "text": "24 entries 0-2: which of the three buttons shows the correct digit on each deal."
  },
  {
   "address": 48479,
   "type": "line",
   "text": "Characters $F6 $F5 $F7 $F8 $F9 shown for clue seed $BD3F (0-4)."
  },
  {
   "address": 48484,
   "type": "line",
   "text": "Characters $FD $FA $FE $FB $FC $FF for code digits 0-5, used for the buttons and for clue seed $BD40."
  },
  {
   "address": 48490,
   "type": "line",
   "text": "Characters $A1-$A5 shown for clue seed $BD41 (0-4)."
  },
  {
   "address": 48495,
   "type": "line",
   "text": "Code lock deck, 186 bytes $BD6F-$BE28. Each byte is 8*a+b (a 0-4, b 0-5). The dealer finds the ($BD41+1)-th byte equal to 8*$BD3F+$BD40 and takes the low three bits of the six bytes from there as the sequence."
  },
  {
   "address": 48559,
   "type": "line",
   "text": "Code lock deck continued, $BDAF-$BDEE (see $BD6F)."
  },
  {
   "address": 48623,
   "type": "line",
   "text": "Code lock deck continued, $BDEF-$BE28 (see $BD6F)."
  },
  {
   "address": 48681,
   "type": "line",
   "text": "Empty-handed F5 in the code-lock room (Doctor x hi $0A), unless solved ($4E negative). At y $04C8 and x $20-$7F: compare the button stood on (three 32-pixel zones) with the next digit; wrong: sound $11 and re-deal ($BF69); right: sound $11, advance, and after the sixth $4E=$FF, sound 7, $AE02 (Y=$0D, A=$D5). At y $05C6+ and x $14-$33 instead: show the next clue character in $BFDA (seeds via $BD5F, $BD64, $BD6A, then $5D)."
  },
  {
   "address": 48769,
   "type": "line",
   "text": "Operand of the BPL at $BE80, rewritten with clue number*2, selecting which clue is written to $BFDA."
  },
  {
   "address": 48876,
   "type": "line",
   "text": "Put the next correct digit on the button chosen by $BD47 and decoys derived from $BD43 on the others (never equal to the right digit, reduced below 6), then write the three button characters to $BFDB-$BFDD."
  },
  {
   "address": 49001,
   "type": "line",
   "text": "Deal a new code: position 0, seeds $BD3F, $BD40, $BD41 from frame counter $53 (reduced mod 5), then search $BD6F and copy six digits to $BD38, then show buttons ($BEEC)."
  },
  {
   "address": 49114,
   "type": "line",
   "text": "Characters displayed by $C043 and on: $BFDA the clue, $BFDB-$BFDD the three buttons."
  },
  {
   "address": 49115,
   "type": "line",
   "text": "Character for the left button ($BF37)."
  },
  {
   "address": 49116,
   "type": "line",
   "text": "Character for the middle button ($BF40)."
  },
  {
   "address": 49117,
   "type": "line",
   "text": "Character for the right button ($BF49)."
  },
  {
   "address": 49118,
   "type": "line",
   "text": "Four 4-entry tables read by $BFEF-$C027 ($BFDE, $BFE2 = $45 $46 $4A $4E, $BFE6, $BFEA); their meaning belongs with the routine at $BFEF, which continues past $C000."
  },
  {
   "address": 49122,
   "type": "line",
   "text": "Table read at $C00B by the routine $BFEF: $45 $46 $4A $4E (object numbers, possibly)."
  },
  {
   "address": 49126,
   "type": "line",
   "text": "Table read at $C027 by the routine $BFEF: four zeros."
  },
  {
   "address": 49130,
   "type": "line",
   "text": "Table read at $C020 by the routine $BFEF: $BD $9C $9C $9C."
  },
  {
   "address": 49134,
   "type": "line",
   "text": "Shared RTS for the early exits of $BFEF."
  },
  {
   "address": 49135,
   "type": "line",
   "text": "Main-loop subsystem, runs only when $56 = 3 and every 8th frame; loads X=3 and Y=$52 (screen buffer) and reads $8788,Y; the body continues at $C000 outside this range."
  },
  {
   "address": 49154,
   "type": "line",
   "text": "Second half of s_BFEF (the LDA $8788,Y whose operand fills $C000-$C001 starts at $BFFF). For X=3..0: map cell whose column is ($BFE2,X/$BFDE,X) minus scroll origin $24/$25 and row ($BFEA,X/$BFE6,X) minus $26/$27; if it lies in the 40x21 window, stores char $BFDA,X into the visible screen (row start from $8746/$875F, screen page $5C from $8788,$52); if not on the window's edge, also stores it into the other screen (page $60 from $878A,$52) at the position shifted by $8778,$72/$8780,$72, the pending scroll step. Keeps four fixed cells drawn on both buffers."
  },
  {
   "address": 49281,
   "type": "line",
   "text": "Four object slots handled by fuse_update: $3D, $3C, $48, $4C (read as X by $C0C6; also read at $936F). $3D is special-cased (blast radius $80, only it can trigger the level rise or the tile change in blast_damage)."
  },
  {
   "address": 49285,
   "type": "line",
   "text": "Blast radius in pixels on X used by blast_damage: set to $20 by fuse_tick, or $80 when the object is $3D. Y radius is fixed at $20."
  },
  {
   "address": 49286,
   "type": "line",
   "text": "Per fuse slot (index Y 0-3, objects fuse_object_ids): $FF idle; set to $0F when a fuse burns out, then counted down once per call by blast_countdown_step; at 8 the blast damages, at 0 the object is retired. Also read at $9379."
  },
  {
   "address": 49290,
   "type": "line",
   "text": "Sprite frame per fuse slot shown while the fuse burns, on frames where $53 AND fuse_flash_mask is non-zero ($87, $CA, $CA, $CA)."
  },
  {
   "address": 49294,
   "type": "line",
   "text": "Sprite frame per fuse slot on the other flash phase ($89, $40, $40, $40)."
  },
  {
   "address": 49298,
   "type": "line",
   "text": "Frame-counter mask per fuse slot choosing the flash rate of the burning object ($02, $04, $04, $04)."
  },
  {
   "address": 49302,
   "type": "line",
   "text": "Sound effect number per fuse slot started when the fuse burns out ($0C, $0B, $0B, $0B), via sound_start."
  },
  {
   "address": 49306,
   "type": "line",
   "text": "Main-loop subsystem. If the rising level $51 is non-zero: starts sound 3 and every 128 frames increments $51; if $51 then exceeds the Doctor's Y/8 ($1C60:$1C10 >> 3) sets $E8=8 (death cause 4). Then for fuse slots 3..1: a slot counting down (fuse_countdown bit 7 clear) runs blast_countdown_step; else an object whose $1CB0 is non-zero runs fuse_tick; only the first active slot is serviced. Finally slot 0 (object $3D) likewise."
  },
  {
   "address": 49396,
   "type": "line",
   "text": "Fuse slot Y, object X. Decrements fuse_countdown,Y; at 8 calls blast_damage. Copies the object's position to object $2B and draws it (JMP $81DA with X=$2B): the explosion sprite. At 0: an object in mode ($1B20) 2 clears $1D80 (the Doctor's held object); mode 0 with $83 free posts X to $82 with $83=1; other modes remove it from the pocket list $3D-$42 via $A656. Then sets mode 4 and the slot idle ($FF)."
  },
  {
   "address": 49506,
   "type": "line",
   "text": "While the fuse object X (mode not 4) burns: picks fuse_frame_on or fuse_frame_off by $53 AND fuse_flash_mask,Y into $1D30,X and draws it via $81DA."
  },
  {
   "address": 49538,
   "type": "line",
   "text": "Fuse slot Y, object X with $1CB0,X > 0 (the fuse time). Every other frame decrements $1CB0,X; while non-zero shows the flashing frame. At zero: if the object is in mode 4 it takes the Doctor's position; starts the slot's countdown ($0F) and its sound (fuse_sound); sets blast_radius $20, or $80 for object $3D."
  },
  {
   "address": 49611,
   "type": "line",
   "text": "Object X explodes. Every object Y=$2F..0 within blast_radius on X and $20 on Y (via $AC67 distance) gets $1CB0,Y=$14 (destroyed). If that hit the Doctor (object 0): $E8=6 (THE EXPLOSION) and his $1CB0 is cleared. Else if X=$3D and it lies within $20x$10 of point ($0E60,$0068): $51=1 starts the rising level. Otherwise if within $20x$20 of point ($0BE0,$0588): sound 8 and $AE02 with Y=$0B, A=$FF (a map change)."
  },
  {
   "address": 49761,
   "type": "line",
   "text": "Seven waypoints walked by objects 3-5 in states 0-6 (read at $C2CC by the state number): X low. Then trio_route_x_hi, trio_route_y_lo, trio_route_y_hi, 7 bytes each."
  },
  {
   "address": 49768,
   "type": "line",
   "text": "Waypoints 0-6 for objects 3-5: X high byte."
  },
  {
   "address": 49775,
   "type": "line",
   "text": "Waypoints 0-6 for objects 3-5: Y low byte."
  },
  {
   "address": 49782,
   "type": "line",
   "text": "Waypoints 0-6 for objects 3-5: Y high byte ($C276-$C27C; the code reads it from auto label f_C276)."
  },
  {
   "address": 49786,
   "type": "line",
   "text": "Last three bytes of trio_route_y_hi (waypoints 4-6). Auto label f_C27A is only the base of an X-indexed read (X=3..5 reads $C27D-$C27F)."
  },
  {
   "address": 49789,
   "type": "line",
   "text": "Home point of objects 3, 4, 5 (read as $C27A,X): X low $20, $90, $90. Next tables: X high ($C280), Y low ($C283), Y high ($C286), one byte per object."
  },
  {
   "address": 49792,
   "type": "line",
   "text": "Home point X high byte for objects 3-5 (read as $C27D,X)."
  },
  {
   "address": 49795,
   "type": "line",
   "text": "Home point Y low byte for objects 3-5 (read as $C280,X)."
  },
  {
   "address": 49798,
   "type": "line",
   "text": "Home point Y high byte for objects 3-5 (read as $C283,X): $C286-$C288."
  },
  {
   "address": 49799,
   "type": "line",
   "text": "Middle of trio_partner: base of the $C287,X read (X=3..5 -> $C28A-$C28C, the previous partner)."
  },
  {
   "address": 49801,
   "type": "line",
   "text": "Partner object of objects 3,4,5 read as $C286,X: $04, $05, $03 (the next one round). Read as $C287,X it gives $05, $03, $04 (the previous one); $C28C is only reached that way."
  },
  {
   "address": 49805,
   "type": "line",
   "text": "Shared RTS for trio_think when an object is inactive or destroyed."
  },
  {
   "address": 49806,
   "type": "line",
   "text": "Main-loop subsystem: runs trio_think for objects 3, 4 and 5."
  },
  {
   "address": 49818,
   "type": "line",
   "text": "One of objects 3-5 (X). Skipped when $1CB0,X is negative or $14 (destroyed). $A46E: Y=$FF waits, Y=1 keeps moving ($A4A4), Y=0 (on the grid, its turn) decides: states 0-6 walk waypoints trio_route_* (reaching one advances the state; reaching 3 jumps to state $0C); states 7, 9, $0C dispatch through trio_state_dispatch."
  },
  {
   "address": 49855,
   "type": "line",
   "text": "Self-modified branch: $C2BC stores state-7 into this BPL's offset, so state 7 goes to $C2C1 (-> $C30A), 9 to $C2C3 (-> trio_go_home), $0C to $C2C6 (-> trio_state_c). Other values land mid-instruction."
  },
  {
   "address": 49856,
   "type": "line",
   "text": "Operand of the self-modified BPL at $C2BF, written at $C2BC with state-7 of objects 3-5; code following is the waypoint walk and the state 7/9/$0C handlers of trio_think."
  },
  {
   "address": 49930,
   "type": "line",
   "text": "State 7: unless the partner is in state 9, looks for object $34 (not in mode 4, not held by $1D80/$1D82, $1BF4 < 2, $1C94 = 0 or 1 with $1C44 < $80); if within $0A x $0A it takes it (object $34 mode 2, $1D80,X = $34, posts to $82/$83 if free). Always ends in state 9, or moves toward it via object_move_step."
  },
  {
   "address": 50035,
   "type": "line",
   "text": "State 9: walks to the object's home point (trio_home_*). On arrival: if the partner is in state $0C, hands over what it carries (object $34 gets this position, $82/$83 posted, $1D80,X=$0D) and resets to state 0; otherwise sets mode 0."
  },
  {
   "address": 50151,
   "type": "line",
   "text": "State $0C (reached only through trio_state_dispatch, $C2C6): clears $1D80,X; if the previous partner ($C287,X) has state 0, sets state 4; otherwise sets mode ($1B20,X) 0. Draws via $81DA."
  },
  {
   "address": 50180,
   "type": "line",
   "text": "Waypoint lists for objects 6-9, 4-byte records X hi, X lo, Y hi, Y lo; a first byte >= $80 is a one-byte marker: $FF sets $1D80,X=0, $80 sets it to 2 (objects 6,7) or 1 (8,9), chosen by patrol_think. Object 6 at $C404 (last index $16), 7 at $C41E ($0A), 8 at $C42C ($06), 9 at $C436 ($06)."
  },
  {
   "address": 50234,
   "type": "line",
   "text": "Tail of patrol_routes (object 9's list, $C436-$C43F). Auto label f_C43A is only the base of an X-indexed read ($C43A,X with X=6..9 reads patrol_route_lo)."
  },
  {
   "address": 50238,
   "type": "line",
   "text": "Last two bytes of patrol_routes. Auto label f_C43E is the base of an indexed read that lands on patrol_route_hi."
  },
  {
   "address": 50240,
   "type": "line",
   "text": "Low bytes of the waypoint list address for objects 6-9 ($04,$1E,$2C,$36 -> $C404,$C41E,$C42C,$C436); read as $C43A,X."
  },
  {
   "address": 50242,
   "type": "line",
   "text": "Base of the $C442,X read (X=6..9) that lands on patrol_last_index; these two bytes are the high bytes of the route pointers for objects 6 and 7 read as patrol_route_hi."
  },
  {
   "address": 50244,
   "type": "line",
   "text": "High bytes ($C4) of the waypoint list address for objects 6-9; read as $C43E,X."
  },
  {
   "address": 50248,
   "type": "line",
   "text": "Index of the last waypoint per object 6-9 ($16,$0A,$06,$06); reaching it wraps the index to 0. Read as $C442,X."
  },
  {
   "address": 50252,
   "type": "line",
   "text": "Shared RTS for patrol_think when an object is inactive or destroyed."
  },
  {
   "address": 50253,
   "type": "line",
   "text": "Main-loop subsystem: runs patrol_think for objects 9, 8, 7, 6."
  },
  {
   "address": 50270,
   "type": "line",
   "text": "One of objects 6-9 (X). Skipped when $1CB0,X negative or $14. On its turn walks the waypoint list patrol_routes from index $1CB0,X: within 8 x $10 of the target advances by 4 (or wraps at patrol_last_index), marker bytes set $1D80,X; otherwise moves toward it with object_move_step."
  },
  {
   "address": 50421,
   "type": "line",
   "text": "Sprite frames for walking objects chosen by object_pick_frame: index = base (0, 2, 4, 6 by $1D80,X; +$0A when moving left; 8/$12 for an object carrying $34) + bit 2 of X position."
  },
  {
   "address": 50441,
   "type": "line",
   "text": "Two sprite frames ($86,$88) for an object in mode 8 (climbing), alternating with bit 2 of its Y position."
  },
  {
   "address": 50443,
   "type": "line",
   "text": "Frames $93,$95 (object 3) or $97,$99 (others) for an object in mode 0 carrying object $34, alternating every 4 frames."
  },
  {
   "address": 50447,
   "type": "line",
   "text": "Moves object X toward the target set in $D9-$DD (by $A3FB/$AC67): $ACE0 turns the distance signs into $CB/$CC. Mode 8 (ladder): leaves it at a ladder end if horizontal wish; otherwise $9D15. Other modes dispatch by the self-modified BPL at $C593 on $1B20,X: 0 walk or fall, 2 walk ($9A39), 4 ($9BCE), 6 ($9C5F), 8 ($9D15), $0A/$0C fall ($9E0C). Stores the new position ($60-$63) and direction ($1DB0/$1DE0), then object_pick_frame."
  },
  {
   "address": 50579,
   "type": "line",
   "text": "Self-modified BPL: $C590 writes $1B20,X (0,2,..,$0C) as the offset, landing on one of the BPLs at $C595-$C5A1."
  },
  {
   "address": 50580,
   "type": "line",
   "text": "Operand of the self-modified BPL at $C593, written at $C590 with object mode $1B20,X; the code that follows through $C5F0 is the per-mode movement of object_move_step."
  },
  {
   "address": 50673,
   "type": "line",
   "text": "Chooses $1D30,X, the sprite frame of object X, from patrol_frames, climb_frames or carry_idle_frames by its mode, direction $1DB0,X, $1D80,X and position bits; draws it via $81DA."
  },
  {
   "address": 50807,
   "type": "line",
   "text": "Sound effects table: 24 effects (numbers 0-$17), one byte per effect in each of 13 tables. Start frequency low byte for voice 3."
  },
  {
   "address": 50831,
   "type": "line",
   "text": "Start frequency high byte per effect (voice 3)."
  },
  {
   "address": 50879,
   "type": "line",
   "text": "Frequency high byte at which a sweeping effect restarts from its start frequency (upper bound when sweeping up, lower when down)."
  },
  {
   "address": 50903,
   "type": "line",
   "text": "Frequency added every update, low byte, per effect."
  },
  {
   "address": 50927,
   "type": "line",
   "text": "Frequency added every update, high byte (signed: bit 7 sweeps down), per effect."
  },
  {
   "address": 50951,
   "type": "line",
   "text": "Pulse width low byte per effect ($D410)."
  },
  {
   "address": 50975,
   "type": "line",
   "text": "Pulse width high nybble per effect ($D411)."
  },
  {
   "address": 50999,
   "type": "line",
   "text": "Control register value per effect ($D412): $11 triangle, $41 pulse, $81 noise, gate on."
  },
  {
   "address": 51023,
   "type": "line",
   "text": "Attack/decay per effect ($D413)."
  },
  {
   "address": 51047,
   "type": "line",
   "text": "Sustain/release per effect ($D414)."
  },
  {
   "address": 51071,
   "type": "line",
   "text": "Length in updates, low byte, per effect (copied to sfx_time_lo). $FF for most."
  },
  {
   "address": 51095,
   "type": "line",
   "text": "Length in updates, high byte, per effect (copied to sfx_time_hi)."
  },
  {
   "address": 51119,
   "type": "line",
   "text": "Non-zero: the effect restarts when its time runs out or its envelope dies (sound_update); zero: it ends."
  },
  {
   "address": 51143,
   "type": "line",
   "text": "Start sound effect Y on SID voice 3 if Y < $F5, the effect playing ($FF = none): lower number wins. Called from many places."
  },
  {
   "address": 51147,
   "type": "line",
   "text": "Starts effect Y unconditionally: $F5=Y, gate off, volume $0F, pulse width, ADSR, start frequency (also kept in $F3/$F4), waveform with gate, time from sfx_length_*, $F6=3 updates before the envelope is watched."
  },
  {
   "address": 51222,
   "type": "line",
   "text": "Remaining time of the effect playing, low byte (counted down by sound_update)."
  },
  {
   "address": 51223,
   "type": "line",
   "text": "Remaining time of the effect playing, high byte."
  },
  {
   "address": 51224,
   "type": "line",
   "text": "Main-loop subsystem, every other frame (also called from $FD35). With an effect playing ($F5 >= 0): after the $F6 grace updates, if envelope 3 ($D41C) reads 0 the effect ends or restarts (sfx_repeat). Counts the 16-bit time down, ending the note at zero; otherwise adds the sweep to the frequency ($F3/$F4 -> $D40E/$D40F) and restarts the sweep at sfx_freq_limit."
  },
  {
   "address": 51342,
   "type": "line",
   "text": "If effect Y is the one playing, stops it: $F5=$FF and voice 3 control $0C (gate off)."
  },
  {
   "address": 51356,
   "type": "line",
   "text": "Called at start-up ($4A80), from $AF79 and life_end_reset. $E2=5; writes $FF to voice 1 and 2 control registers ($D404, $D40B: test bit set) and falls into sound_stop's tail: $F5=$FF, voice 3 control $0C."
  },
  {
   "address": 51370,
   "type": "line",
   "text": "Six bytes never executed: $00 then five $0D (filler). The BMI at $C8A8 is always taken."
  },
  {
   "address": 51376,
   "type": "line",
   "text": "Reached from doctor_update when $E8=4 (the TARDIS ending): JSR $2D50 (which calls sound_silence_all and jumps to $FD4F), then if $CC47 bit 7 set JSR $FE23, and continues at $C9EB."
  },
  {
   "address": 51388,
   "type": "line",
   "text": "Main-loop subsystem for the Doctor (object 0; also called from $FCFF, $FD19). Sets object 0's X from $20/$21 + $91. If the death countdown $CC43 runs: the Doctor falls/stands, and at $0F..0 every 8 frames goes to life_end_reset. Else acts on $E8: negative (D keys) checks the tile ($78=$23); 2 ends; 4 doctor_state4_exit; other causes start the countdown ($CC43=$A0) keeping his frames in $CC45/$CC46. Otherwise handles platform riding, point checks for $50, moves him by mode ($1B20) using $CB/$CC, fall tracking, tile hazards, and draws objects 0 and 1."
  },
  {
   "address": 51505,
   "type": "line",
   "text": "After a life ends: clears $CC47, $CC43, $CC42; silences sound; $9102 prints the cause and decrements lives $1E; $FF3A; $8A=1. If $1E = 5 goes to $FC8C; else $53=0 and screen on ($D011 bit 4)."
  },
  {
   "address": 51691,
   "type": "line",
   "text": "If $CD (fire) negative: $A0D4 (jump). Else dispatches on the Doctor's mode $1B20 through the self-modified BPL at $C9F5: 0 walk/climb by input, 2 $9A39, 4 $9BCE, 6 $9C5F, 8 $9D15, $0A jump, $0C fall."
  },
  {
   "address": 51701,
   "type": "line",
   "text": "Self-modified BPL: $C9F2 stores $1B20 (the Doctor's mode) as its offset."
  },
  {
   "address": 51702,
   "type": "line",
   "text": "Operand of the self-modified BPL at $C9F5, written at $C9F2 with the Doctor mode $1B20; the following code runs the Doctor movement routine for that mode."
  },
  {
   "address": 51757,
   "type": "line",
   "text": "Falling: $CC=$81 (down), $99ED, $9E0C, then fall_track."
  },
  {
   "address": 51800,
   "type": "line",
   "text": "Tile under the Doctor ($9A09 -> $78): $74 or $51 -> $E8=$0E (FALLING ON A STALAGMITE); $BD -> sound $0F, $CC44=1, object $23's state $0F. With Y hi $1C60 >= 2 and tile not $39/$04, or tile $3F: oxygen countdown $F1 from 50; held object ($1D80) $3A resets it; at 0 $E8=$10 (SUFFOCATING). Then $A252, $A82A, $88AB, $8A3E collision checks, stores position, places object 1 (8 pixels above in Y), animates."
  },
  {
   "address": 52075,
   "type": "line",
   "text": "Picks the Doctor's frames (doctor_pick_frames). During the death countdown every 4 frames: sound 0, $FC62 += 6, fills $7800-$783F with $FF and copies the two saved frames ($4000 + $CC45/$CC46 x 64) to sprite blocks at $7400 and $7840, then $FEA9; shows frames $D0/$E1. Draws objects 0 and 1 and the held object ($1D80) via $A8B1."
  },
  {
   "address": 52246,
   "type": "line",
   "text": "Doctor sprite frames (upper sprite, object 0), direction bit 7 of $1DB0 set, 8 steps from X position bits."
  },
  {
   "address": 52254,
   "type": "line",
   "text": "Doctor upper sprite frames for the other direction (8 steps)."
  },
  {
   "address": 52262,
   "type": "line",
   "text": "Doctor upper sprite frames on a ladder (mode $0A path), 4 steps."
  },
  {
   "address": 52266,
   "type": "line",
   "text": "Doctor lower sprite frames (object 1, $1D31), first direction, 8 steps."
  },
  {
   "address": 52274,
   "type": "line",
   "text": "Doctor lower sprite frames, other direction, 8 steps."
  },
  {
   "address": 52282,
   "type": "line",
   "text": "Doctor lower sprite frames on a ladder, 4 steps."
  },
  {
   "address": 52286,
   "type": "line",
   "text": "Lower sprite frame ($74) when the Doctor holds an object ($1D80 non-zero), first direction."
  },
  {
   "address": 52287,
   "type": "line",
   "text": "Lower sprite frame ($75) when holding an object, other direction."
  },
  {
   "address": 52288,
   "type": "line",
   "text": "Doctor Y high byte when the current fall began (fall_track)."
  },
  {
   "address": 52289,
   "type": "line",
   "text": "Doctor Y low byte when the current fall began."
  },
  {
   "address": 52290,
   "type": "line",
   "text": "Non-zero while a fall is being measured; cleared at life end and on landing."
  },
  {
   "address": 52291,
   "type": "line",
   "text": "Death sequence timer: $A0 when a death cause is set in $E8, counted down each frame by doctor_update."
  },
  {
   "address": 52292,
   "type": "line",
   "text": "Set to 1 when the Doctor stands on tile $BD; doctor_draw then clears it and, on some frames, draws object $29."
  },
  {
   "address": 52293,
   "type": "line",
   "text": "The Doctor's upper sprite frame saved when the death sequence starts."
  },
  {
   "address": 52294,
   "type": "line",
   "text": "The Doctor's lower sprite frame saved when the death sequence starts."
  },
  {
   "address": 52295,
   "type": "line",
   "text": "Flag, bit 7 tested at $C8B3 (JSR $FE23 when set); cleared by life_end_reset; also used at $FD5D-$FDD7. Meaning unknown."
  },
  {
   "address": 52296,
   "type": "line",
   "text": "Low bytes of the two sprite blocks the death sequence copies into ($7400, $7840)."
  },
  {
   "address": 52298,
   "type": "line",
   "text": "High bytes of those destinations ($74, $78)."
  },
  {
   "address": 52300,
   "type": "line",
   "text": "Sets $1D30/$1D31 (Doctor's two sprites) by mode ($1B20) through the self-modified BPL at $CC54: walking frames by X position bits and facing ($1DB0, remembered in $8A), ladder frames by position, and a holding frame for the lower half when $1D80 is non-zero."
  },
  {
   "address": 52309,
   "type": "line",
   "text": "Operand of the self-modified BPL at $CC54, written at $CC51 with the Doctor mode $1B20: 0 and $0C walk frames ($CC64), 2/4/6 by X position ($CC75), 8 ladder frames ($CCBE), $0A by facing ($CC6D). Code from here through $CCE1 is doctor_pick_frames."
  },
  {
   "address": 52450,
   "type": "line",
   "text": "When the Doctor, moving up, is within $14 x 8 of object $39 ($E7=$FF, mode $0A): moves him with it; ends ($E7=0, mode 0) when he leaves it or lands."
  },
  {
   "address": 52538,
   "type": "line",
   "text": "Starts measuring when vertical motion ($CC) begins with $F7 zero (stores Y in fall_start_*); when motion stops or $F7 is set, checks with fall_check."
  },
  {
   "address": 52578,
   "type": "line",
   "text": "Distance fallen = fall_start - current Y (in fall_dist_*). $60 or more (or any high byte): sound 5 and $E8=$0C (A FALL). Clears fall_tracking."
  },
  {
   "address": 52623,
   "type": "line",
   "text": "Scratch: fall distance low byte (written, not read back)."
  },
  {
   "address": 52624,
   "type": "line",
   "text": "Scratch: fall distance high byte."
  },
  {
   "address": 52626,
   "type": "line",
   "text": "State 3: sets $1850,X=2 and moves on."
  },
  {
   "address": 52634,
   "type": "line",
   "text": "Main-loop subsystem: objects $28 down to $10 (the controllers/robots, by the death message they cause). Each, unless $1CB0 negative or $14: state 3 -> controller_state3; on its turn, if object $35 is free ($1B55=0) and within $0A on X, stops; else dispatch by state (controller_state_dispatch)."
  },
  {
   "address": 52727,
   "type": "line",
   "text": "Self-modified BPL: $CDF4 stores $1CB0,X as its offset: 0 patrol ($CE83), 3 $CD92, 6 RTS ($CE77, ends the whole loop), 9 controller_wait, $0C stop, $0F controller_touch ($CE08)."
  },
  {
   "address": 52728,
   "type": "line",
   "text": "Operand of the self-modified BPL at $CDF7, written at $CDF4 with a controller state $1CB0,X; followed by the JMP table $CDF9-$CE07."
  },
  {
   "address": 52744,
   "type": "line",
   "text": "State $0F, reached only through the dispatch. Near the Doctor (within $14 x $19): a type-1 controller ($778A,X) with $50 not negative and the Doctor's Y AND $0F = 8 is disabled (state 9, $50=$79); otherwise the Doctor is shocked: $1850=$1851=1, sound $10, $E8=$0A (A SHOCK FROM A CONTROLLER). Further away it keeps moving or goes back to state 0."
  },
  {
   "address": 52855,
   "type": "line",
   "text": "State 6: RTS, which leaves controllers_update at once (objects below this one are not run that frame)."
  },
  {
   "address": 52856,
   "type": "line",
   "text": "Clears the object's direction ($1DB0/$1DE0,X)."
  },
  {
   "address": 52867,
   "type": "line",
   "text": "State 0: if $E8 is 0 and the Doctor is within range ($7771,X on X when facing him, else $40, and $20/$10 on Y), goes to state $0F. Otherwise follows its waypoint list ($7726/$773F,X, last index $7758,X) like patrol_think."
  },
  {
   "address": 53028,
   "type": "line",
   "text": "State 9: while $50 is not negative and the Doctor is within $28 x $10, stays. $50 negative: $AE02 with Y=$0B, A=$F1 and back to state 0. Else moves (controller_move)."
  },
  {
   "address": 53079,
   "type": "line",
   "text": "Moves a controller by its mode through the self-modified BPL at $CF65 (0, 2 $9A39, 4 $9BCE, 6 $9C5F), stores position and direction."
  },
  {
   "address": 53094,
   "type": "line",
   "text": "Operand of the self-modified BPL at $CF65, written at $CF62 with a controller mode $1B20,X; the code after it moves the controller and stores its position and direction."
  },
  {
   "address": 53166,
   "type": "line",
   "text": "Sprite frame for a controller from $77B3/$77B7/$77BB/$77C4 by X position bits, direction and the animation counter $77D6,X."
  },
  {
   "address": 53232,
   "type": "line",
   "text": "Draws the object ($81DA) and loops to the next one."
  },
  {
   "address": 53238,
   "type": "line",
   "text": "Ten $0D filler bytes after controller_next, the end of the code; nothing reads them."
  },
  {
   "address": 53632,
   "type": "line",
   "text": "Character ROM digits '0'-'9' (chars $30-$39), read at $4914 with the ROM banked in; I/O at $D180 during play."
  },
  {
   "address": 53736,
   "type": "line",
   "text": "Character ROM '=' glyph (char $3D), read at $4921 with the ROM banked in."
  },
  {
   "address": 55296,
   "type": "line",
   "text": "Colour RAM: game_entry writes the 4 status rows $D800-$D89F from $4F00."
  },
  {
   "address": 55336,
   "type": "line",
   "text": "Colour RAM row 1 ($D828), referenced by code outside this range."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "The cavern map, part 1 of 7 ($E000-$FBFF): 56 rows of 128 block numbers, one byte per 4x4-character block (block shapes at $3000 via $1400/$1500). Row r starts at $FB80 - r*$80 (pointers $0A80/$0AC0), so this kilobyte holds map rows 48-55, counted from the row at $FB80. World Y grows upward."
  },
  {
   "address": 58368,
   "type": "line",
   "text": "The cavern map, part 2 of 7 ($E000-$FBFF): 56 rows of 128 block numbers, one byte per 4x4-character block (block shapes at $3000 via $1400/$1500). Row r starts at $FB80 - r*$80 (pointers $0A80/$0AC0), so this kilobyte holds map rows 40-47, counted from the row at $FB80. World Y grows upward."
  },
  {
   "address": 59392,
   "type": "line",
   "text": "The cavern map, part 3 of 7 ($E000-$FBFF): 56 rows of 128 block numbers, one byte per 4x4-character block (block shapes at $3000 via $1400/$1500). Row r starts at $FB80 - r*$80 (pointers $0A80/$0AC0), so this kilobyte holds map rows 32-39, counted from the row at $FB80. World Y grows upward."
  },
  {
   "address": 60416,
   "type": "line",
   "text": "The cavern map, part 4 of 7 ($E000-$FBFF): 56 rows of 128 block numbers, one byte per 4x4-character block (block shapes at $3000 via $1400/$1500). Row r starts at $FB80 - r*$80 (pointers $0A80/$0AC0), so this kilobyte holds map rows 24-31, counted from the row at $FB80. World Y grows upward."
  },
  {
   "address": 61440,
   "type": "line",
   "text": "The cavern map, part 5 of 7 ($E000-$FBFF): 56 rows of 128 block numbers, one byte per 4x4-character block (block shapes at $3000 via $1400/$1500). Row r starts at $FB80 - r*$80 (pointers $0A80/$0AC0), so this kilobyte holds map rows 16-23, counted from the row at $FB80. World Y grows upward."
  },
  {
   "address": 62464,
   "type": "line",
   "text": "The cavern map, part 6 of 7 ($E000-$FBFF): 56 rows of 128 block numbers, one byte per 4x4-character block (block shapes at $3000 via $1400/$1500). Row r starts at $FB80 - r*$80 (pointers $0A80/$0AC0), so this kilobyte holds map rows 8-15, counted from the row at $FB80. World Y grows upward."
  },
  {
   "address": 63488,
   "type": "line",
   "text": "The cavern map, part 7 of 7 ($E000-$FBFF): 56 rows of 128 block numbers, one byte per 4x4-character block (block shapes at $3000 via $1400/$1500). Row r starts at $FB80 - r*$80 (pointers $0A80/$0AC0), so this kilobyte holds map rows 0-7, counted from the row at $FB80. World Y grows upward."
  },
  {
   "address": 64512,
   "type": "line",
   "text": "96 bytes between the end of the map ($FBFF) and the arrival variables at $FC60. No instruction names this range and no map row pointer reaches it (the highest row starts at $FB80); what it held is unknown."
  },
  {
   "address": 64608,
   "type": "line",
   "text": "Arrival-sequence scratch: step counter / dissolve table index into $09A0 (0-$43)."
  },
  {
   "address": 64609,
   "type": "line",
   "text": "Dissolve pixel-pair index 0-4 into the masks $FC66/$FC6B; reused as the walk-out countdown ($16) in doctor_leave_script."
  },
  {
   "address": 64610,
   "type": "line",
   "text": "Number of pixel pairs dissolve_sprite clears per call; also a frame countdown ($98) in the walk-out at $FCD5 and adjusted from $C8E0/$CB84."
  },
  {
   "address": 64611,
   "type": "line",
   "text": "0 or 1 from $1C60 >= 2 (which end of the map the figure is at); selects targets in $FC84-$FC8B and message line 8 or $10."
  },
  {
   "address": 64612,
   "type": "line",
   "text": "0 while the arrival sequence runs ($FC8E); 1 when the Doctor has walked out ($FD0A) or a saved game was restored ($746E); 2 set at $FE53; cleared at $FDC0. main_loop calls $AF58 only while it is non-zero."
  },
  {
   "address": 64613,
   "type": "line",
   "text": "Argument of dissolve_sprite: 0 clears pixels in the source $7800 only; non-zero also in $7840 and the displayed $7400."
  },
  {
   "address": 64614,
   "type": "line",
   "text": "AND masks keeping all but one 2-bit multicolour pixel ($F3,$3F,$CF,$FC,$3F); $FC6B holds the matching test masks ($0C,$C0,$30,$03,$C0)."
  },
  {
   "address": 64619,
   "type": "line",
   "text": "Test masks for dissolve_sprite: $0C,$C0,$30,$03,$C0, one 2-bit pixel each, paired with the keep masks at $FC66."
  },
  {
   "address": 64624,
   "type": "line",
   "text": "X/Y for sprites 0-5 in the arrival sequence: ($A8,$76) ($B8,$76) ($A8,$86) ($B8,$86) ($A8,$96) ($B8,$96): a 2 x 3 block."
  },
  {
   "address": 64636,
   "type": "line",
   "text": "Entity slots placed by place_arrival_entities, index 0-7: $4B,$4B,$4D,$4D,$4E,$4E,$4F,$4F (two variants each)."
  },
  {
   "address": 64644,
   "type": "line",
   "text": "Walk-out targets for doctor_leave_script, variant $FC63: $65 from $FC84 ($03/$0E), $64 from $FC86 ($73/$33), $67 from $FC88 ($01/$03), $66 from $FC8A ($20/$80)."
  },
  {
   "address": 64646,
   "type": "line",
   "text": "Walk-out target byte -> $64 (variants $73, $33)."
  },
  {
   "address": 64648,
   "type": "line",
   "text": "Walk-out target byte -> $67 (variants $01, $03)."
  },
  {
   "address": 64650,
   "type": "line",
   "text": "Walk-out target byte -> $66 (variants $20, $80)."
  },
  {
   "address": 64652,
   "type": "line",
   "text": "Runs before play (from main_start $7473) and again from $C94F when $1E = 5. Clears $FC64, sets sprite colours ($FF2F), copies the sprite image, turns the screen on, animates 16+ frames of the six-sprite figure with a growing dissolve (arrival_frame $FD1F), plays sound $12 ($C88E), waits, restores colours, calls $8A3E, prints message ($AE02, Y=8, A=$F9), places four entities ($FEFF), then walks entity 2 left for $98 frames with $C8BC/$8C32, printing message $B2 at count $64, and sets $FC64=1 when done."
  },
  {
   "address": 64770,
   "type": "line",
   "text": "JSR $8C32 inside arrival_sequence walk loop. The JSR $FD02 at $9591 runs with the KERNAL ROM banked in (save_game), so it calls ROM, not this RAM."
  },
  {
   "address": 64789,
   "type": "line",
   "text": "Inside doctor_leave_script tail region; JSR $FD15 at $959D is a KERNAL ROM call during save, not a call to this RAM."
  },
  {
   "address": 64799,
   "type": "line",
   "text": "One frame of the arrival animation (runs until $53 is a multiple of 4): $81=6, updates entity 2's sprite if $FC64 <> 0 ($81DA), sound $12 ($C7C7), frame wait $80DA, $C818, $A4EE, copy_sprite_source, set_tardis_sprites; then re-copies the source image ($FE60) and dissolves $FC62 pixel pairs of it."
  },
  {
   "address": 64847,
   "type": "line",
   "text": "Scripted state machine for entity 2 in state $CC47 (0, 2, 4, via a self-modified BPL at $FD63): 0 walk towards the target in $FC84-$FC8B, then state 2 and a message; 2 check distance ($AC67) and clear $FC64 or go to state 4; 4 walk right $FC61 frames, then state $FF and message $B2. The only reference found is JMP $FD4F at $2D53, inside a region reset as false code: its caller is open."
  },
  {
   "address": 64848,
   "type": "line",
   "text": "Mid-instruction address (operand of LDY #$01 at $FD4F); the JSR $FD50 at $959A is a KERNAL ROM call during save, not this RAM."
  },
  {
   "address": 64868,
   "type": "line",
   "text": "Self-modified BPL offset in doctor_leave_script: STA from $CC47 (0, 2, 4) picks the state handler."
  },
  {
   "address": 64931,
   "type": "line",
   "text": "Mid-instruction address in doctor_leave_script; JSR $FDA3 at $9597 is a KERNAL ROM call during save."
  },
  {
   "address": 65059,
   "type": "line",
   "text": "Called from $C92E: sprite colours, source image, then arrival_frame with the dissolve count falling from $7F by 3 (the reverse of arrival_sequence), sound $12, state $CC47=$FF; if $FC64 was 0 sets $1D80=2 and $FC64=2."
  },
  {
   "address": 65111,
   "type": "line",
   "text": "Sets $D011 bit 4 (display enable)."
  },
  {
   "address": 65120,
   "type": "line",
   "text": "Copies 64 bytes from $09E4 or $0A24 (the second when $1C60 >= 2) to $7800-$783F, the sprite source image for the dissolve."
  },
  {
   "address": 65144,
   "type": "line",
   "text": "Sprites 0-5: no expansion/priority/X-MSB, all multicolour, positions from $FC70, pointers $D0 ($7400) in both screens, colour 0."
  },
  {
   "address": 65193,
   "type": "line",
   "text": "Clears $FC62 random-order 2-bit pixels (offsets from table $09A0, masks $FC66/$FC6B) in the sprite source $7800 (and $7840/$7400 when A <> 0), skipping pixels already clear. A = flag stored in $FC65."
  },
  {
   "address": 65279,
   "type": "line",
   "text": "For Y = A+6 down by 2 (A = 0 or 1): entity slot from $FC7C,Y gets $1BC0/$1B70/$1C60/$1C10 from $0980/$0988/$0990/$0998,Y, its sprite is drawn ($81DA), then $1BC0 is set to $FF. Also called from $3C48."
  },
  {
   "address": 65280,
   "type": "line",
   "text": "Inside place_arrival_entities (operand of ADC #$06); $FF00 as an address is only the placeholder operand of the self-modified LDAs at $7602/$7634."
  },
  {
   "address": 65327,
   "type": "line",
   "text": "Sprite multicolours $D025=6, $D026=9 for the arrival figure."
  },
  {
   "address": 65338,
   "type": "line",
   "text": "Restores sprite multicolours $D025=2, $D026=8 and sets $FC60-$FC62 to 1."
  },
  {
   "address": 65360,
   "type": "line",
   "text": "Copies $7800-$783F to the displayed sprite $7400-$743F, with a short delay per byte."
  },
  {
   "address": 65371,
   "type": "line",
   "text": "Inside copy_sprite_source; the JSR $FF5B at $95A0 is a KERNAL ROM call during save, not this RAM."
  },
  {
   "address": 65377,
   "type": "line",
   "text": "Waits 15 frames through $80DA, using $FC60 as the counter."
  },
  {
   "address": 65391,
   "type": "line",
   "text": "$FF6F-$FFF9: bytes left by the loader/unpacker (fragments of loader code: LDA #$37/STA $01, JMP ($FFFC)-style code), not called by the game: the JSR $FFBA/$FFD8 at $95AB/$95C5 run with the KERNAL ROM banked in ($01 |= 2 at $958A), so they reach ROM SETLFS/SAVE, not these RAM bytes."
  },
  {
   "address": 65392,
   "type": "line",
   "text": "Loader leftover bytes (see $FF6F); not used by the game."
  },
  {
   "address": 65410,
   "type": "line",
   "text": "Bytes left in RAM under the KERNAL by the loader or the packing, not the game: a copy of the KERNAL jump table shape (JMP $FDA3, JMP $FD50, ...). The game never runs them: its only KERNAL calls, in the save code at $95AB-$95C5, run with the ROM banked in. The symbol at $FF84 was minted by the tracer decoding these bytes."
  },
  {
   "address": 65412,
   "type": "line",
   "text": "Continuation of the loader leftovers from $FF82 up to $FFB9: the tracer mints a symbol here because the leftover bytes at $FF82 decode as a jump to it. Nothing in the game reaches it."
  },
  {
   "address": 65466,
   "type": "line",
   "text": "RAM under KERNAL SETLFS entry: the JSR $FFBA at $95AB reaches ROM (banked in at $958A); these RAM bytes are loader leftovers."
  },
  {
   "address": 65469,
   "type": "line",
   "text": "RAM under KERNAL SETNAM entry: JSR $FFBD at $95B4 reaches ROM; RAM bytes unused."
  },
  {
   "address": 65496,
   "type": "line",
   "text": "RAM under KERNAL SAVE entry: JSR $FFD8 at $95C5 reaches ROM; RAM bytes unused."
  },
  {
   "address": 65512,
   "type": "line",
   "text": "Bytes left under the KERNAL by the loader or the packing (they decode as CLD / JSR $033C / JMP $CB00 ...); the game never executes them. The vectors at $FFFA-$FFFF after them are the game's own."
  },
  {
   "address": 65530,
   "type": "line",
   "text": "NMI ($FFFA), RESET ($FFFC), IRQ ($FFFE) vectors in RAM; game_entry writes NMI=$800F and IRQ=$8010. The snapshot holds the loader's values; RESET is not set by the game."
  }
 ]
}