{
 "schema": 1,
 "platform": "c64",
 "game": "impossible-mission",
 "build": "",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    55296,
    56319,
    "I/O and colour RAM"
   ],
   [
    16384,
    17407,
    "screen RAM"
   ],
   [
    1024,
    2047,
    "runtime: the security terminal saves colour RAM here ($9D47); in play the page still holds what the loader left ($B000-$B1FF copied to $0400 by bpage) and is not read as data"
   ],
   [
    2048,
    2175,
    "runtime: the speech buffer the frame decoders fill ($0A8B and others); in the snapshot it holds the last phrase's frame"
   ],
   [
    17384,
    17407,
    "runtime: sprite pointers and the unused bytes before them, written by the game"
   ],
   [
    19336,
    19623,
    "the letters A-Z and digits 0-9 of character set $4800, copied from the C64 character ROM by the start-up ($396B, $3980); zero in the image as loaded"
   ],
   [
    19840,
    20031,
    "runtime: work sprite shapes built by the game (frames, the agent's dissolving copy, the map marker)"
   ],
   [
    20213,
    20404,
    "runtime: the memory list of pieces ($4EF5), their colours ($4F25) and the room's object records ($4F55, six bytes each, up to $4FB4), written per game and per room"
   ],
   [
    20405,
    20413,
    "runtime: this game's password, copied from the word list by $B0CD"
   ],
   [
    23344,
    23631,
    "the letters and digits of character set $5800, copied from the character ROM by the start-up; zero in the image as loaded"
   ],
   [
    20480,
    20623,
    "runtime: the 144-byte picture built for a search or a piece ($9C47, $9857)"
   ],
   [
    23632,
    24495,
    "runtime: the pocket computer display's glyphs, drawn by the game (pieces or the map)"
   ],
   [
    49088,
    49231,
    "runtime: the 36 puzzle piece records built for each game by $B180"
   ],
   [
    49152,
    53247,
    "runtime: work areas built while the game runs: the room buffer $C100-$C4FF, the undo and search copies at $C100, the bit-reversal table $C500, the saved display glyphs $C690-$C9EF, the puzzle images $C9F0, the room-number table $CF00 and the hall of fame; at the hand-over this range held blocks the start-up moved to $D000, $DC00 and $F800"
   ],
   [
    64512,
    65515,
    "runtime: this game's map, generated by $B2BD (glyph data, cell table, room grid, room numbers)"
   ]
  ],
  "extra": [
   [
    18432,
    20479,
    "character set"
   ],
   [
    57344,
    63359,
    "the speech samples (file words): a phrase table at $E000 and the compressed frames, read through the driver's base address $0CFE/$0CFF"
   ],
   [
    63488,
    64511,
    "the end picture's colours, moved here from $C000 by the start-up and copied to colour RAM by $AB1E"
   ],
   [
    17408,
    18431,
    "sprite shapes $10-$1F (hand, lift car, frames, zap, terminal decorations, ball)"
   ],
   [
    18432,
    19335,
    "character set $4800, glyphs $00-$70: the shaft view's rock, lift and corridor graphics"
   ],
   [
    19624,
    19839,
    "character set $4800, glyphs $95-$97 and sprite shapes $33-$35"
   ],
   [
    20032,
    20212,
    "character set $4800, glyphs $C8-$DD (the end screen's box) and five bytes of slot positions"
   ],
   [
    20414,
    20479,
    "character set $4800, glyphs $F7-$FF"
   ],
   [
    20624,
    22527,
    "character set $5000, the rooms' floors, walls and furniture glyphs"
   ],
   [
    22528,
    23343,
    "character set $5800, glyphs $00-$65: the EPYX logo, the pocket computer's parts and icons"
   ],
   [
    24496,
    24575,
    "character set $5800, glyphs $F6-$FF: the colon, the map frame and the message icons"
   ],
   [
    24576,
    28671,
    "sprite shapes $80-$BF: the agent's animation frames"
   ],
   [
    28672,
    29119,
    "sprite shapes $C0-$C6: the robot turning from one side to the other"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 251,
   "type": "Undefined"
  },
  {
   "start": 252,
   "end": 254,
   "type": "Code"
  },
  {
   "start": 255,
   "end": 2047,
   "type": "Undefined"
  },
  {
   "start": 2048,
   "end": 2175,
   "type": "Byte"
  },
  {
   "start": 2176,
   "end": 2630,
   "type": "Code"
  },
  {
   "start": 2631,
   "end": 2634,
   "type": "Byte"
  },
  {
   "start": 2635,
   "end": 2776,
   "type": "Code"
  },
  {
   "start": 2777,
   "end": 2788,
   "type": "Byte"
  },
  {
   "start": 2789,
   "end": 2914,
   "type": "Code"
  },
  {
   "start": 2915,
   "end": 2930,
   "type": "Byte"
  },
  {
   "start": 2931,
   "end": 3306,
   "type": "Code"
  },
  {
   "start": 3307,
   "end": 3695,
   "type": "Byte"
  },
  {
   "start": 3696,
   "end": 3759,
   "type": "Word"
  },
  {
   "start": 3760,
   "end": 8153,
   "type": "Byte"
  },
  {
   "start": 8154,
   "end": 8333,
   "type": "Word"
  },
  {
   "start": 8334,
   "end": 8405,
   "type": "Byte"
  },
  {
   "start": 8406,
   "end": 8465,
   "type": "Word"
  },
  {
   "start": 8466,
   "end": 12530,
   "type": "Byte"
  },
  {
   "start": 12531,
   "end": 12786,
   "type": "Word"
  },
  {
   "start": 12787,
   "end": 14420,
   "type": "Byte"
  },
  {
   "start": 14421,
   "end": 16352,
   "type": "Code"
  },
  {
   "start": 16353,
   "end": 17407,
   "type": "Undefined"
  },
  {
   "start": 17408,
   "end": 19335,
   "type": "Byte"
  },
  {
   "start": 19336,
   "end": 19623,
   "type": "Undefined"
  },
  {
   "start": 19624,
   "end": 19839,
   "type": "Byte"
  },
  {
   "start": 19840,
   "end": 20031,
   "type": "Undefined"
  },
  {
   "start": 20032,
   "end": 20212,
   "type": "Byte"
  },
  {
   "start": 20213,
   "end": 20413,
   "type": "Undefined"
  },
  {
   "start": 20414,
   "end": 20479,
   "type": "Byte"
  },
  {
   "start": 20480,
   "end": 20623,
   "type": "Undefined"
  },
  {
   "start": 20624,
   "end": 23343,
   "type": "Byte"
  },
  {
   "start": 23344,
   "end": 24495,
   "type": "Undefined"
  },
  {
   "start": 24496,
   "end": 29119,
   "type": "Byte"
  },
  {
   "start": 29120,
   "end": 29195,
   "type": "Code"
  },
  {
   "start": 29196,
   "end": 29207,
   "type": "Byte"
  },
  {
   "start": 29208,
   "end": 29631,
   "type": "Code"
  },
  {
   "start": 29632,
   "end": 29641,
   "type": "Byte"
  },
  {
   "start": 29642,
   "end": 29726,
   "type": "Code"
  },
  {
   "start": 29727,
   "end": 29734,
   "type": "Byte"
  },
  {
   "start": 29735,
   "end": 30883,
   "type": "Code"
  },
  {
   "start": 30884,
   "end": 30895,
   "type": "Word"
  },
  {
   "start": 30896,
   "end": 31316,
   "type": "Code"
  },
  {
   "start": 31317,
   "end": 31328,
   "type": "Byte"
  },
  {
   "start": 31329,
   "end": 31803,
   "type": "Code"
  },
  {
   "start": 31804,
   "end": 32075,
   "type": "Byte"
  },
  {
   "start": 32076,
   "end": 32309,
   "type": "Code"
  },
  {
   "start": 32310,
   "end": 32323,
   "type": "Byte"
  },
  {
   "start": 32324,
   "end": 32365,
   "type": "Code"
  },
  {
   "start": 32366,
   "end": 32413,
   "type": "Byte"
  },
  {
   "start": 32414,
   "end": 32961,
   "type": "Code"
  },
  {
   "start": 32962,
   "end": 32962,
   "type": "Undefined"
  },
  {
   "start": 32963,
   "end": 33287,
   "type": "Code"
  },
  {
   "start": 33288,
   "end": 33463,
   "type": "Byte"
  },
  {
   "start": 33464,
   "end": 35567,
   "type": "Code"
  },
  {
   "start": 35568,
   "end": 35568,
   "type": "Undefined"
  },
  {
   "start": 35569,
   "end": 35617,
   "type": "Code"
  },
  {
   "start": 35618,
   "end": 35618,
   "type": "Undefined"
  },
  {
   "start": 35619,
   "end": 36102,
   "type": "Code"
  },
  {
   "start": 36103,
   "end": 36190,
   "type": "Byte"
  },
  {
   "start": 36191,
   "end": 36246,
   "type": "Word"
  },
  {
   "start": 36247,
   "end": 36386,
   "type": "Byte"
  },
  {
   "start": 36387,
   "end": 38673,
   "type": "Code"
  },
  {
   "start": 38674,
   "end": 38679,
   "type": "Byte"
  },
  {
   "start": 38680,
   "end": 38796,
   "type": "Code"
  },
  {
   "start": 38797,
   "end": 38800,
   "type": "Byte"
  },
  {
   "start": 38801,
   "end": 38898,
   "type": "Code"
  },
  {
   "start": 38899,
   "end": 38906,
   "type": "Byte"
  },
  {
   "start": 38907,
   "end": 39417,
   "type": "Code"
  },
  {
   "start": 39418,
   "end": 39732,
   "type": "Byte"
  },
  {
   "start": 39733,
   "end": 40678,
   "type": "Code"
  },
  {
   "start": 40679,
   "end": 40717,
   "type": "Byte"
  },
  {
   "start": 40718,
   "end": 40940,
   "type": "Code"
  },
  {
   "start": 40941,
   "end": 40942,
   "type": "Byte"
  },
  {
   "start": 40943,
   "end": 40953,
   "type": "Code"
  },
  {
   "start": 40954,
   "end": 40971,
   "type": "Byte"
  },
  {
   "start": 40972,
   "end": 40989,
   "type": "Code"
  },
  {
   "start": 40990,
   "end": 41181,
   "type": "Byte"
  },
  {
   "start": 41182,
   "end": 41506,
   "type": "Code"
  },
  {
   "start": 41507,
   "end": 41556,
   "type": "Byte"
  },
  {
   "start": 41557,
   "end": 42618,
   "type": "Code"
  },
  {
   "start": 42619,
   "end": 42634,
   "type": "Byte"
  },
  {
   "start": 42635,
   "end": 43197,
   "type": "Code"
  },
  {
   "start": 43198,
   "end": 43229,
   "type": "Byte"
  },
  {
   "start": 43230,
   "end": 43511,
   "type": "Code"
  },
  {
   "start": 43512,
   "end": 43535,
   "type": "Byte"
  },
  {
   "start": 43536,
   "end": 43878,
   "type": "Code"
  },
  {
   "start": 43879,
   "end": 43892,
   "type": "Byte"
  },
  {
   "start": 43893,
   "end": 43922,
   "type": "Code"
  },
  {
   "start": 43923,
   "end": 43961,
   "type": "Byte"
  },
  {
   "start": 43962,
   "end": 45108,
   "type": "Code"
  },
  {
   "start": 45109,
   "end": 45124,
   "type": "Byte"
  },
  {
   "start": 45125,
   "end": 45608,
   "type": "Code"
  },
  {
   "start": 45609,
   "end": 45624,
   "type": "Byte"
  },
  {
   "start": 45625,
   "end": 46444,
   "type": "Code"
  },
  {
   "start": 46445,
   "end": 46660,
   "type": "Byte"
  },
  {
   "start": 46661,
   "end": 47270,
   "type": "Code"
  },
  {
   "start": 47271,
   "end": 47481,
   "type": "Byte"
  },
  {
   "start": 47482,
   "end": 47495,
   "type": "Word"
  },
  {
   "start": 47496,
   "end": 47509,
   "type": "Byte"
  },
  {
   "start": 47510,
   "end": 47532,
   "type": "Code"
  },
  {
   "start": 47533,
   "end": 47566,
   "type": "Byte"
  },
  {
   "start": 47567,
   "end": 47580,
   "type": "Code"
  },
  {
   "start": 47581,
   "end": 47584,
   "type": "Byte"
  },
  {
   "start": 47585,
   "end": 47609,
   "type": "Code"
  },
  {
   "start": 47610,
   "end": 47623,
   "type": "Byte"
  },
  {
   "start": 47624,
   "end": 47859,
   "type": "Code"
  },
  {
   "start": 47860,
   "end": 47863,
   "type": "Byte"
  },
  {
   "start": 47864,
   "end": 48011,
   "type": "Code"
  },
  {
   "start": 48012,
   "end": 48037,
   "type": "Byte"
  },
  {
   "start": 48038,
   "end": 48521,
   "type": "Code"
  },
  {
   "start": 48522,
   "end": 48668,
   "type": "Byte"
  },
  {
   "start": 48669,
   "end": 48759,
   "type": "Code"
  },
  {
   "start": 48760,
   "end": 48823,
   "type": "Byte"
  },
  {
   "start": 48824,
   "end": 48855,
   "type": "Code"
  },
  {
   "start": 48856,
   "end": 48856,
   "type": "Undefined"
  },
  {
   "start": 48857,
   "end": 48937,
   "type": "Code"
  },
  {
   "start": 48938,
   "end": 53247,
   "type": "Undefined"
  },
  {
   "start": 53248,
   "end": 55295,
   "type": "Byte"
  },
  {
   "start": 55296,
   "end": 56319,
   "type": "Undefined"
  },
  {
   "start": 56320,
   "end": 63359,
   "type": "Byte"
  },
  {
   "start": 63360,
   "end": 63487,
   "type": "Undefined"
  },
  {
   "start": 63488,
   "end": 64511,
   "type": "Byte"
  },
  {
   "start": 64512,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "cpu_ddr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16,
   "name": "ptr_a",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 17,
   "name": "ptr_a_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18,
   "name": "ptr_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19,
   "name": "ptr_b_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20,
   "name": "ptr_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21,
   "name": "ptr_colour_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22,
   "name": "ptr_colour_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23,
   "name": "ptr_colour_b_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 24,
   "name": "ptr_data",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 25,
   "name": "ptr_data_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26,
   "name": "in_room",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27,
   "name": "shaft_phase",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28,
   "name": "shaft_step_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29,
   "name": "corridor_below",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30,
   "name": "corridor_above",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31,
   "name": "door_right",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32,
   "name": "door_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33,
   "name": "colour_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34,
   "name": "colour_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35,
   "name": "corridor_colour",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 37,
   "name": "lift_pitch1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38,
   "name": "lift_pitch2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39,
   "name": "marker_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40,
   "name": "marker_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "map_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44,
   "name": "agent_x",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 45,
   "name": "agent_y",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 46,
   "name": "agent_x2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47,
   "name": "agent_y2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48,
   "name": "agent_x3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49,
   "name": "agent_y3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50,
   "name": "agent_xbits",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51,
   "name": "box_top",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52,
   "name": "box_bottom",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53,
   "name": "box_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 54,
   "name": "box_right",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55,
   "name": "box_mid_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 56,
   "name": "box_mid_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57,
   "name": "walk_speed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "prev_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59,
   "name": "prev_right",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60,
   "name": "prev_bottom",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "prev_top",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62,
   "name": "agent_timer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 63,
   "name": "agent_frame_no",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64,
   "name": "agent_speed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 65,
   "name": "falling",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 66,
   "name": "landed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 67,
   "name": "death",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 68,
   "name": "robot_frame",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 69,
   "name": "robot_floor_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 70,
   "name": "robot_floor_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 71,
   "name": "robots_wait",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 72,
   "name": "robot_no",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 73,
   "name": "robot_reg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 74,
   "name": "robot_turned",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 75,
   "name": "robot_colour1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 76,
   "name": "robot_colour2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 77,
   "name": "robot_tmp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 78,
   "name": "robot_zapping",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 79,
   "name": "zap_sound",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 80,
   "name": "facing",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 81,
   "name": "fire_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 82,
   "name": "feet_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 83,
   "name": "feet_column",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 84,
   "name": "last_robot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 85,
   "name": "robot_script_ptr",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 86,
   "name": "robot_mode",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 87,
   "name": "robot_command",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 88,
   "name": "robot_screen_ptr",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 89,
   "name": "robot_screen_ptr_hi",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 90,
   "name": "robot_subcell",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 109,
   "name": "ball_off",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 110,
   "name": "ball_pc",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 111,
   "name": "ball_counter",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 112,
   "name": "ball_wait",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 113,
   "name": "ball_tmp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 114,
   "name": "centre_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 115,
   "name": "centre_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 116,
   "name": "code_level",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 117,
   "name": "code_level_11",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 118,
   "name": "code_level_1b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 119,
   "name": "notes_right",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 120,
   "name": "last_note",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 121,
   "name": "bit9_tmp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 122,
   "name": "cell_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 123,
   "name": "cell_row_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 124,
   "name": "cell_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 125,
   "name": "cell_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 126,
   "name": "room_no",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 127,
   "name": "entry_side",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 128,
   "name": "exit_side",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 129,
   "name": "platform_list",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 130,
   "name": "platform_list_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 131,
   "name": "press_held",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 132,
   "name": "platform_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 133,
   "name": "platform_moving",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 134,
   "name": "object_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 135,
   "name": "object_flag_ptr",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 136,
   "name": "object_flag_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 137,
   "name": "furniture_type",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 138,
   "name": "terminal_choice",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 139,
   "name": "wipe_top",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 140,
   "name": "wipe_bottom",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 141,
   "name": "room_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 142,
   "name": "room_sprites",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 143,
   "name": "selected_slot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 144,
   "name": "carried_slot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 145,
   "name": "undo_slot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 146,
   "name": "slot_used",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 149,
   "name": "slot_used_3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 152,
   "name": "slot_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 155,
   "name": "slot_colour_3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 158,
   "name": "new_piece_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 159,
   "name": "hand_mode",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 160,
   "name": "hand_top",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 161,
   "name": "hand_bottom",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 162,
   "name": "hand_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 163,
   "name": "hand_right",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 164,
   "name": "sound_timer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 165,
   "name": "speech_frames",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 166,
   "name": "speech_frames_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 167,
   "name": "speech_pitch_ptr",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 168,
   "name": "speech_pitch_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 169,
   "name": "speech_data",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 170,
   "name": "speech_data_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 171,
   "name": "speech_levels",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 172,
   "name": "speech_levels_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 173,
   "name": "speech_up_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 174,
   "name": "speech_down_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 175,
   "name": "speech_gap_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 193,
   "name": "hours_passed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 195,
   "name": "memory_pos",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 196,
   "name": "mask_ptrs",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 198,
   "name": "mask_ptr2",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 200,
   "name": "solved",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 209,
   "name": "clock_ticks",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 210,
   "name": "clock_seconds",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 211,
   "name": "clock_minutes",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 212,
   "name": "clock_hours",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 213,
   "name": "clock_stopped",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 214,
   "name": "pieces_found",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 215,
   "name": "passwords_found",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 216,
   "name": "puzzles_solved",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 217,
   "name": "score",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 218,
   "name": "score_hundreds",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 219,
   "name": "score_top",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 220,
   "name": "won",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 222,
   "name": "fire_held",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 223,
   "name": "key_held",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 224,
   "name": "tick",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 225,
   "name": "noise",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 227,
   "name": "random2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 228,
   "name": "tmp1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 229,
   "name": "tmp2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 230,
   "name": "tmp3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 231,
   "name": "tmp4",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 232,
   "name": "tmp5",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 233,
   "name": "tmp6",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 234,
   "name": "object_no",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 235,
   "name": "random_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 236,
   "name": "random_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 252,
   "name": "irq_tick_only",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 256,
   "name": "f_0100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1024,
   "name": "f_0400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1280,
   "name": "f_0500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1536,
   "name": "f_0600",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1792,
   "name": "f_0700",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2048,
   "name": "speech_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2080,
   "name": "f_0820",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2144,
   "name": "a_0860",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2176,
   "name": "speech_say",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2179,
   "name": "nmi_speech_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2181,
   "name": "a_0885",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2199,
   "name": "b_0897",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2212,
   "name": "nmi_speech_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2214,
   "name": "a_08A6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2232,
   "name": "b_08B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2243,
   "name": "nmi_speech_hold",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2265,
   "name": "nmi_speech_wait",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2273,
   "name": "nmi_speech_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2289,
   "name": "speech_next_period",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 2290,
   "name": "b_08F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2321,
   "name": "a_0911",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2323,
   "name": "b_0913",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2335,
   "name": "b_091F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2351,
   "name": "a_092F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2361,
   "name": "j_0939",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2376,
   "name": "b_0948",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2385,
   "name": "speech_shift_window",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2411,
   "name": "b_096B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2427,
   "name": "speech_set_end",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2433,
   "name": "speech_start_gap",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2444,
   "name": "speech_dec_1bit_jmp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2447,
   "name": "speech_dec_1bit_cont_jmp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2450,
   "name": "speech_dec_2bit_stub",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2456,
   "name": "speech_dec_4bit_stub",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2459,
   "name": "speech_frame_end",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 2480,
   "name": "b_09B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2486,
   "name": "speech_frame_header",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2487,
   "name": "a_09B7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2496,
   "name": "b_09C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2565,
   "name": "b_0A05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2590,
   "name": "b_0A1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2596,
   "name": "b_0A24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2625,
   "name": "b_0A41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2631,
   "name": "tbl_speech_len",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2635,
   "name": "speech_frame_repeat",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 2652,
   "name": "j_0A5C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2663,
   "name": "r_0A67",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 2664,
   "name": "speech_dec_2bit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2677,
   "name": "j_0A75",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2706,
   "name": "b_0A92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2723,
   "name": "a_0AA3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2731,
   "name": "j_0AAB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2772,
   "name": "b_0AD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2773,
   "name": "a_0AD5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2777,
   "name": "tbl_speech_levels",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2789,
   "name": "speech_dec_4bit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2814,
   "name": "b_0AFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2830,
   "name": "j_0B0E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2840,
   "name": "b_0B18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2841,
   "name": "a_0B19",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2845,
   "name": "speech_pitch_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2865,
   "name": "b_0B31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2907,
   "name": "b_0B5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2915,
   "name": "tbl_speech_pitch",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2931,
   "name": "speech_dec_1bit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 2959,
   "name": "b_0B8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2969,
   "name": "b_0B99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2976,
   "name": "j_0BA0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2986,
   "name": "b_0BAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2987,
   "name": "a_0BAB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2991,
   "name": "speech_put_bits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2999,
   "name": "b_0BB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3012,
   "name": "speech_put_bit2",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3025,
   "name": "b_0BD1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3038,
   "name": "b_0BDE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3043,
   "name": "j_0BE3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3069,
   "name": "speech_smooth",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3095,
   "name": "b_0C17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3096,
   "name": "a_0C18",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3100,
   "name": "a_0C1C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3104,
   "name": "a_0C20",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3119,
   "name": "speech_command",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 3154,
   "name": "b_0C52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3167,
   "name": "r_0C5F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 3168,
   "name": "speech_stop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 3176,
   "name": "b_0C68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3185,
   "name": "speech_start_timer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3209,
   "name": "speech_init_chain",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3243,
   "name": "speech_lookup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3307,
   "name": "str_speech_ptr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3313,
   "name": "speech_vars",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3314,
   "name": "a_0CF2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3315,
   "name": "a_0CF3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3316,
   "name": "a_0CF4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3317,
   "name": "a_0CF5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3318,
   "name": "a_0CF6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3319,
   "name": "a_0CF7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3320,
   "name": "a_0CF8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3321,
   "name": "a_0CF9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3322,
   "name": "a_0CFA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3323,
   "name": "a_0CFB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3324,
   "name": "a_0CFC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3325,
   "name": "a_0CFD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3326,
   "name": "a_0CFE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3327,
   "name": "a_0CFF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3328,
   "name": "gfx_panel_edge",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3418,
   "name": "gfx_panel_edge_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3508,
   "name": "gfx_platform_top",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3511,
   "name": "gfx_platform_cap_low",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3514,
   "name": "gfx_platform_cap_high",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3517,
   "name": "tbl_shaft_phase",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3520,
   "name": "gfx_corridor_mark_low",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3528,
   "name": "gfx_corridor_mark_high",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3536,
   "name": "tbl_side_cap",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3538,
   "name": "tbl_side_end",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3540,
   "name": "tbl_side_end17",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3542,
   "name": "tbl_side_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3544,
   "name": "gfx_corridor_ceiling",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3584,
   "name": "gfx_corridor_wall",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3624,
   "name": "gfx_corridor_floor",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3664,
   "name": "tbl_colour_rows_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3678,
   "name": "tbl_colour_rows_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3692,
   "name": "tbl_robot_xbit",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3696,
   "name": "tbl_room_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3697,
   "name": "f_0E71",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3760,
   "name": "room_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3857,
   "name": "room_1f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3962,
   "name": "room_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "room_16_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4153,
   "name": "room_1a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4258,
   "name": "room_06",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4357,
   "name": "room_07",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4444,
   "name": "room_0e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4563,
   "name": "room_0d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4674,
   "name": "room_02",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4778,
   "name": "room_1e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4888,
   "name": "room_0f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4988,
   "name": "room_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5111,
   "name": "room_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5214,
   "name": "room_05",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5338,
   "name": "room_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5432,
   "name": "room_0b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5562,
   "name": "room_00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5691,
   "name": "room_03",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5836,
   "name": "room_1d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5936,
   "name": "room_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6046,
   "name": "room_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6132,
   "name": "room_0c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6290,
   "name": "room_1c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6414,
   "name": "room_0a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6541,
   "name": "room_01",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6668,
   "name": "room_09",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6783,
   "name": "room_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6929,
   "name": "room_08",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7017,
   "name": "room_04",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7106,
   "name": "room_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7206,
   "name": "room_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7365,
   "name": "room_1b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7524,
   "name": "tbl_platform_originals",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8036,
   "name": "tbl_platform_originals_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8154,
   "name": "tbl_room_platform_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8155,
   "name": "f_1FDB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8214,
   "name": "tbl_platform_original_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8215,
   "name": "f_2017",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8274,
   "name": "tbl_room_ptrs_unread",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8334,
   "name": "str_password_words",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8406,
   "name": "tbl_room_robot_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8407,
   "name": "f_20D7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8466,
   "name": "tbl_robot_scripts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8722,
   "name": "tbl_robot_script_starts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8754,
   "name": "tbl_ball_scripts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8755,
   "name": "tbl_ball_args",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9004,
   "name": "tbl_furniture",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9005,
   "name": "f_232D",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9006,
   "name": "f_232E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9007,
   "name": "f_232F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9008,
   "name": "tbl_furniture_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9139,
   "name": "gfx_furniture",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9715,
   "name": "gfx_win_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9745,
   "name": "gfx_win_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9775,
   "name": "gfx_furniture2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9955,
   "name": "tbl_puzzle_patterns",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10083,
   "name": "gfx_piece_masks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11107,
   "name": "gfx_piece_masks_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12131,
   "name": "gfx_piece_masks_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12387,
   "name": "gfx_code_room_picture",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12531,
   "name": "tbl_furniture_slots",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12532,
   "name": "tbl_furniture_slots_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12787,
   "name": "gfx_lift_init_picture",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12931,
   "name": "gfx_snooze_picture",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13075,
   "name": "gfx_pocket_computer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13120,
   "name": "gfx_pc_display_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13331,
   "name": "f_3413",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13361,
   "name": "f_3431",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13369,
   "name": "f_3439",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13405,
   "name": "f_345D",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13475,
   "name": "gfx_pocket_computer_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13731,
   "name": "f_35A3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13761,
   "name": "gfx_pc_status_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13875,
   "name": "rle_terminal_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13876,
   "name": "rle_terminal_values",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14249,
   "name": "rle_terminal_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14250,
   "name": "rle_terminal_colour_values",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14421,
   "name": "game_start",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14447,
   "name": "b_386F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14455,
   "name": "b_3877",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14459,
   "name": "b_387B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14476,
   "name": "j_388C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14483,
   "name": "b_3893",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14492,
   "name": "b_389C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14506,
   "name": "b_38AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14579,
   "name": "b_38F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14583,
   "name": "b_38F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14630,
   "name": "b_3926",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14699,
   "name": "b_396B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14720,
   "name": "b_3980",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14743,
   "name": "b_3997",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14799,
   "name": "lift_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 14821,
   "name": "b_39E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14835,
   "name": "b_39F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14838,
   "name": "j_39F6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14859,
   "name": "b_3A0B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14868,
   "name": "b_3A14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14872,
   "name": "b_3A18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14896,
   "name": "b_3A30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14902,
   "name": "b_3A36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14911,
   "name": "j_3A3F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14942,
   "name": "b_3A5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14959,
   "name": "b_3A6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14962,
   "name": "b_3A72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14976,
   "name": "pocket_computer",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 15023,
   "name": "pocket_computer_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15037,
   "name": "b_3ABD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15042,
   "name": "b_3AC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15064,
   "name": "b_3AD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15075,
   "name": "b_3AE3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15078,
   "name": "b_3AE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15095,
   "name": "b_3AF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15101,
   "name": "b_3AFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15116,
   "name": "b_3B0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15138,
   "name": "b_3B22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15141,
   "name": "b_3B25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15164,
   "name": "b_3B3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15171,
   "name": "b_3B43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15181,
   "name": "pc_select_slot",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 15206,
   "name": "a_3B66",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 15207,
   "name": "a_3B67",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 15220,
   "name": "b_3B74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15229,
   "name": "b_3B7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15239,
   "name": "b_3B87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15247,
   "name": "b_3B8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15252,
   "name": "b_3B94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15275,
   "name": "b_3BAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15277,
   "name": "b_3BAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15295,
   "name": "b_3BBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15323,
   "name": "pc_button_grid",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15330,
   "name": "b_3BE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15345,
   "name": "b_3BF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15356,
   "name": "b_3BFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15363,
   "name": "b_3C03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15378,
   "name": "b_3C12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15389,
   "name": "b_3C1D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15396,
   "name": "b_3C24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15407,
   "name": "b_3C2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15418,
   "name": "b_3C3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15425,
   "name": "b_3C41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15428,
   "name": "pc_left_keys",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 15458,
   "name": "b_3C62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15467,
   "name": "b_3C6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15476,
   "name": "pc_display_click",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15496,
   "name": "b_3C88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15514,
   "name": "b_3C9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15530,
   "name": "b_3CAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15540,
   "name": "b_3CB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15548,
   "name": "b_3CBC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15565,
   "name": "b_3CCD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15582,
   "name": "b_3CDE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15703,
   "name": "pc_btn_flip_v",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15715,
   "name": "pc_btn_flip_h",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15727,
   "name": "pc_btn_clear",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15736,
   "name": "pc_btn_pause",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15755,
   "name": "pc_btn_undo",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15764,
   "name": "pc_btn_off",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15789,
   "name": "pc_btn_colour",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15793,
   "name": "j_3DB1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15797,
   "name": "j_3DB5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15799,
   "name": "b_3DB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15810,
   "name": "move_hand",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15838,
   "name": "b_3DDE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15848,
   "name": "b_3DE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15858,
   "name": "b_3DF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15866,
   "name": "b_3DFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15885,
   "name": "b_3E0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15890,
   "name": "j_3E12",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15893,
   "name": "r_3E15",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15894,
   "name": "copy_display_chars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15896,
   "name": "b_3E18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15919,
   "name": "b_3E2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15929,
   "name": "show_hand",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15931,
   "name": "b_3E3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15937,
   "name": "b_3E41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15970,
   "name": "show_hand_at_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15988,
   "name": "b_3E74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16029,
   "name": "show_slot_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16079,
   "name": "r_3ECF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16080,
   "name": "show_memory_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16092,
   "name": "b_3EDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16114,
   "name": "b_3EF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16130,
   "name": "b_3F02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16174,
   "name": "r_3F2E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16175,
   "name": "draw_frame_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16179,
   "name": "b_3F33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16189,
   "name": "sound_click",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16193,
   "name": "sound_tone",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16225,
   "name": "draw_piece",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16227,
   "name": "draw_piece_a",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16247,
   "name": "b_3F77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16251,
   "name": "b_3F7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16268,
   "name": "b_3F8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16282,
   "name": "j_3F9A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16304,
   "name": "b_3FB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16312,
   "name": "r_3FB8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16313,
   "name": "detect_pal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16316,
   "name": "b_3FBC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16323,
   "name": "b_3FC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16328,
   "name": "b_3FC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16341,
   "name": "b_3FD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16352,
   "name": "r_3FE0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16384,
   "name": "f_4000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16400,
   "name": "f_4010",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16401,
   "name": "f_4011",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16424,
   "name": "f_4028",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16640,
   "name": "f_4100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16896,
   "name": "f_4200",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16904,
   "name": "f_4208",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16906,
   "name": "f_420A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16944,
   "name": "f_4230",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16946,
   "name": "f_4232",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16960,
   "name": "f_4240",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16961,
   "name": "f_4241",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17029,
   "name": "f_4285",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17066,
   "name": "f_42AA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17152,
   "name": "f_4300",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17153,
   "name": "f_4301",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17270,
   "name": "f_4376",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17310,
   "name": "f_439E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17314,
   "name": "f_43A2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17324,
   "name": "a_43AC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17325,
   "name": "f_43AD",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17400,
   "name": "a_43F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17401,
   "name": "a_43F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17402,
   "name": "a_43FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17403,
   "name": "a_43FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17404,
   "name": "a_43FC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17405,
   "name": "a_43FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17406,
   "name": "a_43FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17407,
   "name": "a_43FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17408,
   "name": "gfx_sprites_10_1f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18432,
   "name": "gfx_charset_shaft",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19336,
   "name": "f_4B88",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19544,
   "name": "f_4C58",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19624,
   "name": "gfx_charset_shaft_signs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19648,
   "name": "gfx_sprites_33_35",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19840,
   "name": "f_4D80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19843,
   "name": "a_4D83",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19846,
   "name": "a_4D86",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19904,
   "name": "f_4DC0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19968,
   "name": "f_4E00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20032,
   "name": "gfx_charset_box",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20208,
   "name": "tbl_start_sprite_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20213,
   "name": "a_4EF5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20214,
   "name": "a_4EF6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20215,
   "name": "f_4EF7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20261,
   "name": "f_4F25",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20262,
   "name": "f_4F26",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20309,
   "name": "f_4F55",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20310,
   "name": "f_4F56",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20311,
   "name": "f_4F57",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20312,
   "name": "f_4F58",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20313,
   "name": "f_4F59",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20314,
   "name": "f_4F5A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20405,
   "name": "f_4FB5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20414,
   "name": "gfx_charset_shaft_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20480,
   "name": "f_5000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20544,
   "name": "f_5040",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20600,
   "name": "f_5078",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20624,
   "name": "gfx_charset_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21648,
   "name": "gfx_charset_room_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22528,
   "name": "gfx_charset_panel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23344,
   "name": "f_5B30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23552,
   "name": "f_5C00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23632,
   "name": "f_5C50",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23680,
   "name": "f_5C80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23728,
   "name": "f_5CB0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23888,
   "name": "f_5D50",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24064,
   "name": "f_5E00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24112,
   "name": "f_5E30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24144,
   "name": "f_5E50",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24160,
   "name": "f_5E60",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24240,
   "name": "f_5EB0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24400,
   "name": "f_5F50",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24448,
   "name": "f_5F80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24496,
   "name": "gfx_charset_panel_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24576,
   "name": "gfx_agent_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25600,
   "name": "gfx_agent_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26368,
   "name": "f_6700",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26369,
   "name": "f_6701",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26370,
   "name": "f_6702",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26434,
   "name": "gfx_agent_2b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26624,
   "name": "gfx_agent_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27648,
   "name": "gfx_agent_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28672,
   "name": "gfx_robots",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29120,
   "name": "move_high_tables",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29179,
   "name": "copy_pages",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29181,
   "name": "b_71FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29196,
   "name": "tbl_slot_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29202,
   "name": "tbl_slot_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29208,
   "name": "clear_message",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29220,
   "name": "b_7224",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29222,
   "name": "b_7226",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29238,
   "name": "new_game_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29257,
   "name": "room_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29270,
   "name": "b_7256",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29273,
   "name": "b_7259",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29301,
   "name": "b_7275",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29316,
   "name": "b_7284",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29320,
   "name": "b_7288",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29323,
   "name": "j_728B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29332,
   "name": "reset_counters_text",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29334,
   "name": "b_7296",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29346,
   "name": "draw_shaft_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29362,
   "name": "b_72B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29364,
   "name": "b_72B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29390,
   "name": "b_72CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29413,
   "name": "draw_pocket_computer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29429,
   "name": "b_72F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29448,
   "name": "b_7308",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29468,
   "name": "draw_rock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29499,
   "name": "b_733B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29503,
   "name": "b_733F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29510,
   "name": "b_7346",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29542,
   "name": "b_7366",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29557,
   "name": "b_7375",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29593,
   "name": "b_7399",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29595,
   "name": "b_739B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29631,
   "name": "r_73BF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29632,
   "name": "tbl_shaft_edge",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29642,
   "name": "shaft_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29656,
   "name": "b_73D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29665,
   "name": "b_73E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29668,
   "name": "show_map_marker",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29714,
   "name": "b_7412",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29727,
   "name": "tbl_marker_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29735,
   "name": "paint_slots",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29737,
   "name": "b_7429",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29771,
   "name": "scroll_shaft_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29777,
   "name": "b_7451",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29795,
   "name": "b_7463",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29807,
   "name": "b_746F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29825,
   "name": "b_7481",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29827,
   "name": "b_7483",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29855,
   "name": "b_749F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29872,
   "name": "b_74B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29888,
   "name": "scroll_shaft_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29896,
   "name": "b_74C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29905,
   "name": "b_74D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29921,
   "name": "j_74E1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30110,
   "name": "b_759E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30116,
   "name": "r_75A4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30117,
   "name": "colour_corridors",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30119,
   "name": "b_75A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30129,
   "name": "b_75B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30139,
   "name": "b_75BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30155,
   "name": "b_75CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30171,
   "name": "b_75DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30187,
   "name": "b_75EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30194,
   "name": "b_75F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30213,
   "name": "b_7605",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30214,
   "name": "a_7606",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30215,
   "name": "a_7607",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30222,
   "name": "b_760E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30226,
   "name": "colour_row16",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30245,
   "name": "b_7625",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30246,
   "name": "a_7626",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30247,
   "name": "a_7627",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30257,
   "name": "shaft_new_row_top",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30259,
   "name": "j_7633",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30271,
   "name": "b_763F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30275,
   "name": "b_7643",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30292,
   "name": "b_7654",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30297,
   "name": "b_7659",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30302,
   "name": "b_765E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30322,
   "name": "b_7672",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30328,
   "name": "b_7678",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30359,
   "name": "b_7697",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30361,
   "name": "b_7699",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30377,
   "name": "b_76A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30392,
   "name": "j_76B8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30415,
   "name": "b_76CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30434,
   "name": "j_76E2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30441,
   "name": "b_76E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30471,
   "name": "b_7707",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30478,
   "name": "b_770E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30480,
   "name": "b_7710",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30495,
   "name": "j_771F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30501,
   "name": "b_7725",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30523,
   "name": "b_773B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30525,
   "name": "b_773D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30536,
   "name": "r_7748",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30537,
   "name": "shaft_new_row_bottom",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30539,
   "name": "j_774B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30551,
   "name": "b_7757",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30559,
   "name": "b_775F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30581,
   "name": "b_7775",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30586,
   "name": "b_777A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30591,
   "name": "b_777F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30611,
   "name": "b_7793",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30617,
   "name": "b_7799",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30648,
   "name": "b_77B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30650,
   "name": "b_77BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30667,
   "name": "b_77CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30682,
   "name": "j_77DA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30707,
   "name": "b_77F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30725,
   "name": "j_7805",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30732,
   "name": "b_780C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30764,
   "name": "b_782C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30771,
   "name": "b_7833",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30773,
   "name": "b_7835",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30788,
   "name": "j_7844",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30794,
   "name": "b_784A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30800,
   "name": "draw_corridor_bottom",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30807,
   "name": "draw_corridor_marker",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30809,
   "name": "b_7859",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30828,
   "name": "r_786C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30829,
   "name": "map_cell_below",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30837,
   "name": "map_cell_above",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30842,
   "name": "map_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30847,
   "name": "b_787F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30884,
   "name": "tbl_map_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30885,
   "name": "f_78A5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30896,
   "name": "map_room_index",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30901,
   "name": "map_room_index_a",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30905,
   "name": "b_78B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30930,
   "name": "corridor_colour_below",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30940,
   "name": "corridor_colour_above",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30947,
   "name": "j_78E3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30954,
   "name": "b_78EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30974,
   "name": "a_78FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30975,
   "name": "a_78FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30977,
   "name": "flip_piece_v",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30988,
   "name": "b_790C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31015,
   "name": "b_7927",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31028,
   "name": "flip_v_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31032,
   "name": "b_7938",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31033,
   "name": "a_7939",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31034,
   "name": "a_793A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31039,
   "name": "a_793F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31040,
   "name": "a_7940",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31073,
   "name": "b_7961",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31079,
   "name": "r_7967",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 31080,
   "name": "flip_piece_h",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31091,
   "name": "b_7973",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31118,
   "name": "b_798E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31129,
   "name": "flip_h_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31130,
   "name": "j_799A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31133,
   "name": "b_799D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31134,
   "name": "a_799E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31135,
   "name": "a_799F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31148,
   "name": "a_79AC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31149,
   "name": "a_79AD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31193,
   "name": "b_79D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31201,
   "name": "r_79E1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 31202,
   "name": "clear_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31213,
   "name": "b_79ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31220,
   "name": "b_79F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31234,
   "name": "b_7A02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31241,
   "name": "b_7A09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31246,
   "name": "b_7A0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31260,
   "name": "b_7A1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31273,
   "name": "recolour_piece",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31284,
   "name": "b_7A34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31287,
   "name": "paint_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31299,
   "name": "b_7A43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31301,
   "name": "b_7A45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31317,
   "name": "tbl_slot_colour_ram_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31323,
   "name": "tbl_slot_colour_ram_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31329,
   "name": "undo_piece",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31340,
   "name": "b_7A6C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31353,
   "name": "b_7A79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31369,
   "name": "save_undo",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31376,
   "name": "b_7A90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31391,
   "name": "memory_forward",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31411,
   "name": "b_7AB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31436,
   "name": "b_7ACC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31441,
   "name": "b_7AD1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31486,
   "name": "b_7AFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31538,
   "name": "memory_back",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31549,
   "name": "b_7B3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31574,
   "name": "b_7B56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31579,
   "name": "b_7B5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31628,
   "name": "b_7B8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31630,
   "name": "b_7B8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31682,
   "name": "phone",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31714,
   "name": "b_7BE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31716,
   "name": "b_7BE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31747,
   "name": "b_7C03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31752,
   "name": "b_7C08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31804,
   "name": "tbl_phone_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31812,
   "name": "str_phone_menu",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31988,
   "name": "str_phone_answers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32076,
   "name": "phone_sound_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32140,
   "name": "phone_menu_click",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32156,
   "name": "r_7D9C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32157,
   "name": "phone_ask_orient",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32185,
   "name": "j_7DB9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32187,
   "name": "b_7DBB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32206,
   "name": "a_7DCE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32207,
   "name": "a_7DCF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32212,
   "name": "b_7DD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32227,
   "name": "a_7DE3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32228,
   "name": "a_7DE4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32230,
   "name": "phone_ask_enough",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32261,
   "name": "phone_hang_up",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32274,
   "name": "b_7E12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32276,
   "name": "b_7E14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32310,
   "name": "tbl_phone_numbers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32324,
   "name": "dial_tone",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32365,
   "name": "phone_rts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32366,
   "name": "tbl_dtmf",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32377,
   "name": "f_7E79",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32389,
   "name": "f_7E85",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32401,
   "name": "f_7E91",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32414,
   "name": "phone_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32435,
   "name": "b_7EB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32474,
   "name": "b_7EDA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32520,
   "name": "b_7F08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32596,
   "name": "phone_click",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32619,
   "name": "wait_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32621,
   "name": "wait_ticks",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32624,
   "name": "b_7F70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32632,
   "name": "wait_frame_top",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32634,
   "name": "b_7F7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32641,
   "name": "b_7F81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32644,
   "name": "b_7F84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32653,
   "name": "phone_answer_orient",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32717,
   "name": "b_7FCD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32722,
   "name": "b_7FD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32727,
   "name": "phone_answer_enough",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32746,
   "name": "j_7FEA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32763,
   "name": "b_7FFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32767,
   "name": "b_7FFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32777,
   "name": "show_phone_answer",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32779,
   "name": "b_800B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32798,
   "name": "b_801E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32805,
   "name": "show_status_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32807,
   "name": "b_8027",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32823,
   "name": "test_overlap",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32827,
   "name": "b_803B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32837,
   "name": "b_8045",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32864,
   "name": "b_8060",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32902,
   "name": "b_8086",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32906,
   "name": "b_808A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32948,
   "name": "b_80B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32956,
   "name": "b_80BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32960,
   "name": "b_80C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32963,
   "name": "check_solution",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32980,
   "name": "b_80D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32982,
   "name": "b_80D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32996,
   "name": "b_80E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33007,
   "name": "b_80EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33012,
   "name": "j_80F4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33031,
   "name": "b_8107",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33052,
   "name": "b_811C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33069,
   "name": "b_812D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33092,
   "name": "b_8144",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33115,
   "name": "b_815B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33126,
   "name": "b_8166",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33128,
   "name": "b_8168",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33147,
   "name": "remove_piece",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33151,
   "name": "j_817F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33169,
   "name": "b_8191",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33187,
   "name": "b_81A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33198,
   "name": "b_81AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33221,
   "name": "show_message",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33234,
   "name": "b_81D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33236,
   "name": "b_81D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33242,
   "name": "b_81DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33271,
   "name": "b_81F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33278,
   "name": "b_81FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33288,
   "name": "str_push_button",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33310,
   "name": "str_pc_messages",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33464,
   "name": "slot_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33470,
   "name": "b_82BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33480,
   "name": "b_82C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33496,
   "name": "b_82D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33507,
   "name": "random",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33524,
   "name": "irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33591,
   "name": "b_8337",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33643,
   "name": "b_836B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33655,
   "name": "b_8377",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33684,
   "name": "b_8394",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33686,
   "name": "irq_trampoline",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33698,
   "name": "game_clock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33703,
   "name": "b_83A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33710,
   "name": "b_83AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33740,
   "name": "add_minutes",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33764,
   "name": "b_83E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33768,
   "name": "b_83E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33779,
   "name": "r_83F3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33780,
   "name": "wait_tick_or_end",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33788,
   "name": "b_83FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33804,
   "name": "b_840C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33816,
   "name": "b_8418",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33871,
   "name": "b_844F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33874,
   "name": "b_8452",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33902,
   "name": "b_846E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33953,
   "name": "b_84A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33960,
   "name": "b_84A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33968,
   "name": "b_84B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34002,
   "name": "clear_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34004,
   "name": "fill_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34006,
   "name": "b_84D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34022,
   "name": "fill_colour_ram",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34026,
   "name": "b_84EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34042,
   "name": "irq_tick_extras",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34068,
   "name": "b_8514",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34086,
   "name": "draw_clock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34118,
   "name": "r_8546",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34119,
   "name": "draw_bcd",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34140,
   "name": "lift_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34164,
   "name": "b_8574",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34171,
   "name": "b_857B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34189,
   "name": "b_858D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34193,
   "name": "r_8591",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34194,
   "name": "lift_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34224,
   "name": "b_85B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34228,
   "name": "r_85B4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34229,
   "name": "lift_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34239,
   "name": "b_85BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34249,
   "name": "b_85C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34303,
   "name": "wait_below_sprite3",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34309,
   "name": "b_8605",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34315,
   "name": "agent_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34323,
   "name": "b_8613",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34333,
   "name": "b_861D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34352,
   "name": "b_8630",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34369,
   "name": "b_8641",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34372,
   "name": "j_8644",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34392,
   "name": "b_8658",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34406,
   "name": "b_8666",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34425,
   "name": "b_8679",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34446,
   "name": "b_868E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34460,
   "name": "b_869C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34478,
   "name": "b_86AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34505,
   "name": "b_86C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34519,
   "name": "b_86D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34544,
   "name": "j_86F0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34554,
   "name": "b_86FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34601,
   "name": "agent_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34611,
   "name": "b_8733",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34635,
   "name": "b_874B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34641,
   "name": "j_8751",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34654,
   "name": "b_875E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34730,
   "name": "b_87AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34731,
   "name": "a_87AB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34732,
   "name": "a_87AC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34737,
   "name": "a_87B1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34738,
   "name": "a_87B2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34740,
   "name": "a_87B4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34741,
   "name": "a_87B5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34746,
   "name": "a_87BA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34747,
   "name": "a_87BB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34749,
   "name": "a_87BD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34750,
   "name": "a_87BE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34755,
   "name": "a_87C3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34756,
   "name": "a_87C4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34772,
   "name": "r_87D4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34773,
   "name": "agent_sprites_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34775,
   "name": "b_87D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34797,
   "name": "agent_read_stick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34821,
   "name": "b_8805",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34834,
   "name": "b_8812",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34838,
   "name": "r_8816",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34839,
   "name": "agent_animate",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34863,
   "name": "b_882F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34875,
   "name": "r_883B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34876,
   "name": "b_883C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34881,
   "name": "b_8841",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34884,
   "name": "b_8844",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34902,
   "name": "b_8856",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34905,
   "name": "agent_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34914,
   "name": "b_8862",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34938,
   "name": "b_887A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34942,
   "name": "b_887E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34945,
   "name": "b_8881",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34982,
   "name": "b_88A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34990,
   "name": "b_88AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34998,
   "name": "a_88B6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35006,
   "name": "b_88BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35018,
   "name": "b_88CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35025,
   "name": "b_88D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35037,
   "name": "a_88DD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35045,
   "name": "b_88E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35051,
   "name": "a_88EB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35059,
   "name": "b_88F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35065,
   "name": "agent_bounds",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35091,
   "name": "b_8913",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35103,
   "name": "b_891F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35127,
   "name": "b_8937",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35136,
   "name": "r_8940",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35137,
   "name": "b_8941",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35195,
   "name": "b_897B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35211,
   "name": "b_898B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35225,
   "name": "b_8999",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35253,
   "name": "b_89B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35268,
   "name": "b_89C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35284,
   "name": "b_89D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35302,
   "name": "b_89E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35327,
   "name": "b_89FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35343,
   "name": "b_8A0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35365,
   "name": "b_8A25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35389,
   "name": "b_8A3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35417,
   "name": "b_8A59",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35433,
   "name": "b_8A69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35455,
   "name": "b_8A7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35475,
   "name": "b_8A93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35497,
   "name": "r_8AA9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35498,
   "name": "probe_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35519,
   "name": "b_8ABF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35532,
   "name": "r_8ACC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35533,
   "name": "probe_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35554,
   "name": "b_8AE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35567,
   "name": "r_8AEF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35568,
   "name": "tmp_carry_bits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35569,
   "name": "agent_shift_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35576,
   "name": "b_8AF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35601,
   "name": "b_8B11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35608,
   "name": "b_8B18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35615,
   "name": "b_8B1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35618,
   "name": "tmp_carry_bits2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35619,
   "name": "agent_shift_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35626,
   "name": "b_8B2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35650,
   "name": "b_8B42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35657,
   "name": "b_8B49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35664,
   "name": "b_8B50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35667,
   "name": "agent_shift_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35669,
   "name": "b_8B55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35681,
   "name": "agent_shift_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35683,
   "name": "b_8B63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35694,
   "name": "agent_exit_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35709,
   "name": "b_8B7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35728,
   "name": "b_8B90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35734,
   "name": "j_8B96",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35791,
   "name": "b_8BCF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35794,
   "name": "b_8BD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35821,
   "name": "b_8BED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35827,
   "name": "b_8BF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35889,
   "name": "b_8C31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35894,
   "name": "j_8C36",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35896,
   "name": "b_8C38",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35911,
   "name": "r_8C47",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35912,
   "name": "agent_top",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35926,
   "name": "r_8C56",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35927,
   "name": "agent_bottom",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35936,
   "name": "agent_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35963,
   "name": "b_8C7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35966,
   "name": "b_8C7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35973,
   "name": "b_8C85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35988,
   "name": "b_8C94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35991,
   "name": "agent_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36016,
   "name": "b_8CB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36019,
   "name": "b_8CB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36034,
   "name": "b_8CC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36037,
   "name": "solid_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36064,
   "name": "b_8CE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36100,
   "name": "b_8D04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36101,
   "name": "b_8D05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36103,
   "name": "tbl_somersault_dy1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36115,
   "name": "tbl_somersault_dy2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36127,
   "name": "tbl_somersault_dy3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36139,
   "name": "tbl_somersault_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36151,
   "name": "tbl_somersault_dx3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36163,
   "name": "tbl_agent_pointers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36191,
   "name": "tbl_agent_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36192,
   "name": "f_8D60",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36247,
   "name": "tbl_agent_mirror_end",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36275,
   "name": "tbl_agent_top",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36303,
   "name": "tbl_agent_bottom",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36331,
   "name": "tbl_agent_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36359,
   "name": "tbl_agent_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36387,
   "name": "agent_step_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36389,
   "name": "b_8E25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36416,
   "name": "r_8E40",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36417,
   "name": "agent_step_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36439,
   "name": "b_8E57",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36449,
   "name": "shaft_hide_sprite0",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36469,
   "name": "b_8E75",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36472,
   "name": "r_8E78",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36473,
   "name": "footstep_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36481,
   "name": "b_8E81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36508,
   "name": "b_8E9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36516,
   "name": "b_8EA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36522,
   "name": "b_8EAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36534,
   "name": "b_8EB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36555,
   "name": "r_8ECB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36556,
   "name": "robots_run",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36580,
   "name": "r_8EE4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36581,
   "name": "b_8EE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36595,
   "name": "b_8EF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36606,
   "name": "j_8EFE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36612,
   "name": "j_8F04",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36621,
   "name": "b_8F0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36627,
   "name": "b_8F13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36639,
   "name": "b_8F1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36647,
   "name": "b_8F27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36653,
   "name": "b_8F2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36659,
   "name": "b_8F33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36665,
   "name": "b_8F39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36671,
   "name": "robot_zap",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36689,
   "name": "b_8F51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36693,
   "name": "b_8F55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36696,
   "name": "b_8F58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36721,
   "name": "b_8F71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36735,
   "name": "b_8F7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36753,
   "name": "b_8F91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36771,
   "name": "b_8FA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36776,
   "name": "j_8FA8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36803,
   "name": "b_8FC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36833,
   "name": "robot_test",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36860,
   "name": "b_8FFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36900,
   "name": "b_9024",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36916,
   "name": "b_9034",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36919,
   "name": "b_9037",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36926,
   "name": "b_903E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36929,
   "name": "b_9041",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36942,
   "name": "b_904E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36945,
   "name": "robot_set_mode",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36965,
   "name": "robot_face_agent",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36988,
   "name": "b_907C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37004,
   "name": "b_908C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37023,
   "name": "b_909F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37029,
   "name": "b_90A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37034,
   "name": "robot_wait",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37043,
   "name": "b_90B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37046,
   "name": "robot_turn",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37064,
   "name": "b_90C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37086,
   "name": "b_90DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37095,
   "name": "b_90E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37106,
   "name": "b_90F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37115,
   "name": "robot_move",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 37145,
   "name": "b_9119",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37147,
   "name": "b_911B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37204,
   "name": "b_9154",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37207,
   "name": "b_9157",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37220,
   "name": "b_9164",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37224,
   "name": "b_9168",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37241,
   "name": "b_9179",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37280,
   "name": "b_91A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37297,
   "name": "b_91B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37312,
   "name": "b_91C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37324,
   "name": "robots_next",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37340,
   "name": "b_91DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37349,
   "name": "b_91E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37368,
   "name": "b_91F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37380,
   "name": "r_9204",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37381,
   "name": "robot_stop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37393,
   "name": "robot_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37406,
   "name": "b_921E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37411,
   "name": "b_9223",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37417,
   "name": "r_9229",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37418,
   "name": "sound_robot_turn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37454,
   "name": "sound_robot_hum",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37487,
   "name": "sound_zap",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37523,
   "name": "command_count",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37535,
   "name": "r_929F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37536,
   "name": "search_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37575,
   "name": "b_92C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37578,
   "name": "r_92CA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37579,
   "name": "ball_run",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37584,
   "name": "b_92D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37591,
   "name": "b_92D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37600,
   "name": "b_92E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37643,
   "name": "b_930B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37651,
   "name": "b_9313",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37656,
   "name": "b_9318",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37661,
   "name": "b_931D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37670,
   "name": "b_9326",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37673,
   "name": "b_9329",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37678,
   "name": "b_932E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37702,
   "name": "b_9346",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37728,
   "name": "b_9360",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37737,
   "name": "b_9369",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37758,
   "name": "b_937E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37766,
   "name": "b_9386",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37770,
   "name": "b_938A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37781,
   "name": "b_9395",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37783,
   "name": "j_9397",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37786,
   "name": "j_939A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37809,
   "name": "b_93B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37817,
   "name": "b_93B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37827,
   "name": "b_93C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37829,
   "name": "j_93C5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37843,
   "name": "ball_walls",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37855,
   "name": "b_93DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37860,
   "name": "b_93E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37882,
   "name": "b_93FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37904,
   "name": "b_9410",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37909,
   "name": "b_9415",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37922,
   "name": "b_9422",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37931,
   "name": "b_942B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37942,
   "name": "b_9436",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37947,
   "name": "j_943B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37961,
   "name": "b_9449",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37970,
   "name": "b_9452",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37987,
   "name": "b_9463",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37992,
   "name": "j_9468",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38007,
   "name": "b_9477",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38022,
   "name": "b_9486",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38028,
   "name": "platform_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38095,
   "name": "b_94CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38115,
   "name": "b_94E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38117,
   "name": "agent_centre",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38148,
   "name": "agent_hit_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38162,
   "name": "b_9512",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38166,
   "name": "b_9516",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38188,
   "name": "b_952C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38199,
   "name": "r_9537",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38200,
   "name": "b_9538",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38210,
   "name": "r_9542",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38211,
   "name": "b_9543",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38231,
   "name": "b_9557",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38255,
   "name": "b_956F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38275,
   "name": "b_9583",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38283,
   "name": "b_958B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38298,
   "name": "b_959A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38310,
   "name": "b_95A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38326,
   "name": "b_95B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38337,
   "name": "b_95C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38342,
   "name": "b_95C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38346,
   "name": "j_95CA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38358,
   "name": "r_95D6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38359,
   "name": "b_95D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38372,
   "name": "agent_death",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38379,
   "name": "b_95EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38386,
   "name": "b_95F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38426,
   "name": "b_961A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38428,
   "name": "b_961C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38430,
   "name": "b_961E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38441,
   "name": "b_9629",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38443,
   "name": "b_962B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38489,
   "name": "b_9659",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38518,
   "name": "j_9676",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38548,
   "name": "b_9694",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38599,
   "name": "b_96C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38674,
   "name": "tbl_agent_ptrs_stand",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38677,
   "name": "tbl_agent_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38680,
   "name": "agent_reset_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38682,
   "name": "b_971A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38698,
   "name": "copy_agent_shapes",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38700,
   "name": "b_972C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38711,
   "name": "b_9737",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38736,
   "name": "b_9750",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38757,
   "name": "death_flash",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38797,
   "name": "tbl_death_flash_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38799,
   "name": "f_978F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38801,
   "name": "delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38809,
   "name": "b_9799",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38820,
   "name": "sound_crackle",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38881,
   "name": "random_bit_mask",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38899,
   "name": "tbl_bit_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38907,
   "name": "search_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38916,
   "name": "b_9804",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38922,
   "name": "b_980A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38950,
   "name": "b_9826",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38970,
   "name": "b_983A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38992,
   "name": "b_9850",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38999,
   "name": "b_9857",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39002,
   "name": "b_985A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39018,
   "name": "b_986A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39045,
   "name": "b_9885",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39047,
   "name": "b_9887",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39064,
   "name": "b_9898",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39073,
   "name": "b_98A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39085,
   "name": "b_98AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39099,
   "name": "b_98BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39116,
   "name": "b_98CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39151,
   "name": "b_98EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39156,
   "name": "b_98F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39163,
   "name": "search_result",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 39172,
   "name": "b_9904",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39175,
   "name": "b_9907",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39188,
   "name": "b_9914",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39195,
   "name": "b_991B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39201,
   "name": "b_9921",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39205,
   "name": "b_9925",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39241,
   "name": "b_9949",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39267,
   "name": "b_9963",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39273,
   "name": "b_9969",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39283,
   "name": "b_9973",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39304,
   "name": "b_9988",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39329,
   "name": "b_99A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39351,
   "name": "b_99B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39361,
   "name": "j_99C1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39380,
   "name": "b_99D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39395,
   "name": "j_99E3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39404,
   "name": "b_99EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39418,
   "name": "tbl_bar_fill",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39422,
   "name": "tbl_search_layouts",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39486,
   "name": "f_9A3E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 39518,
   "name": "gfx_searching",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39582,
   "name": "tbl_bar_start",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39585,
   "name": "gfx_nothing_here",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39729,
   "name": "tbl_password_pics",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39731,
   "name": "f_9B33",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 39733,
   "name": "mark_searched",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39772,
   "name": "b_9B5C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39777,
   "name": "b_9B61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39793,
   "name": "b_9B71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39804,
   "name": "b_9B7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39814,
   "name": "b_9B86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39821,
   "name": "b_9B8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39823,
   "name": "r_9B8F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39824,
   "name": "invert_picture",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39826,
   "name": "b_9B92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39843,
   "name": "show_search_box",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39854,
   "name": "b_9BAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39856,
   "name": "b_9BB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39857,
   "name": "a_9BB1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39858,
   "name": "a_9BB2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39880,
   "name": "save_search_area",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39892,
   "name": "b_9BD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39910,
   "name": "b_9BE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39928,
   "name": "b_9BF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39947,
   "name": "b_9C0B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39949,
   "name": "b_9C0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39976,
   "name": "restore_search_area",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39981,
   "name": "b_9C2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39983,
   "name": "b_9C2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40007,
   "name": "build_piece",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40021,
   "name": "b_9C55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40030,
   "name": "b_9C5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40035,
   "name": "b_9C63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40036,
   "name": "a_9C64",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40045,
   "name": "a_9C6D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40074,
   "name": "redraw_piece",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40117,
   "name": "b_9CB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40124,
   "name": "b_9CBC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40137,
   "name": "b_9CC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40144,
   "name": "r_9CD0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40145,
   "name": "piece_pointers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40179,
   "name": "b_9CF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40214,
   "name": "security_terminal",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 40239,
   "name": "b_9D2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40311,
   "name": "b_9D77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40320,
   "name": "b_9D80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40343,
   "name": "b_9D97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40360,
   "name": "b_9DA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40381,
   "name": "b_9DBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40392,
   "name": "b_9DC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40403,
   "name": "b_9DD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40453,
   "name": "b_9E05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40455,
   "name": "b_9E07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40459,
   "name": "a_9E0B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40463,
   "name": "a_9E0F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40466,
   "name": "b_9E12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40484,
   "name": "b_9E24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40490,
   "name": "b_9E2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40499,
   "name": "b_9E33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40505,
   "name": "b_9E39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40526,
   "name": "b_9E4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40544,
   "name": "b_9E60",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40561,
   "name": "b_9E71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40623,
   "name": "b_9EAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40634,
   "name": "b_9EBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40659,
   "name": "b_9ED3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40679,
   "name": "tbl_terminal_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40680,
   "name": "a_9EE8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40681,
   "name": "a_9EE9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40685,
   "name": "f_9EED",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40693,
   "name": "tbl_terminal_sprites",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40710,
   "name": "tbl_terminal_pointers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40718,
   "name": "terminal_menu",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40723,
   "name": "b_9F13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40762,
   "name": "b_9F3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40776,
   "name": "b_9F48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40785,
   "name": "b_9F51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40819,
   "name": "b_9F73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40821,
   "name": "b_9F75",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40849,
   "name": "b_9F91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40867,
   "name": "b_9FA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40888,
   "name": "b_9FB8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40896,
   "name": "b_9FC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40908,
   "name": "b_9FCC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40918,
   "name": "b_9FD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40929,
   "name": "b_9FE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40941,
   "name": "tbl_terminal_steps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40943,
   "name": "draw_pointer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40945,
   "name": "b_9FF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40954,
   "name": "tbl_pointer_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40957,
   "name": "tbl_terminal_lines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40972,
   "name": "draw_terminal_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40976,
   "name": "b_A010",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40990,
   "name": "str_terminal",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41032,
   "name": "a_A048",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41033,
   "name": "str_terminal_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41182,
   "name": "terminal_select",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41198,
   "name": "r_A0EE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41199,
   "name": "b_A0EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41217,
   "name": "r_A101",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41218,
   "name": "reset_platforms",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41220,
   "name": "j_A104",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41238,
   "name": "b_A116",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41244,
   "name": "b_A11C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41248,
   "name": "b_A120",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41261,
   "name": "b_A12D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41271,
   "name": "b_A137",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41275,
   "name": "b_A13B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41277,
   "name": "j_A13D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41291,
   "name": "b_A14B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41296,
   "name": "b_A150",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41309,
   "name": "b_A15D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41326,
   "name": "b_A16E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41331,
   "name": "b_A173",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41348,
   "name": "b_A184",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41355,
   "name": "j_A18B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41359,
   "name": "b_A18F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41368,
   "name": "b_A198",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41377,
   "name": "check_password",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41384,
   "name": "b_A1A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41396,
   "name": "b_A1B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41408,
   "name": "b_A1C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41438,
   "name": "b_A1DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41449,
   "name": "b_A1E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41466,
   "name": "b_A1FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41491,
   "name": "b_A213",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41507,
   "name": "tbl_terminal_choice_addr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41509,
   "name": "f_A225",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 41511,
   "name": "tbl_counter_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41513,
   "name": "str_password",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41551,
   "name": "tbl_choice_lines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41557,
   "name": "room_wipe_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41607,
   "name": "j_A287",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41617,
   "name": "j_A291",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41633,
   "name": "b_A2A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41644,
   "name": "b_A2AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41668,
   "name": "j_A2C4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41672,
   "name": "b_A2C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41694,
   "name": "b_A2DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41696,
   "name": "b_A2E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41707,
   "name": "clear_two_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41711,
   "name": "b_A2EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41719,
   "name": "room_wipe_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41762,
   "name": "j_A322",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41767,
   "name": "j_A327",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41785,
   "name": "b_A339",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41800,
   "name": "b_A348",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41831,
   "name": "b_A367",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41835,
   "name": "b_A36B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41857,
   "name": "b_A381",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41859,
   "name": "b_A383",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41870,
   "name": "copy_buffer_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41872,
   "name": "b_A390",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41884,
   "name": "draw_room",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41890,
   "name": "b_A3A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41908,
   "name": "b_A3B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41974,
   "name": "j_A3F6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42004,
   "name": "b_A414",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42026,
   "name": "b_A42A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42031,
   "name": "b_A42F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42049,
   "name": "b_A441",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42077,
   "name": "j_A45D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42101,
   "name": "b_A475",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42121,
   "name": "b_A489",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42193,
   "name": "b_A4D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42195,
   "name": "j_A4D3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42209,
   "name": "b_A4E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42218,
   "name": "b_A4EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42227,
   "name": "b_A4F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42244,
   "name": "b_A504",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42251,
   "name": "b_A50B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42294,
   "name": "b_A536",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42307,
   "name": "b_A543",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42321,
   "name": "b_A551",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42345,
   "name": "b_A569",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42356,
   "name": "b_A574",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42360,
   "name": "b_A578",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42367,
   "name": "b_A57F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42403,
   "name": "b_A5A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42423,
   "name": "j_A5B7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42441,
   "name": "draw_code_room",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 42463,
   "name": "b_A5DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42533,
   "name": "b_A625",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42569,
   "name": "b_A649",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42582,
   "name": "b_A656",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42599,
   "name": "b_A667",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42619,
   "name": "tbl_code_room_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42623,
   "name": "tbl_code_room_xy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42631,
   "name": "tbl_code_room_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42635,
   "name": "setup_robots",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42677,
   "name": "j_A6B5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42685,
   "name": "b_A6BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42738,
   "name": "b_A6F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42772,
   "name": "setup_ball",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42810,
   "name": "b_A73A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42813,
   "name": "code_room_flicker",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42848,
   "name": "b_A760",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42864,
   "name": "r_A770",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42865,
   "name": "code_room_puzzle",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 42878,
   "name": "b_A77E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42882,
   "name": "b_A782",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42897,
   "name": "b_A791",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42928,
   "name": "b_A7B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42936,
   "name": "b_A7B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43010,
   "name": "b_A802",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43029,
   "name": "b_A815",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43083,
   "name": "b_A84B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43108,
   "name": "b_A864",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43136,
   "name": "b_A880",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43142,
   "name": "b_A886",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43167,
   "name": "j_A89F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43186,
   "name": "b_A8B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43189,
   "name": "b_A8B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43198,
   "name": "tbl_square_tones",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43230,
   "name": "draw_square",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43246,
   "name": "b_A8EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43258,
   "name": "b_A8FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43272,
   "name": "b_A908",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43278,
   "name": "b_A90E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43282,
   "name": "b_A912",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43297,
   "name": "random_light_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43305,
   "name": "code_room_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43344,
   "name": "play_tone",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43367,
   "name": "b_A967",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43413,
   "name": "b_A995",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43415,
   "name": "b_A997",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43462,
   "name": "b_A9C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43512,
   "name": "tbl_tone_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43520,
   "name": "tbl_tone_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43528,
   "name": "tbl_tone_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43536,
   "name": "flash_squares",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43548,
   "name": "b_AA1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43552,
   "name": "b_AA20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43554,
   "name": "b_AA22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43556,
   "name": "b_AA24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43584,
   "name": "elvin_terminal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43586,
   "name": "b_AA42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43594,
   "name": "b_AA4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43603,
   "name": "b_AA53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43613,
   "name": "b_AA5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43683,
   "name": "b_AAA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43687,
   "name": "b_AAA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43717,
   "name": "b_AAC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43724,
   "name": "b_AACC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43818,
   "name": "b_AB2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43819,
   "name": "a_AB2B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 43833,
   "name": "a_AB39",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 43849,
   "name": "a_AB49",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 43879,
   "name": "tbl_end_timing_ntsc",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43886,
   "name": "tbl_end_timing_pal",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43893,
   "name": "end_mouth_closed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43895,
   "name": "b_AB77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43908,
   "name": "end_mouth_open",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43910,
   "name": "b_AB86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43923,
   "name": "tbl_mouth_open",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43936,
   "name": "tbl_mouth_closed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43949,
   "name": "tbl_mouth_cells",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43962,
   "name": "end_twinkle",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43967,
   "name": "b_ABBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43982,
   "name": "b_ABCE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43993,
   "name": "a_ABD9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 44002,
   "name": "place_agent",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44007,
   "name": "b_ABE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44065,
   "name": "r_AC21",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44066,
   "name": "cell_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44091,
   "name": "b_AC3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44098,
   "name": "b_AC42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44117,
   "name": "draw_platform_top",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44121,
   "name": "b_AC59",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44136,
   "name": "draw_platform_cap",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44138,
   "name": "b_AC6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44155,
   "name": "b_AC7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44168,
   "name": "lift_platforms",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44198,
   "name": "j_ACA6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 44209,
   "name": "r_ACB1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44210,
   "name": "b_ACB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44222,
   "name": "b_ACBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44237,
   "name": "b_ACCD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44246,
   "name": "b_ACD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44258,
   "name": "b_ACE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44262,
   "name": "b_ACE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44273,
   "name": "r_ACF1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44274,
   "name": "b_ACF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44278,
   "name": "platform_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44330,
   "name": "b_AD2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44348,
   "name": "b_AD3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44358,
   "name": "b_AD46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44378,
   "name": "b_AD5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44385,
   "name": "b_AD61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44399,
   "name": "b_AD6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44416,
   "name": "r_AD80",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44417,
   "name": "platform_down",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 44422,
   "name": "b_AD86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44478,
   "name": "b_ADBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44496,
   "name": "b_ADD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44499,
   "name": "b_ADD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44509,
   "name": "b_ADDD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44529,
   "name": "b_ADF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44533,
   "name": "b_ADF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44551,
   "name": "b_AE07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44579,
   "name": "clear_platform_column",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44583,
   "name": "b_AE27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44596,
   "name": "check_ground",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44604,
   "name": "r_AE3C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44605,
   "name": "check_ground_now",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44647,
   "name": "b_AE67",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44653,
   "name": "b_AE6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44659,
   "name": "b_AE73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44674,
   "name": "b_AE82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44687,
   "name": "b_AE8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44707,
   "name": "b_AEA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44717,
   "name": "b_AEAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44720,
   "name": "b_AEB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44727,
   "name": "ground_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44733,
   "name": "b_AEBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44748,
   "name": "agent_raise4",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44750,
   "name": "b_AECE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44767,
   "name": "agent_lower4",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44769,
   "name": "b_AEE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44786,
   "name": "addr_up6",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44791,
   "name": "j_AEF7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 44801,
   "name": "r_AF01",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44802,
   "name": "addr_up_page",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44814,
   "name": "addr_up5",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44822,
   "name": "addr_up4",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44830,
   "name": "addr_up1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44838,
   "name": "addr_down6",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44843,
   "name": "j_AF2B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 44853,
   "name": "r_AF35",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44854,
   "name": "addr_down1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44862,
   "name": "addr_down2",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44870,
   "name": "enter_shaft",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44978,
   "name": "b_AFB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45039,
   "name": "lift_car_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45109,
   "name": "tbl_shaft_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45117,
   "name": "tbl_shaft_colours2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45125,
   "name": "reset_room_platforms",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45140,
   "name": "j_B054",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45154,
   "name": "b_B062",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45158,
   "name": "b_B066",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45173,
   "name": "copy_to_ff",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45177,
   "name": "a_B079",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 45186,
   "name": "b_B082",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45192,
   "name": "randomise_robots",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45194,
   "name": "b_B08A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45210,
   "name": "b_B09A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45227,
   "name": "b_B0AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45229,
   "name": "j_B0AD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45254,
   "name": "b_B0C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45261,
   "name": "choose_password",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45278,
   "name": "b_B0DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45292,
   "name": "b_B0EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45299,
   "name": "make_puzzle_images",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45311,
   "name": "b_B0FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45324,
   "name": "b_B10C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45354,
   "name": "b_B12A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45367,
   "name": "frame_image",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45369,
   "name": "b_B139",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45382,
   "name": "j_B146",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45384,
   "name": "b_B148",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45395,
   "name": "b_B153",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45417,
   "name": "b_B169",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45419,
   "name": "b_B16B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45423,
   "name": "b_B16F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45440,
   "name": "make_pieces",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45443,
   "name": "b_B183",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45451,
   "name": "b_B18B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45460,
   "name": "b_B194",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45471,
   "name": "b_B19F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45495,
   "name": "b_B1B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45504,
   "name": "j_B1C0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45536,
   "name": "b_B1E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45548,
   "name": "j_B1EC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45562,
   "name": "b_B1FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45568,
   "name": "b_B200",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45580,
   "name": "j_B20C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45594,
   "name": "b_B21A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45609,
   "name": "tbl_tones",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45611,
   "name": "a_B22B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 45617,
   "name": "f_B231",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 45625,
   "name": "mask_pair_free",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45674,
   "name": "b_B26A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45677,
   "name": "hide_items",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45679,
   "name": "b_B26F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45703,
   "name": "b_B287",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45714,
   "name": "b_B292",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45732,
   "name": "random_empty_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45757,
   "name": "make_map",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45759,
   "name": "b_B2BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45770,
   "name": "b_B2CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45850,
   "name": "b_B31A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45864,
   "name": "b_B328",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45872,
   "name": "b_B330",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45882,
   "name": "b_B33A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45890,
   "name": "b_B342",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45911,
   "name": "b_B357",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45920,
   "name": "b_B360",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45930,
   "name": "b_B36A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45993,
   "name": "b_B3A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45999,
   "name": "b_B3AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46066,
   "name": "random_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46076,
   "name": "place_room",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46108,
   "name": "b_B41C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46111,
   "name": "b_B41F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46118,
   "name": "b_B426",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46126,
   "name": "b_B42E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46135,
   "name": "b_B437",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46142,
   "name": "b_B43E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46144,
   "name": "j_B440",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46160,
   "name": "claim_grid_square",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46161,
   "name": "j_B451",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46165,
   "name": "b_B455",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46195,
   "name": "b_B473",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46206,
   "name": "b_B47E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46209,
   "name": "b_B481",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46216,
   "name": "join_rooms",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46245,
   "name": "b_B4A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46255,
   "name": "b_B4AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46258,
   "name": "b_B4B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46262,
   "name": "b_B4B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46282,
   "name": "j_B4CA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46296,
   "name": "b_B4D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46300,
   "name": "b_B4DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46322,
   "name": "j_B4F2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46336,
   "name": "may_join",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46350,
   "name": "b_B50E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46352,
   "name": "b_B510",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46356,
   "name": "b_B514",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46358,
   "name": "map_cell_ptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46368,
   "name": "b_B520",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46389,
   "name": "b_B535",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46392,
   "name": "cut_corridor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46400,
   "name": "b_B540",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46410,
   "name": "b_B54A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46430,
   "name": "b_B55E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46442,
   "name": "b_B56A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46445,
   "name": "gfx_map_extra",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46493,
   "name": "tbl_room_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46637,
   "name": "tbl_corridor_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46653,
   "name": "tbl_shaft_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46661,
   "name": "show_map",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46672,
   "name": "b_B650",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46713,
   "name": "b_B679",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46730,
   "name": "b_B68A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46745,
   "name": "draw_map_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46761,
   "name": "b_B6A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46792,
   "name": "b_B6C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46812,
   "name": "b_B6DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46854,
   "name": "b_B706",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46880,
   "name": "b_B720",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46928,
   "name": "lift_sprite_pointer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46934,
   "name": "reveal_room_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46942,
   "name": "b_B75E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46945,
   "name": "reveal_map_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46982,
   "name": "end_of_game",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47059,
   "name": "b_B7D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47128,
   "name": "b_B818",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47160,
   "name": "b_B838",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47182,
   "name": "b_B84E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47198,
   "name": "b_B85E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47212,
   "name": "b_B86C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47232,
   "name": "b_B880",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47243,
   "name": "b_B88B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47258,
   "name": "b_B89A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47271,
   "name": "str_tally",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47373,
   "name": "f_B90D",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 47402,
   "name": "str_tally_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47482,
   "name": "tbl_tally_labels",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47483,
   "name": "f_B97B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 47496,
   "name": "tbl_tally_lengths",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47503,
   "name": "tbl_tally_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47510,
   "name": "draw_box_top",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47514,
   "name": "b_B99A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47521,
   "name": "b_B9A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47533,
   "name": "tbl_box_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47543,
   "name": "f_B9B7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 47553,
   "name": "tbl_box_offsets2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47567,
   "name": "draw_box_side",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47569,
   "name": "b_B9D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47581,
   "name": "tbl_box_sides",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47585,
   "name": "draw_box_bottom",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47589,
   "name": "b_B9E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47598,
   "name": "b_B9EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47610,
   "name": "tbl_box_bottom",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47624,
   "name": "compute_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47707,
   "name": "b_BA5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47735,
   "name": "b_BA77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47743,
   "name": "b_BA7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47755,
   "name": "b_BA8B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47779,
   "name": "b_BAA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47796,
   "name": "b_BAB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47803,
   "name": "b_BABB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47820,
   "name": "b_BACC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47834,
   "name": "b_BADA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47860,
   "name": "tbl_bonus_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47864,
   "name": "score_time_up",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47867,
   "name": "j_BAFB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47869,
   "name": "b_BAFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47880,
   "name": "print_bcd6",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47882,
   "name": "print_bcd6_y",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47888,
   "name": "b_BB10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47898,
   "name": "b_BB1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47907,
   "name": "b_BB23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47918,
   "name": "b_BB2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47923,
   "name": "b_BB33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47937,
   "name": "r_BB41",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47938,
   "name": "print_digit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47941,
   "name": "print_glyph",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47948,
   "name": "add_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47957,
   "name": "add_score_hundreds",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47971,
   "name": "r_BB63",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47972,
   "name": "add_e4",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47981,
   "name": "add_e5",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47995,
   "name": "r_BB7B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47996,
   "name": "draw_tally_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47998,
   "name": "b_BB7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48012,
   "name": "tbl_tally_template",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48025,
   "name": "tbl_tally_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48038,
   "name": "count_hundreds",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48046,
   "name": "b_BBAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48064,
   "name": "r_BBC0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48065,
   "name": "count_five_hundreds",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48073,
   "name": "b_BBC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48089,
   "name": "r_BBD9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48090,
   "name": "print_tally_counts",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48110,
   "name": "b_BBEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48132,
   "name": "hall_of_fame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48142,
   "name": "b_BC0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48162,
   "name": "b_BC22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48175,
   "name": "b_BC2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48194,
   "name": "b_BC42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48199,
   "name": "b_BC47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48224,
   "name": "b_BC60",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48251,
   "name": "b_BC7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48277,
   "name": "b_BC95",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48280,
   "name": "b_BC98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48296,
   "name": "b_BCA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48307,
   "name": "b_BCB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48335,
   "name": "b_BCCF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48357,
   "name": "b_BCE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48358,
   "name": "b_BCE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48371,
   "name": "b_BCF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48375,
   "name": "b_BCF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48408,
   "name": "b_BD18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48461,
   "name": "b_BD4D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48468,
   "name": "b_BD54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48481,
   "name": "b_BD61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48494,
   "name": "b_BD6E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48519,
   "name": "b_BD87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48522,
   "name": "tbl_hof_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48537,
   "name": "str_enter_id",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48573,
   "name": "str_new_game",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48609,
   "name": "tbl_new_game_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48645,
   "name": "unused_be05",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48669,
   "name": "compare_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48671,
   "name": "b_BE1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48684,
   "name": "r_BE2C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48685,
   "name": "read_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48698,
   "name": "b_BE3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48710,
   "name": "b_BE46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48717,
   "name": "b_BE4D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48728,
   "name": "b_BE58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48736,
   "name": "j_BE60",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 48760,
   "name": "tbl_keys",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48824,
   "name": "add_to_ptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48833,
   "name": "r_BEC1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48834,
   "name": "irq_normal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48845,
   "name": "nmi_normal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48856,
   "name": "speech_line",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48857,
   "name": "say_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48901,
   "name": "r_BF05",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48902,
   "name": "b_BF06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48929,
   "name": "r_BF21",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48930,
   "name": "b_BF22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49088,
   "name": "f_BFC0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49089,
   "name": "f_BFC1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49090,
   "name": "f_BFC2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49091,
   "name": "f_BFC3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49094,
   "name": "f_BFC6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49098,
   "name": "f_BFCA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49102,
   "name": "f_BFCE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49408,
   "name": "f_C100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49432,
   "name": "f_C118",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49440,
   "name": "f_C120",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49448,
   "name": "f_C128",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49456,
   "name": "f_C130",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49496,
   "name": "f_C158",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49504,
   "name": "f_C160",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49508,
   "name": "f_C164",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49531,
   "name": "a_C17B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49532,
   "name": "f_C17C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49544,
   "name": "f_C188",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49564,
   "name": "a_C19C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49664,
   "name": "f_C200",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49696,
   "name": "f_C220",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49846,
   "name": "f_C2B6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49920,
   "name": "f_C300",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50052,
   "name": "f_C384",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50091,
   "name": "a_C3AB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50092,
   "name": "f_C3AC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50107,
   "name": "a_C3BB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50108,
   "name": "a_C3BC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50124,
   "name": "a_C3CC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50176,
   "name": "f_C400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50432,
   "name": "f_C500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50832,
   "name": "f_C690",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51088,
   "name": "f_C790",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51264,
   "name": "f_C840",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51344,
   "name": "f_C890",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51600,
   "name": "f_C990",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51648,
   "name": "f_C9C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52992,
   "name": "f_CF00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52995,
   "name": "f_CF03",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53000,
   "name": "f_CF08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53248,
   "name": "gfx_end_charset_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53632,
   "name": "rom_digits_view",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 54272,
   "name": "gfx_end_charset_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55296,
   "name": "a_D800",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55297,
   "name": "f_D801",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55315,
   "name": "a_D813",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55316,
   "name": "a_D814",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55420,
   "name": "f_D87C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55552,
   "name": "f_D900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55808,
   "name": "f_DA00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55818,
   "name": "f_DA0A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55856,
   "name": "f_DA30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55857,
   "name": "f_DA31",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55858,
   "name": "f_DA32",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55940,
   "name": "f_DA84",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55943,
   "name": "f_DA87",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55949,
   "name": "a_DA8D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55978,
   "name": "f_DAAA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55980,
   "name": "f_DAAC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55983,
   "name": "f_DAAF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55989,
   "name": "a_DAB5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56023,
   "name": "f_DAD7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56029,
   "name": "a_DADD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56063,
   "name": "f_DAFF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56064,
   "name": "f_DB00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56065,
   "name": "f_DB01",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56069,
   "name": "a_DB05",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56103,
   "name": "f_DB27",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56109,
   "name": "a_DB2D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56143,
   "name": "f_DB4F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56149,
   "name": "a_DB55",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56182,
   "name": "f_DB76",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56193,
   "name": "a_DB81",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56194,
   "name": "a_DB82",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56197,
   "name": "a_DB85",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56198,
   "name": "a_DB86",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56222,
   "name": "f_DB9E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56320,
   "name": "gfx_end_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57344,
   "name": "speech_phrase_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57376,
   "name": "speech_pitch_cmds",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58022,
   "name": "speech_frame_headers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58669,
   "name": "speech_samples_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59693,
   "name": "speech_samples_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60717,
   "name": "speech_samples_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61741,
   "name": "speech_samples_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62765,
   "name": "speech_samples_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63346,
   "name": "speech_padding",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63488,
   "name": "gfx_end_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64512,
   "name": "f_FC00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64768,
   "name": "f_FD00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65024,
   "name": "f_FE00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65280,
   "name": "f_FF00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65328,
   "name": "f_FF30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65430,
   "name": "f_FF96",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65483,
   "name": "f_FFCB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65484,
   "name": "f_FFCC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65491,
   "name": "f_FFD3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65492,
   "name": "f_FFD4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65500,
   "name": "f_FFDC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65508,
   "name": "f_FFE4",
   "type": "Field",
   "kind": "auto"
  }
 ],
 "comments": [
  {
   "address": 0,
   "type": "line",
   "text": "The 6510's data direction register; the start-up sets it to $2F ($38CC, $71C3)."
  },
  {
   "address": 1,
   "type": "line",
   "text": "The 6510's processor port: the banking. $25 at the start, $35 in play (KERNAL and BASIC out, I/O in); $21 to read the character ROM, $24 for all RAM while blocks are moved."
  },
  {
   "address": 16,
   "type": "line",
   "text": "General pointer, low byte ($10/$11): the screen or buffer cell being drawn, used by most drawing routines (paired with $14/$15 for its colour)."
  },
  {
   "address": 17,
   "type": "line",
   "text": "General pointer, high byte (with $10)."
  },
  {
   "address": 18,
   "type": "line",
   "text": "Second pointer, low byte ($12/$13): the source row when the shaft view scrolls or a room is revealed."
  },
  {
   "address": 19,
   "type": "line",
   "text": "Second pointer, high byte."
  },
  {
   "address": 20,
   "type": "line",
   "text": "Colour pointer, low byte ($14/$15): the colour RAM cell matching $10/$11."
  },
  {
   "address": 21,
   "type": "line",
   "text": "Colour pointer, high byte."
  },
  {
   "address": 22,
   "type": "line",
   "text": "Second colour pointer, low byte ($16/$17), with $12/$13."
  },
  {
   "address": 23,
   "type": "line",
   "text": "Second colour pointer, high byte."
  },
  {
   "address": 24,
   "type": "line",
   "text": "Data pointer, low byte ($18/$19): a table, record or picture being read or written (rooms, pieces, map, messages)."
  },
  {
   "address": 25,
   "type": "line",
   "text": "Data pointer, high byte."
  },
  {
   "address": 26,
   "type": "line",
   "text": "0 in the shaft view, non-zero in a room: the interrupt then leaves the room's colours alone and runs the robots and the ball."
  },
  {
   "address": 27,
   "type": "line",
   "text": "The shaft animation's phase, 0-2 (shaft_step)."
  },
  {
   "address": 28,
   "type": "line",
   "text": "Counts steps of the lift, 0-5; at 6 the map marker moves a line (shaft_step)."
  },
  {
   "address": 29,
   "type": "line",
   "text": "Set while a corridor opening is in view at the bottom of the shaft; the lift cannot go further down."
  },
  {
   "address": 30,
   "type": "line",
   "text": "Set while a corridor opening is in view at the top of the shaft; the lift cannot go further up."
  },
  {
   "address": 31,
   "type": "line",
   "text": "State of the right-hand corridor opening as it scrolls past ($FF none, up to $15); $0B when it is level with the lift, so the agent can walk out."
  },
  {
   "address": 32,
   "type": "line",
   "text": "State of the left-hand corridor opening, as $1F."
  },
  {
   "address": 33,
   "type": "line",
   "text": "First multicolour of the shaft (from tbl_shaft_colours), used by the interrupt for $D022 and for the lift car."
  },
  {
   "address": 34,
   "type": "line",
   "text": "Second multicolour of the shaft, for $D023."
  },
  {
   "address": 35,
   "type": "line",
   "text": "The colours of the two corridor openings ($23 right, $24 left), from the rooms they lead to."
  },
  {
   "address": 37,
   "type": "line",
   "text": "Pitch of the lift's hum on voice 1, rising while the lift moves and fading after."
  },
  {
   "address": 38,
   "type": "line",
   "text": "Pitch of the lift's hum on voice 2."
  },
  {
   "address": 39,
   "type": "line",
   "text": "X of the map marker (sprite 6) on the pocket computer's map: the agent's column on the map."
  },
  {
   "address": 40,
   "type": "line",
   "text": "Y of the map marker: the agent's height in the shaft."
  },
  {
   "address": 43,
   "type": "line",
   "text": "Index of the map square of the room being left or entered (agent_exit_check)."
  },
  {
   "address": 44,
   "type": "line",
   "text": "The agent's three sprites' X and Y: $2C/$2D sprite 1, $2E/$2F sprite 2, $30/$31 sprite 3 (copied to $D002-$D007 by agent_sprites_out)."
  },
  {
   "address": 45,
   "type": "line",
   "text": "Y of the agent's sprite 1 (see $2C)."
  },
  {
   "address": 46,
   "type": "line",
   "text": "X of the agent's sprite 2."
  },
  {
   "address": 47,
   "type": "line",
   "text": "Y of the agent's sprite 2."
  },
  {
   "address": 48,
   "type": "line",
   "text": "X of the agent's sprite 3."
  },
  {
   "address": 49,
   "type": "line",
   "text": "Y of the agent's sprite 3."
  },
  {
   "address": 50,
   "type": "line",
   "text": "The ninth X bits of the agent's sprites, as bits 1-3 of $D010."
  },
  {
   "address": 51,
   "type": "line",
   "text": "The agent's box for collisions: top edge."
  },
  {
   "address": 52,
   "type": "line",
   "text": "The agent's box: bottom edge."
  },
  {
   "address": 53,
   "type": "line",
   "text": "The agent's box: left edge (X/2)."
  },
  {
   "address": 54,
   "type": "line",
   "text": "The agent's box: right edge (X/2)."
  },
  {
   "address": 55,
   "type": "line",
   "text": "The agent's box: middle height."
  },
  {
   "address": 56,
   "type": "line",
   "text": "The agent's box: middle across."
  },
  {
   "address": 57,
   "type": "line",
   "text": "The agent's horizontal step this frame: 0, +5 or -5 ($FB)."
  },
  {
   "address": 58,
   "type": "line",
   "text": "The agent's left edge at the last move, for the collision sweep."
  },
  {
   "address": 59,
   "type": "line",
   "text": "The agent's right edge at the last move."
  },
  {
   "address": 60,
   "type": "line",
   "text": "The agent's feet at the last move."
  },
  {
   "address": 61,
   "type": "line",
   "text": "The agent's top at the last move."
  },
  {
   "address": 62,
   "type": "line",
   "text": "Counts ticks (the interrupt increments it); the agent moves when it reaches the value in $40, and it starts again from 0."
  },
  {
   "address": 63,
   "type": "line",
   "text": "The agent's animation frame: 0-$0D walking, $0E standing, $0F, $10-$1B the somersault (counting down)."
  },
  {
   "address": 64,
   "type": "line",
   "text": "How many ticks between the agent's moves (3)."
  },
  {
   "address": 65,
   "type": "line",
   "text": "Non-zero while the agent falls; counts up, and the fall speeds up with it."
  },
  {
   "address": 66,
   "type": "line",
   "text": "Set when a fall has met the ground."
  },
  {
   "address": 67,
   "type": "line",
   "text": "Non-zero when the agent dies: 1 electrocuted, 2 fallen, 3 killed while a lifting platform was moving (the platform is redrawn); $FF when time is up."
  },
  {
   "address": 68,
   "type": "line",
   "text": "Counts frames for the robots; some commands act every fourth."
  },
  {
   "address": 69,
   "type": "line",
   "text": "Pointer ($45/$46) to the floor under the robot being moved."
  },
  {
   "address": 70,
   "type": "line",
   "text": "High byte of $45."
  },
  {
   "address": 71,
   "type": "line",
   "text": "$FF when the robots run; otherwise they are stopped and the value counts up every fourth tick: 0 after a death, $40 after a snooze password."
  },
  {
   "address": 72,
   "type": "line",
   "text": "Number of the robot being run (0-3)."
  },
  {
   "address": 73,
   "type": "line",
   "text": "Twice the robot's number: its sprite register offset."
  },
  {
   "address": 74,
   "type": "line",
   "text": "Set when a robot turned this frame (the turning sound stays on)."
  },
  {
   "address": 75,
   "type": "line",
   "text": "The robots' colours from the room record ($4B, $4C); robot_colours flashes between them."
  },
  {
   "address": 76,
   "type": "line",
   "text": "The robots' second colour."
  },
  {
   "address": 77,
   "type": "line",
   "text": "Scratch for the robot interpreter: a step, a comparison, a flag."
  },
  {
   "address": 78,
   "type": "line",
   "text": "Set while a robot fires its zap this frame."
  },
  {
   "address": 79,
   "type": "line",
   "text": "Set while the zap's sound plays."
  },
  {
   "address": 80,
   "type": "line",
   "text": "The agent's facing: $01 right, $80 left."
  },
  {
   "address": 81,
   "type": "line",
   "text": "Counts fire presses for the agent (a somersault is started from it)."
  },
  {
   "address": 82,
   "type": "line",
   "text": "The screen row of the agent's feet, for finding a lifting platform."
  },
  {
   "address": 83,
   "type": "line",
   "text": "The column of the agent's feet, for finding a lifting platform."
  },
  {
   "address": 84,
   "type": "line",
   "text": "Offset of the last robot's six-byte block ($55 + 6 \u00d7 robot), $FF for none."
  },
  {
   "address": 85,
   "type": "line",
   "text": "Robot state, six bytes a robot from $55: +0 script pointer into tbl_robot_scripts, +1 mode and blocked flag, +2 current command and its count, +3/+4 screen address under the robot, +5 position within its cell."
  },
  {
   "address": 86,
   "type": "line",
   "text": "Robot state +1: mode bits (1 = half speed) and bit 7 set when the robot is blocked."
  },
  {
   "address": 87,
   "type": "line",
   "text": "Robot state +2: the command being carried out with its remaining count, $FF for none."
  },
  {
   "address": 88,
   "type": "line",
   "text": "Robot state +3/+4: the screen address of the cell under the robot."
  },
  {
   "address": 89,
   "type": "line",
   "text": "Robot state +4."
  },
  {
   "address": 90,
   "type": "line",
   "text": "Robot state +5: the robot's position within its cell (0-7)."
  },
  {
   "address": 109,
   "type": "line",
   "text": "$FF when the room has no active ball, 0 when it has."
  },
  {
   "address": 110,
   "type": "line",
   "text": "The ball's script pointer (an offset into tbl_ball_scripts)."
  },
  {
   "address": 111,
   "type": "line",
   "text": "The ball script's counter."
  },
  {
   "address": 112,
   "type": "line",
   "text": "Frames for the ball's script to wait."
  },
  {
   "address": 113,
   "type": "line",
   "text": "Scratch for the ball's movement."
  },
  {
   "address": 114,
   "type": "line",
   "text": "The agent's centre (agent_centre): Y; also scratch for the ball."
  },
  {
   "address": 115,
   "type": "line",
   "text": "The agent's centre: X/2."
  },
  {
   "address": 116,
   "type": "line",
   "text": "The code room puzzle's number of notes for this visit."
  },
  {
   "address": 117,
   "type": "line",
   "text": "The number of notes the code room $11 asks for next (starts at 2)."
  },
  {
   "address": 118,
   "type": "line",
   "text": "The number of notes the code room $1B asks for next (starts at 2)."
  },
  {
   "address": 119,
   "type": "line",
   "text": "How many notes have been pressed in rising order in the code room."
  },
  {
   "address": 120,
   "type": "line",
   "text": "The last note pressed in the code room."
  },
  {
   "address": 121,
   "type": "line",
   "text": "Scratch for the ninth X bit of an edge; saved by the interrupt with $7A-$7D."
  },
  {
   "address": 122,
   "type": "line",
   "text": "Scratch for solid_at: the row offset ($7A/$7B)."
  },
  {
   "address": 123,
   "type": "line",
   "text": "High byte of $7A."
  },
  {
   "address": 124,
   "type": "line",
   "text": "The screen row address found by solid_at ($7C/$7D)."
  },
  {
   "address": 125,
   "type": "line",
   "text": "High byte of $7C."
  },
  {
   "address": 126,
   "type": "line",
   "text": "The room the agent is in (0-$1F); $11 and $1B are the code rooms."
  },
  {
   "address": 127,
   "type": "line",
   "text": "Which side the agent entered the room from (selects the entry point and the map half)."
  },
  {
   "address": 128,
   "type": "line",
   "text": "Which side the agent left the corridor by."
  },
  {
   "address": 129,
   "type": "line",
   "text": "Pointer ($81/$82) to the current room's lifting-platform list in its record."
  },
  {
   "address": 130,
   "type": "line",
   "text": "High byte of $81."
  },
  {
   "address": 131,
   "type": "line",
   "text": "Set while a stick direction or fire is held, so one press acts once."
  },
  {
   "address": 132,
   "type": "line",
   "text": "The colour of the lifting platforms: brown (9) in rooms whose background is yellow (7), light grey ($0F) elsewhere."
  },
  {
   "address": 133,
   "type": "line",
   "text": "Set while a platform moves (no ball collision then)."
  },
  {
   "address": 134,
   "type": "line",
   "text": "Offset into the room's object records (in sixes) and of its map flag (in fours)."
  },
  {
   "address": 135,
   "type": "line",
   "text": "Pointer ($87/$88) to the room's object flags in its record."
  },
  {
   "address": 136,
   "type": "line",
   "text": "High byte of $87."
  },
  {
   "address": 137,
   "type": "line",
   "text": "The furniture type being drawn."
  },
  {
   "address": 138,
   "type": "line",
   "text": "The security terminal's pointer: 0, 1 or 2."
  },
  {
   "address": 139,
   "type": "line",
   "text": "Raster line of the upper band of the room wipe."
  },
  {
   "address": 140,
   "type": "line",
   "text": "Raster line of the lower band of the room wipe."
  },
  {
   "address": 141,
   "type": "line",
   "text": "The room's background colour, shown inside the wipe."
  },
  {
   "address": 142,
   "type": "line",
   "text": "Which sprites to switch on when the room is shown."
  },
  {
   "address": 143,
   "type": "line",
   "text": "The pocket computer's selected display slot, 0-5, or $FF for none."
  },
  {
   "address": 144,
   "type": "line",
   "text": "The slot the hand took a piece from."
  },
  {
   "address": 145,
   "type": "line",
   "text": "The slot of the piece in the undo buffer, $FF for none."
  },
  {
   "address": 146,
   "type": "line",
   "text": "Six flags, one per display slot ($92-$97): non-zero when it holds a piece."
  },
  {
   "address": 149,
   "type": "line",
   "text": "Slot 3's flag in $92-$97."
  },
  {
   "address": 152,
   "type": "line",
   "text": "Six colours, one per display slot ($98-$9D)."
  },
  {
   "address": 155,
   "type": "line",
   "text": "Slot 3's colour in $98-$9D."
  },
  {
   "address": 158,
   "type": "line",
   "text": "The colour of the piece scrolling into the memory window."
  },
  {
   "address": 159,
   "type": "line",
   "text": "What the pocket computer's hand is doing: 0 choosing a button, 1 on the display, 2 or more on the phone."
  },
  {
   "address": 160,
   "type": "line",
   "text": "The hand's limits: top ($A0), bottom ($A1), left ($A2), right ($A3, in X/2)."
  },
  {
   "address": 161,
   "type": "line",
   "text": "The hand's bottom limit."
  },
  {
   "address": 162,
   "type": "line",
   "text": "The hand's left limit."
  },
  {
   "address": 163,
   "type": "line",
   "text": "The hand's right limit."
  },
  {
   "address": 164,
   "type": "line",
   "text": "Frames until the interrupt gates off voices 2 and 3."
  },
  {
   "address": 165,
   "type": "line",
   "text": "Speech driver: pointer ($A5/$A6) to the next frame header."
  },
  {
   "address": 166,
   "type": "line",
   "text": "High byte of $A5."
  },
  {
   "address": 167,
   "type": "line",
   "text": "Speech driver: pointer ($A7/$A8) to the next pitch command."
  },
  {
   "address": 168,
   "type": "line",
   "text": "High byte of $A7."
  },
  {
   "address": 169,
   "type": "line",
   "text": "Speech driver: pointer ($A9/$AA) to the current frame's sample data."
  },
  {
   "address": 170,
   "type": "line",
   "text": "High byte of $A9."
  },
  {
   "address": 171,
   "type": "line",
   "text": "Speech driver: pointer ($AB/$AC) to the 2-bit decoder's level table."
  },
  {
   "address": 172,
   "type": "line",
   "text": "High byte of $AB; also set to 10 as the first gap of a phrase."
  },
  {
   "address": 173,
   "type": "line",
   "text": "Speech driver: NMIs left in phase 1 of the period."
  },
  {
   "address": 174,
   "type": "line",
   "text": "Speech driver: NMIs left in phase 2."
  },
  {
   "address": 175,
   "type": "line",
   "text": "Speech driver: NMIs left in the silent gap."
  },
  {
   "address": 193,
   "type": "line",
   "text": "Counts game hours; a room entered after one passes triggers voice line 1."
  },
  {
   "address": 195,
   "type": "line",
   "text": "The memory window's position in the list of found pieces."
  },
  {
   "address": 196,
   "type": "line",
   "text": "build_piece's two mask pointers ($C4/$C5 and $C6/$C7)."
  },
  {
   "address": 198,
   "type": "line",
   "text": "build_piece's second mask pointer."
  },
  {
   "address": 200,
   "type": "line",
   "text": "Nine flags, one per puzzle ($C8-$D0): set when it has been solved."
  },
  {
   "address": 209,
   "type": "line",
   "text": "The game clock's ticks within the second (0-59)."
  },
  {
   "address": 210,
   "type": "line",
   "text": "The game clock's seconds, decimal."
  },
  {
   "address": 211,
   "type": "line",
   "text": "The game clock's minutes, decimal."
  },
  {
   "address": 212,
   "type": "line",
   "text": "The game clock's hours, 1-12, decimal ($12 at the start: twelve o'clock); six o'clock ends the game."
  },
  {
   "address": 213,
   "type": "line",
   "text": "Non-zero while the clock is suspended (the pause button)."
  },
  {
   "address": 214,
   "type": "line",
   "text": "Puzzle pieces found, for the score."
  },
  {
   "address": 215,
   "type": "line",
   "text": "Passwords found, for the score."
  },
  {
   "address": 216,
   "type": "line",
   "text": "Puzzles solved, for the score."
  },
  {
   "address": 217,
   "type": "line",
   "text": "The score, decimal: $D9 units, $DA hundreds, $DB ten-thousands."
  },
  {
   "address": 218,
   "type": "line",
   "text": "The score's hundreds and thousands."
  },
  {
   "address": 219,
   "type": "line",
   "text": "The score's ten-thousands and hundred-thousands."
  },
  {
   "address": 220,
   "type": "line",
   "text": "Set when the mission is won."
  },
  {
   "address": 222,
   "type": "line",
   "text": "Set while fire is held, so a press acts once."
  },
  {
   "address": 223,
   "type": "line",
   "text": "Set while a key is held during the name entry."
  },
  {
   "address": 224,
   "type": "line",
   "text": "The tick counter, incremented by the interrupt once a frame (60 a second on NTSC, 50 on PAL); wait_ticks waits on it."
  },
  {
   "address": 225,
   "type": "line",
   "text": "A noise byte rotated every frame by the interrupt, used for sound pitches."
  },
  {
   "address": 227,
   "type": "line",
   "text": "A second shift-register random byte, stepped every frame by the interrupt."
  },
  {
   "address": 228,
   "type": "line",
   "text": "Scratch byte used by many routines ($E4-$E9)."
  },
  {
   "address": 229,
   "type": "line",
   "text": "Scratch byte paired with $E4 for many pointers and counts (often the high byte)."
  },
  {
   "address": 230,
   "type": "line",
   "text": "Scratch byte: a third count or a pointer low byte ($E6/$E7)."
  },
  {
   "address": 231,
   "type": "line",
   "text": "Scratch byte: often the high byte paired with $E6."
  },
  {
   "address": 232,
   "type": "line",
   "text": "Scratch byte; also the map generator's direction flags and build_piece's image pointer ($E8/$E9)."
  },
  {
   "address": 233,
   "type": "line",
   "text": "Scratch byte: high byte of $E8 pointers, and the row counter of the map generator."
  },
  {
   "address": 234,
   "type": "line",
   "text": "The object being searched."
  },
  {
   "address": 235,
   "type": "line",
   "text": "The random-number generator's 16-bit shift register, low byte ($EB/$EC)."
  },
  {
   "address": 236,
   "type": "line",
   "text": "High byte of the random shift register."
  },
  {
   "address": 252,
   "type": "line",
   "text": "Three bytes of code in zero page, `inc $E0 / rts`, put there by the loader's last stage ($B005 copies them from $B0EF): the routine irq_trampoline calls while speech plays, so that the tick still counts."
  },
  {
   "address": 2048,
   "type": "line",
   "text": "Speech sample buffer, built at run time: the frame decoders ($0A68, $0AE5, $0B73, $0BE3) write one frame's volume levels here ($0800-$087F, 32 or 128 entries), and $0BFD writes an averaged copy at $0820. The NMI handlers read it through the self-modified operand of `lda $0860` at $0884/$08A5. In play it holds the last frame of the last phrase; at the game's start it held a copy of $0880-$08FF left by the unpacker."
  },
  {
   "address": 2176,
   "type": "line",
   "text": "Speech driver entry, the only address the game calls ($BEF7, $BF08): jumps to speech_command at $0C2F. A = phrase number, or $FF (ask whether a phrase is playing), $FE (stop), $FD (set the sample base address from X/Y)."
  },
  {
   "address": 2179,
   "type": "line",
   "text": "NMI handler, phase 1 of a sample period: takes the next level from the speech buffer (operand $0885 is the index, stepped up by one each NMI), halves it and writes it to the SID volume register $D418, which with no voice sounding makes the level audible as a sample. Acknowledges CIA 2 ($DD0D). Counts $AD down; when it reaches 0 it switches the NMI vector to nmi_speech_down ($08A4) and hands the index on to it."
  },
  {
   "address": 2181,
   "type": "line",
   "text": "Operand low byte of `lda $0860` in nmi_speech_up: the speech buffer index, stepped up each NMI ($0892) and set from $0CF2 at each period ($08FB)."
  },
  {
   "address": 2212,
   "type": "line",
   "text": "NMI handler, phase 2: plays the buffer backwards from where phase 1 stopped (operand $08A6 stepped down), counting $AE. With $AF zero the period ends (speech_next_period at $08F2); otherwise it switches to nmi_speech_hold ($08C3)."
  },
  {
   "address": 2214,
   "type": "line",
   "text": "Operand low byte of `lda $0860` in nmi_speech_down: the index stepped down, taken over from nmi_speech_up ($089F)."
  },
  {
   "address": 2243,
   "type": "line",
   "text": "NMI handler, phase 3: writes a fixed level 7 ($0E halved) to $D418, a silent gap, for $AF timer periods, switching to nmi_speech_wait ($08D9) after the first."
  },
  {
   "address": 2265,
   "type": "line",
   "text": "NMI handler for the rest of the silent gap: acknowledges the timer and counts $AF down without touching the volume; at 0 goes on to speech_next_period ($08F1)."
  },
  {
   "address": 2273,
   "type": "line",
   "text": "NMI handler installed when a phrase ends: stops CIA 2 timer B ($DD0F = $90), leaves the volume at 7 and returns. No further NMIs follow until the next phrase starts the timer."
  },
  {
   "address": 2289,
   "type": "line",
   "text": "Start of the next pitch period, entered from the NMI handlers: reloads the handler chain from the driver's variables ($0CF1 next handler, $0CF2 buffer start index, $0CF3 phase lengths into $AD/$AE, $0CF4 gap into $AF). Counts frames in $0CF7; when a frame is used up it advances the frame counter $0CF5, fetches the next frame header (speech_frame_header at $09B6 when $0CF5 wraps) and calls the decoder whose address is patched into the `jsr` at $092E. Otherwise it steps the pitch (speech_pitch_step at $0B1D) and, when the buffer start changed, rebuilds the smoothed half of the buffer ($0BFD)."
  },
  {
   "address": 2321,
   "type": "line",
   "text": "Operand low byte of the `jmp $0939` in speech_next_period: $39 for the normal tail, $51 for the window shift ($0951), $37 for repeat frames; written by the frame-header code."
  },
  {
   "address": 2351,
   "type": "line",
   "text": "Operand low byte of the `jsr $097B` in speech_next_period: selects the frame decoder ($8C, $8F, $92, $98) or the end ($7B) or the start gap ($81)."
  },
  {
   "address": 2385,
   "type": "line",
   "text": "Alternative tail of speech_next_period, selected by patching the `jmp` at $0910 to $0951: moves the playback window ($0CF2) forward by $0CF9 and shortens the phase length $0CF3 by the same until it reaches 16, then resets both."
  },
  {
   "address": 2427,
   "type": "line",
   "text": "Makes nmi_speech_end ($08E1) the next handler: the phrase is finished. Selected as the decoder of speech_next_period when the phrase's last frame is reached."
  },
  {
   "address": 2433,
   "type": "line",
   "text": "Sets the next handler to nmi_speech_hold ($08C3) with a gap of $80 periods; used at the start of a phrase."
  },
  {
   "address": 2444,
   "type": "line",
   "text": "Entry stub of the decoder table patched into $092F: jumps to the 1-bit decoder at $0B73."
  },
  {
   "address": 2447,
   "type": "line",
   "text": "Entry stub: jumps to the 1-bit decoder's continuation at $0BE3."
  },
  {
   "address": 2450,
   "type": "line",
   "text": "Entry stub: 2-bit decoder ($0A68), then the common frame end at $099B."
  },
  {
   "address": 2456,
   "type": "line",
   "text": "Entry stub: 4-bit decoder ($0AE5), then falls into speech_frame_end."
  },
  {
   "address": 2459,
   "type": "line",
   "text": "After a frame is decoded: if bit 7 of the frame's flags ($09B7) is set, flips the buffer half (bit 6) and restarts the window; otherwise rebuilds the smoothed copy ($0BFD). Then steps the pitch ($0B1D)."
  },
  {
   "address": 2486,
   "type": "line",
   "text": "Reads the next 4-byte frame header from ($A5), unless bit 7 of the previous header's byte 3 (kept as the operand at $09B7) says that frame was the last: then it patches the decoder `jsr` at $092E to speech_set_end ($097B). Byte 0: bits 0-5 the number of decodes this header covers ($0CF5, ORed with $C0 and counted up to 0); bit 6 the window (64 or 32 entries) for the 1-bit encodings; bits 6-7 the phase length for the 4-bit and 2-bit ones (tbl_speech_len). Byte 1: bits 3-7 the periods each decode plays ($0CF6, ORed with $E0); bit 2 a silent frame (speech_frame_repeat); bits 0-1 the encoding: 0 the 2-bit loop with the narrow levels (via $0BE3), 1 one bit a sample ($0B73), 2 four bits ($0AE5), 3 two bits ($0A68). Bytes 2-3: the offset of the sample data from the sample base, into $A9/$AA; byte 3's bit 6 plays the next decode without blending (speech_frame_end) and bit 7 marks the last frame. Patches the `jmp` at $0910, then steps $A5 by 4. Checked by a port that gives the game's volume writes for all eight lines."
  },
  {
   "address": 2487,
   "type": "line",
   "text": "Immediate operand of `lda #$8F` in speech_frame_header: holds the current frame header's flag byte (bit 7 set while frames remain; bit 6 the buffer half), written by the decoders and the frame-repeat code."
  },
  {
   "address": 2631,
   "type": "line",
   "text": "Four phase lengths for the 2-bit and 4-bit encodings ($08, $10, $18, $20), chosen by the top two bits of the frame's first byte at $0A2E."
  },
  {
   "address": 2635,
   "type": "line",
   "text": "Frame header path for a repeated frame: takes the flags from header byte 3 and selects the window-shift tail ($0911 = $37) and the start-gap handler ($092F = $81)."
  },
  {
   "address": 2664,
   "type": "line",
   "text": "2-bit decoder: each byte of sample data holds four 2-bit codes; each code picks one of four levels from the level table chosen by the byte's low two bits ($0AD9, $0ADD or $0AE1, pointer in $AB/$AC). Fills the speech buffer $0800,x up to the length patched into $0AD5."
  },
  {
   "address": 2723,
   "type": "line",
   "text": "Immediate operand of `lda #$00` in speech_dec_2bit: the current data byte, saved there ($0A75, $0A96) and read back for its next 2-bit fields."
  },
  {
   "address": 2773,
   "type": "line",
   "text": "Operand of `cpx #$00` in speech_dec_2bit: the end of the frame in the buffer, set from the window length ($0A6B, $0BE9)."
  },
  {
   "address": 2777,
   "type": "line",
   "text": "Three level tables of four volume levels each (doubled, halved again on output) for the 2-bit decoder: $0C-$12 (quiet, narrow), $08-$14, $02-$1A (loud, wide)."
  },
  {
   "address": 2789,
   "type": "line",
   "text": "4-bit decoder: each byte of sample data holds two 4-bit levels (masked to even values with AND #$1E); fills the buffer up to the length patched into $0B19 (32 by default)."
  },
  {
   "address": 2841,
   "type": "line",
   "text": "Operand of `cpx #$20` in speech_dec_4bit: the frame's end in the buffer, set at $0AE8."
  },
  {
   "address": 2845,
   "type": "line",
   "text": "Steps the pitch once per period: while the count $0CFB runs, adds the step $0CFD to the period length $0CFC and sets the gap $0CF4 to half of it. When the count runs out, reads the next pitch command from ($A7): a new period length, a 4-bit count and a 4-bit index into tbl_speech_pitch ($0B63) for the new step."
  },
  {
   "address": 2915,
   "type": "line",
   "text": "Sixteen signed pitch steps for speech_pitch_step: -12, -10, ... -2, -1, 0, 1, 2, ... 14 (two's complement $F4-$0E)."
  },
  {
   "address": 2931,
   "type": "line",
   "text": "1-bit decoder: each bit of sample data gives one of two levels, $0E or $10, so the waveform moves up or down by one step around the middle. Writes the buffer up to the length patched into $0BAB."
  },
  {
   "address": 2987,
   "type": "line",
   "text": "Operand of `cpx #$80` in speech_dec_1bit: the frame's end in the buffer, set at $0B79."
  },
  {
   "address": 2991,
   "type": "line",
   "text": "Writes four buffer entries from the low four bits of A, one per bit: $10 for a 1, $0E for a 0."
  },
  {
   "address": 3012,
   "type": "line",
   "text": "Second entry of speech_put_bits: writes the level already in A and the remaining two bits of Y; used by speech_dec_1bit for the first byte of a frame."
  },
  {
   "address": 3043,
   "type": "line",
   "text": "Decoder for encoding 0: sets the window start and length as for a 1-bit frame ($0CF8), then runs the 2-bit loop at $0A75 with the first byte's low two bits forced to 1, so the narrow level table at $0AD9 is used. None of the eight voice lines has a frame in this encoding."
  },
  {
   "address": 3069,
   "type": "line",
   "text": "Builds the averaged half of the speech buffer: for each of $0CF3 entries, the mean of $0800,x and $0860,x (with a self-modified base) goes to $0820,x, which softens the step between two frames."
  },
  {
   "address": 3096,
   "type": "line",
   "text": "Operand low byte of `lda $0800,x` in speech_smooth: the start of the previous window ($0CFA)."
  },
  {
   "address": 3100,
   "type": "line",
   "text": "Operand low byte of `adc $0860,x` in speech_smooth: the start of the current window ($0CF2)."
  },
  {
   "address": 3104,
   "type": "line",
   "text": "Operand low byte of `sta $0820,x` in speech_smooth: where the averaged entries go, the other half of the buffer (bit 6 flipped, +$20), kept as the next window start."
  },
  {
   "address": 3119,
   "type": "line",
   "text": "The driver's command handler (called through speech_say at $0880). A = $FF: returns the playing flag (bit 7 of $DD0F's start bit, or $80 when the ROMs are banked in); $FE: stops the timer ($0C60); $FD: stores X/Y as the sample base $0CFE/$0CFF; any other value: looks up the phrase ($0CAB), sets the first gap of 10 periods, installs nmi_speech_up's chain ($0C89), points the NMI vector's high byte at page $08 and starts the timer ($0C71)."
  },
  {
   "address": 3168,
   "type": "line",
   "text": "Stops CIA 2 timer B ($DD0F = $90)."
  },
  {
   "address": 3185,
   "type": "line",
   "text": "Starts CIA 2 timer B in continuous mode with a latch of 100 ($64): an NMI every 101 cycles, 9,755 a second on PAL. Enables the timer NMI ($DD0D = $82) and clears any pending one."
  },
  {
   "address": 3209,
   "type": "line",
   "text": "Resets the driver for a new phrase: the `jmp` at $0910 to its normal tail, the decoder `jsr` to speech_start_gap ($0981), the frame counters to $FE, and the NMI vector's low byte to $C3 (nmi_speech_hold)."
  },
  {
   "address": 3243,
   "type": "line",
   "text": "Looks up phrase A in the phrase table at the start of the sample data (base $0CFE/$0CFF, which the game sets to $E000): entry 4 \u00d7 A holds two offsets, the phrase's pitch commands (into $A7/$A8) and its frame headers (into $A5/$A6), each relative to the base."
  },
  {
   "address": 3307,
   "type": "line",
   "text": "Six bytes reading \"PTR\" and three spaces in PETSCII; nothing in the driver reads them (no reference found by opcodes.py --refs). Probably a leftover from the tool that built the driver."
  },
  {
   "address": 3313,
   "type": "line",
   "text": "The speech driver's variables: $0CF1 next NMI handler (low byte), $0CF2 buffer window start, $0CF3 phase length, $0CF4 gap length, $0CF5/$0CF6/$0CF7 frame and repeat counters, $0CF8/$0CF9 window length and shift, $0CFA previous window, $0CFB pitch count, $0CFC period length, $0CFD pitch step, $0CFE/$0CFF sample base ($E000)."
  },
  {
   "address": 3314,
   "type": "line",
   "text": "speech_vars +1: the buffer window's start index."
  },
  {
   "address": 3315,
   "type": "line",
   "text": "speech_vars +2: the phase length, reloaded into $AD/$AE at each period."
  },
  {
   "address": 3316,
   "type": "line",
   "text": "speech_vars +3: the gap length, reloaded into $AF at each period."
  },
  {
   "address": 3317,
   "type": "line",
   "text": "speech_vars +4: the frame counter, counted up to 0 by speech_next_period; a new frame header is read when it wraps."
  },
  {
   "address": 3318,
   "type": "line",
   "text": "speech_vars +5: the repeat count of the current frame, reloaded into $0CF7."
  },
  {
   "address": 3319,
   "type": "line",
   "text": "speech_vars +6: periods left before the next frame."
  },
  {
   "address": 3320,
   "type": "line",
   "text": "speech_vars +7: the window length (32 or 16 entries)."
  },
  {
   "address": 3321,
   "type": "line",
   "text": "speech_vars +8: the window shift per period."
  },
  {
   "address": 3322,
   "type": "line",
   "text": "speech_vars +9: the previous window start, for speech_smooth."
  },
  {
   "address": 3323,
   "type": "line",
   "text": "speech_vars +10: the pitch command's remaining count."
  },
  {
   "address": 3324,
   "type": "line",
   "text": "speech_vars +11: the period length (pitch)."
  },
  {
   "address": 3325,
   "type": "line",
   "text": "speech_vars +12: the pitch step added each period."
  },
  {
   "address": 3326,
   "type": "line",
   "text": "speech_vars +13/+14: the sample base, $E000, set by the game through command $FD."
  },
  {
   "address": 3327,
   "type": "line",
   "text": "speech_vars +14: the sample base's high byte."
  },
  {
   "address": 3328,
   "type": "line",
   "text": "Characters of the strip at the left of the shaft view and pocket computer, 15 rows of 6 (drawn by draw_shaft_view at $4241, and its first row restored by scroll_shaft_up at $4011)."
  },
  {
   "address": 3418,
   "type": "line",
   "text": "Colours of gfx_panel_edge's 90 cells."
  },
  {
   "address": 3508,
   "type": "line",
   "text": "The three glyphs of a lifting platform's top ($49-$4B)."
  },
  {
   "address": 3511,
   "type": "line",
   "text": "The lower row of a lifting platform's cap ($4C-$4E)."
  },
  {
   "address": 3514,
   "type": "line",
   "text": "The upper row of a lifting platform's cap ($4F-$51)."
  },
  {
   "address": 3517,
   "type": "line",
   "text": "For the three phases of the shaft animation ($1B): non-zero where a new rock row carries the corridor colour (read by the shaft row drawers at $7709/$782E)."
  },
  {
   "address": 3520,
   "type": "line",
   "text": "Eight characters drawn at $4010 when a corridor opening comes into view at the bottom of the shaft ($7857)."
  },
  {
   "address": 3528,
   "type": "line",
   "text": "Eight characters drawn at $4240 when a corridor opening comes into view at the top of the shaft ($773D)."
  },
  {
   "address": 3536,
   "type": "line",
   "text": "For the two sides of the shaft (X = 0 right, 1 left): the column of the corridor's end cell."
  },
  {
   "address": 3538,
   "type": "line",
   "text": "For the two sides: the last column of a 16-cell corridor row (index into the row tables and the screen)."
  },
  {
   "address": 3540,
   "type": "line",
   "text": "For the two sides: the last column of a 17-cell row."
  },
  {
   "address": 3542,
   "type": "line",
   "text": "For the two sides: a mask tested against the map cell to see whether a corridor opens on that side."
  },
  {
   "address": 3544,
   "type": "line",
   "text": "A 40-cell row of corridor ceiling glyphs, of which each side takes its 16 cells."
  },
  {
   "address": 3584,
   "type": "line",
   "text": "A 40-cell row of the corridor's end wall."
  },
  {
   "address": 3624,
   "type": "line",
   "text": "A 40-cell row of corridor floor glyphs."
  },
  {
   "address": 3664,
   "type": "line",
   "text": "Low bytes of the colour RAM addresses of the shaft view's 14 rows ($D828, $D850 ... $DA30, with tbl_colour_rows_hi)."
  },
  {
   "address": 3678,
   "type": "line",
   "text": "High bytes of the shaft view's colour row addresses."
  },
  {
   "address": 3692,
   "type": "line",
   "text": "The ninth-X-bit masks of the four robot sprites 4-7: $10, $20, $40, $80."
  },
  {
   "address": 3696,
   "type": "line",
   "text": "Addresses of the 32 room records, room $00 first; read by draw_room, the death sequence and corridor_colour."
  },
  {
   "address": 3697,
   "type": "line",
   "text": "High bytes of tbl_room_ptrs, read with `lda $0E71,x`."
  },
  {
   "address": 3760,
   "type": "line",
   "text": "Room $17's record (pointer at $0E70 + 46), 97 bytes: background cyan, multicolours white and light red, floors grey; 4 floor segments, 1 gap, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 2 lifting platforms and 9 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 3857,
   "type": "line",
   "text": "Room $1F's record (pointer at $0E70 + 62), 105 bytes: background green, multicolours white and light blue, floors light grey; 7 floor segments, 1 gap, the agent's two entry points, 1 robot, a ball (script $1E), sprite and robot colours, 3 lifting platforms and 8 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 3962,
   "type": "line",
   "text": "Room $16's record (pointer at $0E70 + 44), 191 bytes: background cyan, multicolours light green and green, floors brown; 27 floor segments, 1 gap, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 5 lifting platforms and 10 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "Room $16's record continued past $1000 (it starts at $0F7A): the end of its object list."
  },
  {
   "address": 4153,
   "type": "line",
   "text": "Room $1A's record (pointer at $0E70 + 52), 105 bytes: background green, multicolours white and light blue, floors dark grey; 15 floor segments, 1 gap, the agent's two entry points, 2 robots, a ball (script $24), sprite and robot colours, 1 lifting platform and 5 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4258,
   "type": "line",
   "text": "Room $06's record (pointer at $0E70 + 12), 99 bytes: background yellow, multicolours grey and red, floors orange; 10 floor segments, 2 gaps, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 3 lifting platforms and 3 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4357,
   "type": "line",
   "text": "Room $07's record (pointer at $0E70 + 14), 87 bytes: background yellow, multicolours white and light blue, floors dark grey; 17 floor segments, 2 gaps, the agent's two entry points, 1 robot, a ball (script $1E), sprite and robot colours, 0 lifting platforms and 1 object (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4444,
   "type": "line",
   "text": "Room $0E's record (pointer at $0E70 + 28), 119 bytes: background cyan, multicolours white and orange, floors light grey; 12 floor segments, 2 gaps, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 2 lifting platforms and 7 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4563,
   "type": "line",
   "text": "Room $0D's record (pointer at $0E70 + 26), 111 bytes: background green, multicolours light grey and light blue, floors light blue; 10 floor segments, 2 gaps, the agent's two entry points, 3 robots, no ball, sprite and robot colours, 3 lifting platforms and 6 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4674,
   "type": "line",
   "text": "Room $02's record (pointer at $0E70 + 4), 104 bytes: background green, multicolours white and light blue, floors dark grey; 9 floor segments, 2 gaps, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 3 lifting platforms and 4 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4778,
   "type": "line",
   "text": "Room $1E's record (pointer at $0E70 + 60), 110 bytes: background cyan, multicolours light blue and grey, floors orange; 12 floor segments, 1 gap, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 3 lifting platforms and 5 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4888,
   "type": "line",
   "text": "Room $0F's record (pointer at $0E70 + 30), 100 bytes: background yellow, multicolours white and orange, floors red; 10 floor segments, 2 gaps, the agent's two entry points, 1 robot, no ball, sprite and robot colours, 4 lifting platforms and 4 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 4988,
   "type": "line",
   "text": "Room $13's record (pointer at $0E70 + 38), 123 bytes: background cyan, multicolours white and orange, floors light red; 13 floor segments, 1 gap, the agent's two entry points, 3 robots, no ball, sprite and robot colours, 5 lifting platforms and 5 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 5111,
   "type": "line",
   "text": "Room $15's record (pointer at $0E70 + 42), 103 bytes: background cyan, multicolours white and light blue, floors grey; 12 floor segments, 1 gap, the agent's two entry points, 3 robots, no ball, sprite and robot colours, 3 lifting platforms and 4 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 5214,
   "type": "line",
   "text": "Room $05's record (pointer at $0E70 + 10), 124 bytes: background cyan, multicolours white and brown, floors light grey; 16 floor segments, 2 gaps, the agent's two entry points, 2 robots, no ball, sprite and robot colours, 4 lifting platforms and 4 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items). This room holds Elvin's control (furniture $15, contents $FE): searching it with the whole password wins the game."
  },
  {
   "address": 5338,
   "type": "line",
   "text": "Room $19's record (pointer at $0E70 + 50), 94 bytes: background yellow, multicolours white and grey, floors dark grey; 8 floor segments, 1 gap, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 3 lifting platforms and 4 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 5432,
   "type": "line",
   "text": "Room $0B's record (pointer at $0E70 + 22), 130 bytes: background green, multicolours light grey and brown, floors light grey; 13 floor segments, 2 gaps, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 4 lifting platforms and 7 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 5562,
   "type": "line",
   "text": "Room $00's record (pointer at $0E70 + 0), 129 bytes: background yellow, multicolours white and light red, floors light red; 18 floor segments, 2 gaps, the agent's two entry points, 3 robots, no ball, sprite and robot colours, 1 lifting platform and 8 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 5691,
   "type": "line",
   "text": "Room $03's record (pointer at $0E70 + 6), 145 bytes: background yellow, multicolours white and light blue, floors light blue; 16 floor segments, 2 gaps, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 5 lifting platforms and 7 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 5836,
   "type": "line",
   "text": "Room $1D's record (pointer at $0E70 + 58), 100 bytes: background cyan, multicolours light grey and brown, floors brown; 11 floor segments, 1 gap, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 1 lifting platform and 6 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 5936,
   "type": "line",
   "text": "Room $12's record (pointer at $0E70 + 36), 110 bytes: background green, multicolours grey and red, floors light grey; 10 floor segments, 1 gap, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 4 lifting platforms and 5 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 6046,
   "type": "line",
   "text": "Room $14's record (pointer at $0E70 + 40), 86 bytes: background yellow, multicolours orange and light red, floors red; 8 floor segments, 1 gap, the agent's two entry points, 0 robots, a ball (script $1E), sprite and robot colours, 1 lifting platform and 7 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 6132,
   "type": "line",
   "text": "Room $0C's record (pointer at $0E70 + 24), 158 bytes: background green, multicolours yellow and grey, floors brown; 24 floor segments, 2 gaps, the agent's two entry points, 2 robots, a ball (script $1E), sprite and robot colours, 5 lifting platforms and 4 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 6290,
   "type": "line",
   "text": "Room $1C's record (pointer at $0E70 + 56), 124 bytes: background green, multicolours light green and light blue, floors light blue; 12 floor segments, 1 gap, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 3 lifting platforms and 8 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 6414,
   "type": "line",
   "text": "Room $0A's record (pointer at $0E70 + 20), 127 bytes: background cyan, multicolours white and brown, floors light grey; 15 floor segments, 2 gaps, the agent's two entry points, 3 robots, a ball (script $00), sprite and robot colours, 4 lifting platforms and 5 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 6541,
   "type": "line",
   "text": "Room $01's record (pointer at $0E70 + 2), 127 bytes: background cyan, multicolours white and light blue, floors light grey; 13 floor segments, 2 gaps, the agent's two entry points, 3 robots, no ball, sprite and robot colours, 4 lifting platforms and 7 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 6668,
   "type": "line",
   "text": "Room $09's record (pointer at $0E70 + 18), 115 bytes: background cyan, multicolours white and light blue, floors grey; 10 floor segments, 2 gaps, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 5 lifting platforms and 4 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 6783,
   "type": "line",
   "text": "Room $10's record (pointer at $0E70 + 32), 146 bytes: background green, multicolours white and light grey, floors light blue; 14 floor segments, 1 gap, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 6 lifting platforms and 8 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 6929,
   "type": "line",
   "text": "Room $08's record (pointer at $0E70 + 16), 88 bytes: background cyan, multicolours light blue and brown, floors light grey; 4 floor segments, 2 gaps, the agent's two entry points, 4 robots, no ball, sprite and robot colours, 2 lifting platforms and 6 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 7017,
   "type": "line",
   "text": "Room $04's record (pointer at $0E70 + 8), 89 bytes: background yellow, multicolours light grey and red, floors grey; 8 floor segments, 2 gaps, the agent's two entry points, 3 robots, no ball, sprite and robot colours, 2 lifting platforms and 4 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 7106,
   "type": "line",
   "text": "Room $18's record (pointer at $0E70 + 48), 100 bytes: background green, multicolours white and light blue, floors light blue; 8 floor segments, 1 gap, the agent's two entry points, 3 robots, no ball, sprite and robot colours, 2 lifting platforms and 7 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items)."
  },
  {
   "address": 7206,
   "type": "line",
   "text": "Room $11's record (pointer at $0E70 + 34), 159 bytes: background cyan, multicolours light blue and light grey, floors light blue; 1 floor segment, 1 gap, the agent's two entry points, 0 robots, no ball, sprite and robot colours, 0 lifting platforms and 33 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items). One of the two code rooms: no floors but the one, no robots; the first 32 objects are the squares of the big screen (furniture $18/$19) and the 33rd is the computer (furniture $1A, contents $FB), searched to start the musical puzzle."
  },
  {
   "address": 7365,
   "type": "line",
   "text": "Room $1B's record (pointer at $0E70 + 54), 159 bytes: background yellow, multicolours light blue and light grey, floors light blue; 1 floor segment, 1 gap, the agent's two entry points, 0 robots, no ball, sprite and robot colours, 0 lifting platforms and 33 objects (position, furniture type and contents; the contents of searchable furniture are rewritten for each game by hide_items). One of the two code rooms: no floors but the one, no robots; the first 32 objects are the squares of the big screen (furniture $18/$19) and the 33rd is the computer (furniture $1A, contents $FB), searched to start the musical puzzle."
  },
  {
   "address": 7524,
   "type": "line",
   "text": "The original lifting-platform lists of 29 rooms, each ending with $FF: copied back into the room records at the start of each game (reset_room_platforms) and by a lift-init password (reset_platforms)."
  },
  {
   "address": 8036,
   "type": "line",
   "text": "Inside tbl_platform_originals: the address copy_to_ff's `lda $1F64,x` names as loaded; reset_room_platforms changes its high byte to $1D before use, so the copy really starts at $1D64. The lists continue to $1FD9."
  },
  {
   "address": 8154,
   "type": "line",
   "text": "Addresses of the platform lists inside the 29 room records that have platforms, ending with $FFFF: where reset_platforms and reset_room_platforms copy to."
  },
  {
   "address": 8155,
   "type": "line",
   "text": "High bytes of tbl_room_platform_ptrs, read with `lda $1FDB,y`."
  },
  {
   "address": 8214,
   "type": "line",
   "text": "For each entry of tbl_room_platform_ptrs, the address of its original in tbl_platform_originals, ending with $FFFF."
  },
  {
   "address": 8215,
   "type": "line",
   "text": "High bytes of tbl_platform_original_ptrs."
  },
  {
   "address": 8274,
   "type": "line",
   "text": "Thirty more addresses inside the room records (one per room, $0EEC, $0F59 ...). No instruction was found that reads them: the only indexed reader of the table before it stops at $FFFF."
  },
  {
   "address": 8334,
   "type": "line",
   "text": "The eight possible passwords, nine letters each in the $5800 alphabet: SWORDFISH, ASPARAGUS, ARTICHOKE, CROCODILE, ALLIGATOR, ALBATROSS, BUTTERFLY, CORMORANT. One is chosen at random for each game (choose_password)."
  },
  {
   "address": 8406,
   "type": "line",
   "text": "For the 30 rooms other than the code rooms, the address of the room record's robot list, for randomise_robots."
  },
  {
   "address": 8407,
   "type": "line",
   "text": "High bytes of tbl_room_robot_ptrs."
  },
  {
   "address": 8466,
   "type": "line",
   "text": "The robots' behaviour scripts, 256 bytes of commands for robots_run: each robot's script pointer is an offset into this table. The commands are the bytecode described at robots_run (jumps, tests on the agent's side and level, random tests, turns, moves, the zap)."
  },
  {
   "address": 8722,
   "type": "line",
   "text": "Thirty-two script starting offsets into tbl_robot_scripts: the behaviours randomise_robots chooses from, the first 16 for rooms without a ball and the second 16 for rooms with one."
  },
  {
   "address": 8754,
   "type": "line",
   "text": "The floating balls' scripts: (command, argument) pairs for ball_run, e.g. wait, move by a step, home in on the agent, loops with a counter; one long script makes the ball circle in steps."
  },
  {
   "address": 8755,
   "type": "line",
   "text": "The argument bytes of tbl_ball_scripts, read with `lda $2233,x` beside the command."
  },
  {
   "address": 9004,
   "type": "line",
   "text": "The 27 furniture types, five bytes each: address of its shape (character codes), width and height, and the time it takes to search. Types $18/$19 are the code rooms' squares, $1A the code rooms' computer, $15 Elvin's control."
  },
  {
   "address": 9005,
   "type": "line",
   "text": "Shape address high bytes of tbl_furniture."
  },
  {
   "address": 9006,
   "type": "line",
   "text": "Width bytes of tbl_furniture."
  },
  {
   "address": 9007,
   "type": "line",
   "text": "Height bytes of tbl_furniture."
  },
  {
   "address": 9008,
   "type": "line",
   "text": "Search-time bytes of tbl_furniture, and the end of the table."
  },
  {
   "address": 9139,
   "type": "line",
   "text": "The shapes of furniture types $00-$15 as rows of character codes for the room character set, referenced from tbl_furniture and drawn into the room buffer by draw_room (desks, terminals, bookcases, lamps, sofas and the rest, as the rooms show them)."
  },
  {
   "address": 9715,
   "type": "line",
   "text": "Colours of the 6 \u00d7 5 block that appears at $4301 when the mission is won (elvin_terminal)."
  },
  {
   "address": 9745,
   "type": "line",
   "text": "Characters of the 6 \u00d7 5 block drawn when the mission is won."
  },
  {
   "address": 9775,
   "type": "line",
   "text": "The shapes of furniture types $16-$1A (the code rooms' squares and computer among them), referenced from tbl_furniture."
  },
  {
   "address": 9955,
   "type": "line",
   "text": "Sixteen 8-byte glyph patterns from which make_puzzle_images builds the nine puzzle images at random."
  },
  {
   "address": 10083,
   "type": "line",
   "text": "Sixteen 144-byte mask shapes (the size of a puzzle image): each puzzle piece is its puzzle's image ANDed with two of these, either way round (build_piece). They decide the outlines of the pieces."
  },
  {
   "address": 11107,
   "type": "line",
   "text": "gfx_piece_masks continued: mask shapes 7-13 (from $2B63)."
  },
  {
   "address": 12131,
   "type": "line",
   "text": "gfx_piece_masks continued: the end of mask shape 13 and shapes 14-15."
  },
  {
   "address": 12387,
   "type": "line",
   "text": "The 144-byte picture copied to $5000 in a code room (draw_code_room)."
  },
  {
   "address": 12531,
   "type": "line",
   "text": "Addresses of the contents bytes of all searchable furniture in the room records, 128 entries: hide_items fills them with $FF and then hides the 36 pieces and 18 passwords in random entries."
  },
  {
   "address": 12532,
   "type": "line",
   "text": "High bytes of tbl_furniture_slots."
  },
  {
   "address": 12787,
   "type": "line",
   "text": "The 144-byte picture shown when a search finds a lift-init password ($FD), stored inverted."
  },
  {
   "address": 12931,
   "type": "line",
   "text": "The 144-byte picture shown when a search finds a snooze password ($FC), stored inverted."
  },
  {
   "address": 13075,
   "type": "line",
   "text": "The pocket computer's screen, 400 characters (10 rows of 40) copied to $4258 by draw_pocket_computer; inside it the status texts the game updates in place: SNOOZES:0 LIFT INITS:0 at $3431 (counters at $3439 and $3446) and the PSW: line with the nine password letters at $345D."
  },
  {
   "address": 13120,
   "type": "line",
   "text": "Start of the pocket computer screen's display rows within gfx_pocket_computer, copied back to the screen by show_hand ($3341-$341E)."
  },
  {
   "address": 13331,
   "type": "line",
   "text": "The second part of gfx_pocket_computer, read by draw_pocket_computer's second loop ($3413-$34A2)."
  },
  {
   "address": 13361,
   "type": "line",
   "text": "The status texts within gfx_pocket_computer: SNOOZES:0 LIFT INITS:0, 62 characters with the PSW: line, copied to the screen by show_status_line."
  },
  {
   "address": 13369,
   "type": "line",
   "text": "The snooze counter's digit in the status text (SNOOZES:n), and at $3446 the lift-init counter's (LIFT INITS:n), $80-$89 for 0-9; the game increments them when a password is found and decrements them when one is used."
  },
  {
   "address": 13405,
   "type": "line",
   "text": "The nine letters of the password line (PSW:) in the status text, blank ($53) until puzzles are solved; check_solution writes each solved puzzle's letter here."
  },
  {
   "address": 13475,
   "type": "line",
   "text": "Colours of the pocket computer's 400 cells."
  },
  {
   "address": 13731,
   "type": "line",
   "text": "The second part of gfx_pocket_computer_colours, read by draw_pocket_computer's second loop."
  },
  {
   "address": 13761,
   "type": "line",
   "text": "The colours of the status texts within gfx_pocket_computer_colours, copied with them by show_status_line."
  },
  {
   "address": 13875,
   "type": "line",
   "text": "The security terminal's screen as run-length pairs (count, character), read by security_terminal for 25 rows of 40."
  },
  {
   "address": 13876,
   "type": "line",
   "text": "The character bytes of rle_terminal_chars' pairs, read with `lda $3634,x` beside the counts at $3633."
  },
  {
   "address": 14249,
   "type": "line",
   "text": "The terminal screen's colours as run-length pairs (count, colour; $FF = the room's colour)."
  },
  {
   "address": 14250,
   "type": "line",
   "text": "The colour bytes of rle_terminal_colours' pairs."
  },
  {
   "address": 14421,
   "type": "line",
   "text": "The game's entry, where the loader's unpacker jumps with $01 = $25. In the image as loaded, $3855-$3865 held `lda #$60 / sta $DD03` (CIA 2 port B direction = $60, the `rts` opcode that wait_ticks executes at $DD03), NMI RAM vector $0318 = $3854, `sei / cld`; the loop at $389C clears those 17 bytes with the sprite registers, so in play they read as zeros. Then: builds a table at $CF00 ($71C0, $3875 loop), detects PAL or NTSC ($3FB9), clears zero page $10-$DA and the SID, sets up the variables, banks the KERNAL out ($01 = $25), installs the IRQ ($82F4, via $BEC2) and the temporary IRQ $8396, enables the raster interrupt, builds the bit-reversal table at $C500, selects video bank 1 ($DD00), screen $4000 and character set $4800, copies the letters and digits of the character ROM into both character sets, draws the pocket computer and the lift, and falls into the lift loop at $39CF."
  },
  {
   "address": 14766,
   "type": "line",
   "text": "The start-up's greeting: voice line 2, a wait of 32 ticks, then voice line 3, spoken after the load and after every restart, before the title state; the agent has not been shown a room yet."
  },
  {
   "address": 14799,
   "type": "line",
   "text": "The loop that runs while the agent is in a lift or a corridor (also the title state, where the game waits in the lift): every pass waits for the frame ($83F4), updates the agent ($73E4) and fades the sound effect on voices 1 and 2 ($25/$26). Fire (debounced by $DE) with $3F = $0E opens the pocket computer ($3A80). With the agent's sprite inside the lift car (sprite 1 X $A2-$B6, high bit clear) and $3F = $0E, up on the stick moves the lift up ($8592) and down moves it down ($855C) until it stops at a floor ($1F/$20 = $0B); otherwise the agent walks ($860B)."
  },
  {
   "address": 14976,
   "type": "line",
   "text": "Opens the pocket computer: clears sprites 4-6's high and multicolour bits, restores the panel ($7218), copies the puzzle display graphics into character set $5800 ($3E16), sounds a tone, draws the map and pieces ($7427, $8025), shows the hand pointer ($3E39) and the selected piece's frame ($3E9D, $3ED0). Then loops at $3AAF: waits for the frame, moves the hand with the stick ($3DC2), and on fire acts on the button under the hand. $9F says what the hand is doing: 0 = choosing a button, 1 = moving a piece in the display ($7D4C), 2 or more = dragging ($7D8C)."
  },
  {
   "address": 15023,
   "type": "line",
   "text": "Main loop of the pocket computer (see $3A80). On a fresh fire press with $9F = 0, the hand's position (sprite 4: X/2 in X, Y in Y) is compared with the button grid: the right-hand block of nine at X/2 $84-$9F, Y $B1-$E8, handled from $3BDB; the three keys on the left at X/2 $13-$1B ($3C44); the four piece slots of the display ($3C74)."
  },
  {
   "address": 15181,
   "type": "line",
   "text": "Fire on one of the display's six piece slots (Y = slot): with a piece there, checks that its colour matches the one the hand carries ($D02C against the colour RAM under the slot, self-modified address from $7A55/$7A5B); a mismatch prints COLORS MUST MATCH ($821E), an overlap IMAGES CAN'T OVERLAP ($8234, tested by $8037). With no piece carried it plays the error tone. An empty slot takes the carried piece: marks it used ($92,y), paints the 6\u00d73 cells in colour RAM, plays a tone and redraws ($3F61, $3E39, $3E9D, $80C3, $3ED0)."
  },
  {
   "address": 15206,
   "type": "line",
   "text": "Operand of `lda $D800` in pc_select_slot: the colour RAM address of the chosen slot's top-left cell, set from tbl_slot_colour_ram_lo ($3B50)."
  },
  {
   "address": 15207,
   "type": "line",
   "text": "High byte of the colour RAM address read by pc_select_slot, from tbl_slot_colour_ram_hi ($3B56)."
  },
  {
   "address": 15323,
   "type": "line",
   "text": "Decodes a fire on the right-hand block of nine buttons by the hand's X/2 (X) and Y (Y). Top row ($B1-$C0): $3D57, $3D63, $3D6F; middle row ($C9-$D8): $3D94 (switch off), $3D8B, $3D78; bottom row ($E1 on): $3DAD, $3DB1, $3DB5, the three colour keys."
  },
  {
   "address": 15428,
   "type": "line",
   "text": "Decodes a fire on the three keys at the left of the panel (hand X/2 $13-$1B): top key (Y below $BF) scrolls the memory forward ($7A9F), middle key (Y $C8-$D6) back ($7B32), bottom key (Y $E0 on) is the phone ($7BC2)."
  },
  {
   "address": 15476,
   "type": "line",
   "text": "Decodes a fire inside the display (hand X/2 $28-$79, Y below $DF): the slot from Y (row 0 or 3) and X/2 (columns at $40, $48-$5F, $64 on), 0-5 in Y. Fire on the slot already chosen ($8F) picks it up; on another, checks the slot holds a piece (memory slots $4EF5/$4EF6 for slots 0 and 3) or plays the low error tone ($3F41 with $2C/$C1), then selects it: hides the hand, shows the piece as sprites 4 and 5 at the slot's position ($720C/$7212) in its colour ($98,y), and sets $9F = 0 with the hand's limits $A0-$A3 for the display."
  },
  {
   "address": 15703,
   "type": "line",
   "text": "Top-left button of the grid: click ($3F3D), flip the selected piece top to bottom ($7901), redraw the pieces ($80C3)."
  },
  {
   "address": 15715,
   "type": "line",
   "text": "Top-middle button: click, flip the selected piece left to right ($7968), redraw the pieces."
  },
  {
   "address": 15727,
   "type": "line",
   "text": "Top-right button: click, clear the selected slot of the display ($79E2), keeping a copy for undo."
  },
  {
   "address": 15736,
   "type": "line",
   "text": "Middle-right button: click, then prints TIME IS SUSPENDED ($828C) with $D5 raised for the duration; $81C5 holds the message until fire, so the button pauses the game."
  },
  {
   "address": 15755,
   "type": "line",
   "text": "Middle button: click, undo ($7A61): put back the piece last cleared or changed."
  },
  {
   "address": 15764,
   "type": "line",
   "text": "The off button: click, hides sprites 4-6, leaves the pocket computer ($B645) and shows sprite 6 again, back to the lift loop at $39CF."
  },
  {
   "address": 15789,
   "type": "line",
   "text": "The three colour keys of the bottom row load A = 5, 7 or 3 (green, yellow, blue in the colour RAM nibble) and call $7A29 to recolour the selected piece."
  },
  {
   "address": 15810,
   "type": "line",
   "text": "Moves the pocket computer's hand pointer (sprite 4) one pixel per call with the stick in port 2, held between the limits $A0 (top), $A1 (bottom), $A2 (left) and $A3 (right, in X/2). X is kept halved so that the ninth bit ($D010 bit 4) can be rebuilt on the way out. Returns X = X/2 and Y = Y of the hand."
  },
  {
   "address": 15894,
   "type": "line",
   "text": "Copies the puzzle display's graphics from the table at $C690-$C9EF into character set $5800 at $5C50-$5FAF (glyphs $8A-$F5): three pages and $60 bytes."
  },
  {
   "address": 15929,
   "type": "line",
   "text": "Waits for the next tick, copies the 222 bytes at $3341-$341E into the screen at $4286-$4363 (the panel's display rows), and puts the hand pointer (sprite 4, pointer $10, white) at the selected slot ($720C/$7212 + offsets) or, with no slot ($8F negative), at the panel's right. Sets the hand's limits to the whole panel and $9F = 1."
  },
  {
   "address": 15970,
   "type": "line",
   "text": "Entry of show_hand that places the hand at slot Y without the initial screen copy: used after a piece is placed ($3B30)."
  },
  {
   "address": 16029,
   "type": "line",
   "text": "With a slot selected ($8F), shows sprite 6 (pointer $13, X-expanded, colour 8) over it as a frame."
  },
  {
   "address": 16080,
   "type": "line",
   "text": "Clears the sprite shape at $4D80 and draws a frame of 8 rows into it for each occupied memory slot ($4EF5/$4EF6 for the current puzzle $C3, bit 6 set), then shows it as sprite 5 (pointer $36, Y-expanded, colour 10) at $36,$B4."
  },
  {
   "address": 16175,
   "type": "line",
   "text": "Writes $1F into every third byte of the sprite shape at $4D80 from offset Y downwards, 8 times: one edge of the frame drawn by show_memory_frame."
  },
  {
   "address": 16189,
   "type": "line",
   "text": "The click of a pocket computer button: sound_tone with A = $C8, X = $F3."
  },
  {
   "address": 16193,
   "type": "line",
   "text": "Plays a short tone on SID voice 3: frequency A (high) / X (low), attack/decay 0, sustain $F, gate off then pulse/gate on ($11); voices 1 and 2 are gated off. $A4 = 8: the IRQ silences voices 2 and 3 eight frames later."
  },
  {
   "address": 16225,
   "type": "line",
   "text": "Draws the piece in slot $8F (or A, entering at $3F63) into the display: finds its graphics ($82B8, pointer in $18/$19) and either copies three 8-row columns into the sprite shape at $4D80/$4DC0 ($9F non-zero) or ORs the shape into the display's characters ($9F = 0)."
  },
  {
   "address": 16227,
   "type": "line",
   "text": "Entry of draw_piece with the slot in A: used when a slot is selected ($3CF0)."
  },
  {
   "address": 16313,
   "type": "line",
   "text": "Tells PAL from NTSC: waits for raster line 259 (low byte 3 after a value above $FC) and watches the raster register. On an NTSC machine (263 lines) it wraps to 0 before reaching $20 and nothing changes; on PAL (312 lines) it reaches $20, and $6E is written into the operands at $AB2B, $AB39 and $AB49, adjusting the game for the PAL frame. The game was therefore written for NTSC timing. Live: the three operands read $6E in play on the PAL machine."
  },
  {
   "address": 17408,
   "type": "line",
   "text": "Sprite shapes $10-$1F (64 bytes each, pointer \u00d7 64 in bank 1): $10 the pocket computer's hand, $11 and $12 the lift car's top and bar, $13 a frame corner, $14-$17 the four shapes of a robot's zap, $18-$1D the security terminal's decorations, $1E a cross shape, $1F the floating ball."
  },
  {
   "address": 18432,
   "type": "line",
   "text": "Character set $4800 (shown in the shaft view, the terminal and the end screen), glyphs $00-$70: the shaft view's rock, the lift shaft's walls, the corridors' floors, ceilings and walls, and the room-entry wipe's pieces."
  },
  {
   "address": 19624,
   "type": "line",
   "text": "Glyphs $95-$97 of character set $4800: `*`, `=` and `>`, used for the terminal's pointer and title."
  },
  {
   "address": 19648,
   "type": "line",
   "text": "Sprite shapes $33-$35, inside character set $4800's unused glyphs $98-$AF: the code room's three sprites (pointers set by draw_code_room)."
  },
  {
   "address": 20032,
   "type": "line",
   "text": "Glyphs $C8-$DD of character set $4800: the corners, edges and fill of the end screen's box and the tally's multiplication sign ($D9)."
  },
  {
   "address": 20208,
   "type": "line",
   "text": "Five bytes read by the start-up ($392D) as the initial Y positions of sprites 1-3 and their stored copies ($2D, $2F, $31)."
  },
  {
   "address": 20414,
   "type": "line",
   "text": "Glyphs $F7-$FF of character set $4800, among them the full stop ($FE) of the terminal and end texts."
  },
  {
   "address": 20624,
   "type": "line",
   "text": "Character set $5000, the rooms' multicolour glyphs (glyphs $12-$FF; $00-$11 are the search picture built at run time): floors ($45-$4B), platform pieces ($49-$51), walls ($47/$48), and the furniture's parts drawn by draw_room."
  },
  {
   "address": 21648,
   "type": "line",
   "text": "Character set $5000, glyphs $92-$FF: the second part of the rooms' glyphs (furniture and wall pieces)."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "Character set $5800 (the pocket computer panel), glyphs $00-$65: the EPYX logo, the panel's frame, buttons and icons."
  },
  {
   "address": 24496,
   "type": "line",
   "text": "Glyphs $F6-$FF of character set $5800: the colon, the map frame's corners and edges ($F0-$F5 lie in the display area) and the icons beside PUSH BUTTON."
  },
  {
   "address": 24576,
   "type": "line",
   "text": "Sprite shapes $80-$8F: the agent's walking frames (three sprites a frame, pointers from tbl_agent_pointers; each frame stored facing one way and mirrored in place by agent_frame)."
  },
  {
   "address": 25600,
   "type": "line",
   "text": "Sprite shapes $90-$9F: the rest of the walking frames ($90-$9B), the standing frame ($9C-$9E) and the first sprite of frame $0F ($9F)."
  },
  {
   "address": 26368,
   "type": "line",
   "text": "The default operand of agent_frame's mirroring loop (`ldx $6700,y`), inside the agent's frames; rewritten from tbl_agent_shapes before every use."
  },
  {
   "address": 26369,
   "type": "line",
   "text": "Default operand +1 of agent_frame's mirroring loop, inside the agent's frames ($6700 area), rewritten before use."
  },
  {
   "address": 26370,
   "type": "line",
   "text": "Default operand +2 of agent_frame's mirroring loop, inside the agent's frames, rewritten before use."
  },
  {
   "address": 26434,
   "type": "line",
   "text": "Sprite shapes $9D-$9F (from $6742): the rest of the agent's standing frame and frame $0F, after the operand addresses agent_frame names inside the block."
  },
  {
   "address": 26624,
   "type": "line",
   "text": "Sprite shapes $A0-$AF: the rest of frame $0F and the first somersault frames (the somersault's frames start at $A2 and count up by three to $BD)."
  },
  {
   "address": 27648,
   "type": "line",
   "text": "Sprite shapes $B0-$BF: the rest of the somersault frames."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "Sprite shapes $C0-$C6: a robot in seven steps of turning, facing one way at $C0 and the other at $C6; robot_turn steps a robot's pointer between them."
  },
  {
   "address": 29120,
   "type": "line",
   "text": "Called once by the start-up: with all RAM banked in ($01 = $24) it copies three blocks the unpacker left in $C000-$CFFF to their places under the ROMs and the I/O area: $C800-$CFFF to $D000-$D7FF, $C000-$C3FF to $F800-$FBFF, $C400-$C7FF to $DC00-$DFFF. Then $01 = $27."
  },
  {
   "address": 29179,
   "type": "line",
   "text": "Copies X+1 pages from ($18) to ($E4), 256 bytes each. Used by move_high_tables."
  },
  {
   "address": 29196,
   "type": "line",
   "text": "X position (sprite units) of the six piece slots of the pocket computer's display, used for the piece sprites and the frame: $54, $94, $CC on both rows."
  },
  {
   "address": 29202,
   "type": "line",
   "text": "Y position of the six slots: $B4 for the top row (0-2), $CC for the bottom row (3-5)."
  },
  {
   "address": 29208,
   "type": "line",
   "text": "Clears the pocket computer's message window: 8 rows of 22 cells from $4286 filled with the blank glyph $53. Sets $91 = $FF (nothing to undo)."
  },
  {
   "address": 29238,
   "type": "line",
   "text": "Builds a new stronghold for a new game: calls $B088, $B045, $B0CD, $B0F3, $B180 and $B26D in turn."
  },
  {
   "address": 29257,
   "type": "line",
   "text": "The loop that runs while the agent is in a room: waits a tick, handles the two room types $11 and $1B ($7E) through $A73D, reads the stick when the agent is free ($41 = 0, $3F below $10): up while standing in front of something ($3F = $0E) searches or uses it ($92A0); fire (debounced with $DE) counts $51; then moves the agent ($860B), the robots and the rest of the room ($AC88, $AE34), and repeats."
  },
  {
   "address": 29332,
   "type": "line",
   "text": "Writes the digit 0 ($80) into the two counter positions of the pocket computer's SNOOZES:0 LIFT INITS:0 text at $3439+offset, the offsets taken from $A227/$A228."
  },
  {
   "address": 29346,
   "type": "line",
   "text": "Draws the view of the lift shaft and corridors for the start: the left edge of the panel from $0D00 (characters) and $0D5A (colours), 15 rows of 6 at $4241/$DA41; then builds the shaft view row by row, 17 times scrolling ($744B), drawing the new row ($7631) and stepping the animation ($73CA); then the pocket computer ($72E5)."
  },
  {
   "address": 29413,
   "type": "line",
   "text": "Copies the pocket computer's screen, 400 characters from $3313 and 400 colours from $34A3, to $4258/$DA58. Sets $8F and $91 to $FF: no slot selected, nothing to undo."
  },
  {
   "address": 29468,
   "type": "line",
   "text": "Draws the grey rock that fills the shaft view: colour 1 into 80 cells per band, and pairs of random rock glyphs ($82E3 AND $1C, then +2) across rows from $4258, five bands; then the row below each from the row above +1. Unless $1E is set, draws the lift shaft's walls (characters $28 with colour 8, edges from $73C0) and turns the screen on ($D011 = $1B) at the next frame top."
  },
  {
   "address": 29632,
   "type": "line",
   "text": "Edge characters of the lift shaft for draw_rock, ten rows: $25, $24, $20 repeating."
  },
  {
   "address": 29642,
   "type": "line",
   "text": "Steps the shaft animation counters: $1C counts 0-5 (at 6 it wraps and moves the map marker's Y $28 by one), $1B counts 0-2."
  },
  {
   "address": 29668,
   "type": "line",
   "text": "Puts the flashing marker on the pocket computer's map: sprite 6 at ($27, $28), its colour cycling every four ticks through tbl_marker_colours; then reads the map cell under it ($B761) and writes that character into the map on screen ($428A + rows)."
  },
  {
   "address": 29727,
   "type": "line",
   "text": "Eight colours the map marker cycles through: black, dark grey, grey, light grey, white, light grey, grey, dark grey."
  },
  {
   "address": 29735,
   "type": "line",
   "text": "Paints the six piece slots of the display in their pieces' colours ($98-$9D through $7A37) and colours the column between the halves (column $0D of rows $DA8D-$DB55) yellow (7)."
  },
  {
   "address": 29771,
   "type": "line",
   "text": "Scrolls the shaft view up by one row as the lift descends: rows $4028 onwards copied to the row above, screen and colour RAM, columns 0-16 and then 23-39 (two passes, $E4). First clears the corridor marker ($1D) by restoring $4011-$4016 from $0D00."
  },
  {
   "address": 29888,
   "type": "line",
   "text": "Scrolls the shaft view down by one row as the lift rises: 14 rows of 40 characters from $4208 upwards, unrolled. First restores $4241-$4246 if $1E is set."
  },
  {
   "address": 30117,
   "type": "line",
   "text": "Colours the two corridor openings (left and right, X = 1 and 0) from their state $1F/$20: different colours (8, 1, the corridor's own $23/$24, 9) by how far the opening has scrolled into view, through the row address tables $0E50/$0E5E."
  },
  {
   "address": 30214,
   "type": "line",
   "text": "Operand low byte of `sta $D800,y` in colour_corridors: the colour row's address, from the row table $0E50."
  },
  {
   "address": 30215,
   "type": "line",
   "text": "High byte of the colour row address in colour_corridors, from $0E5E."
  },
  {
   "address": 30226,
   "type": "line",
   "text": "Writes colour A into 17 cells of one row of colour RAM, row Y from $0E50/$0E5E (self-modified operand), ending at the column $0DD4,x."
  },
  {
   "address": 30246,
   "type": "line",
   "text": "Operand low byte of `sta $D800,y` in colour_row16, from $0E50."
  },
  {
   "address": 30247,
   "type": "line",
   "text": "High byte of the row address in colour_row16, from $0E5E."
  },
  {
   "address": 30257,
   "type": "line",
   "text": "Draws the row that scrolls in at the top while the lift rises, for both sides: rock, the corridor's floor ($0E28), ceiling ($0DD8), wall ($0E00) or opening, from each side's state $1F/$20 and the map ($7875). A side reaching state $15 starts a new corridor."
  },
  {
   "address": 30537,
   "type": "line",
   "text": "Draws the row that scrolls in at the bottom while the lift descends; the mirror of shaft_new_row_top, using the map at $786D."
  },
  {
   "address": 30800,
   "type": "line",
   "text": "Entry of shaft_new_row_bottom's end: draws the corridor opening at the bottom of the shaft view if the map has one there ($786D), used when the agent comes out of a room ($AFA5)."
  },
  {
   "address": 30807,
   "type": "line",
   "text": "Draws the eight characters of the corridor marker at $4010 from $0DC0 in colour $0F and sets $1D: the corridor below is in view."
  },
  {
   "address": 30829,
   "type": "line",
   "text": "Map cell for the row below the lift: Y offset $28 - $BB, then map_cell."
  },
  {
   "address": 30837,
   "type": "line",
   "text": "Map cell for the row above the lift: Y offset $28 - $B8, then map_cell."
  },
  {
   "address": 30842,
   "type": "line",
   "text": "Reads the stronghold map cell at map row A/8 and column $27 - $6B + (A AND 7), from the row table at $78A4; returns $FF if the row is above the map. Y is preserved."
  },
  {
   "address": 30884,
   "type": "line",
   "text": "Six row addresses of the map that the shaft view reads: $FC08, $FC90, $FD18, $FDA0, $FE28, $FEB0."
  },
  {
   "address": 30885,
   "type": "line",
   "text": "High bytes of the addresses in tbl_map_rows."
  },
  {
   "address": 30896,
   "type": "line",
   "text": "Index of the map square under the marker: row ($28 - $B8)/8 times 9 plus column ($27 - $6B)/16, in Y, for the tables at $FF96. Entering at $78B5 takes the row offset in A."
  },
  {
   "address": 30901,
   "type": "line",
   "text": "Entry of map_room_index with the row offset already in A."
  },
  {
   "address": 30930,
   "type": "line",
   "text": "Colour of the room whose corridor appears below: map square from $28 - $BA (and one to the right when X is 0), the room number from $FF96, then the first byte of that room's record through the pointer table $0E70 (self-modified `lda` at $78FD). Y is preserved."
  },
  {
   "address": 30940,
   "type": "line",
   "text": "The same for the corridor appearing above ($28 - $B6)."
  },
  {
   "address": 30974,
   "type": "line",
   "text": "Operand of `lda $1892` in corridor_colour: the room record's first byte (its colour), from the pointer table $0E70."
  },
  {
   "address": 30975,
   "type": "line",
   "text": "High byte of the room record address read by corridor_colour."
  },
  {
   "address": 30977,
   "type": "line",
   "text": "Flips the selected piece (slot $8F) top to bottom, animated: swaps the piece's rows with the display's work glyphs at $5C50 in ten steps two ticks apart ($7934 does one step, through self-modified operands at $7939/$793F). With no slot selected prints NO IMAGE SELECTED ($824A)."
  },
  {
   "address": 31028,
   "type": "line",
   "text": "One step of flip_piece_v: exchanges six bytes, eight apart, between $5C50,x and the piece's data (Y counting down), then moves both indices to the next column, wrapping X at $30 to $58 and Y at $87 to $5F."
  },
  {
   "address": 31033,
   "type": "line",
   "text": "Operand low byte of `lda $5C50,x` in flip_v_step: the base of the glyphs being flipped (the display, or $5000 when build_piece flips a new piece)."
  },
  {
   "address": 31034,
   "type": "line",
   "text": "High byte of the glyph base read by flip_v_step."
  },
  {
   "address": 31039,
   "type": "line",
   "text": "Operand low byte of `sta $5C50,x` in flip_v_step, set with $7939."
  },
  {
   "address": 31040,
   "type": "line",
   "text": "High byte of the glyph base written by flip_v_step."
  },
  {
   "address": 31080,
   "type": "line",
   "text": "Flips the selected piece left to right, animated in 21 steps one tick apart ($7999): each byte goes through the bit-reversal table at $C500. With no slot selected prints NO IMAGE SELECTED."
  },
  {
   "address": 31129,
   "type": "line",
   "text": "One step of flip_piece_h: exchanges three bytes between $5C50,x and the piece, reversing the bits of each through $C500, and steps the indices with wraps at $08 and $38."
  },
  {
   "address": 31134,
   "type": "line",
   "text": "Operand low byte of `lda $5C50,x` in flip_h_step: the base of the glyphs being mirrored."
  },
  {
   "address": 31135,
   "type": "line",
   "text": "High byte of the glyph base read by flip_h_step."
  },
  {
   "address": 31148,
   "type": "line",
   "text": "Operand low byte of `sta $5C50,x` in flip_h_step."
  },
  {
   "address": 31149,
   "type": "line",
   "text": "High byte of the glyph base written by flip_h_step."
  },
  {
   "address": 31202,
   "type": "line",
   "text": "Clears the selected slot of the display: saves the piece for undo ($7A89), zeroes its 144 bytes, marks the slot empty ($92,y), then selects the next occupied slot (skipping slot 3) or none ($8F = $FF, frame sprite 6 off). With no slot selected prints NO IMAGE SELECTED."
  },
  {
   "address": 31273,
   "type": "line",
   "text": "Gives the selected piece colour A (5, 7 or 3 from the colour keys): stores it in $98,y and paints the slot's 6 \u00d7 3 cells of colour RAM from tbl_slot_colour_ram. With no slot selected prints NO IMAGE SELECTED. Entered at $7A37 to paint slot Y without the check."
  },
  {
   "address": 31287,
   "type": "line",
   "text": "Entry of recolour_piece that paints slot Y in colour A without checking for a selection: used by paint_slots and remove_piece."
  },
  {
   "address": 31317,
   "type": "line",
   "text": "Low bytes of the colour RAM address of each display slot's top-left cell ($DA87, $DA8F, $DA96, $DAFF, $DB07, $DB0E with tbl_slot_colour_ram_hi)."
  },
  {
   "address": 31323,
   "type": "line",
   "text": "High bytes for tbl_slot_colour_ram_lo: $DA, $DA, $DA, $DA, $DB, $DB."
  },
  {
   "address": 31329,
   "type": "line",
   "text": "The undo button: puts the piece saved at $C100 back into the slot it came from ($91), marks the slot used and selects it. With nothing saved ($91 negative) prints CAN'T UNDO ($8276)."
  },
  {
   "address": 31369,
   "type": "line",
   "text": "Copies the 144 bytes of the selected slot's piece to the undo buffer at $C100 and remembers the slot in $91."
  },
  {
   "address": 31391,
   "type": "line",
   "text": "The top left key: scrolls the memory window one piece forward ($C3 + 1), animated over three steps: the glyphs at $5C50-$5E8F and their colour RAM ($DA87-$DB4F) shift up one place and the new piece ($4EF5 + $C3 + 2, colour $4F27) is drawn in ($9C47) at the bottom. Refuses with END OF MEMORY ($8260) when the next three entries are all empty (bit 7 set)."
  },
  {
   "address": 31538,
   "type": "line",
   "text": "The middle left key: scrolls the memory window one piece back ($C3 - 1), the mirror of memory_forward. Refuses with END OF MEMORY at the start ($C3 = 0)."
  },
  {
   "address": 31682,
   "type": "line",
   "text": "The bottom left key, the phone: sets $9F to show the hand is on the phone, clears the message window, hides sprites 5 and 6, saves the colour RAM of the window to $C220 and draws the phone's menu ($7C44, 8 rows of 22) with colours from $7C3C, the first two columns light blue (9). Limits the hand to the menu and parks it at its bottom."
  },
  {
   "address": 31804,
   "type": "line",
   "text": "Colours of the phone menu's eight rows, read last entry first: the first option cyan (3), the second purple (4), the blank row white (1), HANG UP yellow (7)."
  },
  {
   "address": 31812,
   "type": "line",
   "text": "The phone's menu, 8 rows of 22 characters in the $5800 alphabet, with icon glyphs $22-$29 at the left: \"CORRECT ORIENTATIONS / OF LEFTMOST PIECES\", \"HAVE WE ENOUGH / PIECES TO SOLVE THE / UPPER LEFT PUZZLE\", \"HANG UP\"."
  },
  {
   "address": 31988,
   "type": "line",
   "text": "The phone's four answers, 22 characters each in the $5800 alphabet: \"A SOLUTION EXISTS\", \"NEED MORE PIECES\", \"ORIENTATION CORRECTED\", \"NOTHING IN MEMORY\"."
  },
  {
   "address": 32076,
   "type": "line",
   "text": "Prepares the SID for the phone: envelopes of voices 2 and 3 (attack/decay 0, sustain $F), their frequencies, a filter (cutoff $40, resonance off) and volume with filter mode $12, both voices gated with triangle ($11), and $A4 = 2 so the IRQ gates them off two frames later."
  },
  {
   "address": 32140,
   "type": "line",
   "text": "Fire on the phone's menu, by the hand's Y: below $C2 the first option (correct orientations, $7D9D), $C8-$E0 the second (enough pieces?, $7DE6), $E8 and below HANG UP ($7E05); the gaps between do nothing."
  },
  {
   "address": 32157,
   "type": "line",
   "text": "The first phone option: charges two minutes to the game clock ($83CC in decimal mode, interrupts off), points the dial table at $7E36 and the answer at $7F8D (self-modified `lda` at $7DCD and `jsr` at $7DE2), then dials: seven digits, each a dual tone ($7E44) a few ticks long with a gap; then the line ($7E9E) and the answer."
  },
  {
   "address": 32206,
   "type": "line",
   "text": "Operand low byte of `lda $7E36,x` in the phone's dialling loop: which number to dial ($7E36 or $7E3D)."
  },
  {
   "address": 32207,
   "type": "line",
   "text": "High byte of the dial table address."
  },
  {
   "address": 32227,
   "type": "line",
   "text": "Operand low byte of the `jsr $7F8D` at the end of the dialling loop: the answer routine ($7F8D or $7FD7)."
  },
  {
   "address": 32228,
   "type": "line",
   "text": "High byte of the answer routine's address."
  },
  {
   "address": 32230,
   "type": "line",
   "text": "The second phone option: as phone_ask_orient, with the dial table at $7E3D and the answer at $7FD7."
  },
  {
   "address": 32261,
   "type": "line",
   "text": "HANG UP: clears the message window, restores its colours from the copy at $C220, and returns the panel to the piece display (hand, memory, frames), volume back to 5."
  },
  {
   "address": 32310,
   "type": "line",
   "text": "The two numbers the phone dials, seven key indices each, read last first: 7, 6, 7, 8, 9, 0, 0 for the first option and 5, 5, 5, 4, 2, 1, 3 for the second. Index 0 is replaced by 11 (key 0)."
  },
  {
   "address": 32324,
   "type": "line",
   "text": "Sounds key Y of the phone's keypad: voice 2 at the low tone and voice 3 at the high tone from tbl_dtmf (lo/hi bytes in four columns of twelve), volume 5 with the filter, both gated, gated off by the IRQ eight frames later."
  },
  {
   "address": 32365,
   "type": "line",
   "text": "The `rts` that ends dial_tone; the tone table read with `lda $7E6D,y` starts one byte later, at $7E6E, because the keys are numbered from 1."
  },
  {
   "address": 32366,
   "type": "line",
   "text": "The keypad's two-tone frequencies for dial_tone, four columns of twelve entries: voice 2 low and high bytes ($7E6E, $7E7A), voice 3 low and high bytes ($7E86, $7E92). Three keys share each row tone and each column tone, as on a touch-tone keypad."
  },
  {
   "address": 32377,
   "type": "line",
   "text": "Second column of tbl_dtmf: voice 2's high bytes."
  },
  {
   "address": 32389,
   "type": "line",
   "text": "Third column of tbl_dtmf: voice 3's low bytes."
  },
  {
   "address": 32401,
   "type": "line",
   "text": "Fourth column of tbl_dtmf: voice 3's high bytes."
  },
  {
   "address": 32414,
   "type": "line",
   "text": "The line after dialling: a random pause, a few random clicks ($7F54), another pause, twenty ring bursts on voices 2 and 3 (frequency $2880/$1E80), a random pause, more clicks, then the answer's sound: voices 2 and 3 with pulse waves, gated on and off over 80 ticks. Then returns to the answer routine."
  },
  {
   "address": 32596,
   "type": "line",
   "text": "One click on the phone line: voice 3 gated with triangle for a moment at volume 5."
  },
  {
   "address": 32619,
   "type": "line",
   "text": "Waits one tick: wait_ticks with A = 1."
  },
  {
   "address": 32621,
   "type": "line",
   "text": "Waits A ticks of the IRQ's counter $E0: adds A to $E0 and loops until $E0 equals the sum. Each pass calls `jsr $DD03`, which executes CIA 2's data direction register B: the start-up set it to $60, the opcode of `rts`, so the call returns at once. A copy whose start-up did not set it would crash here. Live (1 October 2026): $DD03 reads $60 in play and was executed 47,272 times in 120 frames; with $EA written there the program crashed."
  },
  {
   "address": 32632,
   "type": "line",
   "text": "Waits until the raster is past line $AB and then until it wraps to the top of the next frame (line below $AB again after the high lines), with interrupts off while it watches; used before turning the screen on or off."
  },
  {
   "address": 32653,
   "type": "line",
   "text": "The answer to the first option: for the two pieces in the memory window ($4EF5/$4EF6 + $C3), marks them (bit 6), clears their flip bits in their records ($BFC3 + 4 \u00d7 piece, keeping the low two bits) and redraws them in the display ($9C8A), then shows ORIENTATION CORRECTED; with no piece, NOTHING IN MEMORY ($8009)."
  },
  {
   "address": 32727,
   "type": "line",
   "text": "The answer to the second option: takes the puzzle number of the piece at the left of the memory window ($BFC0 + 4 \u00d7 piece) and counts the pieces in memory with the same number; four or more shows A SOLUTION EXISTS, fewer NEED MORE PIECES; with nothing in memory, NOTHING IN MEMORY."
  },
  {
   "address": 32777,
   "type": "line",
   "text": "Shows the phone answer at offset X of str_phone_answers in the message line ($4376), waits 64 ticks and blanks the line again."
  },
  {
   "address": 32805,
   "type": "line",
   "text": "Writes the status line of the pocket computer, 62 characters from $3431 (SNOOZES:n LIFT INITS:n, then the password line PSW:) and their colours from $35C1, to $4376/$DB76."
  },
  {
   "address": 32823,
   "type": "line",
   "text": "Tests whether the piece being placed (shape in the sprite at $4D80/$4DC0) overlaps what slot Y already holds: builds a mask of the slot's border at $C100 and compares the AND of shape and slot with it, row by row. Carry clear: no overlap; carry set: overlap."
  },
  {
   "address": 32963,
   "type": "line",
   "text": "After a piece is placed: compares the 144 bytes of the display slot $8F with the nine solution images at $C9F0 (144 bytes apart). On a match with puzzle k: if already solved ($C8 + k) prints WE JUST DID THIS ONE ($82A2); otherwise marks it, counts it in $D8, copies that puzzle's password letter ($4FB5 + k) into the PSW line ($345D + k and the screen at $43A2 + k), removes its four pieces from memory ($817B for each), clears the display's work glyphs, redraws the memory window, beeps five times and clears the slot."
  },
  {
   "address": 33147,
   "type": "line",
   "text": "Removes from the memory list the piece whose number (low 6 bits) is A: shifts the rest of the list ($4EF5) and their colours ($4F25) down one, steps the memory window back if it now points past the end, and repaints the two memory slots."
  },
  {
   "address": 33221,
   "type": "line",
   "text": "Shows the 22-character message at (A low, X high) in the pocket computer's message line ($4376, yellow) with PUSH BUTTON beneath it ($439E, white), after the error tone; types it two characters a tick. Waits for fire to be pressed and released, then restores the status line ($8025)."
  },
  {
   "address": 33288,
   "type": "line",
   "text": "The prompt under every message: \"     \" icon \"PUSH BUTTON\" icon, 22 characters in the $5800 alphabet ($F8/$F9 are the icons either side)."
  },
  {
   "address": 33310,
   "type": "line",
   "text": "The pocket computer's messages, 22 characters each in the $5800 alphabet ($FA is the apostrophe): COLORS MUST MATCH ($821E), IMAGES CAN'T OVERLAP ($8234), NO IMAGE SELECTED ($824A), END OF MEMORY ($8260), CAN'T UNDO ($8276), TIME IS SUSPENDED ($828C), WE JUST DID THIS ONE ($82A2)."
  },
  {
   "address": 33464,
   "type": "line",
   "text": "Address of display slot A's 144 bytes of glyph data in character set $5800: $5C50 + 144 \u00d7 A, in $18/$19."
  },
  {
   "address": 33507,
   "type": "line",
   "text": "The random-number generator: a 16-bit shift register in $EB/$EC (feedback from bits 0 and 2 of $EB), and the result is $EB exclusive-ORed with the current raster line, so the timing of the call adds to the randomness."
  },
  {
   "address": 33524,
   "type": "line",
   "text": "The raster interrupt. In the shaft view ($1A = 0) there are two a frame. At line $AA, where the pocket computer begins: next interrupt at $FF, the panel's colours ($D021 = 0, $D022 = $0E, $D023 = 6) and character set $5800 ($D018 = $06). At line $FF: next interrupt at $AA, the shaft's colours ($D021 = $0C, $D022/$D023 from $21/$22) and character set $4800, and the count-down of $A4 that gates off voices 2 and 3. In a room ($1A set) there is one a frame, at line $FF, which re-arms itself and leaves the room's colours and character set alone; it runs the ball, the robots and the hit test from the interrupt ($9504, $8ECC, $92CB, saving zero page $79-$7D). Every frame: the tick $E0 and $3E, the game clock ($83A2) and the noise and protection check ($84FA). Measured: 120 entries in 120 frames in a room."
  },
  {
   "address": 33686,
   "type": "line",
   "text": "An interrupt handler that acknowledges the video chip and calls the routine whose address has been written into zero page $FC-$FE (`jsr $00FC`); installed briefly by the start-up and by $BEC2's callers."
  },
  {
   "address": 33698,
   "type": "line",
   "text": "Advances the game clock once a tick unless it is suspended ($D5) or already at six o'clock ($D4 = 6): $D1 counts 60 ticks, then the seconds $D2, minutes $D3 and hours $D4 (12-hour, 1-12) in decimal; $C1 counts the hours. At six o'clock $43 = $FF: time is up. The clock counts 60 ticks to the second, the NTSC frame rate. Live: 600 frames moved the clock on 10 seconds; the clock stood still with $D5 = 1."
  },
  {
   "address": 33740,
   "type": "line",
   "text": "Entry of game_clock that adds A minutes (decimal) to the clock; the caller sets decimal mode and masks interrupts. Used for the time a phone call costs (2 minutes) and other penalties."
  },
  {
   "address": 33780,
   "type": "line",
   "text": "Waits one tick and returns, unless time is up ($43 negative): then the end of the mission when time runs out. The screen shakes (random fine scroll) and flickers for 128 passes with the border white, goes blank, is cleared to a dark screen, the play area dissolves cell by cell into blanks, and the game goes to its end ($B786)."
  },
  {
   "address": 34002,
   "type": "line",
   "text": "Fills the screen matrix $4000-$43FF with the blank glyph $53 (entered at $84D4 with another glyph in A)."
  },
  {
   "address": 34004,
   "type": "line",
   "text": "Entry of clear_screen that fills the screen matrix with the glyph in A."
  },
  {
   "address": 34022,
   "type": "line",
   "text": "Fills colour RAM $D800-$DBFF with colour 9."
  },
  {
   "address": 34042,
   "type": "line",
   "text": "Called by the interrupt every frame: rotates the noise byte $E1; checks that $D024 (extra background colour 3) still holds $0A, the value the loader's last stage wrote at $B0AE, and if not jumps to $799A, the middle of an instruction where the byte $02 jams the processor: a protection check. Otherwise steps a second shift-register random source in $E3. Live: with $D024 set to 0 the processor jammed at $799A within 30 frames; the control run played on."
  },
  {
   "address": 34086,
   "type": "line",
   "text": "Draws the game clock on the pocket computer's status line: seconds, minutes and hours as two digits each ($8547) at $43AC + 6/3/0, with a blank instead of a leading zero in the hours."
  },
  {
   "address": 34119,
   "type": "line",
   "text": "Writes the decimal byte A as two digits of the $5800 alphabet ($80 + digit) at $43AC,y and $43AD,y."
  },
  {
   "address": 34140,
   "type": "line",
   "text": "Moves the lift down one step, unless the corridor below is in view ($1D): waits for raster line $A3, steps the shaft animation counters back, scrolls the shaft view down ($74C0), colours the corridors ($75A5), draws the new row ($7749), makes the lift's sound ($85B5) and waits until two ticks have passed."
  },
  {
   "address": 34194,
   "type": "line",
   "text": "Moves the lift up one step, unless the corridor above is in view ($1E): waits for raster line $3B, scrolls the shaft view up ($744B), draws the new row ($7631), sound ($85B5), steps the counters ($73CA), waits two ticks."
  },
  {
   "address": 34229,
   "type": "line",
   "text": "The lift's hum: raises the pitches $25 (by 4, up to $20) and $26 (by 3, up to $18), mixes them with the noise byte $E1 into the frequencies of voices 1 and 2, sustain $8F, sawtooth on voice 1 and noise on voice 2. The lift loop fades $25/$26 again when the lift stops."
  },
  {
   "address": 34303,
   "type": "line",
   "text": "Waits until the raster is past sprite 3's Y + $15, the bottom of sprite 3."
  },
  {
   "address": 34315,
   "type": "line",
   "text": "Moves the agent one step, called by the lift and room loops. With $43 set (dying, or time up) it runs the death sequence ($95E4). Waits until the raster is below sprite 3. If the agent is falling ($41 non-zero) it moves him down by $41/8 + 2 lines (at most 8), turns the fall into a landing when the feet meet solid ground (glyphs $47/$48, $8CC5) and, when the feet pass line $F8 (the agent has fallen out of the bottom of the room), keeps him falling until his top passes $F6 and sets $43 = 2: death by falling. Otherwise it waits for its turn ($3E against the speed $40), reads the stick ($87ED), steps the animation ($8817, $8859), keeps the agent out of the lift doors ($88F9), handles leaving the room ($8B6E), checks the robots and objects ($8E61, $9504), and sets the sprites for the new frame ($87D5, $8729)."
  },
  {
   "address": 34601,
   "type": "line",
   "text": "Sets the agent's three sprites for animation frame $3F: pointers $43F9-$43FB from tbl_agent_pointers ($8D43), with sprite 2 switched off in the somersault frames $14-$19 and an extra pointer step for the walk frames 7-$0D. When the agent's facing ($50) differs from the way the frame is stored (byte 63 of the shape), mirrors the frame's three sprite shapes in place: every byte through the bit-reversal table $C500 and the three bytes of each row swapped, using the shape address from tbl_agent_shapes ($8D5F, written into the operands at $87AB-$87C4) and the length from $8D97. So each frame is stored once, facing one way."
  },
  {
   "address": 34731,
   "type": "line",
   "text": "Operand low byte of `ldx $6700,y` in agent_frame's mirroring loop: the frame's shape address, from tbl_agent_shapes."
  },
  {
   "address": 34732,
   "type": "line",
   "text": "High byte of the shape address read in agent_frame."
  },
  {
   "address": 34737,
   "type": "line",
   "text": "Operand low byte of `ldx $6702,y` in agent_frame: the shape address + 2."
  },
  {
   "address": 34738,
   "type": "line",
   "text": "High byte of the shape address + 2."
  },
  {
   "address": 34740,
   "type": "line",
   "text": "Operand low byte of `sta $6702,y` in agent_frame."
  },
  {
   "address": 34741,
   "type": "line",
   "text": "High byte for the `sta $6702,y`."
  },
  {
   "address": 34746,
   "type": "line",
   "text": "Operand low byte of `sta $6700,y` in agent_frame."
  },
  {
   "address": 34747,
   "type": "line",
   "text": "High byte for the `sta $6700,y`."
  },
  {
   "address": 34749,
   "type": "line",
   "text": "Operand low byte of `ldx $6701,y` in agent_frame."
  },
  {
   "address": 34750,
   "type": "line",
   "text": "High byte for the `ldx $6701,y`."
  },
  {
   "address": 34755,
   "type": "line",
   "text": "Operand low byte of `sta $6701,y` in agent_frame."
  },
  {
   "address": 34756,
   "type": "line",
   "text": "High byte for the `sta $6701,y`."
  },
  {
   "address": 34773,
   "type": "line",
   "text": "Copies the agent's positions ($2C-$31, X and Y of sprites 1-3) to the video chip and their ninth X bits ($32) into $D010 bits 1-3, with interrupts masked for the read-modify-write."
  },
  {
   "address": 34797,
   "type": "line",
   "text": "Reads left and right from the stick in port 2 while the agent is on his feet ($3F below $10): neither gives the standing frame $0E and no speed ($39 = 0); right gives facing $50 = $01 and speed +5, left $80 and -5."
  },
  {
   "address": 34839,
   "type": "line",
   "text": "Steps the animation frame $3F: on the ground, fire ($51, counted by the room loop) starts a somersault (frame $1B, with a sound on voice 3) and, while walking, the frame runs down from $0D to 0 and round again; while somersaulting it runs down to $10 and then lands on $0E, or $0D if the stick is still held."
  },
  {
   "address": 34905,
   "type": "line",
   "text": "Moves the agent's sprites by the current frame: when walking, $39 pixels sideways (with the ninth X bits in $32); in the somersault, by the per-frame offsets of tbl_somersault_dy1-3 ($8D07, $8D13, $8D1F) vertically and tbl_somersault_dx ($8D2B, $8D37) horizontally, negated when facing left, carrying into the ninth bits (the branch at $88B6 and $88DD/$88EB is patched between `bcc` and `bcs` for the sign)."
  },
  {
   "address": 34998,
   "type": "line",
   "text": "The `bcc` at $88B6 in agent_move whose opcode is patched to $90 (bcc) or $B0 (bcs) by the sign of the vertical step, so that the carry of sprite 3's addition flips its ninth X bit correctly."
  },
  {
   "address": 35037,
   "type": "line",
   "text": "The branch at $88DD patched to `bcc` or `bcs` by the sign of the horizontal step (sprite 1's ninth bit)."
  },
  {
   "address": 35051,
   "type": "line",
   "text": "The branch at $88EB patched the same way for sprite 2's ninth bit."
  },
  {
   "address": 35065,
   "type": "line",
   "text": "Keeps the agent from walking into a closed lift door: in the shaft view ($1A = 0) a door that is not open ($1F/$20 not $0B) pushes the agent back from it; in a room ($1A set) it computes the agent's box ($33-$38: top, bottom, left, right, middles) and resolves collisions with the room's walls and floors in four directions with $8AAA, $8ACD and $8CC5, sliding the agent back to the edge of the solid cell it moved into."
  },
  {
   "address": 35498,
   "type": "line",
   "text": "Tests for a solid cell to the right of the agent: at the middle height $37 and, except in the somersault frames $14-$18, eight lines higher as well. Carry set if solid."
  },
  {
   "address": 35533,
   "type": "line",
   "text": "The same test to the left of the agent ($3A)."
  },
  {
   "address": 35568,
   "type": "line",
   "text": "A byte inside the code used as a scratch register by $8AF1: the three carries of the X subtraction, one per sprite."
  },
  {
   "address": 35569,
   "type": "line",
   "text": "Moves the agent's three sprites left by $E4 pixels, borrowing from the ninth X bits in $32 as needed (scratch in $8AF0)."
  },
  {
   "address": 35618,
   "type": "line",
   "text": "Scratch byte for $8B23, as $8AF0 is for $8AF1."
  },
  {
   "address": 35619,
   "type": "line",
   "text": "Moves the agent's three sprites right by Y pixels, carrying into the ninth X bits in $32 (scratch in $8B22)."
  },
  {
   "address": 35667,
   "type": "line",
   "text": "Moves the agent's three sprites up by $E4 lines."
  },
  {
   "address": 35681,
   "type": "line",
   "text": "Moves the agent's three sprites down by Y lines."
  },
  {
   "address": 35694,
   "type": "line",
   "text": "Checks whether the agent has walked out of the screen. To the right past X $164 or to the left before X $10 in a room: back into the corridor (the map marker $27 moves by 16, the shaft view is redrawn, the stack is reset and the lift loop restarts at $39CF). From the corridor, into the room on that side: the room number from the map ($FF96), its drawing ($A255, $A39C, $A2F7) and the room loop ($7249); a voice line ($BED9 with X = 1) on entering an ordinary room when an hour has passed ($C1)."
  },
  {
   "address": 35912,
   "type": "line",
   "text": "The agent's top edge: Y of sprite 1 + the frame's offset from tbl_agent_top ($8DB3), at least $33."
  },
  {
   "address": 35927,
   "type": "line",
   "text": "The agent's feet: Y of sprite 1 + the frame's offset from tbl_agent_bottom ($8DCF)."
  },
  {
   "address": 35936,
   "type": "line",
   "text": "The agent's left edge in X, from sprite 1's X and the frame's offsets ($8DEB facing left, $8E07 facing right); the ninth bit comes back in the carry."
  },
  {
   "address": 35991,
   "type": "line",
   "text": "The agent's right edge in X, the mirror of agent_left."
  },
  {
   "address": 36037,
   "type": "line",
   "text": "Tests the screen cell under a point: Y = raster line, X/carry = X position (nine bits). Converts to a cell of the screen at $4000 (row (Y - $32)/8, column (X - 24)/8) and returns carry set if the glyph there is a solid one, $45-$51 (floors, platforms and walls). Off the screen it returns carry clear. The row address is left in $7C/$7D."
  },
  {
   "address": 36103,
   "type": "line",
   "text": "Vertical step of sprite 1 in each of the twelve somersault frames ($10-$1B), signed: the arc of the jump."
  },
  {
   "address": 36115,
   "type": "line",
   "text": "Vertical step of sprite 2 in each somersault frame."
  },
  {
   "address": 36127,
   "type": "line",
   "text": "Vertical step of sprite 3 in each somersault frame."
  },
  {
   "address": 36139,
   "type": "line",
   "text": "Horizontal step of sprites 1 and 2 in each somersault frame, facing right (negated facing left)."
  },
  {
   "address": 36151,
   "type": "line",
   "text": "Horizontal step of sprite 3 in each somersault frame."
  },
  {
   "address": 36163,
   "type": "line",
   "text": "Sprite pointer of the agent's first sprite for each of the 28 frames $00-$1B: walk $80-$98 (twice, for the two strides), standing $9C, $0F $9F, somersault $BD down to $A2."
  },
  {
   "address": 36191,
   "type": "line",
   "text": "Address of each frame's sprite shapes in bank 1 ($6000-$6FFF), for the in-place mirroring in agent_frame."
  },
  {
   "address": 36192,
   "type": "line",
   "text": "High bytes of tbl_agent_shapes, read with `ldy $8D60,x`."
  },
  {
   "address": 36247,
   "type": "line",
   "text": "Where the mirroring of each frame stops: $FC for the frames of three sprites, $BC and $7C for those of fewer."
  },
  {
   "address": 36275,
   "type": "line",
   "text": "Offset from sprite 1's Y to the agent's top edge, for each of the 28 frames."
  },
  {
   "address": 36303,
   "type": "line",
   "text": "Offset from sprite 1's Y to the agent's feet, for each frame."
  },
  {
   "address": 36331,
   "type": "line",
   "text": "Offset of the agent's left edge from sprite 1's X for each frame (used for the trailing edge when facing right and the leading edge when facing left)."
  },
  {
   "address": 36359,
   "type": "line",
   "text": "Offset of the agent's other edge for each frame."
  },
  {
   "address": 36387,
   "type": "line",
   "text": "Moves the agent's three sprites one pixel right, in the video chip and in $2C-$31; when sprite 1's X wraps to 0, sets the ninth X bits of sprites 1-3 ($32 = $0E, $D010)."
  },
  {
   "address": 36417,
   "type": "line",
   "text": "Moves the agent's three sprites one pixel left, clearing the ninth X bits when sprite 1's X is 0 before the step."
  },
  {
   "address": 36449,
   "type": "line",
   "text": "In the shaft view ($1A = 0) parks sprite 0 at X $A0 or $CA depending on which side of the lift the agent stands."
  },
  {
   "address": 36473,
   "type": "line",
   "text": "The agent's footsteps: in a room unless $4E is set (a robot is firing), on the walk frames 0, 7 and $10 a short pulse on voice 3 (pitch by facing), and the gate off on the frames $0E, $0A and 3."
  },
  {
   "address": 36556,
   "type": "line",
   "text": "Runs the robots, one pass for all of them every frame from the interrupt (with $1A set). While a robot's turn is delayed ($47 not $FF) it only counts. Otherwise, for each robot from the last ($54, steps of 6 bytes from $55), it interprets that robot's behaviour script: each robot has a script pointer ($55,x) into the script table at $2112, a current command with its count ($57,x), and flags ($56,x). Commands (top bits of the byte): relative jumps (add the low 6 bits to the pointer); tests that skip the next command or not: the agent to the left or right of the robot, the agent on its level (within 20 lines), a random bit; set the robot's mode; fire the zap ($8F3F); turn ($90B6, stepping its sprite pointer between $C0, facing one way, and $C6, the other); move ($90FB) for the command's count of frames. Then the zap and footstep sound bookkeeping. $FF ends a command and fetches the next."
  },
  {
   "address": 36671,
   "type": "line",
   "text": "A robot fires: the zap sound ($926F); every 32 frames the zap's count runs down and ends it below $94. Only on its own frame (the tick's low two bits equal to the robot's number) and only when the robot faces fully left or right (pointer $C0 or $C6): sprite 0 becomes the zap, placed 9 pixels right or 22 left of the robot (abandoned off the screen's right), its shape one of four random pointers $14-$17, X-expanded, flickering white and blue."
  },
  {
   "address": 36833,
   "type": "line",
   "text": "The script's test commands: compare the agent's X with the robot's (left or right, flipped by the robot's facing) and the agent's Y with the robot's (within $14 lines); the result decides whether the next command is skipped. A further form skips on a random bit ($904C)."
  },
  {
   "address": 36945,
   "type": "line",
   "text": "Script command: sets the robot's mode bits (low two bits of $56,x) from the command, then fetches the next command. Mode 1 makes the robot move on alternate frames only (half speed, at $9111)."
  },
  {
   "address": 36965,
   "type": "line",
   "text": "Script command: turns the robot towards the agent: compares the agent's and the robot's X and chooses the turn command that rotates the robot's pointer towards $C0 or $C6, unless it already faces that way."
  },
  {
   "address": 37034,
   "type": "line",
   "text": "Script command: wait; counts the command down every fourth frame ($9293)."
  },
  {
   "address": 37046,
   "type": "line",
   "text": "Script command: turn one step every fourth frame, with the turning sound ($922A): the robot's sprite pointer ($43FC + robot) goes down towards $C0 or up towards $C6; the command ends when it gets there."
  },
  {
   "address": 37115,
   "type": "line",
   "text": "Script command: moves the robot one pixel (or a step on alternate frames in mode 1) left or right along its platform. Before each step it looks at the floor glyph below the robot's leading edge (through the robot's screen pointer $58/$59,x) and stops (sets bit 7 of $56,x and ends the command) where the floor ($45/$46) ends, so a robot never walks off its platform. When the agent is riding a lift platform (frame $0F) it checks the lift's glyphs too ($948C). Keeps the sub-cell position in $5A,x and carries into the ninth X bit."
  },
  {
   "address": 37324,
   "type": "line",
   "text": "End of one robot's turn: steps to the previous robot (6 bytes back) and loops; after the last, gates off the turning sound if no robot turned, the zap and footstep sounds as needed, and hides sprite 0 when the ball is not active ($6D)."
  },
  {
   "address": 37381,
   "type": "line",
   "text": "Ends the current command and marks the robot blocked (bit 7 of $56,x)."
  },
  {
   "address": 37393,
   "type": "line",
   "text": "Flashes the four robots' colours ($D02B-$D02E) between $4B and $4C every 8 ticks, unless $DC is set."
  },
  {
   "address": 37418,
   "type": "line",
   "text": "The robot-turning sound: voice 2 pulse with a pitch from the noise byte $E1, gated on; and the hum on voice 1 ($924E)."
  },
  {
   "address": 37454,
   "type": "line",
   "text": "The robots' hum on voice 1: pulse wave at a pitch from the random byte $E3."
  },
  {
   "address": 37487,
   "type": "line",
   "text": "The zap's sound on voice 3: noise wave, pitch $0404, pulse from the tick, gate on."
  },
  {
   "address": 37523,
   "type": "line",
   "text": "Counts the robot's current command down (low 5 bits of $57,x); at zero ends it ($FF)."
  },
  {
   "address": 37536,
   "type": "line",
   "text": "Up on the stick in a room: looks at the screen cell just above the agent's feet; anything other than the blank $53 is furniture or a terminal, and $97FB starts searching it (address in $10/$11)."
  },
  {
   "address": 37579,
   "type": "line",
   "text": "Runs the floating ball (sprite 0) once a frame from the interrupt, when a ball is active ($6D positive) and the robots are not delayed ($47 = $FF). The ball follows a script of two-byte commands at $2232 + $6E (command, argument), with a counter $6F and a wait $70. Commands: 1 wait n frames ($70); 2 move by (high nibble, low nibble) as signed steps in X and Y; 3 home in on the agent's centre by up to n pixels in each direction; 4 jump to n; 5 jump by n if the counter is zero; 6 load the counter with n; 7 add n to the counter; others subtract n. Wait and move end the frame's commands; the others run on. After moving, ball_walls keeps the ball out of the walls."
  },
  {
   "address": 37843,
   "type": "line",
   "text": "Keeps the ball inside the room: wraps it from the bottom ($FB) to the top ($19), ignores it above line $33, and pushes it back out of any solid cell (glyphs below $4C, from $8CC5, or the lift platform, $948C) it has moved into, on its left, right, top and bottom edges, aligning it to the cell edge."
  },
  {
   "address": 38028,
   "type": "line",
   "text": "When the agent's frame is $0F, tests whether a screen cell (row pointer $7C/$7D + Y) lies on the lift platform the agent stands on, whose cells relative to $10/$11 (four rows of 8) are copied at $C100; carry set if that copy holds a solid glyph ($45-$51) there."
  },
  {
   "address": 38117,
   "type": "line",
   "text": "The agent's centre: middle of top and feet in $72 and middle of the left and right edges (X/2) in $73."
  },
  {
   "address": 38148,
   "type": "line",
   "text": "Has something touched the agent? Reads the sprite-sprite collision register $D01E. Not in the shaft view, not with $DC set, and not in the two special rooms $11 and $1B. Any of the agent's sprites (1-3) touching a robot (4-7) or, while the robots run, the zap (sprite 0) kills: $43 = 1, the robots stop ($47 = 0), the ball is switched off. When the ball is active, its touch is tested by distance as well: the ball's centre against the agent's centre must be within $40 (sum of X and Y distances, X doubled), and nearer than every robot, unless $85 is set; a near miss switches the ball off."
  },
  {
   "address": 38372,
   "type": "line",
   "text": "What happens when $43 is set. $FF (time up): the end of the game ($83FC). In the shaft view: nothing. In a room: the sound stops and the agent's three sprite shapes are copied into the work shapes at $4D80 ($972A). $43 = 2, a fall: the agent's sprites go off, voice line 7 (the scream) is played ($BED9). Otherwise, electrocuted: the agent flashes ($9765) and his shapes are eaten away bit by bit with random masks ($97E1) in 32 passes with the crackling sound. $43 = 3 also calls $AE23. Then the room is reset: the robots and the ball restart ($A102, the room record through $0E70, $A68B, $A714), the agent stands at the entrance ($ABE2, frame $0E, pointers back with $9718), ten minutes are added to the clock (`lda #$10 / jsr $83CC` in decimal mode), and play resumes. Live: setting $43 = 1 in a room ran the electrocution and moved the clock from 12:24:47 to 12:34:47."
  },
  {
   "address": 38674,
   "type": "line",
   "text": "The agent's three sprite pointers when standing: $9E, $9C, $9D."
  },
  {
   "address": 38677,
   "type": "line",
   "text": "The agent's three sprite colours: white (1) and light grey (11) twice."
  },
  {
   "address": 38680,
   "type": "line",
   "text": "Puts the agent's standing pointers and colours into sprites 1-3."
  },
  {
   "address": 38698,
   "type": "line",
   "text": "Copies the shapes of the agent's three current sprites into the work area at $4D80-$4E3F and points sprites 1-3 at the copies ($36-$38), so they can be dissolved without spoiling the originals."
  },
  {
   "address": 38757,
   "type": "line",
   "text": "One flash of the electrocution: a pause, the crackle ($97A4), the agent's sprites in white and grey, a pause, then the colours swapped."
  },
  {
   "address": 38797,
   "type": "line",
   "text": "The two colour pairs of death_flash: white/dark grey, grey/medium grey."
  },
  {
   "address": 38799,
   "type": "line",
   "text": "The second pair of death_flash colours."
  },
  {
   "address": 38801,
   "type": "line",
   "text": "A busy wait of about 13 \u00d7 256 loop passes (some 16,000 cycles), registers kept."
  },
  {
   "address": 38820,
   "type": "line",
   "text": "The electrocution crackle: voices 2 and 3 noise and pulse, random volume (0-7)."
  },
  {
   "address": 38881,
   "type": "line",
   "text": "Returns in A a byte with one random bit clear (from tbl_bit_masks) and in X a random index 0-63, for eating away a sprite shape."
  },
  {
   "address": 38899,
   "type": "line",
   "text": "Eight masks with one bit clear: $FE, $FD, $FB, $F7, $EF, $DF, $BF, $7F."
  },
  {
   "address": 38907,
   "type": "line",
   "text": "Searching: the agent pushes up in front of something. Finds the object whose screen extent ($4F55-$4F58, start and end address) holds the cell in $10/$11 among the room's object records (6 bytes each from $4F55, ended by $FF; $86 counts in fours for the record's map flag). Saves the cells around the agent ($9BC8), takes the searching frame (frame + 1). The record's byte 4 ($4F59) is the search time left: 0 means already searched (straight to the result); $FF is a security terminal ($9D16). Otherwise shows the searching picture (built at $5000 from $9A5E) with a bar that fills while up is held, counting the time down by one a tick and stopping when the stick is released (the time left is kept, so a search can be resumed). When it reaches 0, the result ($98FB)."
  },
  {
   "address": 39163,
   "type": "line",
   "text": "The contents of a searched object, byte 5 of its record ($4F5A): $FF nothing (the NOTHING HERE picture, $99E3); $FE a special object ($AA40); $FB a case handled by $A771; $FC a snooze password and $FD a lift-init password (picture from $9B31, the SNOOZES or LIFT INITS count in the status text incremented up to 9, $D7 counts passwords found); otherwise a puzzle piece: $D6 counts pieces found, its picture is built ($9C47), it is appended to the memory list ($4EF5) with the room's colour ($D021 into $4F25), and the first two pieces are also copied, inverted, into the display's two memory slots ($C690, $C840). The picture stays on screen until up is released or the agent dies; then the object is marked empty ($9B35)."
  },
  {
   "address": 39418,
   "type": "line",
   "text": "Bit patterns for the search bar's last cell: $FF, $3F, $0F, $03 (four, three, two, one pixel pairs filled)."
  },
  {
   "address": 39422,
   "type": "line",
   "text": "Three layouts of the searching box, 8 \u00d7 4 cells each (32 bytes, read by show_search_box from $99FE, $9A1E or $9A3E): glyph numbers, $52 for a blank cell and $00-$11 for the cells of the 144-byte picture built at $5000."
  },
  {
   "address": 39454,
   "type": "line",
   "text": "The second of the three searching-box layouts in tbl_search_layouts."
  },
  {
   "address": 39486,
   "type": "line",
   "text": "The third searching-box layout in tbl_search_layouts (the default operand of show_search_box)."
  },
  {
   "address": 39518,
   "type": "line",
   "text": "The top of the picture shown while an object is searched, 64 bytes stored inverted; copied to $5000 at the start of a search, with $FF below it and the bar from $9A9E."
  },
  {
   "address": 39582,
   "type": "line",
   "text": "The first three bytes of the search bar, copied to $5078."
  },
  {
   "address": 39585,
   "type": "line",
   "text": "The picture shown when a search finds nothing (144 bytes, inverted, the size of a puzzle piece's picture), copied to $5000 by $99E3."
  },
  {
   "address": 39729,
   "type": "line",
   "text": "Low and high bytes of the two password pictures shown by a search: $3283 (snooze, $FC) and $31F3 (lift init, $FD)."
  },
  {
   "address": 39731,
   "type": "line",
   "text": "High bytes of tbl_password_pics."
  },
  {
   "address": 39733,
   "type": "line",
   "text": "Marks object X as searched: contents $F0, the room's map flag cleared through ($87),$86, and its cells on screen blanked (4 rows of its width, keeping the floor glyphs $45-$4B on the lowest row) so the furniture disappears. A special object ($FE) is left alone."
  },
  {
   "address": 39824,
   "type": "line",
   "text": "Inverts the 144-byte picture at $5000 and shows it in the searching box."
  },
  {
   "address": 39843,
   "type": "line",
   "text": "Draws the searching box over the object: 8 \u00d7 4 cells from the layout table whose address is in A/X (written into the operand at $9BB1), in white, at $10/$11 and $14/$15."
  },
  {
   "address": 39857,
   "type": "line",
   "text": "Operand low byte of `lda $9A3E,x` in show_search_box: which of the three box layouts to draw."
  },
  {
   "address": 39858,
   "type": "line",
   "text": "High byte of the box layout's address."
  },
  {
   "address": 39880,
   "type": "line",
   "text": "Works out the screen address of the 8 \u00d7 4 cells above the agent ($10/$11, colour $14/$15) and saves them to $C100 (characters) and $C120 (colours) so the search box can be removed."
  },
  {
   "address": 39976,
   "type": "line",
   "text": "Puts back the 8 \u00d7 4 cells saved by save_search_area."
  },
  {
   "address": 40007,
   "type": "line",
   "text": "Builds the picture of puzzle piece A in $5000: from the piece's four-byte record at $BFC0, the solution image of its puzzle ($C9F0 + 144 \u00d7 puzzle) ANDed with two mask shapes from the table at $2763, each mask inverted or not by the record's flag bits 0 and 1 (patched into the `lda #$00` operands at $9C64 and $9C6D). Then flips it by flag bits 3 (top to bottom, $7934) and 2 (left to right, $7999), so a piece can be found upside down or mirrored."
  },
  {
   "address": 40036,
   "type": "line",
   "text": "Immediate operand of `lda #$00` in build_piece: $00 or $FF, inverting the second mask for this piece (flag bit 1)."
  },
  {
   "address": 40045,
   "type": "line",
   "text": "Immediate operand of `lda #$00` in build_piece: $00 or $FF, inverting the first mask (flag bit 0)."
  },
  {
   "address": 40074,
   "type": "line",
   "text": "Entry of build_piece's end: points $18/$19 and the flip routines' operands at the glyphs at $5000 + A, then applies the flips in $E4; used by phone_answer_orient to show a piece the right way round."
  },
  {
   "address": 40145,
   "type": "line",
   "text": "Sets the pointers for build_piece: $E6/$E7 = the piece's record ($BFC0 + 4A), $E8/$E9 = its puzzle's solution image, and $C4-$C7 the two mask shapes ($2763 + 144 \u00d7 mask number)."
  },
  {
   "address": 40214,
   "type": "line",
   "text": "The security terminal. Blanks the screen, saves the screen ($4000-$43FF to $C100-$C4FF) and colour RAM ($D800-$DBFF to $0400-$07FF), and the video chip's sprite and colour registers on the stack. Draws the terminal's screen from two run-length lists of (count, value) pairs: characters from $3633 and colours from $37A9 (value $FF = the room's colour), 25 rows; sets the colours from tbl_terminal_colours, eight sprites from tbl_terminal_sprites and their pointers ($18-$1D), and the character set two below. Runs the terminal ($9F0E), then restores everything. Live: started from the room loop in room $1C, it showed SECURITY TERMINAL 28."
  },
  {
   "address": 40459,
   "type": "line",
   "text": "Operand high byte of `lda $3634,x` in security_terminal: the run-length list's page, stepped when X wraps."
  },
  {
   "address": 40463,
   "type": "line",
   "text": "Operand high byte of `lda $3633,x` in security_terminal, stepped with $9E0B."
  },
  {
   "address": 40679,
   "type": "line",
   "text": "Colours for $D021-$D02E while the terminal is shown: background 9, extra colours $0B/$0C (or the room's), and the eight sprite colours (patched with the room's colour at $9EED-$9EF0)."
  },
  {
   "address": 40680,
   "type": "line",
   "text": "Entries of tbl_terminal_colours patched with the room's colour: $D022 here, $D023 after it, and the four sprite colours at $9EED-$9EF0."
  },
  {
   "address": 40681,
   "type": "line",
   "text": "tbl_terminal_colours +2: the terminal's second multicolour, $0C, or $0B when the room's colour is grey ($0C)."
  },
  {
   "address": 40685,
   "type": "line",
   "text": "The four sprite colours in tbl_terminal_colours that terminal set-up patches with the room's colour."
  },
  {
   "address": 40693,
   "type": "line",
   "text": "X and Y of the eight sprites of the terminal screen and their ninth X bits: the screen's decorations and the pointer."
  },
  {
   "address": 40710,
   "type": "line",
   "text": "Sprite pointers of the terminal's eight sprites, $18-$1D."
  },
  {
   "address": 40718,
   "type": "line",
   "text": "The security terminal's menu: writes the room number $7E in decimal as two digits into the title line (the 00 of SECURITY TERMINAL 00, at $A048/$A049; room $1C shows as 28, seen live), then types the screen line by line, one line a frame (24-character lines from str_terminal at the offsets in tbl_terminal_lines), with a row of three $95 glyphs (`***`) at the top. Puts the pointer `==>` at LOG OFF ($8A = 2) and loops: fire (on a fresh press, $DE) carries out the choice ($A0DE); up and down move the pointer between the three choices (rows apart by tbl_terminal_steps) with a short delay ($9791)."
  },
  {
   "address": 40941,
   "type": "line",
   "text": "Rows between the terminal's choices, for moving the pointer: 2 and 6 (the second choice is two rows lower than the first, the last six lower than the second)."
  },
  {
   "address": 40943,
   "type": "line",
   "text": "Draws the terminal's pointer, the three glyphs `==` and `>` from $9FFA, at $10/$11."
  },
  {
   "address": 40954,
   "type": "line",
   "text": "The pointer's three glyphs: = = > in the $4800 alphabet ($96, $96, $97)."
  },
  {
   "address": 40957,
   "type": "line",
   "text": "Offsets into str_terminal of the terminal screen's fifteen text rows, read last first ($00 = the blank line, $18 the title, $30, $48 ... $90 the choices and $A8 LOG OFF.)."
  },
  {
   "address": 40972,
   "type": "line",
   "text": "Copies one 24-character line of str_terminal, from offset X, to the screen at $10/$11."
  },
  {
   "address": 40990,
   "type": "line",
   "text": "The security terminal's text, 24-character lines in the $4800 alphabet: a blank line, SECURITY TERMINAL 00 *** (the room number is written over the 00), SELECT FUNCTION, RESET LIFTING PLATFORMS / IN THIS ROOM., TEMPORARILY DISABLE / ROBOTS IN THIS ROOM., LOG OFF."
  },
  {
   "address": 41032,
   "type": "line",
   "text": "The two digits of the room number in SECURITY TERMINAL 00, written by terminal_menu ($A048 tens, $A049 units)."
  },
  {
   "address": 41033,
   "type": "line",
   "text": "The units digit of the terminal's room number, and the rest of str_terminal after it (the choices and LOG OFF.)."
  },
  {
   "address": 41182,
   "type": "line",
   "text": "Carries out the terminal choice under the pointer ($8A). The two password functions first check the password ($A1A1); without one nothing happens. $8A = 0, reset lifting platforms ($A102). $8A = 1, disable robots: $47 = $40, which stops the robots and the ball until the robots' counter, stepped every fourth tick, climbs back to $FF (764 ticks); if no ball is active, bit 0 of the saved sprite enable on the stack is cleared so the ball stays off. $8A = 2, LOG OFF: drops the return addresses and leaves the terminal. Live (the snooze's effect): $47 = $40 kept the robots still for 300 frames and returned to $FF after about 764 ticks."
  },
  {
   "address": 41218,
   "type": "line",
   "text": "Resets the lifting platforms of the room: for each platform in the room's list at ($81) (a position, a height, a list of $FF-ended bytes), blanks its cells ($AC22 gives the address, three cells wide); then finds the room in tbl_room_platform_ptrs ($1FDA) and copies its original platform list back from the address in $2016, and draws every platform again ($AC55). In a room the death sequence redraws ($43 set), the screen addresses are shifted down by $81 pages to draw into the copy at $C100."
  },
  {
   "address": 41377,
   "type": "line",
   "text": "For the two password functions ($8A = 0 lift init, 1 snooze): blanks the three rows under the choice, then looks at the matching count in the status text ($3439 + 0 for SNOOZES, + $0D for LIFT INITS, digits in the $5800 alphabet). Above 0: decrements it and shows PASSWORD ACCEPTED; otherwise PASSWORD REQUIRED (carry from the comparison). Then a long delay and the choice's text drawn back."
  },
  {
   "address": 41507,
   "type": "line",
   "text": "Screen addresses ($A223/$A224 low, $A225/$A226 high) of the rows of the two password choices: $4122 and $419A."
  },
  {
   "address": 41509,
   "type": "line",
   "text": "High bytes of tbl_terminal_choice_addr."
  },
  {
   "address": 41511,
   "type": "line",
   "text": "Offsets of the two counters' digits in the status text at $3439: $0D (LIFT INITS) and $00 (SNOOZES)."
  },
  {
   "address": 41513,
   "type": "line",
   "text": "PASSWORD REQUIRED and PASSWORD ACCEPTED, 19 characters each in the $4800 alphabet, shown by check_password."
  },
  {
   "address": 41551,
   "type": "line",
   "text": "Offsets into str_terminal of the lines to redraw under each choice after a password check."
  },
  {
   "address": 41557,
   "type": "line",
   "text": "The wipe between a room and the corridor: silences the sound, hides the sprites and, two ticks a step, blanks two rows of the screen moving outwards from the middle ($41E0) while two raster bands ($8B going up, $8C going down) paint the background colour black between them, until the bottom band reaches line $FB. In the shaft view the lower band stops at the pocket computer ($AA)."
  },
  {
   "address": 41707,
   "type": "line",
   "text": "Fills one 40-cell row at $10/$11 and one at $12/$13 with the blank glyph."
  },
  {
   "address": 41719,
   "type": "line",
   "text": "Reveals a room drawn in the buffer at $C100-$C4FF: from the middle of the screen outwards, one pair of rows every second tick, copies the buffer's rows (screen $C100-, colours $C400 area to $D800-) to the screen, while two raster bands ($8B moving down from line $32, $8C up from $FC) paint the background black outside the revealed part and the room's colour ($8D) inside. When the bands meet, the agent stands (frame $0E) and the room's sprites are switched on ($8E)."
  },
  {
   "address": 41870,
   "type": "line",
   "text": "Copies one 40-cell row from ($12) to ($10) and one from ($16) to ($14): a step of room_wipe_in."
  },
  {
   "address": 41884,
   "type": "line",
   "text": "Draws room $7E into the buffer at $C100-$C4FF (screen) and $C400 area (colours) before it is shown. Stops the robots ($47 = 0), clears the sprite Y positions, fills the buffer with blanks and selects character set $4800. Reads the room's record through the pointer table at $0E70: background colour ($8D), the two multicolours ($D022, $D023), the floor colour ($E6); then the floors, as (address, length) triples ending with $FF, drawn with the floor glyph $45 and end glyph $46; the side walls ($47 left, $48 right, 25 rows); the gaps, as (address, glyph) pairs, five blanked cells above a glyph; the agent's start ($ABE2), the robots ($A68B) and the ball ($A714); the sprite multicolours, the robots' two colours ($4B/$4C), the sprites to switch on ($8E); then the lifting platforms (list at ($81), each drawn by $AC55) and the furniture: for each object an index into tbl_furniture ($232C, five bytes: shape address, width and height, search time) and its contents; draws its shape (blank where the contents are $F0, already searched) and fills its search record at $4F55 (screen extent, search time, contents). Rooms $11 and $1B, the code rooms, get their big screen ($A5C9)."
  },
  {
   "address": 42441,
   "type": "line",
   "text": "Extra drawing for the two code rooms ($7E = $11 or $1B): a large framed screen of 13 rows by 32 columns in the buffer (borders of glyphs 3 and 4, a top and bottom row of glyphs 1 and $10/$06, colour $0E and $0C), the 144-byte picture at $3063 copied to $5000, and sprites 4-7 set up from tbl_code_room_sprites: pointers $10 (the hand), $33, $34, $35, their colours and positions, sprite 7 multicolour, sprite 0 pointer $1E."
  },
  {
   "address": 42619,
   "type": "line",
   "text": "Sprite pointers of the code room's sprites 4-7: $10 (the hand), $33, $34, $35."
  },
  {
   "address": 42623,
   "type": "line",
   "text": "X and Y of the code room's sprites 4-7: ($3C,$53), ($A0,$E2), ($B8,$E2), ($AC,$E2)."
  },
  {
   "address": 42631,
   "type": "line",
   "text": "Colours of the code room's sprites 4-7: cyan (3), black, black, white."
  },
  {
   "address": 42635,
   "type": "line",
   "text": "Sets up the room's robots from its record at ($18),y: all four robots (sprites 4-7) facing one way (pointer $C0), multicolour, unexpanded. For each robot until $FF: its script's start in the script table ($55,x), mode 1 ($56,x), no command ($57,x = $FF), Y = row \u00d7 8 + $1F, X = (column + 2) \u00d7 8 with the ninth bit, its screen address under it ($58/$59,x via $AC22) and sub-cell position 3 ($5A,x). $54 ends as the last robot's offset (6 bytes a robot), or $FF for none."
  },
  {
   "address": 42772,
   "type": "line",
   "text": "Sets up the room's ball from its record: none if the byte is $FF ($6D = $FF); otherwise the ball's script start ($6E), its X and Y, pointer $1F, black, and $6D = 0 (active)."
  },
  {
   "address": 42813,
   "type": "line",
   "text": "Animates the code room's big screen every sixteen ticks: random sprite multicolours and random light colours (8-15, $A921) in four cells of the colour RAM at $DB81-$DB86."
  },
  {
   "address": 42865,
   "type": "line",
   "text": "The musical puzzle of the code rooms, entered when the agent searches the room's computer (contents $FB). The sixteen tones (eight notes in two octaves) are shuffled in tbl_tones ($B229); $74 of them (the room's level: $75 for room $11, $76 for room $1B) are hidden at random among the 32 squares of the screen (tbl_square_tones at $A8BE, $FF for empty), each square drawn ($A8DE) and played once ($A950). The hand (sprite 4) then moves over the 8 \u00d7 4 squares; fire on a square plays its tone. The player must press the hidden tones in rising order: a tone lower than the last one ($78) starts the count ($77) again. When all $74 have been pressed in order, a password is earned (LIFT INITS for an even level, SNOOZES for an odd one, up to 9; both levels start at 2), the screen flashes ($AA10), and the room's level rises by one (to at most 14) for the next time. Fire below the squares leaves."
  },
  {
   "address": 43198,
   "type": "line",
   "text": "The code room's 32 squares (8 columns by 4 rows): the tone hidden under each, or $FF for none; filled at random by code_room_puzzle."
  },
  {
   "address": 43230,
   "type": "line",
   "text": "Colours code-room square X (column X AND 7, row X/8) in the colour RAM from $D8A4: 4 \u00d7 3 cells of colour $0D."
  },
  {
   "address": 43297,
   "type": "line",
   "text": "A random colour from 8 to 15."
  },
  {
   "address": 43305,
   "type": "line",
   "text": "Sets the SID for the code room's tones: attack/decay $5A, sustain/release $58 on voice 3, pulse widths 0, volume 5."
  },
  {
   "address": 43344,
   "type": "line",
   "text": "Shows and plays tone A of square X: sprite 0 moves to the square, coloured by the note (tbl_tone_colours); the note (A AND 7) from tbl_tone_lo/hi, one octave lower when bit 3 is clear, goes to the three voices an octave apart; pulse waves gated on for 32 ticks with a pulse width that moves with the tick, the hand still movable ($3DC2); then sprite 0 off and the gates closed."
  },
  {
   "address": 43512,
   "type": "line",
   "text": "Low bytes of the eight notes of the code room's tones (with tbl_tone_hi: $430F, $4B45, $547D, $5983, $6479, $70C7, $7E97, $861E, a rising scale)."
  },
  {
   "address": 43520,
   "type": "line",
   "text": "High bytes of the code room's eight notes."
  },
  {
   "address": 43528,
   "type": "line",
   "text": "Colour of each of the eight notes, shown on sprite 0 over the square: red, orange, yellow, light green, light blue, blue, purple, red."
  },
  {
   "address": 43536,
   "type": "line",
   "text": "Paints the code room's 8 \u00d7 4 squares in colour A in a chequer pattern (alternating 0 and 1 by cell), the reward flash when called repeatedly with A alternating."
  },
  {
   "address": 43584,
   "type": "line",
   "text": "The object with contents $FE, Elvin's control: with any letter of the password line ($345D-$3465) still blank, nothing happens. With all nine found, the mission is won: $DC = 1, a frame shape in sprite 7 (pointer $36) opens over the screen, a 6 \u00d7 5 block of characters and colours from $2611/$25F3 is drawn at $4301, and the frame closes again row by row. Then the end picture: video bank 3 (screen $C000, character set $D000-$D7FF in the RAM under the I/O area), the screen copied from $DC00-$DFFF to $C000-$C3FF with all RAM banked in, the colours from $F800-$FBFF to colour RAM; voice line 4 ($BED9); the mouth animation, alternating the two mouth pictures ($AB84, $AB75) for the durations in tbl_end_timing while random cells twinkle ($ABBA); and finally $BECD and the score ($B786). Live: forced by filling the password line and starting here; Elvin's face appeared, talking, then the tally."
  },
  {
   "address": 43819,
   "type": "line",
   "text": "Operand low byte of `ldx $AB67,y` in elvin_terminal's mouth animation: $67 points at the NTSC timings, and detect_pal writes $6E on PAL to use the PAL timings instead."
  },
  {
   "address": 43833,
   "type": "line",
   "text": "The second `ldx` of the mouth animation's timings, patched like $AB2B."
  },
  {
   "address": 43849,
   "type": "line",
   "text": "The third `ldx` of the mouth animation's timings, patched like $AB2B."
  },
  {
   "address": 43879,
   "type": "line",
   "text": "How long each step of the end picture's mouth animation lasts on an NTSC machine (60 frames a second), in calls of end_twinkle: $40, $28, $28, $20, $2C, $20, $10. Read when detect_pal leaves the operands at $67."
  },
  {
   "address": 43886,
   "type": "line",
   "text": "The same seven durations for PAL (50 frames a second), five sixths of the NTSC values: $35, $21, $21, $1B, $25, $1B, $0D, so that the mouth keeps time with the speech, which runs from a CPU timer at the same speed on both."
  },
  {
   "address": 43893,
   "type": "line",
   "text": "Draws the closed mouth into the end picture: 13 glyphs from tbl_mouth_closed at the screen positions $C2B6 + tbl_mouth_cells."
  },
  {
   "address": 43908,
   "type": "line",
   "text": "Draws the open mouth: 13 glyphs from tbl_mouth_open at the same positions."
  },
  {
   "address": 43923,
   "type": "line",
   "text": "The 13 glyphs of the open mouth in the end picture."
  },
  {
   "address": 43936,
   "type": "line",
   "text": "The 13 glyphs of the closed mouth."
  },
  {
   "address": 43949,
   "type": "line",
   "text": "Offsets from $C2B6 of the mouth's 13 cells, over four rows of the picture ($00-$02, $28-$2A, $50-$53, $79-$7B)."
  },
  {
   "address": 43962,
   "type": "line",
   "text": "X times: for six random cells of the end picture's colour RAM (a random low byte, avoiding a band of values, written into the `sta $D800` at $ABD8) sets a random light colour (8-15 from the noise byte via $84FA), a tick apart. The twinkling lights of the end picture."
  },
  {
   "address": 43993,
   "type": "line",
   "text": "Operand low byte of `sta $D800` in end_twinkle: a random cell of the end picture's colour RAM."
  },
  {
   "address": 44002,
   "type": "line",
   "text": "Places the agent at the room's entrance from the room record at ($18),y: the left or right entry ($7F) gives X for sprites 1-3, the Y of sprite 2, with sprites 1 and 3 at +12 and +21, and the ninth X bits."
  },
  {
   "address": 44066,
   "type": "line",
   "text": "Address in the room buffer of the cell at row ($81),y and column ($81),y+1 of a room list: row \u00d7 40 + column + $C100 in $10/$11, and the matching colour address ($D800 + ...) in $14/$15. Y is advanced past the row."
  },
  {
   "address": 44117,
   "type": "line",
   "text": "Draws a lifting platform's top, three glyphs $49-$4B from $0DB4, in colour $84, at $10/$14."
  },
  {
   "address": 44136,
   "type": "line",
   "text": "Draws the lifting platform's two-row cap, glyphs $4F-$51 ($0DBA) and below them $4C-$4E ($0DB7), in colour $84."
  },
  {
   "address": 44168,
   "type": "line",
   "text": "The lifting platforms: when the agent stands still (frame $0E), finds the platform under his feet in the room's platform list at ($81) (each entry: row, column, height, a movement count, a list) by his feet's row ($52) and column ($53). Up on the stick raises it ($ACF6) and down lowers it ($AD81), once per press ($83); otherwise it clears $83 and $85. A death meanwhile ($43) goes to agent_death."
  },
  {
   "address": 44278,
   "type": "line",
   "text": "Raises the platform under the agent one cell at a time, the agent's sprites moving up with it 4 lines a step ($AECC): redraws the cap and the column below as it rises and updates the list's height and count. If the agent is killed while it moves, $43 = 3 (the death redraws the platform)."
  },
  {
   "address": 44417,
   "type": "line",
   "text": "Lowers the platform under the agent, the mirror of platform_up, moving the agent down 4 lines a step ($AEDF), unless its count is already 0; $85 is set while it moves (no ball collision then)."
  },
  {
   "address": 44579,
   "type": "line",
   "text": "Blanks a platform's column, three cells wide, $E5 + 1 rows upwards from $10."
  },
  {
   "address": 44596,
   "type": "line",
   "text": "In a room, with the agent not already falling: on the walking and standing frames (0, 7, 6, $0D, $0E, $10), tests the cells under the front and back of his feet ($AEB7, offsets by frame and facing); with nothing solid under either, and not at the screen's edge, starts a fall ($41 + 1). Solid ground clears $41 and $42."
  },
  {
   "address": 44605,
   "type": "line",
   "text": "Entry of check_ground that skips the room and falling tests: used by agent_update after moving."
  },
  {
   "address": 44727,
   "type": "line",
   "text": "Tests the cell under one foot: X or Y (by the facing $50) added to the agent's left edge $E6/$E7, at the line $E8 below his feet ($8CC5). Carry set if solid."
  },
  {
   "address": 44748,
   "type": "line",
   "text": "Moves the agent's three sprites up 4 lines (registers and $2D-$31)."
  },
  {
   "address": 44767,
   "type": "line",
   "text": "Moves the agent's three sprites down 4 lines."
  },
  {
   "address": 44786,
   "type": "line",
   "text": "Moves the cell pointers $10/$11 and $14/$15 up six rows (subtracts $F0)."
  },
  {
   "address": 44802,
   "type": "line",
   "text": "Moves the cell pointers back by $118 (a page and $18)."
  },
  {
   "address": 44814,
   "type": "line",
   "text": "Moves the cell pointers up five rows (subtracts $C8)."
  },
  {
   "address": 44822,
   "type": "line",
   "text": "Moves the cell pointers up four rows (subtracts $A0)."
  },
  {
   "address": 44830,
   "type": "line",
   "text": "Moves the cell pointers up one row (subtracts $28)."
  },
  {
   "address": 44838,
   "type": "line",
   "text": "Moves the cell pointers down six rows (adds $F0)."
  },
  {
   "address": 44854,
   "type": "line",
   "text": "Moves the cell pointers down one row (adds $28)."
  },
  {
   "address": 44862,
   "type": "line",
   "text": "Moves the cell pointers down two rows (adds $50)."
  },
  {
   "address": 44870,
   "type": "line",
   "text": "Sets up the shaft view when the agent comes out of a room: the agent's sprites in the lift, the room's sprites to show ($8E = $CF), the background colour $8D = $0C, the shaft's two colours ($21/$22) chosen by the map column ($27) from tbl_shaft_colours, screen off, character set $4800, both corridor doors closed ($1F = $20 = $FF), the map marker two lines up; draws the shaft and pocket computer ($72A2), a corridor ($7850), clears the message window, draws the map ($B699), moves the screen to the buffer and blanks it for the wipe, sets the lift car's sprites ($B750, $AFEF), and turns the screen on."
  },
  {
   "address": 45039,
   "type": "line",
   "text": "The lift car: sprite 7 (pointer $11, white) and sprite 0 (pointer $12, Y-expanded multicolour) in the shaft's colours ($21/$22)."
  },
  {
   "address": 45109,
   "type": "line",
   "text": "The first colour of the lift shaft for each of the eight shafts (by map column): $02, $04, $0C, $0D, $05, $06, $08, $0E."
  },
  {
   "address": 45117,
   "type": "line",
   "text": "The second colour of the lift shaft for each shaft: $0A, $07, $0F, $01, $0D, $03, $09, $07."
  },
  {
   "address": 45125,
   "type": "line",
   "text": "For a new game, puts back every room's lifting platforms: a list of (address, ...) pairs at $1FDA, each the start of a room's platform list in its record, receives the original bytes from the copy at $1F64 onwards (a running index, the source page self-modified at $B079), each list up to its $FF, stepping the list pointer by two between rooms ($BEB8)."
  },
  {
   "address": 45173,
   "type": "line",
   "text": "Copies bytes from the platform originals ($1F64 + X, page in the operand at $B079) to ($E4),y up to and including an $FF."
  },
  {
   "address": 45177,
   "type": "line",
   "text": "Operand high byte of `lda $1F64,x` in copy_to_ff: the page of the platform originals, stepped when X wraps."
  },
  {
   "address": 45192,
   "type": "line",
   "text": "Gives every robot in the stronghold a random behaviour for this game: for each of the 30 room records (pointers at $20D6), finds the robot list after the floor list and, for each robot (3 bytes), writes a random script number from tbl_robot_scripts ($2212): one of the first 16 entries, or of the second 16 when the room also has a ball."
  },
  {
   "address": 45261,
   "type": "line",
   "text": "Chooses this game's password: one of the eight nine-letter words at $208E at random, copied to $4FB5-$4FBD; the password line of the pocket computer ($345D-$3465) is blanked."
  },
  {
   "address": 45299,
   "type": "line",
   "text": "Makes the nine puzzle images at $C9F0: 162 eight-byte blocks, each one of sixteen patterns from tbl_puzzle_patterns ($26E3) chosen at random, the pointer stepped by 8 each time ($BEB8); then gives each of the nine images its frame ($B137)."
  },
  {
   "address": 45367,
   "type": "line",
   "text": "Draws a frame round the 144-byte image at ($18): the top row of each column set solid ($FF every 8 bytes from $28 down), the left and right edges set (ORed with $C0 and $03), and the image's corner bytes cleared."
  },
  {
   "address": 45440,
   "type": "line",
   "text": "Cuts the nine puzzles into four pieces each (36 records of 4 bytes at $BFC0-$C04F): clears a 16 \u00d7 16 table of used mask pairs at $C100, shuffles the sixteen mask numbers in tbl_tones ($B229: 64 swaps of entry 2 with a random entry 3-15), then for each puzzle gives its four pieces the puzzle number, the same first mask (the shuffled entry for that puzzle), the piece number 0-3 in the low bits of the flags with random flip bits ($0C), and two second masks chosen at random so that no pair of masks is used twice ($B239): pieces 3 and 2 share one, pieces 1 and 0 the other. build_piece uses the low two bits to invert the masks, so the four pieces are the image cut by a mask and its complement in each direction, and they overlap."
  },
  {
   "address": 45609,
   "type": "line",
   "text": "Sixteen numbers shuffled at run time by two users: make_pieces fills it with 0-15 and shuffles it for the order of the mask shapes at the start of a game; code_room_puzzle fills it with 0-7 and 9-16 (the second octave's notes carry bit 3) and shuffles it for its tones."
  },
  {
   "address": 45611,
   "type": "line",
   "text": "Entry 2 of tbl_tones, the one make_pieces swaps with random entries while shuffling."
  },
  {
   "address": 45617,
   "type": "line",
   "text": "The second half of tbl_tones: 8-15 for make_pieces, 9-16 for code_room_puzzle."
  },
  {
   "address": 45625,
   "type": "line",
   "text": "Tests whether mask $E7 can pair with the piece's first mask ($BFC1,x): not the same, and neither ordering of the pair marked in the table at $C100. If free, marks both orderings ($FF) and returns carry clear; otherwise carry set."
  },
  {
   "address": 45677,
   "type": "line",
   "text": "Hides this game's items in the furniture: every content byte in the list of furniture slots (pointers at $30F3) is set to $FF (nothing); then the 36 puzzle pieces (0-$23) each go into a random empty slot ($B2A4), and nine snooze passwords ($FC) and nine lift-init passwords ($FD) likewise."
  },
  {
   "address": 45732,
   "type": "line",
   "text": "Picks a random furniture slot from the list at $30F3 (an even index) until it finds one still holding $FF; returns its address in $18/$19."
  },
  {
   "address": 45757,
   "type": "line",
   "text": "Generates this game's stronghold map. The 32 room numbers at $FFCC-$FFEB (0-$1F) are shuffled within four groups of eight. The map's glyph data $FC00-$FF2F is filled with $FF (solid), the room grid $FF96-$FFCB (9 columns by 6 rows) with $FF (empty) and the map's cell table $FF30-$FF95 with $FC. Then rooms are placed on the grid ($B3FC with the room grid placement $B450) in columns 1-7 of random rows, and joined: rooms of the first group into the left columns with corridors ($B488, direction flags in $E8: $40 left, $80 right, $C0 both), the second group spread over random columns, the third and fourth paired along each column. Finally the map marker starts at ($6B, $B8), the top of the first shaft."
  },
  {
   "address": 46066,
   "type": "line",
   "text": "A random row of the map grid, 0-5."
  },
  {
   "address": 46076,
   "type": "line",
   "text": "Puts room A at column X, row Y of the map: claims the first free grid square at or after it ($B450), then cuts the room's shape out of the map's glyph data ($18/$19 from $B516): rooms below $10 one of four 24-byte shapes from tbl_room_shapes chosen by bits 0 and 3 of the room number, the others ($10-$1F) 16-byte shapes from further on in the table, ANDed into the map; rooms $18 and above go one cell further on ($BEB8)."
  },
  {
   "address": 46160,
   "type": "line",
   "text": "Finds a free square of the room grid ($FF96 + 9 \u00d7 row + column) starting from column X, row Y, moving down a row at a time (wrapping) and then to the next column (wrapping at 8 to 1), and stores room A there."
  },
  {
   "address": 46216,
   "type": "line",
   "text": "Draws the corridors that join the room at column X, row Y to its neighbours in the direction(s) given by $E8 ($40 one side, $80 the other, $C0 both): looks along the row (and up and down the column by nine squares) for the next occupied square that may be joined ($B500), and cuts corridor and shaft segments into the map's glyph data between them ($B516, $B538)."
  },
  {
   "address": 46336,
   "type": "line",
   "text": "Whether a room number in A may be joined in the current direction: rooms $10-$17 are not joined from one side ($E8 bit 7 clear), and rooms $18 and above not at all from the other. Carry set: not joinable."
  },
  {
   "address": 46358,
   "type": "line",
   "text": "Address in the map's glyph data of grid square (X, Y), in $18/$19: $FB78 + $88 \u00d7 (row + 1) + 16 \u00d7 column - 8, built by repeated additions with add_to_ptr ($BEB8)."
  },
  {
   "address": 46392,
   "type": "line",
   "text": "Cuts a corridor into the map glyphs at $18/$19: a vertical shaft piece (8 bytes from tbl_shaft_mask $B63D) when $E8 bit 6 is set, and a horizontal corridor piece (bytes 16-23 of tbl_corridor_mask $B62D, one cell back when X is 0) when bit 7 is set."
  },
  {
   "address": 46445,
   "type": "line",
   "text": "The map's frame: six glyphs (48 bytes) that show_map copies into the display's glyphs at $5F80-$5FAF, so they become glyphs $F0-$F5: the four rounded corners ($F0 top left, $F1 top right, $F2 bottom left, $F3 bottom right), the striped top and bottom edge ($F4) and the striped side ($F5) that draw_map_frame lays round the map in yellow."
  },
  {
   "address": 46493,
   "type": "line",
   "text": "Masks ANDed into the map's glyph data to cut out the rooms: 24-byte and 16-byte shapes, $E7 for the walls and $00 where the room is open."
  },
  {
   "address": 46637,
   "type": "line",
   "text": "Mask bytes for a horizontal corridor on the map (bytes 16-23 used)."
  },
  {
   "address": 46653,
   "type": "line",
   "text": "Mask bytes for a vertical lift shaft segment on the map."
  },
  {
   "address": 46661,
   "type": "line",
   "text": "Switches the pocket computer's display to the map: waits a tick, clears the message window, saves the display's glyphs ($5C50-$5FAF) to $C690-$C9EF and copies the map's glyph data ($FC00-$FF2F) into their place, and the marker glyphs from $B56D; then draws the map's frame ($B699)."
  },
  {
   "address": 46745,
   "type": "line",
   "text": "Draws the map in the display: a frame of glyphs $F0-$F5 in yellow, the 17 \u00d7 6 cells of the map from the cell table $FF30 in green, and the map marker in sprite 6 (a small square, shape at $4D80) at ($27, $28)."
  },
  {
   "address": 46928,
   "type": "line",
   "text": "Entry of draw_map_frame's end: sets sprite 6's pointer to $36."
  },
  {
   "address": 46934,
   "type": "line",
   "text": "Reveals on the map the room on the side the agent left the corridor by ($7F against $80 chooses the half-cell), then falls into reveal_map_cell."
  },
  {
   "address": 46945,
   "type": "line",
   "text": "Reveals the map cell under the marker: index = ($27 - $68)/8 + 17 \u00d7 (($28 - $B8)/8) + $E6, and the cell table entry at $FF30 + index becomes glyph $8A + index, the cell's own glyph in the display. Cells start as $FC (blank), so the map fills in as the agent explores. Returns the glyph."
  },
  {
   "address": 46982,
   "type": "line",
   "text": "The end of a game, won, lost or out of time: silences the SID, hides the sprites, clears the screen and colour RAM, selects character set $4800 and turns the screen on. Draws a box ($B996, $B9CF, $B9E1) and inside it the tally's labels (pointers at tbl_tally_labels, lengths at $B988, row steps at $B98F), the fifth line MISSION COMPLETE, or MISSION TERMINATED at $B957 when time ran out ($D4 = 6). Voice line 0 unless time ran out; then the normal interrupt again ($BEC2), the score ($BA08), the high score and name entry ($BC04), the prompt from $BDBD, and waits for RESTORE or RUN/STOP ($BE2D returning $F0) before restarting at $388C."
  },
  {
   "address": 47271,
   "type": "line",
   "text": "The end screen's text in the $4800 alphabet: PUZZLE PIECES FOUND ($B8A7), PASSWORDS FOUND ($B8BA), PUZZLES SOLVED ($B8C9), SECONDS REMAINING ($B8D7), MISSION COMPLETE ($B8E8), T O T A L   S C O R E ($B8F8), THIS SURPASSES THE PREVIOUS HIGH SCORE OF ($B90F), HALL OF FAME ($B94A) and M I S S I O N   T E R M I N A T E D ($B957)."
  },
  {
   "address": 47373,
   "type": "line",
   "text": "Part of str_tally: THIS SURPASSES THE PREVIOUS (from $B90D) and HIGH SCORE OF (from $B92A) are copied as two 29-character lines by hall_of_fame."
  },
  {
   "address": 47402,
   "type": "line",
   "text": "The second line of the high-score message within str_tally, HIGH SCORE OF, then HALL OF FAME and MISSION TERMINATED."
  },
  {
   "address": 47482,
   "type": "line",
   "text": "Addresses of the seven tally labels in str_tally, drawn by end_of_game from the last up."
  },
  {
   "address": 47483,
   "type": "line",
   "text": "High bytes of the addresses in tbl_tally_labels."
  },
  {
   "address": 47496,
   "type": "line",
   "text": "Length - 1 of each tally label."
  },
  {
   "address": 47503,
   "type": "line",
   "text": "Rows to move up between the tally's labels."
  },
  {
   "address": 47510,
   "type": "line",
   "text": "Draws a row of the end screen's box: 37 cells of glyph $CA, then ten edge glyphs from $B9AD at the offsets in $B9B7."
  },
  {
   "address": 47533,
   "type": "line",
   "text": "Glyphs and their column offsets for the box rows: corners and edges ($C8, $C9, $CB, $CC) and the colour-RAM edge marks, offsets $00, $01, $26, $27 ..."
  },
  {
   "address": 47543,
   "type": "line",
   "text": "Column offsets of the box glyphs in tbl_box_glyphs."
  },
  {
   "address": 47553,
   "type": "line",
   "text": "Column offsets of the box's lower edge glyphs."
  },
  {
   "address": 47567,
   "type": "line",
   "text": "Draws the box's left and right edges on one row: four glyphs from $B9DD at the offsets in $B9B7."
  },
  {
   "address": 47581,
   "type": "line",
   "text": "The four side glyphs of the box: $CD, $D8, $D7, $D0."
  },
  {
   "address": 47585,
   "type": "line",
   "text": "Draws the box's bottom row: glyph $D3 from column $2A to $4D and fourteen edge glyphs from $B9FA."
  },
  {
   "address": 47610,
   "type": "line",
   "text": "The box's bottom edge glyphs, $CD-$D6."
  },
  {
   "address": 47624,
   "type": "line",
   "text": "Works out and shows the score (decimal, $D9 units, $DA hundreds, $DB ten-thousands): puzzle pieces found ($D6) and passwords found ($D7) at 100 points each, puzzles solved ($D8) at 500 each, each line shown as count \u00d7 points = total ($BB7C template). If the mission was completed with time left, the seconds remaining until six o'clock (from the clock $D2/$D3/$D4, 12 o'clock counted as 0) at one point each, and a bonus of 1,000 for the mission; when time ran out, 000. Then the total ($BB08). Live: a forced win at 12:24:47 with nothing found scored 20,113 seconds + 1,000 = 21,113."
  },
  {
   "address": 47860,
   "type": "line",
   "text": "The digits of the mission bonus shown on the end screen: 1, 0, 0, 0."
  },
  {
   "address": 47864,
   "type": "line",
   "text": "compute_score's path when time ran out: moves the pointer down six rows ($AF26), then shows the total."
  },
  {
   "address": 47880,
   "type": "line",
   "text": "Prints the six-digit decimal number in $E4-$E6 at $10,y onwards, without leading zeros (a single 0 for zero)."
  },
  {
   "address": 47882,
   "type": "line",
   "text": "Entry of print_bcd6 with the column in Y already set."
  },
  {
   "address": 47938,
   "type": "line",
   "text": "Writes digit A (as glyph $8B + A of the $4800 alphabet) at ($10),y in white."
  },
  {
   "address": 47941,
   "type": "line",
   "text": "Entry of print_digit that writes the glyph in A (not a digit) at ($10),y in white."
  },
  {
   "address": 47948,
   "type": "line",
   "text": "Adds A (decimal) to the score's units $D9, carrying into $DA and $DB; entered at $BB55 to add to the hundreds."
  },
  {
   "address": 47957,
   "type": "line",
   "text": "Entry of add_score that adds A to the hundreds $DA."
  },
  {
   "address": 47972,
   "type": "line",
   "text": "Adds A (decimal) to the three-byte number $E4-$E6; entered at $BB6D for the middle byte."
  },
  {
   "address": 47981,
   "type": "line",
   "text": "Entry of add_e4 that adds A to the middle byte $E5."
  },
  {
   "address": 47996,
   "type": "line",
   "text": "Draws the template of one tally line, 13 cells from $BB8C in the colours from $BB99: the count, `\u00d7` and `00`, `=` and `00`."
  },
  {
   "address": 48012,
   "type": "line",
   "text": "The tally line's glyphs: blanks, the multiplication sign $D9, zeros ($8B) and the equals sign ($96)."
  },
  {
   "address": 48025,
   "type": "line",
   "text": "Colours of the tally line's cells: white and yellow."
  },
  {
   "address": 48038,
   "type": "line",
   "text": "Counts Y into $E4 and adds 100 points per unit to the score (decimal): for pieces and passwords."
  },
  {
   "address": 48065,
   "type": "line",
   "text": "Counts Y \u00d7 5 into $E4 and adds 500 points per unit: for puzzles solved."
  },
  {
   "address": 48090,
   "type": "line",
   "text": "Prints the decimal count $E4 in the tally line twice: as the count (columns 0-1) and in the product (columns 9-10), with the glyph $8C after the count."
  },
  {
   "address": 48132,
   "type": "line",
   "text": "The high-score table, kept at $CF00-$CF77 while the machine stays on: 15 entries of 8 bytes, a three-byte decimal score and a five-character name. Finds the score's place ($BE1D compares with each entry from the bottom), moves the lower entries down one and writes the new score in. If it beats the top entry, shows THIS SURPASSES THE PREVIOUS HIGH SCORE OF and the old top score. Then lists all fifteen entries in three columns of five (score and name, in purple), and if the score made the table, asks for the player's name: ENTER YOUR I.D. CODE ON THE KEYBOARD, five characters typed with the keyboard ($BE2D), DEL to rub out, RETURN to finish; stored into the entry."
  },
  {
   "address": 48522,
   "type": "line",
   "text": "Screen offsets (from $4300) of the name field of each of the fifteen hall-of-fame places."
  },
  {
   "address": 48537,
   "type": "line",
   "text": "ENTER YOUR I.D. CODE ON THE KEYBOARD, 36 characters in the $4800 alphabet."
  },
  {
   "address": 48573,
   "type": "line",
   "text": "HIT RESTORE OR RUN/STOP FOR NEW GAME, 36 characters in the $4800 alphabet ($DD for the slash)."
  },
  {
   "address": 48609,
   "type": "line",
   "text": "Colours of the 36 characters of str_new_game: green (5) and yellow (7) by word."
  },
  {
   "address": 48645,
   "type": "line",
   "text": "24 bytes that read in PETSCII as fragments like \"HI2 0:HI\" and \"HI=HI2I\"; no reference to them was found (searched with opcodes.py --refs); possibly assembler leftovers."
  },
  {
   "address": 48669,
   "type": "line",
   "text": "Compares the three-byte decimal score $D9-$DB with the hall-of-fame entry at ($18): carry set if the entry is higher or equal."
  },
  {
   "address": 48685,
   "type": "line",
   "text": "Scans the keyboard matrix itself (CIA 1 port A as output): returns $FF with no key, or the code of the key found from tbl_keys (a letter or digit in the $4800 alphabet, 0 RETURN, 1 DEL, $F0 RUN/STOP, $FD/$FE others), once per press ($DF holds it until the keys are released)."
  },
  {
   "address": 48760,
   "type": "line",
   "text": "The 64 keys of the matrix, row by row, as codes for read_key: letters and digits in the $4800 alphabet, 0 for RETURN, 1 for DEL, $F0 for RUN/STOP, $FF for keys the name entry ignores."
  },
  {
   "address": 48824,
   "type": "line",
   "text": "Adds A to the pointer $18/$19."
  },
  {
   "address": 48834,
   "type": "line",
   "text": "Installs the game's interrupt handlers: IRQ $82F4 and, entering at $BECD, NMI $388C (the restart, reached by RESTORE)."
  },
  {
   "address": 48845,
   "type": "line",
   "text": "Points the NMI vector at $388C, the game's restart: RESTORE starts a new game."
  },
  {
   "address": 48856,
   "type": "line",
   "text": "The number of the voice line being spoken, kept by say_line."
  },
  {
   "address": 48857,
   "type": "line",
   "text": "Speaks voice line X through the speech driver: silences the SID, swaps the IRQ for the minimal $8396 (which only counts the tick with the `inc $E0 / rts` kept in zero page $FC-$FE) so that the speech NMIs run undisturbed, and starts the line ($0880). Lines 4 and 5 return at once and play on while the game continues; the others wait until the driver reports the end ($FF query). After lines other than 0, 2, 3 and 7 the normal interrupt comes back ($BEC2) at the next frame top. Callers: lines 2 and 3 at the start ($39B0, $39BB), 1 on entering a room when an hour has passed ($8BCC), 7 the fall ($9611), 5 the time-up sequence ($8413), 4 the end picture ($AB25), 0 the end screen ($B87D)."
  },
  {
   "address": 53248,
   "type": "line",
   "text": "The end picture's character set, glyphs $00-$7F (RAM under the I/O area, shown through video bank 3 at $D000): multicolour glyphs of Professor Elvin Atombender's face and his control room. Moved here from $C800 by move_high_tables at the start; the CPU never reads it after that, only the video chip."
  },
  {
   "address": 53256,
   "type": "line",
   "text": "In the start-up's copy at $396B (port $21, character ROM) the ROM's letters A-Z start here and are copied into both game character sets; the RAM beneath is part of the end picture's character set."
  },
  {
   "address": 53632,
   "type": "line",
   "text": "In the start-up's copy at $3980 the processor port is $21, so the CPU reads the character ROM here: $D180-$D1CF are the ROM's digits 0-9, copied into both game character sets. The RAM beneath holds glyphs $30-$7F of the end picture's character set (the rest of gfx_end_charset_1)."
  },
  {
   "address": 54272,
   "type": "line",
   "text": "The end picture's character set, glyphs $80-$FF."
  },
  {
   "address": 56320,
   "type": "line",
   "text": "The end picture's screen: 1000 characters (25 rows of 40) and 24 unused bytes, under CIA 1 and CIA 2. Moved here from $C400 at the start and copied to the bank-3 screen at $C000 by elvin_terminal; the mouth cells at $C2B6 are then animated."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "The speech data's phrase table, at the sample base the game gives the driver ($E000): eight entries of four bytes for voice lines 0-7, each two offsets from $E000: the line's pitch commands and its frame headers (speech_lookup). Line 6 is never asked for by the game."
  },
  {
   "address": 57376,
   "type": "line",
   "text": "The voice lines' pitch commands, read by speech_pitch_step: for each line a list of entries giving a period length and a count with an index into the pitch step table. Line 0's list starts here, lines 1-7 at $E0A8, $E0D2, $E0F2, $E134, $E154, $E188 and $E18A."
  },
  {
   "address": 58022,
   "type": "line",
   "text": "The voice lines' frame headers, four bytes each, read by speech_frame_header ($09B6 gives the format): how many decodes and periods each covers, the encoding (1-bit or 4-bit in these lines; the driver also has 2-bit decoders that no line uses), silent frames, the blend and last-frame flags, and the offset of the samples from $E000. Line 0's headers start here, the others at $E31A, $E35E, $E392, $E3C6, $E3E6, $E46E and $E476."
  },
  {
   "address": 58669,
   "type": "line",
   "text": "Compressed speech samples, first part ($E52D-$E92C): packed 1, 2 or 4 bits a sample as each frame header says, decoded into the speech buffer at $0800 by the frame decoders. The recordings were made by Electronic Speech Systems according to the published credits."
  },
  {
   "address": 59693,
   "type": "line",
   "text": "Compressed speech samples, second part ($E92D-$ED2C)."
  },
  {
   "address": 60717,
   "type": "line",
   "text": "Compressed speech samples, third part ($ED2D-$F12C)."
  },
  {
   "address": 61741,
   "type": "line",
   "text": "Compressed speech samples, fourth part ($F12D-$F52C)."
  },
  {
   "address": 62765,
   "type": "line",
   "text": "Compressed speech samples, last part ($F52D-$F771), up to the end of the file words."
  },
  {
   "address": 63346,
   "type": "line",
   "text": "The last bytes the file words loads, $FF padding after the samples."
  },
  {
   "address": 63488,
   "type": "line",
   "text": "The end picture's colour RAM, 1000 nibbles (bit 3 set for multicolour cells) and 24 unused bytes. Moved here from $C000 at the start and copied to $D800 by elvin_terminal."
  }
 ]
}