{
 "schema": 1,
 "platform": "c64",
 "game": "bubble-bobble",
 "build": "Remember's crack of the disk version (\"cracked in August 2002\", +12 trainers, all left off), the one file BUBBLE BOBBLE+ of a T64 archive; the game starts at $4460",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    20480,
    21503,
    "screen RAM"
   ],
   [
    512,
    1023,
    "the table of multiples of eight, built by the start-up; zero as loaded"
   ],
   [
    18432,
    20479,
    "the second character set, built at run time; as loaded it holds the cracker's copy of $0400-$07FF and zeros"
   ],
   [
    20480,
    21503,
    "the first screen buffer; as loaded it holds the text and the first part of the cracker's trainer menu, which the game's first screen clear wipes"
   ],
   [
    21504,
    22527,
    "the second screen buffer; as loaded it holds the rest of the cracker's trainer menu code"
   ],
   [
    31808,
    32383,
    "sprite buffers built at run time (mirrored boss, food and bonus sprites); zero as loaded"
   ],
   [
    33928,
    35199,
    "the collision map, its wrap rows and the actor arrays kept in its spare columns; zero as loaded"
   ],
   [
    36322,
    36613,
    "the tail of the clean screen copy; zero as loaded"
   ]
  ],
  "extra": [
   [
    16384,
    18431,
    "character set"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 1023,
   "type": "Undefined"
  },
  {
   "start": 1024,
   "end": 1035,
   "type": "Byte"
  },
  {
   "start": 1036,
   "end": 1113,
   "type": "Address"
  },
  {
   "start": 1114,
   "end": 1115,
   "type": "Byte"
  },
  {
   "start": 1116,
   "end": 1464,
   "type": "Code"
  },
  {
   "start": 1465,
   "end": 1476,
   "type": "Byte"
  },
  {
   "start": 1477,
   "end": 3431,
   "type": "Code"
  },
  {
   "start": 3432,
   "end": 3432,
   "type": "Address"
  },
  {
   "start": 3433,
   "end": 3447,
   "type": "Undefined"
  },
  {
   "start": 3448,
   "end": 6002,
   "type": "Code"
  },
  {
   "start": 6003,
   "end": 6077,
   "type": "Byte"
  },
  {
   "start": 6078,
   "end": 7548,
   "type": "Code"
  },
  {
   "start": 7549,
   "end": 7555,
   "type": "Byte"
  },
  {
   "start": 7556,
   "end": 7739,
   "type": "Code"
  },
  {
   "start": 7740,
   "end": 7787,
   "type": "Address"
  },
  {
   "start": 7788,
   "end": 11620,
   "type": "Code"
  },
  {
   "start": 11621,
   "end": 11690,
   "type": "Byte"
  },
  {
   "start": 11691,
   "end": 12686,
   "type": "Code"
  },
  {
   "start": 12687,
   "end": 12690,
   "type": "Byte"
  },
  {
   "start": 12691,
   "end": 12851,
   "type": "Code"
  },
  {
   "start": 12852,
   "end": 12901,
   "type": "Undefined"
  },
  {
   "start": 12902,
   "end": 12990,
   "type": "Code"
  },
  {
   "start": 12991,
   "end": 12992,
   "type": "Byte"
  },
  {
   "start": 12993,
   "end": 13735,
   "type": "Code"
  },
  {
   "start": 13736,
   "end": 13743,
   "type": "Byte"
  },
  {
   "start": 13744,
   "end": 14192,
   "type": "Code"
  },
  {
   "start": 14193,
   "end": 14278,
   "type": "Undefined"
  },
  {
   "start": 14279,
   "end": 14280,
   "type": "Byte"
  },
  {
   "start": 14281,
   "end": 16259,
   "type": "Code"
  },
  {
   "start": 16260,
   "end": 16263,
   "type": "Byte"
  },
  {
   "start": 16264,
   "end": 16357,
   "type": "Code"
  },
  {
   "start": 16358,
   "end": 16513,
   "type": "Byte"
  },
  {
   "start": 16514,
   "end": 16532,
   "type": "Code"
  },
  {
   "start": 16533,
   "end": 17503,
   "type": "Byte"
  },
  {
   "start": 17504,
   "end": 17964,
   "type": "Code"
  },
  {
   "start": 17965,
   "end": 18431,
   "type": "Byte"
  },
  {
   "start": 18432,
   "end": 22527,
   "type": "Undefined"
  },
  {
   "start": 22528,
   "end": 29444,
   "type": "Byte"
  },
  {
   "start": 29445,
   "end": 29526,
   "type": "Code"
  },
  {
   "start": 29527,
   "end": 29532,
   "type": "Byte"
  },
  {
   "start": 29533,
   "end": 29737,
   "type": "Code"
  },
  {
   "start": 29738,
   "end": 31423,
   "type": "Byte"
  },
  {
   "start": 31424,
   "end": 31534,
   "type": "Code"
  },
  {
   "start": 31535,
   "end": 31570,
   "type": "Byte"
  },
  {
   "start": 31571,
   "end": 31637,
   "type": "Code"
  },
  {
   "start": 31638,
   "end": 31653,
   "type": "Byte"
  },
  {
   "start": 31654,
   "end": 31807,
   "type": "Code"
  },
  {
   "start": 31808,
   "end": 32383,
   "type": "Undefined"
  },
  {
   "start": 32384,
   "end": 32480,
   "type": "Code"
  },
  {
   "start": 32481,
   "end": 32594,
   "type": "Byte"
  },
  {
   "start": 32595,
   "end": 32758,
   "type": "Code"
  },
  {
   "start": 32759,
   "end": 33927,
   "type": "Byte"
  },
  {
   "start": 33928,
   "end": 35159,
   "type": "Undefined"
  },
  {
   "start": 35160,
   "end": 42023,
   "type": "Byte"
  },
  {
   "start": 42024,
   "end": 42109,
   "type": "Code"
  },
  {
   "start": 42110,
   "end": 42399,
   "type": "Byte"
  },
  {
   "start": 42400,
   "end": 42545,
   "type": "Code"
  },
  {
   "start": 42546,
   "end": 57343,
   "type": "Byte"
  },
  {
   "start": 57344,
   "end": 58217,
   "type": "Code"
  },
  {
   "start": 58218,
   "end": 58227,
   "type": "Byte"
  },
  {
   "start": 58228,
   "end": 58397,
   "type": "Code"
  },
  {
   "start": 58398,
   "end": 58409,
   "type": "Byte"
  },
  {
   "start": 58410,
   "end": 58681,
   "type": "Code"
  },
  {
   "start": 58682,
   "end": 58682,
   "type": "Byte"
  },
  {
   "start": 58683,
   "end": 58705,
   "type": "Code"
  },
  {
   "start": 58706,
   "end": 58707,
   "type": "Byte"
  },
  {
   "start": 58708,
   "end": 58815,
   "type": "Code"
  },
  {
   "start": 58816,
   "end": 58819,
   "type": "Byte"
  },
  {
   "start": 58820,
   "end": 59193,
   "type": "Code"
  },
  {
   "start": 59194,
   "end": 59199,
   "type": "Byte"
  },
  {
   "start": 59200,
   "end": 59236,
   "type": "Code"
  },
  {
   "start": 59237,
   "end": 59238,
   "type": "Byte"
  },
  {
   "start": 59239,
   "end": 61205,
   "type": "Code"
  },
  {
   "start": 61206,
   "end": 61207,
   "type": "Byte"
  },
  {
   "start": 61208,
   "end": 61677,
   "type": "Code"
  },
  {
   "start": 61678,
   "end": 61867,
   "type": "Byte"
  },
  {
   "start": 61868,
   "end": 61962,
   "type": "Code"
  },
  {
   "start": 61963,
   "end": 62015,
   "type": "Byte"
  },
  {
   "start": 62016,
   "end": 62045,
   "type": "Address"
  },
  {
   "start": 62046,
   "end": 62582,
   "type": "Byte"
  },
  {
   "start": 62583,
   "end": 63777,
   "type": "Code"
  },
  {
   "start": 63778,
   "end": 65529,
   "type": "Byte"
  },
  {
   "start": 65530,
   "end": 65534,
   "type": "Undefined"
  },
  {
   "start": 65535,
   "end": 65535,
   "type": "Code"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "cpu_ddr",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2,
   "name": "zp_ptr_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "zp_ptr_a_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4,
   "name": "zp_ptr_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5,
   "name": "zp_ptr_b_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6,
   "name": "zp_ptr_c",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7,
   "name": "zp_ptr_c_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8,
   "name": "frame_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9,
   "name": "zp_ptr_d",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10,
   "name": "zp_ptr_d_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11,
   "name": "zp_ptr_e",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12,
   "name": "zp_ptr_e_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13,
   "name": "text_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14,
   "name": "text_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15,
   "name": "text_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16,
   "name": "level",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17,
   "name": "map_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18,
   "name": "map_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19,
   "name": "zp_ptr_f",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20,
   "name": "zp_ptr_f_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21,
   "name": "irq_save_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22,
   "name": "irq_save_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23,
   "name": "irq_save_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 24,
   "name": "glyph_dst_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 25,
   "name": "glyph_dst_b_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26,
   "name": "glyph_dst_c",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27,
   "name": "glyph_dst_c_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28,
   "name": "mc1_now",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29,
   "name": "mc1_level",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30,
   "name": "mc2_now",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31,
   "name": "mc2_level",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32,
   "name": "split_line",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33,
   "name": "round_done",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34,
   "name": "actor_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35,
   "name": "sub_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36,
   "name": "sub_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37,
   "name": "anim_now",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38,
   "name": "rng_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39,
   "name": "rng_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42,
   "name": "round_timer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "second_divider",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44,
   "name": "round_time_base",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45,
   "name": "hurry_stage",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46,
   "name": "irq_save_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47,
   "name": "back_charset_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48,
   "name": "back_screen_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49,
   "name": "glyph_src_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50,
   "name": "glyph_src_a_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51,
   "name": "glyph_src_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52,
   "name": "glyph_src_b_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53,
   "name": "glyph_src_c",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 54,
   "name": "glyph_src_c_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55,
   "name": "sprites_live",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 56,
   "name": "glyph_dst_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57,
   "name": "glyph_dst_a_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "scratch_3a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59,
   "name": "scratch_3b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60,
   "name": "next_glyph",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "rows_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62,
   "name": "scratch_3e",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 63,
   "name": "object_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64,
   "name": "tmp_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 65,
   "name": "tmp_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 66,
   "name": "tmp_ptr2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 67,
   "name": "tmp_ptr2_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 68,
   "name": "tmp_ptr3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 69,
   "name": "tmp_ptr3_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 70,
   "name": "chain_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 71,
   "name": "chain_count_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 72,
   "name": "chain_prev",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 73,
   "name": "chain_prev_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 74,
   "name": "enemies_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 75,
   "name": "target_player",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 76,
   "name": "letter_pick",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 77,
   "name": "water_stream_on",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 78,
   "name": "item_ptr_lo",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 79,
   "name": "item2_ptr_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 80,
   "name": "item_ptr_hi",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 81,
   "name": "item2_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 82,
   "name": "points_item",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 83,
   "name": "special_item",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 84,
   "name": "extend_bits",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 85,
   "name": "extend_bits_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 86,
   "name": "extend_shown",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 87,
   "name": "extend_shown_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 88,
   "name": "points_rank",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 89,
   "name": "item_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 90,
   "name": "item2_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 91,
   "name": "item_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 92,
   "name": "item2_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 93,
   "name": "item_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 94,
   "name": "item2_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 95,
   "name": "item_colour",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 96,
   "name": "item2_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 97,
   "name": "jump_sound_on",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 99,
   "name": "walk_bonus_on",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 101,
   "name": "blow_bonus_on",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 103,
   "name": "freeze_timer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 104,
   "name": "giant_item",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 105,
   "name": "giant_score",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 106,
   "name": "giant_kind",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 107,
   "name": "top_text",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 117,
   "name": "top_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 120,
   "name": "snd_work",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 121,
   "name": "snd_work_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 122,
   "name": "snd_pulse_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 123,
   "name": "snd_pulse_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 124,
   "name": "snd_ctrl",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 125,
   "name": "snd_ad",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 126,
   "name": "snd_sr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 127,
   "name": "snd_save_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 128,
   "name": "snd_tmp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 129,
   "name": "snd_tmp_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 130,
   "name": "snd_stack_depth",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 133,
   "name": "snd_ptr",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 134,
   "name": "snd_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 135,
   "name": "snd_transpose",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 138,
   "name": "snd_pos_lo",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 141,
   "name": "snd_pos_hi",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 144,
   "name": "snd_note",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 145,
   "name": "snd_filter_voice",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 146,
   "name": "snd_pw_lo",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 149,
   "name": "snd_pw_hi",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 152,
   "name": "snd_freq_lo",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 155,
   "name": "snd_freq_hi",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 158,
   "name": "snd_fx_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 159,
   "name": "snd_fx_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 160,
   "name": "snd_wait",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 163,
   "name": "snd_tmp2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 164,
   "name": "tune_playing",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 169,
   "name": "zp_a9",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 171,
   "name": "credits",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 172,
   "name": "bonus_step",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 173,
   "name": "bonus_step_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 174,
   "name": "score_cmp_ix",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 175,
   "name": "score_cmp_ix_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 176,
   "name": "sound_request",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 177,
   "name": "jump_request",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 178,
   "name": "actor_state",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 179,
   "name": "actor_state_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 180,
   "name": "enemy_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 186,
   "name": "actor_x",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 187,
   "name": "actor_x_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 188,
   "name": "enemy_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 189,
   "name": "boss_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 190,
   "name": "boss_frame",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 191,
   "name": "boss_dir",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 192,
   "name": "boss_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 194,
   "name": "actor_y",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 195,
   "name": "actor_y_p2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 196,
   "name": "enemy_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 198,
   "name": "enemy_y_2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 199,
   "name": "enemy_y_3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 202,
   "name": "object_type",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 203,
   "name": "object_type_1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 204,
   "name": "object_type_2",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 220,
   "name": "object_col",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 222,
   "name": "object_col_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 238,
   "name": "object_row",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 240,
   "name": "object_row_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 256,
   "name": "wait_counter",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 263,
   "name": "letter_work_m1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 264,
   "name": "letter_work",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 271,
   "name": "letter_work_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 279,
   "name": "letter_work_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 287,
   "name": "letter_work_d",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 331,
   "name": "object_col_now",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 349,
   "name": "object_col_old",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 361,
   "name": "const_0169",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 367,
   "name": "object_row_now",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 385,
   "name": "object_row_old",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 403,
   "name": "object_owner",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 405,
   "name": "object_owner_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 425,
   "name": "const_01a9",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 512,
   "name": "times8_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 768,
   "name": "times8_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 937,
   "name": "const_03a9",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1024,
   "name": "score_p1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1027,
   "name": "score_p2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1030,
   "name": "high_score",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1033,
   "name": "round_reached",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1034,
   "name": "round_reached_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1035,
   "name": "top_round",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1036,
   "name": "object_draw_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1058,
   "name": "p_0422",
   "type": "Pointer",
   "kind": "auto"
  },
  {
   "address": 1114,
   "name": "lives",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1115,
   "name": "lives_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1116,
   "name": "check_deaths",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1120,
   "name": "b_0460",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1126,
   "name": "j_0466",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 1132,
   "name": "draw_lives",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1147,
   "name": "draw_lives_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1165,
   "name": "b_048D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1174,
   "name": "b_0496",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1181,
   "name": "b_049D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1184,
   "name": "lose_life",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 1211,
   "name": "b_04BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1264,
   "name": "b_04F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1282,
   "name": "b_0502",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1300,
   "name": "b_0514",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1319,
   "name": "b_0527",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1322,
   "name": "check_rejoin",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1324,
   "name": "j_052C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 1381,
   "name": "b_0565",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1393,
   "name": "b_0571",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1412,
   "name": "b_0584",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1446,
   "name": "b_05A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1452,
   "name": "r_05AC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 1453,
   "name": "play_tune",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1465,
   "name": "extra_life_scores",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1477,
   "name": "init_round_state",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1509,
   "name": "b_05E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1523,
   "name": "b_05F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1525,
   "name": "b_05F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1568,
   "name": "b_0620",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1579,
   "name": "b_062B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1614,
   "name": "b_064E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1622,
   "name": "b_0656",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1672,
   "name": "b_0688",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1680,
   "name": "b_0690",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1682,
   "name": "b_0692",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1691,
   "name": "clear_item_sprites",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 1694,
   "name": "b_069E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1707,
   "name": "irq_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1734,
   "name": "b_06C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1738,
   "name": "b_06CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1776,
   "name": "b_06F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1795,
   "name": "b_0703",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1815,
   "name": "irq_exit",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 1824,
   "name": "j_0720",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 1838,
   "name": "irq_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1862,
   "name": "b_0746",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1873,
   "name": "b_0751",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1875,
   "name": "b_0753",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1883,
   "name": "b_075B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1893,
   "name": "b_0765",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1896,
   "name": "irq_top_switch_boss",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1916,
   "name": "irq_top_switch_actors",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1926,
   "name": "irq_top_switch_exit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1932,
   "name": "b_078C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1941,
   "name": "irq_boss_lower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1961,
   "name": "boss_lower_tail",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1977,
   "name": "b_07B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2017,
   "name": "place_boss",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2047,
   "name": "b_07FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2063,
   "name": "b_080F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2089,
   "name": "b_0829",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2106,
   "name": "b_083A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2132,
   "name": "b_0854",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2138,
   "name": "b_085A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2150,
   "name": "r_0866",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 2151,
   "name": "b_0867",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2170,
   "name": "b_087A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2181,
   "name": "star_field",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2194,
   "name": "b_0892",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2227,
   "name": "b_08B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2250,
   "name": "b_08CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2276,
   "name": "play_game",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2409,
   "name": "b_0969",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2442,
   "name": "b_098A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2469,
   "name": "j_09A5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2515,
   "name": "b_09D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2524,
   "name": "j_09DC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2567,
   "name": "pass_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 2608,
   "name": "b_0A30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2616,
   "name": "pass_hook",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 2617,
   "name": "pass_hook_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2618,
   "name": "pass_hook_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2632,
   "name": "b_0A48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2650,
   "name": "b_0A5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2653,
   "name": "wait_frame_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2657,
   "name": "wait_frame_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2689,
   "name": "b_0A81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2696,
   "name": "b_0A88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2713,
   "name": "game_over",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 2728,
   "name": "b_0AA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2729,
   "name": "const_0aa9",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2731,
   "name": "push_bubbles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2733,
   "name": "b_0AAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2756,
   "name": "b_0AC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2791,
   "name": "b_0AE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2795,
   "name": "b_0AEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2798,
   "name": "b_0AEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2802,
   "name": "b_0AF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2821,
   "name": "b_0B05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2863,
   "name": "b_0B2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2875,
   "name": "b_0B3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2897,
   "name": "b_0B51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2902,
   "name": "j_0B56",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2937,
   "name": "b_0B79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2941,
   "name": "b_0B7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2947,
   "name": "b_0B83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2969,
   "name": "b_0B99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2982,
   "name": "b_0BA6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2989,
   "name": "b_0BAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3016,
   "name": "b_0BC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3028,
   "name": "b_0BD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3048,
   "name": "b_0BE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3053,
   "name": "spawn_special_bubble",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3054,
   "name": "spawn_countdown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3060,
   "name": "r_0BF4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 3061,
   "name": "b_0BF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3101,
   "name": "b_0C1D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3120,
   "name": "b_0C30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3137,
   "name": "b_0C41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3150,
   "name": "b_0C4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3158,
   "name": "b_0C56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3170,
   "name": "b_0C62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3179,
   "name": "b_0C6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3188,
   "name": "b_0C74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3228,
   "name": "spawn_kind_switch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3240,
   "name": "b_0CA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3241,
   "name": "letter_spawn_code",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3255,
   "name": "b_0CB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3265,
   "name": "special_bubble_kind",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 3266,
   "name": "special_mask",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3288,
   "name": "b_0CD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3298,
   "name": "b_0CE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3306,
   "name": "b_0CEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3314,
   "name": "move_bubbles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3316,
   "name": "b_0CF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3330,
   "name": "b_0D02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3332,
   "name": "b_0D04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3361,
   "name": "b_0D21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3378,
   "name": "b_0D32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3397,
   "name": "b_0D45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3402,
   "name": "move_bubbles_next",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 3406,
   "name": "b_0D4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3429,
   "name": "special_dispatch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3430,
   "name": "special_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3431,
   "name": "special_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3432,
   "name": "special_object_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3433,
   "name": "special_table_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3448,
   "name": "move_bubbles_special",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 3455,
   "name": "b_0D7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3462,
   "name": "b_0D86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3473,
   "name": "b_0D91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3497,
   "name": "const_0da9",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3502,
   "name": "b_0DAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3519,
   "name": "b_0DBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3527,
   "name": "drift_threshold",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3540,
   "name": "b_0DD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3548,
   "name": "b_0DDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3556,
   "name": "b_0DE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3566,
   "name": "b_0DEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3574,
   "name": "b_0DF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3581,
   "name": "b_0DFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3584,
   "name": "b_0E00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3592,
   "name": "b_0E08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3598,
   "name": "b_0E0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3619,
   "name": "b_0E23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3663,
   "name": "b_0E4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3666,
   "name": "b_0E52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3697,
   "name": "b_0E71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3728,
   "name": "b_0E90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3757,
   "name": "b_0EAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3778,
   "name": "b_0EC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3781,
   "name": "food_fall",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 3827,
   "name": "j_0EF3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3834,
   "name": "b_0EFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3837,
   "name": "b_0EFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3857,
   "name": "b_0F11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3874,
   "name": "b_0F22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3890,
   "name": "b_0F32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3906,
   "name": "b_0F42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3912,
   "name": "blown_bubble",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 3934,
   "name": "b_0F5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3937,
   "name": "blown_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3955,
   "name": "blown_switch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3981,
   "name": "b_0F8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3985,
   "name": "j_0F91",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 3992,
   "name": "b_0F98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4039,
   "name": "b_0FC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4049,
   "name": "b_0FD1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4086,
   "name": "b_0FF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4094,
   "name": "b_0FFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4106,
   "name": "r_100A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 4107,
   "name": "b_100B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4144,
   "name": "b_1030",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4160,
   "name": "b_1040",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4165,
   "name": "b_1045",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4176,
   "name": "b_1050",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4187,
   "name": "catch_enemy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4189,
   "name": "b_105D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4202,
   "name": "b_106A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4215,
   "name": "b_1077",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4232,
   "name": "b_1088",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4236,
   "name": "b_108C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4240,
   "name": "b_1090",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4257,
   "name": "b_10A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4273,
   "name": "b_10B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4307,
   "name": "fireball",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4310,
   "name": "thunder_shot",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4332,
   "name": "b_10EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4336,
   "name": "b_10F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4339,
   "name": "b_10F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4352,
   "name": "b_1100",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4395,
   "name": "flip_subcol",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4404,
   "name": "boss_hit_test",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4412,
   "name": "b_113C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4443,
   "name": "b_115B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4447,
   "name": "b_115F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4458,
   "name": "b_116A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4462,
   "name": "b_116E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4472,
   "name": "b_1178",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4494,
   "name": "r_118E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 4495,
   "name": "b_118F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4511,
   "name": "boss_frame_saved",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4515,
   "name": "b_11A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4535,
   "name": "fire_drop",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4559,
   "name": "b_11CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4562,
   "name": "b_11D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4583,
   "name": "b_11E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4594,
   "name": "b_11F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4608,
   "name": "fire_spread_code",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4630,
   "name": "b_1216",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4640,
   "name": "b_1220",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4660,
   "name": "b_1234",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4675,
   "name": "b_1243",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4681,
   "name": "b_1249",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4699,
   "name": "b_125B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4700,
   "name": "fire_slot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4721,
   "name": "special_done",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 4724,
   "name": "boulder_shot",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4738,
   "name": "b_1282",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4742,
   "name": "shot_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 4744,
   "name": "j_1288",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4765,
   "name": "b_129D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4773,
   "name": "b_12A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4776,
   "name": "b_12A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4779,
   "name": "b_12AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4780,
   "name": "shot_end_type",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4788,
   "name": "bottle_shot",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4830,
   "name": "b_12DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4854,
   "name": "b_12F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4857,
   "name": "bolt_fall",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4868,
   "name": "b_1304",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4876,
   "name": "b_130C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4889,
   "name": "run_fires",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4891,
   "name": "b_131B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4906,
   "name": "b_132A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4947,
   "name": "b_1353",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4954,
   "name": "b_135A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4967,
   "name": "b_1367",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4974,
   "name": "b_136E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4978,
   "name": "b_1372",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5010,
   "name": "b_1392",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5042,
   "name": "b_13B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5054,
   "name": "age_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5056,
   "name": "j_13C0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5074,
   "name": "b_13D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5126,
   "name": "b_1406",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5131,
   "name": "b_140B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5139,
   "name": "b_1413",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5160,
   "name": "b_1428",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5166,
   "name": "b_142E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5187,
   "name": "b_1443",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5193,
   "name": "b_1449",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5197,
   "name": "b_144D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5204,
   "name": "b_1454",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5215,
   "name": "burst_one_plain",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5217,
   "name": "b_1461",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5230,
   "name": "r_146E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 5231,
   "name": "b_146F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5235,
   "name": "baron_move",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5241,
   "name": "b_1479",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5267,
   "name": "b_1493",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5270,
   "name": "b_1496",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5307,
   "name": "b_14BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5323,
   "name": "b_14CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5334,
   "name": "b_14D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5352,
   "name": "b_14E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5384,
   "name": "b_1508",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5391,
   "name": "b_150F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5404,
   "name": "b_151C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5411,
   "name": "b_1523",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5419,
   "name": "touch_kills",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5439,
   "name": "b_153F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5445,
   "name": "touch_state_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5449,
   "name": "touch_state_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5452,
   "name": "b_154C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5464,
   "name": "b_1558",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5480,
   "name": "b_1568",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5491,
   "name": "b_1573",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5495,
   "name": "r_1577",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 5496,
   "name": "round_timers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5498,
   "name": "b_157A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5574,
   "name": "b_15C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5601,
   "name": "b_15E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5608,
   "name": "b_15E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5624,
   "name": "b_15F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5628,
   "name": "b_15FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5657,
   "name": "b_1619",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5662,
   "name": "b_161E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5665,
   "name": "barons_appear",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 5682,
   "name": "b_1632",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5730,
   "name": "b_1662",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5738,
   "name": "b_166A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5756,
   "name": "b_167C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5764,
   "name": "b_1684",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5775,
   "name": "j_168F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5780,
   "name": "banner_and_boss",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5787,
   "name": "b_169B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5850,
   "name": "b_16DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5856,
   "name": "b_16E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5860,
   "name": "enemies_angry",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5862,
   "name": "b_16E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5871,
   "name": "angry_value",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5875,
   "name": "b_16F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5878,
   "name": "r_16F6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 5879,
   "name": "round_cleared",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 5895,
   "name": "b_1707",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5897,
   "name": "b_1709",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5909,
   "name": "b_1715",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5913,
   "name": "j_1719",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5917,
   "name": "b_171D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5951,
   "name": "b_173F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5963,
   "name": "b_174B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5965,
   "name": "b_174D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5983,
   "name": "b_175F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6002,
   "name": "r_1772",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6003,
   "name": "ending_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6078,
   "name": "drop_in_enemies",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6080,
   "name": "b_17C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6101,
   "name": "b_17D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6112,
   "name": "b_17E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6136,
   "name": "b_17F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6139,
   "name": "b_17FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6149,
   "name": "actors_to_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6153,
   "name": "b_1809",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6188,
   "name": "b_182C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6212,
   "name": "flip_buffers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6215,
   "name": "flip_no_wait",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6227,
   "name": "repair_back_buffer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6230,
   "name": "b_1856",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6251,
   "name": "b_186B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6281,
   "name": "b_1889",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6286,
   "name": "b_188E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6296,
   "name": "b_1898",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6304,
   "name": "b_18A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6319,
   "name": "b_18AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6338,
   "name": "b_18C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6358,
   "name": "repair_cells",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6360,
   "name": "repair_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6361,
   "name": "b_18D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6367,
   "name": "repair_row_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6368,
   "name": "b_18E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6373,
   "name": "b_18E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6378,
   "name": "b_18EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6389,
   "name": "b_18F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6441,
   "name": "repair_row_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6442,
   "name": "b_192A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6447,
   "name": "b_192F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6452,
   "name": "b_1934",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6492,
   "name": "b_195C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6501,
   "name": "b_1965",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6535,
   "name": "b_1987",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6538,
   "name": "b_198A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6576,
   "name": "b_19B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6592,
   "name": "r_19C0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6593,
   "name": "b_19C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6607,
   "name": "giant_fall_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 6631,
   "name": "b_19E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6697,
   "name": "b_1A29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6702,
   "name": "b_1A2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6735,
   "name": "b_1A4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6751,
   "name": "b_1A5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6767,
   "name": "kill_enemy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6776,
   "name": "b_1A78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6783,
   "name": "b_1A7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6837,
   "name": "r_1AB5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6838,
   "name": "sky_flash",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6848,
   "name": "b_1AC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6888,
   "name": "clear_first_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6890,
   "name": "b_1AEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6902,
   "name": "b_1AF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6904,
   "name": "b_1AF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6911,
   "name": "b_1AFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6914,
   "name": "redraw_until_free",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6917,
   "name": "j_1B05",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6931,
   "name": "b_1B13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6937,
   "name": "scrub_back_buffer",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 6953,
   "name": "b_1B29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6963,
   "name": "b_1B33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6976,
   "name": "step_water",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7027,
   "name": "b_1B73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7035,
   "name": "b_1B7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7037,
   "name": "b_1B7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7089,
   "name": "b_1BB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7122,
   "name": "b_1BD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7139,
   "name": "b_1BE3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7150,
   "name": "b_1BEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7165,
   "name": "b_1BFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7178,
   "name": "b_1C0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7185,
   "name": "b_1C11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7189,
   "name": "b_1C15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7218,
   "name": "b_1C32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7252,
   "name": "b_1C54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7277,
   "name": "b_1C6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7287,
   "name": "b_1C77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7290,
   "name": "r_1C7A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7291,
   "name": "b_1C7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7307,
   "name": "b_1C8B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7309,
   "name": "b_1C8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7319,
   "name": "b_1C97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7328,
   "name": "b_1CA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7337,
   "name": "drop_in_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7341,
   "name": "b_1CAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7354,
   "name": "b_1CBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7357,
   "name": "update_actors",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7387,
   "name": "b_1CDB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7411,
   "name": "b_1CF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7427,
   "name": "b_1D03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7441,
   "name": "b_1D11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7449,
   "name": "j_1D19",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7457,
   "name": "b_1D21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7460,
   "name": "b_1D24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7474,
   "name": "b_1D32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7476,
   "name": "b_1D34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7499,
   "name": "b_1D4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7518,
   "name": "b_1D5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7533,
   "name": "b_1D6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7542,
   "name": "b_1D76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7545,
   "name": "b_1D79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7548,
   "name": "r_1D7C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7549,
   "name": "pad_1d7d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7556,
   "name": "boss_move",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 7574,
   "name": "b_1D96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7598,
   "name": "b_1DAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7610,
   "name": "b_1DBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7622,
   "name": "b_1DC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7640,
   "name": "b_1DD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7652,
   "name": "b_1DE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7658,
   "name": "b_1DEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7660,
   "name": "b_1DEC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7679,
   "name": "b_1DFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7683,
   "name": "b_1E03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7695,
   "name": "b_1E0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7699,
   "name": "b_1E13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7717,
   "name": "b_1E25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7722,
   "name": "b_1E2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7726,
   "name": "clear_enemies",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7728,
   "name": "clear_actors_from_x",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7730,
   "name": "b_1E32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7738,
   "name": "actor_state_table_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7739,
   "name": "actor_state_table_base_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7740,
   "name": "actor_state_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7788,
   "name": "run_actor_state",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7812,
   "name": "actor_dispatch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7813,
   "name": "actor_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7814,
   "name": "actor_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7815,
   "name": "idle_animation",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7830,
   "name": "b_1E96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7833,
   "name": "b_1E99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7836,
   "name": "b_1E9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7839,
   "name": "enemy_dropper",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7849,
   "name": "b_1EA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7874,
   "name": "b_1EC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7884,
   "name": "b_1ECC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7926,
   "name": "b_1EF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7939,
   "name": "b_1F03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7959,
   "name": "b_1F17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7965,
   "name": "b_1F1D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7972,
   "name": "b_1F24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7979,
   "name": "b_1F2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7982,
   "name": "enemy_hopper",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7993,
   "name": "b_1F39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8001,
   "name": "b_1F41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8027,
   "name": "b_1F5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8033,
   "name": "b_1F61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8063,
   "name": "b_1F7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8075,
   "name": "b_1F8B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8087,
   "name": "b_1F97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8099,
   "name": "b_1FA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8115,
   "name": "b_1FB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8140,
   "name": "b_1FCC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8142,
   "name": "b_1FCE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8147,
   "name": "b_1FD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8167,
   "name": "b_1FE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8170,
   "name": "b_1FEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8175,
   "name": "j_1FEF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8195,
   "name": "b_2003",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8211,
   "name": "b_2013",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8222,
   "name": "b_201E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8241,
   "name": "b_2031",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8243,
   "name": "b_2033",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8246,
   "name": "r_2036",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8247,
   "name": "b_2037",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8258,
   "name": "b_2042",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8262,
   "name": "b_2046",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8265,
   "name": "b_2049",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8296,
   "name": "b_2068",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8304,
   "name": "j_2070",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8336,
   "name": "b_2090",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8352,
   "name": "hopper_land",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8356,
   "name": "b_20A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8368,
   "name": "j_20B0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8392,
   "name": "b_20C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8396,
   "name": "b_20CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8407,
   "name": "j_20D7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8444,
   "name": "b_20FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8455,
   "name": "b_2107",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8462,
   "name": "b_210E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8499,
   "name": "b_2133",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8507,
   "name": "j_213B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8518,
   "name": "b_2146",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8522,
   "name": "animate_two_frames",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 8537,
   "name": "flip_frame_bit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8545,
   "name": "r_2161",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8546,
   "name": "player_control",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8554,
   "name": "b_216A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8561,
   "name": "b_2171",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8572,
   "name": "b_217C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8597,
   "name": "b_2195",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8634,
   "name": "b_21BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8637,
   "name": "b_21BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8645,
   "name": "b_21C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8653,
   "name": "b_21CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8677,
   "name": "b_21E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8683,
   "name": "b_21EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8716,
   "name": "player_ground_input",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 8723,
   "name": "b_2213",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8732,
   "name": "b_221C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8739,
   "name": "b_2223",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8746,
   "name": "r_222A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8747,
   "name": "start_jump",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 8772,
   "name": "b_2244",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8792,
   "name": "b_2258",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8808,
   "name": "b_2268",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8811,
   "name": "walk_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8823,
   "name": "b_2277",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8852,
   "name": "b_2294",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8870,
   "name": "b_22A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8884,
   "name": "b_22B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8891,
   "name": "b_22BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8898,
   "name": "r_22C2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8899,
   "name": "walk_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8911,
   "name": "b_22CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8936,
   "name": "start_blow",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 8961,
   "name": "blow_animation",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8973,
   "name": "r_230D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8974,
   "name": "b_230E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8993,
   "name": "b_2321",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9001,
   "name": "r_2329",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9002,
   "name": "b_232A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9111,
   "name": "b_2397",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9144,
   "name": "b_23B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9160,
   "name": "b_23C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9175,
   "name": "b_23D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9182,
   "name": "blow_mark_owner",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9193,
   "name": "r_23E9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9194,
   "name": "player_jump_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9212,
   "name": "b_23FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9217,
   "name": "player_fall_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 9241,
   "name": "b_2419",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9246,
   "name": "b_241E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9251,
   "name": "b_2423",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9258,
   "name": "b_242A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9274,
   "name": "b_243A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9312,
   "name": "b_2460",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9332,
   "name": "b_2474",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9347,
   "name": "j_2483",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9354,
   "name": "b_248A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9357,
   "name": "b_248D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9376,
   "name": "b_24A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9397,
   "name": "b_24B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9401,
   "name": "b_24B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9408,
   "name": "b_24C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9413,
   "name": "b_24C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9432,
   "name": "b_24D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9453,
   "name": "b_24ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9457,
   "name": "b_24F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9464,
   "name": "b_24F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9466,
   "name": "b_24FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9496,
   "name": "r_2518",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9497,
   "name": "player_land",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9520,
   "name": "b_2530",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9528,
   "name": "b_2538",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9537,
   "name": "b_2541",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9557,
   "name": "b_2555",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9577,
   "name": "b_2569",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9589,
   "name": "b_2575",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9595,
   "name": "r_257B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9596,
   "name": "player_fall",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9612,
   "name": "b_258C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9643,
   "name": "b_25AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9663,
   "name": "b_25BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9681,
   "name": "b_25D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9688,
   "name": "b_25D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9698,
   "name": "b_25E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9713,
   "name": "j_25F1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9726,
   "name": "b_25FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9747,
   "name": "b_2613",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9758,
   "name": "b_261E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9778,
   "name": "b_2632",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9786,
   "name": "b_263A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9788,
   "name": "r_263C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9789,
   "name": "b_263D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9821,
   "name": "b_265D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9841,
   "name": "b_2671",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9849,
   "name": "b_2679",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9852,
   "name": "enemy_thrown",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9887,
   "name": "b_269F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9919,
   "name": "b_26BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9945,
   "name": "b_26D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9964,
   "name": "b_26EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9987,
   "name": "b_2703",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10003,
   "name": "b_2713",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10022,
   "name": "b_2726",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10031,
   "name": "fall_to_floor_once",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10045,
   "name": "fall_to_floor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10060,
   "name": "b_274C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10090,
   "name": "b_276A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10110,
   "name": "b_277E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10111,
   "name": "floor_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10114,
   "name": "floor_tail",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10117,
   "name": "enemy_frozen_fall",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10142,
   "name": "b_279E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10162,
   "name": "b_27B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10183,
   "name": "b_27C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10187,
   "name": "enemy_frozen",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 10189,
   "name": "b_27CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10206,
   "name": "b_27DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10222,
   "name": "b_27EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10244,
   "name": "b_2804",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10248,
   "name": "enemy_released",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10286,
   "name": "b_282E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10294,
   "name": "b_2836",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10302,
   "name": "b_283E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10316,
   "name": "r_284C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10317,
   "name": "carried_by_water",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10359,
   "name": "b_2877",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10364,
   "name": "b_287C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10374,
   "name": "b_2886",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10376,
   "name": "b_2888",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10381,
   "name": "b_288D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10389,
   "name": "b_2895",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10405,
   "name": "player_dying",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10427,
   "name": "b_28BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10446,
   "name": "b_28CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10459,
   "name": "b_28DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10470,
   "name": "b_28E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10472,
   "name": "actor_nop",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 10473,
   "name": "b_28E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10490,
   "name": "player_invincible",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10509,
   "name": "player_reappear",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10518,
   "name": "flash_and_control",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10529,
   "name": "enemy_to_food",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10530,
   "name": "food_gate",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10602,
   "name": "b_296A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10608,
   "name": "food_dst_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10609,
   "name": "food_dst_a_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10627,
   "name": "b_2983",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10631,
   "name": "b_2987",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10637,
   "name": "food_dst_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10638,
   "name": "food_dst_b_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10645,
   "name": "r_2995",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10646,
   "name": "remap_pairs",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10653,
   "name": "b_299D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10662,
   "name": "b_29A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10671,
   "name": "b_29AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10680,
   "name": "b_29B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10683,
   "name": "food_wait",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10690,
   "name": "b_29C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10703,
   "name": "b_29CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10715,
   "name": "b_29DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10731,
   "name": "b_29EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10756,
   "name": "b_2A04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10763,
   "name": "b_2A0B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10772,
   "name": "b_2A14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10776,
   "name": "giant_gather",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10815,
   "name": "restore_saved_enemies",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 10824,
   "name": "b_2A48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10856,
   "name": "b_2A68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10864,
   "name": "b_2A70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10867,
   "name": "r_2A73",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10868,
   "name": "giant_flash",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10903,
   "name": "b_2A97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10925,
   "name": "place_formation",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 10955,
   "name": "giant_food",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10975,
   "name": "b_2ADF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10985,
   "name": "giant_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11001,
   "name": "b_2AF9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11003,
   "name": "b_2AFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11041,
   "name": "b_2B21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11053,
   "name": "b_2B2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11057,
   "name": "place_items",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11184,
   "name": "b_2BB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11197,
   "name": "set_points_item",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11260,
   "name": "b_2BFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11300,
   "name": "b_2C24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11309,
   "name": "b_2C2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11314,
   "name": "set_special_item",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11336,
   "name": "b_2C48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11404,
   "name": "items_to_sprite_coords",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 11406,
   "name": "b_2C8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11423,
   "name": "item_picture_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11447,
   "name": "check_items",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11459,
   "name": "b_2CC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11461,
   "name": "j_2CC5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11477,
   "name": "b_2CD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11480,
   "name": "b_2CD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11482,
   "name": "j_2CDA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11499,
   "name": "b_2CEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11515,
   "name": "b_2CFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11552,
   "name": "b_2D20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11563,
   "name": "b_2D2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11584,
   "name": "b_2D40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11601,
   "name": "item_effect_call",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11602,
   "name": "effect_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11603,
   "name": "effect_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11607,
   "name": "effect_saved_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11608,
   "name": "b_2D58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11614,
   "name": "j_2D5E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11620,
   "name": "r_2D64",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11621,
   "name": "item_effect_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11656,
   "name": "item_effect_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11691,
   "name": "effect_fast_reload",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11698,
   "name": "effect_long_range",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11710,
   "name": "effect_all_powers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11719,
   "name": "effect_three_powers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11725,
   "name": "effect_fast_bubbles",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11730,
   "name": "effect_sound",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 11735,
   "name": "effect_flood",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11774,
   "name": "b_2DFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11797,
   "name": "b_2E15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11808,
   "name": "b_2E20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11822,
   "name": "b_2E2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11828,
   "name": "b_2E34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11854,
   "name": "b_2E4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11860,
   "name": "b_2E54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11870,
   "name": "b_2E5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11873,
   "name": "kill_all_enemies",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11875,
   "name": "b_2E63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11887,
   "name": "b_2E6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11890,
   "name": "b_2E72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11896,
   "name": "r_2E78",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11897,
   "name": "end_all_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11904,
   "name": "b_2E80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11940,
   "name": "b_2EA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11968,
   "name": "redraw_both_buffers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11980,
   "name": "effect_six_sprites_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11985,
   "name": "b_2ED1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12010,
   "name": "enemies_to_bonus",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12018,
   "name": "b_2EF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12086,
   "name": "b_2F36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12113,
   "name": "b_2F51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12127,
   "name": "effect_jump_bonus",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12130,
   "name": "effect_walk_bonus",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12133,
   "name": "effect_blow_bonus",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12136,
   "name": "effect_clock",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12157,
   "name": "effect_bonus_room_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12163,
   "name": "effect_bonus_room_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12169,
   "name": "effect_bonus_room_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12173,
   "name": "bonus_room",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 12188,
   "name": "b_2F9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12196,
   "name": "b_2FA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12204,
   "name": "j_2FAC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12210,
   "name": "b_2FB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12310,
   "name": "b_3016",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12339,
   "name": "b_3033",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12356,
   "name": "b_3044",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12365,
   "name": "b_304D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12372,
   "name": "b_3054",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12443,
   "name": "b_309B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12448,
   "name": "bonus_results",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12515,
   "name": "b_30E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12528,
   "name": "b_30F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12537,
   "name": "b_30F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12574,
   "name": "fill_panel_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12590,
   "name": "fill_panel",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12621,
   "name": "fill_rect",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 12625,
   "name": "b_3151",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12629,
   "name": "b_3155",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12645,
   "name": "b_3165",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12649,
   "name": "fade_in_pictures",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12664,
   "name": "b_3178",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12687,
   "name": "bonus_step_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12688,
   "name": "bonus_step_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12691,
   "name": "bonus_collect",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12706,
   "name": "j_31A2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12722,
   "name": "bonus_step_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12723,
   "name": "bonus_step_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12726,
   "name": "b_31B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12734,
   "name": "b_31BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12746,
   "name": "b_31CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12762,
   "name": "b_31DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12800,
   "name": "bonus_block_score",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12806,
   "name": "b_3206",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12835,
   "name": "b_3223",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12838,
   "name": "b_3226",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12849,
   "name": "b_3231",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12852,
   "name": "bonus_tick_timer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12902,
   "name": "print_two_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12927,
   "name": "b_327F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12936,
   "name": "b_3288",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12947,
   "name": "restore_playfield",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12963,
   "name": "b_32A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12965,
   "name": "b_32A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12987,
   "name": "b_32BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12991,
   "name": "extend_text_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12993,
   "name": "check_extend",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12995,
   "name": "b_32C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13005,
   "name": "b_32CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13038,
   "name": "b_32EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13045,
   "name": "b_32F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13095,
   "name": "b_3327",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13107,
   "name": "b_3333",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13131,
   "name": "b_334B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13158,
   "name": "b_3366",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13193,
   "name": "b_3389",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13197,
   "name": "b_338D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13274,
   "name": "b_33DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13308,
   "name": "b_33FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13345,
   "name": "add_bonus_block",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13386,
   "name": "draw_block",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13450,
   "name": "effect_giant_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13461,
   "name": "effect_giant_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13472,
   "name": "effect_freeze",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13474,
   "name": "b_34A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13489,
   "name": "b_34B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13506,
   "name": "b_34C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13523,
   "name": "b_34D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13544,
   "name": "b_34E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13562,
   "name": "effect_giant_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13570,
   "name": "effect_giant_d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13578,
   "name": "effect_giant_e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13584,
   "name": "set_giant",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 13591,
   "name": "build_giant_food",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 13613,
   "name": "b_352D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13625,
   "name": "b_3539",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13637,
   "name": "b_3545",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13652,
   "name": "b_3554",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13686,
   "name": "b_3576",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13699,
   "name": "b_3583",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13710,
   "name": "b_358E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13715,
   "name": "b_3593",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13736,
   "name": "giant_patch_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13744,
   "name": "effect_six_sprites_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13781,
   "name": "b_35D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13783,
   "name": "b_35D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13848,
   "name": "b_3618",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13857,
   "name": "effect_secret_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13881,
   "name": "b_3639",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13892,
   "name": "b_3644",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13920,
   "name": "b_3660",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13939,
   "name": "b_3673",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13986,
   "name": "b_36A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14044,
   "name": "b_36DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14059,
   "name": "b_36EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14152,
   "name": "b_3748",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14193,
   "name": "secret_room_tick",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14279,
   "name": "weapon_charge",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14281,
   "name": "scroll_in_round",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14293,
   "name": "b_37D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14298,
   "name": "b_37DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14313,
   "name": "b_37E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14315,
   "name": "b_37EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14348,
   "name": "b_380C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14353,
   "name": "b_3811",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14393,
   "name": "j_3839",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14398,
   "name": "b_383E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14417,
   "name": "b_3851",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14430,
   "name": "b_385E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14432,
   "name": "round_number_glyphs",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14448,
   "name": "b_3870",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14492,
   "name": "b_389C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14501,
   "name": "b_38A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14523,
   "name": "b_38BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14531,
   "name": "b_38C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14545,
   "name": "b_38D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14563,
   "name": "b_38E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14569,
   "name": "scroll_up_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14588,
   "name": "b_38FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14602,
   "name": "b_390A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14619,
   "name": "b_391B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14621,
   "name": "b_391D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14634,
   "name": "start_round",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14644,
   "name": "b_3934",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14650,
   "name": "b_393A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14656,
   "name": "b_3940",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14678,
   "name": "b_3956",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14692,
   "name": "b_3964",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14730,
   "name": "b_398A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14750,
   "name": "b_399E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14772,
   "name": "b_39B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14774,
   "name": "b_39B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14783,
   "name": "b_39BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14794,
   "name": "b_39CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14797,
   "name": "b_39CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14811,
   "name": "j_39DB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14818,
   "name": "b_39E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14895,
   "name": "b_3A2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14956,
   "name": "j_3A6C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14958,
   "name": "b_3A6E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15016,
   "name": "b_3AA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15028,
   "name": "b_3AB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15032,
   "name": "hurry_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15083,
   "name": "b_3AEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15088,
   "name": "hurry_copy_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15100,
   "name": "b_3AFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15114,
   "name": "j_3B0A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15120,
   "name": "b_3B10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15149,
   "name": "b_3B2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15184,
   "name": "b_3B50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15200,
   "name": "b_3B60",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15228,
   "name": "b_3B7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15244,
   "name": "b_3B8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15259,
   "name": "b_3B9B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15265,
   "name": "hurry_flash_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15273,
   "name": "b_3BA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15281,
   "name": "b_3BB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15290,
   "name": "b_3BBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15305,
   "name": "b_3BC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15312,
   "name": "b_3BD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15319,
   "name": "b_3BD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15336,
   "name": "b_3BE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15343,
   "name": "b_3BEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15345,
   "name": "hurry_restore_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15354,
   "name": "hurry_restore_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15361,
   "name": "round_banner",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15374,
   "name": "b_3C0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15393,
   "name": "b_3C21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15407,
   "name": "b_3C2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15473,
   "name": "b_3C71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15508,
   "name": "b_3C94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15538,
   "name": "draw_carrier",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 15547,
   "name": "hurry_save_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 15556,
   "name": "hurry_save_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 15565,
   "name": "hurry_save_colours_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 15571,
   "name": "draw_pop_next",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15574,
   "name": "hurry_glyphs_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 15579,
   "name": "draw_pop_last",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15583,
   "name": "draw_pop_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15585,
   "name": "b_3CE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15589,
   "name": "draw_pop_picture",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 15621,
   "name": "b_3D05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15633,
   "name": "b_3D11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15646,
   "name": "hurry_glyphs_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 15661,
   "name": "draw_burst",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15665,
   "name": "b_3D31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15694,
   "name": "b_3D4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15711,
   "name": "b_3D5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15732,
   "name": "b_3D74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15735,
   "name": "draw_pop_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15785,
   "name": "draw_gone",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15792,
   "name": "b_3DB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15810,
   "name": "b_3DC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15850,
   "name": "b_3DEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15862,
   "name": "b_3DF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15874,
   "name": "b_3E02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15889,
   "name": "b_3E11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15905,
   "name": "b_3E21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15916,
   "name": "b_3E2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15958,
   "name": "b_3E56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15960,
   "name": "b_3E58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15966,
   "name": "b_3E5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15982,
   "name": "b_3E6E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15991,
   "name": "draw_bolt",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16020,
   "name": "draw_shot",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 16047,
   "name": "b_3EAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16054,
   "name": "j_3EB6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16084,
   "name": "draw_bottle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16097,
   "name": "b_3EE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16125,
   "name": "draw_fireball",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16140,
   "name": "b_3F0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16168,
   "name": "draw_giant_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16174,
   "name": "b_3F2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16190,
   "name": "b_3F3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16210,
   "name": "b_3F52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16244,
   "name": "b_3F74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16260,
   "name": "title_flip_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16262,
   "name": "item_first_char",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16264,
   "name": "draw_falling_food",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16301,
   "name": "const_3fad",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16304,
   "name": "print_score_digit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16317,
   "name": "b_3FBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16323,
   "name": "trainer_key_hook",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16333,
   "name": "b_3FCD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16342,
   "name": "b_3FD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16346,
   "name": "trainer_boss_hook",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 16358,
   "name": "free_3fe6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "font_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16464,
   "name": "font_shadows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16512,
   "name": "f043_seed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16513,
   "name": "f043_seed_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16514,
   "name": "title_patch",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 16519,
   "name": "title_patch_copy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16521,
   "name": "b_4089",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16527,
   "name": "title_patch_tail",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16533,
   "name": "font_after_patch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16535,
   "name": "tile_copy_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16543,
   "name": "tile_copy_d",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16552,
   "name": "wall_tile",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16560,
   "name": "wall_block_tl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16568,
   "name": "wall_block_tr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16576,
   "name": "wall_block_bl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16584,
   "name": "wall_block_br",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16592,
   "name": "round_glyph_tens",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16598,
   "name": "round_glyph_tens_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16599,
   "name": "round_glyph_tens_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16600,
   "name": "round_glyph_units",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16606,
   "name": "round_glyph_units_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16607,
   "name": "round_glyph_units_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16640,
   "name": "font_letters",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16896,
   "name": "font_char_40",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16912,
   "name": "item_glyphs_points",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16944,
   "name": "item_glyphs_special",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17094,
   "name": "const_42c6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17152,
   "name": "font_title_logo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17328,
   "name": "logo_scratch_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17336,
   "name": "logo_scratch_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17344,
   "name": "logo_scratch_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17408,
   "name": "font_title_logo_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17504,
   "name": "start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17505,
   "name": "b_4461",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17522,
   "name": "b_4472",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17561,
   "name": "b_4499",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17570,
   "name": "b_44A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17584,
   "name": "b_44B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17664,
   "name": "start_part2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17694,
   "name": "b_451E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17717,
   "name": "b_4535",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17765,
   "name": "b_4565",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17794,
   "name": "start_wait_more",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 17808,
   "name": "start_fire_released",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 17825,
   "name": "j_45A1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17831,
   "name": "super_keys",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 17906,
   "name": "b_45F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17908,
   "name": "b_45F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17920,
   "name": "start_part3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17930,
   "name": "b_460A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17936,
   "name": "b_4610",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17945,
   "name": "b_4619",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17956,
   "name": "b_4624",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17965,
   "name": "title_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17992,
   "name": "title_text_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18176,
   "name": "title_text_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18192,
   "name": "scratch_enemy_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18208,
   "name": "scratch_enemy_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18224,
   "name": "scratch_enemy_shape",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18357,
   "name": "start_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18365,
   "name": "start_sprite_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18373,
   "name": "start_drop_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18381,
   "name": "start_top_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18416,
   "name": "star_glyphs_dst",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18424,
   "name": "star_glyph_ff",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18432,
   "name": "charset2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18560,
   "name": "charset2_tiles",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18600,
   "name": "charset2_wall",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18608,
   "name": "charset2_block_tl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18616,
   "name": "charset2_block_tr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18624,
   "name": "charset2_block_bl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18632,
   "name": "charset2_block_br",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18640,
   "name": "charset2_round",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18688,
   "name": "charset2_p1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18944,
   "name": "charset2_p2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18960,
   "name": "charset2_item_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18992,
   "name": "charset2_item_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19200,
   "name": "charset2_p3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19968,
   "name": "charset2_banner",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20040,
   "name": "charset2_banner_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20224,
   "name": "bonus_block_addr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20472,
   "name": "charset2_star",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20480,
   "name": "screen_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20481,
   "name": "screen_a_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20510,
   "name": "screen_a_1e",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20511,
   "name": "screen_a_1f",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20560,
   "name": "screen_a_row2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20563,
   "name": "screen_a_rule",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20655,
   "name": "screen_a_topline",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20736,
   "name": "screen_a_p1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20892,
   "name": "screen_a_banner",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20947,
   "name": "screen_a_print",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20972,
   "name": "screen_a_banner_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20992,
   "name": "screen_a_p2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21083,
   "name": "screen_a_rule_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21162,
   "name": "screen_a_secret",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21202,
   "name": "screen_a_secret_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21242,
   "name": "screen_a_secret_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21248,
   "name": "screen_a_p3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21282,
   "name": "screen_a_secret_d",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21322,
   "name": "screen_a_secret_e",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21400,
   "name": "screen_a_row23",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21440,
   "name": "screen_a_row24",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21441,
   "name": "screen_a_row24_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21470,
   "name": "screen_a_row24_30",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21471,
   "name": "screen_a_row24_31",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21476,
   "name": "screen_a_credits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21496,
   "name": "sprite_ptrs_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21498,
   "name": "sprite_ptrs_a_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21500,
   "name": "f_53FC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21504,
   "name": "screen_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21505,
   "name": "screen_b_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21760,
   "name": "screen_b_p1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21916,
   "name": "screen_b_banner",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21971,
   "name": "screen_b_print",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21996,
   "name": "screen_b_banner_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22016,
   "name": "screen_b_p2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22272,
   "name": "screen_b_p3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22484,
   "name": "title_alt_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22500,
   "name": "screen_b_credits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22520,
   "name": "sprite_ptrs_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22522,
   "name": "sprite_ptrs_b_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22524,
   "name": "f_57FC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 22528,
   "name": "spr_player_walk",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22655,
   "name": "skip_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22719,
   "name": "objects_frozen",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22783,
   "name": "sky_flash_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22847,
   "name": "giant_block_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22911,
   "name": "pass_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22975,
   "name": "next_food_round",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23039,
   "name": "food_round_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23040,
   "name": "spr_player_blow",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23167,
   "name": "invincible_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23231,
   "name": "enemy_release_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23295,
   "name": "boss_active",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23296,
   "name": "spr_player_death",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23359,
   "name": "next_door_level",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23423,
   "name": "doors_possible",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23487,
   "name": "boss_hits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23551,
   "name": "last_letter",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23552,
   "name": "spr_player_death_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23615,
   "name": "current_tune",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23744,
   "name": "spr_enemy_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24512,
   "name": "spr_enemy_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25280,
   "name": "spr_enemy_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26048,
   "name": "spr_enemy_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26560,
   "name": "spr_enemy_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27328,
   "name": "spr_enemy_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27840,
   "name": "spr_enemy_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28352,
   "name": "spr_enemy_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28736,
   "name": "music_patterns",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29445,
   "name": "mus_loop_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29463,
   "name": "mus_loop_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29486,
   "name": "b_732E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29491,
   "name": "mus_instrument_short",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29494,
   "name": "mus_instrument",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29514,
   "name": "b_734A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29517,
   "name": "instrument_dst",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29527,
   "name": "instrument_block_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29530,
   "name": "live_block_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29533,
   "name": "mus_transpose",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29542,
   "name": "mus_arpeggio",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29560,
   "name": "mus_filter_all",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29564,
   "name": "mus_filter_me",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29568,
   "name": "b_7380",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29570,
   "name": "b_7382",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29576,
   "name": "mus_filter_off",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29582,
   "name": "mus_call_transposed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29590,
   "name": "mus_call",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29616,
   "name": "call_arg_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29623,
   "name": "mus_jump",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29629,
   "name": "mus_return",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29640,
   "name": "b_73C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29648,
   "name": "mus_pop_position",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29661,
   "name": "mus_filter_settings",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29672,
   "name": "b_73E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29685,
   "name": "mus_hold",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29701,
   "name": "mus_push_position",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29716,
   "name": "mus_read_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29728,
   "name": "mus_advance",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29737,
   "name": "r_7429",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29738,
   "name": "voice_filter_bit",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29741,
   "name": "voice_instr_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29744,
   "name": "voice_live_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29747,
   "name": "voice_stack_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29750,
   "name": "voice_sid_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29751,
   "name": "voice_sid_end",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29760,
   "name": "spr_big_bubble",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30272,
   "name": "spr_boss",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30848,
   "name": "spr_boss_beaten",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31424,
   "name": "mirror_mc_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31459,
   "name": "build_boss_mirror",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31463,
   "name": "b_7AE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31489,
   "name": "b_7B01",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31535,
   "name": "boss_src_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31544,
   "name": "boss_src_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31553,
   "name": "boss_dst_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31562,
   "name": "boss_dst_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31571,
   "name": "draw_panel",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31592,
   "name": "b_7B68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31601,
   "name": "b_7B71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31606,
   "name": "b_7B76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31615,
   "name": "b_7B7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31625,
   "name": "b_7B89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31638,
   "name": "credits_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31652,
   "name": "credits_digit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31654,
   "name": "clear_fire_and_water",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31658,
   "name": "b_7BAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31667,
   "name": "irq_enter",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31683,
   "name": "wait_5",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31686,
   "name": "wait_10",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31688,
   "name": "wait_frames",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31691,
   "name": "b_7BCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31700,
   "name": "draw_blown_first",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31707,
   "name": "draw_free",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31720,
   "name": "print_game_over",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31742,
   "name": "object_map_pointer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31764,
   "name": "enemy_fireball",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31777,
   "name": "score_ten",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31782,
   "name": "add_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31783,
   "name": "b_7C27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31797,
   "name": "b_7C35",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31799,
   "name": "effect_skip_to_70",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31804,
   "name": "effect_potion",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31808,
   "name": "boss_mirror_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32000,
   "name": "item_sprite_buffers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32055,
   "name": "item_buf_patch_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32062,
   "name": "item_buf_mark_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32118,
   "name": "item_buf_patch_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32128,
   "name": "item_sprite_buffer_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32188,
   "name": "item_buf_mark_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32194,
   "name": "item_buf_mark_c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32256,
   "name": "item_sprite_buffer_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32320,
   "name": "item_buf_mark_d",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32384,
   "name": "check_pause",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32404,
   "name": "b_7E94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32409,
   "name": "b_7E99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32414,
   "name": "b_7E9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32434,
   "name": "r_7EB2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32435,
   "name": "read_keys_wait",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32438,
   "name": "read_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32449,
   "name": "check_quit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32481,
   "name": "secret_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32595,
   "name": "reset_powers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32646,
   "name": "boss_round_setup",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32676,
   "name": "effect_skip_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32679,
   "name": "effect_skip_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32690,
   "name": "skip_rounds",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32701,
   "name": "b_7FBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32724,
   "name": "j_7FD4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32737,
   "name": "b_7FE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32753,
   "name": "effect_shoes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32758,
   "name": "r_7FF6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32759,
   "name": "free_7ff7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "bubble_gfx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32784,
   "name": "bubble_gfx_col2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32800,
   "name": "bubble_gfx_col3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32937,
   "name": "const_80a9",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33344,
   "name": "bubble_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33360,
   "name": "bubble_mask_col2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33376,
   "name": "bubble_mask_col3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33928,
   "name": "map_wrap_top",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33968,
   "name": "map_wrap_top_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34008,
   "name": "map_wrap_top_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34048,
   "name": "collision_map",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34049,
   "name": "collision_map_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34058,
   "name": "vent_top_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34068,
   "name": "vent_top_right",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34080,
   "name": "actor_frame",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34081,
   "name": "actor_frame_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34082,
   "name": "enemy_frame",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34120,
   "name": "actor_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34121,
   "name": "actor_colour_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34122,
   "name": "enemy_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34160,
   "name": "actor_base_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34162,
   "name": "enemy_base_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34200,
   "name": "actor_sprite_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34202,
   "name": "enemy_sprite_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34203,
   "name": "enemy_sprite_base_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34240,
   "name": "actor_dropping",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34242,
   "name": "enemy_dropping",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34280,
   "name": "actor_input",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34281,
   "name": "actor_input_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34282,
   "name": "enemy_input",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34320,
   "name": "actor_anim_tick",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34360,
   "name": "actor_wait",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34361,
   "name": "actor_wait_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34362,
   "name": "enemy_wait",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34400,
   "name": "actor_chase_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34402,
   "name": "enemy_chase_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34440,
   "name": "actor_chase_period",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34442,
   "name": "enemy_chase_period",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34480,
   "name": "actor_chase_slot",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34520,
   "name": "actor_chase_level",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34560,
   "name": "actor_chase_climb",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34600,
   "name": "actor_fast",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34601,
   "name": "actor_fast_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34602,
   "name": "enemy_fast",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34640,
   "name": "actor_frames_per_side",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34642,
   "name": "enemy_frames_per_side",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34680,
   "name": "actor_frame_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34682,
   "name": "enemy_frame_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34720,
   "name": "actor_jump",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34722,
   "name": "enemy_jump_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34760,
   "name": "actor_fall_phase",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34762,
   "name": "enemy_fall_phase",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34800,
   "name": "actor_falling",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34802,
   "name": "enemy_falling",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34840,
   "name": "actor_blow",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34842,
   "name": "enemy_blow",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34880,
   "name": "actor_drift_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34882,
   "name": "enemy_drift_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34920,
   "name": "actor_drift_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34922,
   "name": "enemy_drift_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34960,
   "name": "actor_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34962,
   "name": "enemy_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35008,
   "name": "map_bottom_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35009,
   "name": "map_bottom_row_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35017,
   "name": "map_bottom_opening",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35018,
   "name": "vent_bottom_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35028,
   "name": "vent_bottom_right",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35048,
   "name": "map_wrap_bottom",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35057,
   "name": "map_wrap_opening_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35088,
   "name": "map_wrap_bottom_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35097,
   "name": "map_wrap_opening_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35128,
   "name": "map_wrap_bottom_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35137,
   "name": "map_wrap_opening_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35160,
   "name": "free_8958",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35200,
   "name": "pop_pictures",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35584,
   "name": "title_tune",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35586,
   "name": "layout_row0_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35587,
   "name": "layout_row0_d",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35588,
   "name": "layout_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35683,
   "name": "layout_row24_d",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35840,
   "name": "title_tune_p1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35996,
   "name": "clean_banner_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36076,
   "name": "clean_banner_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36096,
   "name": "title_tune_p2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36322,
   "name": "free_8de2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36352,
   "name": "clean_copy_p3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36614,
   "name": "object_pictures",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36992,
   "name": "gfx_water_bubble",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37184,
   "name": "gfx_fire_bubble",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37376,
   "name": "gfx_thunder_bubble",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37632,
   "name": "gfx_flame",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38016,
   "name": "gfx_letter_e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38208,
   "name": "gfx_letter_x",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38400,
   "name": "gfx_letter_t",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38592,
   "name": "gfx_letter_n",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38784,
   "name": "gfx_letter_d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39072,
   "name": "gfx_bottle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39392,
   "name": "gfx_fireball",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39648,
   "name": "item_pictures",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39904,
   "name": "item_pictures_p1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40160,
   "name": "item_pictures_p2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40416,
   "name": "item_pictures_p3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40672,
   "name": "item_pictures_p4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40960,
   "name": "item_pictures_p5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41504,
   "name": "gfx_giant_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41760,
   "name": "giant_food_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42016,
   "name": "giant_patch_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42024,
   "name": "bonus_scene_begin",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42047,
   "name": "b_A43F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42058,
   "name": "b_A44A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42066,
   "name": "b_A452",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42100,
   "name": "flip_if_front",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42109,
   "name": "r_A47D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42110,
   "name": "giant_food_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42400,
   "name": "title_stars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42407,
   "name": "b_A5A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42423,
   "name": "ending",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 42424,
   "name": "winner",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42435,
   "name": "b_A5C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42498,
   "name": "b_A602",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42515,
   "name": "b_A613",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42533,
   "name": "print_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42546,
   "name": "title_sprite_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42548,
   "name": "title_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42551,
   "name": "title_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42554,
   "name": "print_at_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42556,
   "name": "print_at_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42557,
   "name": "print_at_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42573,
   "name": "effect_fire_breath",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42579,
   "name": "effect_sky_flash",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42592,
   "name": "secret_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42768,
   "name": "secret_block_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42786,
   "name": "secret_block_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42805,
   "name": "start_x_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42807,
   "name": "start_frame",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42809,
   "name": "game_over_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42813,
   "name": "game_over_text",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42821,
   "name": "game_over_text_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42827,
   "name": "stream_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42828,
   "name": "stream_col_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42836,
   "name": "stream_head_col_prev",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42837,
   "name": "stream_head_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42838,
   "name": "stream_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42839,
   "name": "stream_row_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42847,
   "name": "stream_head_row_prev",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42848,
   "name": "stream_head_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42849,
   "name": "fire_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42854,
   "name": "fire_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42859,
   "name": "fire_len",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42863,
   "name": "fire_timer_m1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42864,
   "name": "fire_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42869,
   "name": "baron_pause",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42871,
   "name": "baron_start_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42873,
   "name": "baron_start_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42875,
   "name": "reload_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42876,
   "name": "reload_time_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42877,
   "name": "bubble_travel",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42879,
   "name": "bubble_range_flag",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42881,
   "name": "bubble_speed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42882,
   "name": "bubble_speed_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42883,
   "name": "fire_breath",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42884,
   "name": "food_sprite_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42889,
   "name": "food_sprite_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42896,
   "name": "food_by_rank",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42906,
   "name": "food_scores",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42915,
   "name": "giant_step_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42920,
   "name": "giant_step_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42928,
   "name": "formation_a_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42934,
   "name": "formation_a_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42940,
   "name": "formation_b_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42946,
   "name": "formation_b_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42952,
   "name": "bonus_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42978,
   "name": "perfect_text",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42980,
   "name": "perfect_text_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42990,
   "name": "perfect_award_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42992,
   "name": "perfect_award_digits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42993,
   "name": "perfect_award_digits_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42999,
   "name": "bonus_count_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43012,
   "name": "extend_player_digit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43021,
   "name": "extend_big_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43027,
   "name": "fast_saved",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43028,
   "name": "fast_saved_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43029,
   "name": "giant_sprite_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43034,
   "name": "giant_sprite_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43039,
   "name": "giant_sprite_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43044,
   "name": "reload_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43045,
   "name": "reload_timer_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43046,
   "name": "fireball_gfx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43050,
   "name": "fireball_mask_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43054,
   "name": "giant_block_cells",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43068,
   "name": "digit_glyph_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43080,
   "name": "digit_glyph_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43092,
   "name": "bonus_sprite_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43127,
   "name": "bonus_sprite_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43154,
   "name": "points_item_picture",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43201,
   "name": "special_item_picture",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43236,
   "name": "item_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43283,
   "name": "special_item_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43318,
   "name": "points_item_scores",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43365,
   "name": "special_item_scores",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43400,
   "name": "extend_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43432,
   "name": "banner_digit_glyph",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43438,
   "name": "banner_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43439,
   "name": "banner_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43440,
   "name": "banner_third",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43441,
   "name": "banner_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43442,
   "name": "object_travel",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43460,
   "name": "object_subcol",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43462,
   "name": "object_subcol_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43478,
   "name": "object_subrow",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43480,
   "name": "object_subrow_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43496,
   "name": "object_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43514,
   "name": "object_life",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43516,
   "name": "object_life_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43532,
   "name": "object_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43534,
   "name": "object_x_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43550,
   "name": "object_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43552,
   "name": "object_y_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43568,
   "name": "object_cargo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43586,
   "name": "object_was",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43588,
   "name": "object_was_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43604,
   "name": "bubble_gfx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43662,
   "name": "bubble_gfx_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43720,
   "name": "bubble_mask_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43778,
   "name": "bubble_mask_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43841,
   "name": "pop_gfx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43849,
   "name": "pop_gfx_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43857,
   "name": "score_lsb_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43858,
   "name": "chain_bonus",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43859,
   "name": "player_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43861,
   "name": "enemy_sprite_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43867,
   "name": "bottle_gfx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43871,
   "name": "bottle_mask_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43873,
   "name": "kind_colour_m2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43881,
   "name": "kind_sprite_m2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43889,
   "name": "kind_period_m2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43897,
   "name": "kind_frames_m2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43905,
   "name": "kind_bubble_frame_m2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43913,
   "name": "kind_tumble_frame_m2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44033,
   "name": "row_times_40_m8",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44034,
   "name": "row_times_40_m8_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44035,
   "name": "row_times_40_m6",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44036,
   "name": "row_times_40_m6_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44041,
   "name": "row_times_40",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44042,
   "name": "row_times_40_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44214,
   "name": "bubble_growth",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44221,
   "name": "fire_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44228,
   "name": "blow_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44235,
   "name": "blow_facing",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44237,
   "name": "jump_arc_player",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44253,
   "name": "jump_arc_enemy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44269,
   "name": "jump_arc_drift",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44309,
   "name": "banner_ready_glyph",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44318,
   "name": "row_lo_m4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44319,
   "name": "row_lo_m3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44320,
   "name": "row_lo_m2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44322,
   "name": "row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44349,
   "name": "row_hi_m4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44350,
   "name": "row_hi_m3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44351,
   "name": "row_hi_m2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44353,
   "name": "row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44380,
   "name": "row_hi_page",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44465,
   "name": "banner_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44537,
   "name": "banner_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44609,
   "name": "star_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44625,
   "name": "enemy_lists",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44767,
   "name": "enemy_lists_r11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44954,
   "name": "enemy_lists_r21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45135,
   "name": "enemy_lists_r31",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45325,
   "name": "enemy_lists_r41",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45515,
   "name": "enemy_lists_r51",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45699,
   "name": "enemy_lists_r61",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45889,
   "name": "enemy_lists_r71",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46079,
   "name": "enemy_lists_r81",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46269,
   "name": "enemy_lists_r91",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46441,
   "name": "item_pos_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46541,
   "name": "item_pos_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46641,
   "name": "item_pos_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46741,
   "name": "air_current_data",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47154,
   "name": "air_currents_r21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47372,
   "name": "air_currents_r41",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47555,
   "name": "air_currents_r61",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47728,
   "name": "air_currents_r81",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47886,
   "name": "wall_blocks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48398,
   "name": "wall_blocks_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48910,
   "name": "wall_blocks_32",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49152,
   "name": "wall_blocks_c000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49422,
   "name": "wall_blocks_48",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49774,
   "name": "level_tiles",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50174,
   "name": "level_tiles_r51",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50574,
   "name": "level_gaps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50674,
   "name": "level_layouts",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51594,
   "name": "layouts_r16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52514,
   "name": "layouts_r31",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53248,
   "name": "level_layouts_io",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53388,
   "name": "layouts_r43",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 54308,
   "name": "layouts_r57",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55228,
   "name": "layouts_r71",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55296,
   "name": "layout_at_d800",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55297,
   "name": "layout_at_d801",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55379,
   "name": "layout_at_d853",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55471,
   "name": "layout_at_d8af",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55552,
   "name": "layout_at_d900",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55708,
   "name": "layout_at_d99c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55763,
   "name": "layout_at_d9d3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55788,
   "name": "layout_at_d9ec",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55808,
   "name": "layout_at_da00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55899,
   "name": "layout_at_da5b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 56064,
   "name": "layout_at_db00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 56102,
   "name": "layouts_r85",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57022,
   "name": "layouts_r97",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57344,
   "name": "build_round",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57377,
   "name": "b_E021",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57425,
   "name": "b_E051",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57438,
   "name": "b_E05E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57440,
   "name": "b_E060",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57470,
   "name": "b_E07E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57499,
   "name": "draw_layout",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57521,
   "name": "b_E0B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57523,
   "name": "b_E0B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57533,
   "name": "b_E0BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57562,
   "name": "b_E0DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57565,
   "name": "b_E0DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57567,
   "name": "b_E0DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57583,
   "name": "b_E0EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57592,
   "name": "b_E0F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57603,
   "name": "b_E103",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57630,
   "name": "b_E11E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57680,
   "name": "b_E150",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57711,
   "name": "b_E16F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57723,
   "name": "b_E17B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57730,
   "name": "b_E182",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57736,
   "name": "r_E188",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 57737,
   "name": "build_air_currents",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57739,
   "name": "j_E18B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57768,
   "name": "b_E1A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57772,
   "name": "b_E1AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57774,
   "name": "b_E1AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57785,
   "name": "b_E1B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57788,
   "name": "b_E1BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57797,
   "name": "b_E1C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57809,
   "name": "b_E1D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57816,
   "name": "b_E1D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57832,
   "name": "b_E1E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57843,
   "name": "j_E1F3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57856,
   "name": "air_rect_code",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57913,
   "name": "b_E239",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57917,
   "name": "b_E23D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57932,
   "name": "b_E24C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57945,
   "name": "b_E259",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57953,
   "name": "b_E261",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57967,
   "name": "b_E26F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57969,
   "name": "b_E271",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57986,
   "name": "j_E282",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57995,
   "name": "r_E28B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 57996,
   "name": "next_map_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58007,
   "name": "b_E297",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58009,
   "name": "unpack_layout",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58029,
   "name": "b_E2AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58037,
   "name": "b_E2B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58046,
   "name": "b_E2BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58051,
   "name": "unpack_layout_here",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58059,
   "name": "b_E2CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58120,
   "name": "b_E308",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58124,
   "name": "unpack_row_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58125,
   "name": "unpack_row_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58143,
   "name": "unpack_full_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58146,
   "name": "unpack_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58154,
   "name": "unpack_mirror_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58167,
   "name": "reverse_bits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58178,
   "name": "b_E342",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58184,
   "name": "b_E348",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58190,
   "name": "unpack_gap_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58197,
   "name": "unpack_gap_half",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58203,
   "name": "b_E35B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58218,
   "name": "unpack_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58220,
   "name": "unpack_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58222,
   "name": "gap_bytes_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58225,
   "name": "gap_bytes_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58228,
   "name": "clear_screens",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58244,
   "name": "b_E384",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58259,
   "name": "clear_back_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58263,
   "name": "b_E397",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58279,
   "name": "print_scores",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58329,
   "name": "print_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58333,
   "name": "b_E3DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58357,
   "name": "check_high_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58363,
   "name": "b_E3FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58373,
   "name": "b_E405",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58379,
   "name": "b_E40B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58381,
   "name": "b_E40D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58398,
   "name": "free_e41e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58410,
   "name": "print_string",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58416,
   "name": "b_E430",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58426,
   "name": "b_E43A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58429,
   "name": "b_E43D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58449,
   "name": "print_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58479,
   "name": "b_E46F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58482,
   "name": "print_store",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58483,
   "name": "print_dst_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58484,
   "name": "print_dst_a_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58486,
   "name": "print_dst_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58487,
   "name": "print_dst_b_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58491,
   "name": "print_dst_c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58492,
   "name": "print_dst_c_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58513,
   "name": "b_E491",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58516,
   "name": "wait_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58518,
   "name": "b_E496",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58523,
   "name": "save_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58525,
   "name": "b_E49D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58565,
   "name": "copy_round_number",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58567,
   "name": "b_E4C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58586,
   "name": "intro_step_armed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58591,
   "name": "intro_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58598,
   "name": "b_E4E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58606,
   "name": "b_E4EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58643,
   "name": "b_E513",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58663,
   "name": "b_E527",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58668,
   "name": "b_E52C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58681,
   "name": "intro_step_tail",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58682,
   "name": "intro_shape_operand",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58683,
   "name": "intro_shapes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58685,
   "name": "b_E53D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58706,
   "name": "intro_msb_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58708,
   "name": "float_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58718,
   "name": "b_E55E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58735,
   "name": "b_E56F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58769,
   "name": "b_E591",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58772,
   "name": "b_E594",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58794,
   "name": "b_E5AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58806,
   "name": "b_E5B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58813,
   "name": "b_E5BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58816,
   "name": "path_buffer_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58818,
   "name": "start_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58820,
   "name": "trace_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58833,
   "name": "b_E5D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58848,
   "name": "b_E5E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58886,
   "name": "b_E606",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58891,
   "name": "b_E60B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58909,
   "name": "j_E61D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58914,
   "name": "b_E622",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58923,
   "name": "b_E62B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58936,
   "name": "b_E638",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58944,
   "name": "j_E640",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58968,
   "name": "build_letter_bubbles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58978,
   "name": "b_E662",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59005,
   "name": "b_E67D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59007,
   "name": "b_E67F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59043,
   "name": "b_E6A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59068,
   "name": "b_E6BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59075,
   "name": "b_E6C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59085,
   "name": "draw_extend_letters",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 59100,
   "name": "draw_extend_column",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 59125,
   "name": "b_E6F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59172,
   "name": "b_E724",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59190,
   "name": "b_E736",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59194,
   "name": "extend_letter_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59200,
   "name": "fill_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 59202,
   "name": "b_E742",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59218,
   "name": "draw_boulder",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59224,
   "name": "draw_flame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 59229,
   "name": "b_E75D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59237,
   "name": "baron_facing",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59239,
   "name": "draw_baron",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59257,
   "name": "draw_bubble",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59268,
   "name": "render_setup",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 59292,
   "name": "b_E79C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59304,
   "name": "b_E7A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59328,
   "name": "b_E7C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59340,
   "name": "b_E7CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59343,
   "name": "render_object",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 59359,
   "name": "b_E7DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59368,
   "name": "b_E7E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59445,
   "name": "b_E835",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59462,
   "name": "b_E846",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59465,
   "name": "render_mask_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59466,
   "name": "render_mask_a_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59468,
   "name": "render_gfx_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59469,
   "name": "render_gfx_a_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59475,
   "name": "render_mask_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59476,
   "name": "render_mask_b_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59478,
   "name": "render_gfx_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59479,
   "name": "render_gfx_b_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59485,
   "name": "render_mask_c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59486,
   "name": "render_mask_c_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59488,
   "name": "render_gfx_c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59489,
   "name": "render_gfx_c_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59495,
   "name": "j_E867",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 59498,
   "name": "b_E86A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59515,
   "name": "b_E87B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59525,
   "name": "b_E885",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59530,
   "name": "render_next_row",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 59634,
   "name": "b_E8F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59644,
   "name": "b_E8FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59653,
   "name": "b_E905",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59662,
   "name": "draw_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 59697,
   "name": "b_E931",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59750,
   "name": "draw_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59752,
   "name": "draw_none",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 59759,
   "name": "draw_next",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 59770,
   "name": "j_E97A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 59775,
   "name": "b_E97F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59799,
   "name": "b_E997",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59812,
   "name": "b_E9A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59813,
   "name": "b_E9A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59828,
   "name": "b_E9B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59831,
   "name": "r_E9B7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 59832,
   "name": "actor_map_pointer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 59882,
   "name": "random",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 59901,
   "name": "enemy_shooter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59912,
   "name": "enemy_walker",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 59928,
   "name": "b_EA18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59936,
   "name": "b_EA20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59966,
   "name": "b_EA3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59978,
   "name": "b_EA4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 59990,
   "name": "b_EA56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60002,
   "name": "b_EA62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60011,
   "name": "b_EA6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60024,
   "name": "b_EA78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60044,
   "name": "b_EA8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60050,
   "name": "b_EA92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60094,
   "name": "b_EABE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60113,
   "name": "j_EAD1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60143,
   "name": "b_EAEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60146,
   "name": "b_EAF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60154,
   "name": "j_EAFA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60161,
   "name": "b_EB01",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60168,
   "name": "b_EB08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60175,
   "name": "animate_walk",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 60211,
   "name": "r_EB33",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 60212,
   "name": "enemy_fall_then_flip",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 60223,
   "name": "enemy_fall",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 60232,
   "name": "b_EB48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60255,
   "name": "b_EB5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60285,
   "name": "b_EB7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60305,
   "name": "b_EB91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60308,
   "name": "fall_tail_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60311,
   "name": "fall_turn_to_player",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60330,
   "name": "b_EBAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60340,
   "name": "fall_tail_b",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 60341,
   "name": "fall_tail_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60342,
   "name": "fall_tail_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60343,
   "name": "fall_plain_rts",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60344,
   "name": "enemy_fall_plain",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 60356,
   "name": "enemy_jump",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 60377,
   "name": "enemy_jump_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 60400,
   "name": "b_EBF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60411,
   "name": "b_EBFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60427,
   "name": "r_EC0B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 60428,
   "name": "b_EC0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60439,
   "name": "b_EC17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60446,
   "name": "b_EC1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60468,
   "name": "b_EC34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60476,
   "name": "j_EC3C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60508,
   "name": "b_EC5C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60528,
   "name": "b_EC70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60540,
   "name": "j_EC7C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60551,
   "name": "j_EC87",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60564,
   "name": "b_EC94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60585,
   "name": "b_ECA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60592,
   "name": "b_ECB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60611,
   "name": "b_ECC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60624,
   "name": "b_ECD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60632,
   "name": "b_ECD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60636,
   "name": "b_ECDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60639,
   "name": "enemy_walk_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60653,
   "name": "b_ECED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60661,
   "name": "b_ECF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60663,
   "name": "enemy_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 60682,
   "name": "b_ED0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60690,
   "name": "enemy_step_left_4",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60696,
   "name": "enemy_step_right_4",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60702,
   "name": "enemy_walk_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60715,
   "name": "b_ED2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60723,
   "name": "b_ED33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60727,
   "name": "b_ED37",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60731,
   "name": "enemy_shoot",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 60737,
   "name": "b_ED41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60776,
   "name": "b_ED68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60785,
   "name": "b_ED71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60842,
   "name": "b_EDAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60857,
   "name": "b_EDB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60867,
   "name": "b_EDC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60871,
   "name": "b_EDC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60877,
   "name": "enemy_decide_shot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60892,
   "name": "b_EDDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60935,
   "name": "b_EE07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60949,
   "name": "b_EE15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60965,
   "name": "b_EE25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60967,
   "name": "b_EE27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60977,
   "name": "b_EE31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61001,
   "name": "r_EE49",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 61002,
   "name": "animate_two_frames_b",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 61025,
   "name": "r_EE61",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 61026,
   "name": "enemy_chase",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 61054,
   "name": "b_EE7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61072,
   "name": "r_EE90",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 61073,
   "name": "b_EE91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61106,
   "name": "enemy_flyer_fast",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61125,
   "name": "b_EEC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61128,
   "name": "j_EEC8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 61145,
   "name": "b_EED9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61151,
   "name": "fly_left_or_turn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 61163,
   "name": "fly_left",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 61192,
   "name": "b_EF08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61197,
   "name": "b_EF0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61205,
   "name": "fly_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61206,
   "name": "fly_step_operand",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61208,
   "name": "fly_flip_facing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61214,
   "name": "fly_right_or_turn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 61226,
   "name": "fly_right",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 61255,
   "name": "b_EF47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61260,
   "name": "fly_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 61296,
   "name": "b_EF70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61307,
   "name": "b_EF7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61309,
   "name": "b_EF7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61327,
   "name": "b_EF8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61336,
   "name": "b_EF98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61344,
   "name": "fly_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 61372,
   "name": "b_EFBC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61376,
   "name": "enemy_flyer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61395,
   "name": "b_EFD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61398,
   "name": "j_EFD6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 61415,
   "name": "b_EFE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61418,
   "name": "animate_four_frames",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 61444,
   "name": "r_F004",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 61445,
   "name": "title_sequence",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 61480,
   "name": "b_F028",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61507,
   "name": "start_round_code",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61514,
   "name": "title_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 61549,
   "name": "b_F06D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61554,
   "name": "title_top_colour_op",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61555,
   "name": "title_top_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61573,
   "name": "b_F085",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61594,
   "name": "b_F09A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61604,
   "name": "b_F0A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61614,
   "name": "b_F0AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61630,
   "name": "b_F0BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61644,
   "name": "title_key_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 61665,
   "name": "b_F0E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61667,
   "name": "b_F0E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61678,
   "name": "score_table_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61842,
   "name": "secret_wall_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61855,
   "name": "secret_wall_bytes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61868,
   "name": "check_extra_life",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 61870,
   "name": "b_F1AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61884,
   "name": "b_F1BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61895,
   "name": "b_F1C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61912,
   "name": "b_F1D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61924,
   "name": "b_F1E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61935,
   "name": "b_F1EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61945,
   "name": "b_F1F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61953,
   "name": "b_F201",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61962,
   "name": "r_F20A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 61963,
   "name": "sfx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61969,
   "name": "sfx_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61975,
   "name": "special_round_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 62016,
   "name": "music_command_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62038,
   "name": "p_F256",
   "type": "Pointer",
   "kind": "auto"
  },
  {
   "address": 62046,
   "name": "arpeggio_tables",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62090,
   "name": "voice_stack_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62094,
   "name": "voice_stack_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62098,
   "name": "voice_stack_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62126,
   "name": "instrument_v1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62134,
   "name": "instr_arp_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62135,
   "name": "instr_arp_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62139,
   "name": "instr_freq_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62143,
   "name": "instr_pulse_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62148,
   "name": "instr_pulse_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62149,
   "name": "instr_pulse_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62150,
   "name": "instr_control",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62151,
   "name": "instr_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62152,
   "name": "instr_sr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62153,
   "name": "instr_gate_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62154,
   "name": "instr_release_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62213,
   "name": "voice_enabled",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62214,
   "name": "voice_enabled_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62215,
   "name": "voice_enabled_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62216,
   "name": "voice_has_data",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62217,
   "name": "voice_has_data_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62218,
   "name": "voice_has_data_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62219,
   "name": "filter_settings",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62235,
   "name": "live_v1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62236,
   "name": "live_freq_rate1_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62237,
   "name": "live_freq_rate2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62238,
   "name": "live_freq_rate2_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62239,
   "name": "live_freq_rate3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62240,
   "name": "live_freq_rate3_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62241,
   "name": "live_freq_rate4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62242,
   "name": "live_freq_rate4_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62243,
   "name": "live_freq_len1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62244,
   "name": "live_freq_len2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62245,
   "name": "live_freq_len3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62246,
   "name": "live_freq_len4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62247,
   "name": "live_freq_delay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62248,
   "name": "live_freq_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62249,
   "name": "live_pulse_len_up",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62250,
   "name": "live_pulse_len_down",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62251,
   "name": "live_pulse_delay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62252,
   "name": "live_pulse_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62253,
   "name": "live_pulse_up",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62254,
   "name": "live_pulse_up_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62255,
   "name": "live_pulse_down",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62256,
   "name": "live_pulse_down_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62257,
   "name": "live_pulse_start",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62258,
   "name": "live_pulse_start_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62259,
   "name": "live_note_freq",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62260,
   "name": "live_note_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62261,
   "name": "live_control",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62262,
   "name": "live_gate_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62263,
   "name": "live_release_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62264,
   "name": "live_cnt1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62265,
   "name": "live_cnt2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62266,
   "name": "live_cnt3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62267,
   "name": "live_cnt4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62268,
   "name": "live_pulse_cnt_up",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62269,
   "name": "live_pulse_cnt_down",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62298,
   "name": "live_v2_release",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62333,
   "name": "live_v3_release",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62340,
   "name": "filter_live",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62348,
   "name": "filter_len_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62349,
   "name": "filter_len_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62350,
   "name": "filter_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62351,
   "name": "filter_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62353,
   "name": "filter_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62354,
   "name": "filter_cut_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62355,
   "name": "filter_cut_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62356,
   "name": "filter_now_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62357,
   "name": "filter_now_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62358,
   "name": "filter_cnt_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62359,
   "name": "filter_cnt_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62360,
   "name": "filter_cnt_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62361,
   "name": "note_lengths_m1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62362,
   "name": "note_lengths",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62393,
   "name": "freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62488,
   "name": "freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62583,
   "name": "start_tune",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 62591,
   "name": "b_F47F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62642,
   "name": "b_F4B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62643,
   "name": "tempo_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62653,
   "name": "silence",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 62655,
   "name": "b_F4BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62706,
   "name": "filter_restart",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 62710,
   "name": "b_F4F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62780,
   "name": "music_frame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 62786,
   "name": "b_F542",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62796,
   "name": "b_F54C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62807,
   "name": "b_F557",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62810,
   "name": "r_F55A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 62811,
   "name": "voice_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 62826,
   "name": "mus_next_1",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 62828,
   "name": "mus_next_a",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 62831,
   "name": "voice_read",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 62843,
   "name": "mus_dispatch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62844,
   "name": "command_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62846,
   "name": "b_F57E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62849,
   "name": "voice_note",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 62881,
   "name": "b_F5A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62947,
   "name": "b_F5E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62983,
   "name": "b_F607",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 62984,
   "name": "voice_note_src",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62987,
   "name": "voice_note_dst",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 63012,
   "name": "b_F624",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63015,
   "name": "b_F627",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63035,
   "name": "voice_duration",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 63049,
   "name": "b_F649",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63065,
   "name": "freq_mod_restart",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 63079,
   "name": "freq_mod_reload",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 63104,
   "name": "pulse_mod_restart",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 63117,
   "name": "pulse_mod_reload",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 63141,
   "name": "voice_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 63170,
   "name": "b_F6C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63198,
   "name": "b_F6DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63214,
   "name": "r_F6EE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 63215,
   "name": "b_F6EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63235,
   "name": "b_F703",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63244,
   "name": "b_F70C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63263,
   "name": "b_F71F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63300,
   "name": "b_F744",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63329,
   "name": "b_F761",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63344,
   "name": "b_F770",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63350,
   "name": "j_F776",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 63370,
   "name": "b_F78A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63422,
   "name": "b_F7BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63456,
   "name": "b_F7E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63482,
   "name": "r_F7FA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 63483,
   "name": "b_F7FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63508,
   "name": "b_F814",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63533,
   "name": "b_F82D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63558,
   "name": "b_F846",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63569,
   "name": "b_F851",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63580,
   "name": "j_F85C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 63584,
   "name": "b_F860",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63602,
   "name": "b_F872",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63617,
   "name": "b_F881",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63623,
   "name": "start_sfx",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 63634,
   "name": "b_F892",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63651,
   "name": "b_F8A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63703,
   "name": "b_F8D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63738,
   "name": "b_F8FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 63777,
   "name": "r_F921",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 63778,
   "name": "tune_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 63779,
   "name": "tune_table_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 63780,
   "name": "tune_table_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 63862,
   "name": "sfx_records",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64056,
   "name": "instruments",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64505,
   "name": "instrument_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64520,
   "name": "filter_blocks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64584,
   "name": "instruments_short",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64626,
   "name": "tune_streams",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64922,
   "name": "tune_streams_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65160,
   "name": "music_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65167,
   "name": "small_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 65328,
   "name": "level_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 65428,
   "name": "level_pattern",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 65530,
   "name": "vec_nmi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65534,
   "name": "vec_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65535,
   "name": "vec_irq_hi",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 0,
   "type": "line",
   "text": "The 6510's data direction register; never written by the game."
  },
  {
   "address": 1,
   "type": "line",
   "text": "The 6510's port: $35 (RAM with I/O) throughout, $30 for the moment unpack_layout reads under the chips; the raster handlers save and restore it."
  },
  {
   "address": 2,
   "type": "line",
   "text": "General pointer and scratch pair $02/$03: a screen or map address in most routines; the joystick bits being shifted out in the actor handlers ($02 alone)."
  },
  {
   "address": 3,
   "type": "line",
   "text": "High byte of the $02 pointer; also the column or level byte being unpacked in the item placer."
  },
  {
   "address": 4,
   "type": "line",
   "text": "Second scratch pointer $04/$05 (the other screen buffer, the map row being filled); in actor code the horizontal step of the move in progress, as a signed byte."
  },
  {
   "address": 5,
   "type": "line",
   "text": "High byte of the $04 pointer."
  },
  {
   "address": 6,
   "type": "line",
   "text": "Third scratch pointer $06/$07, usually colour RAM or the clean copy of the screen for the same cell as $02."
  },
  {
   "address": 7,
   "type": "line",
   "text": "High byte of the $06 pointer; the layout byte being shifted out bit by bit in the level drawer."
  },
  {
   "address": 8,
   "type": "line",
   "text": "Frame counter: the bottom raster interrupt increments it once a frame. Waits compare it with a remembered value, the main loop uses it to pace a pass to three frames, and its low bits time flashes."
  },
  {
   "address": 9,
   "type": "line",
   "text": "Scratch pointer $09/$0A: glyph addresses while the round number and the banner glyphs are built; the three bytes of an enemy record ($09-$0B) while a round's enemy list is parsed."
  },
  {
   "address": 10,
   "type": "line",
   "text": "High byte of the $09 pointer; row counter of the level drawer; an enemy record's second byte."
  },
  {
   "address": 11,
   "type": "line",
   "text": "Scratch pointer $0B/$0C (second glyph destination of the banner builder); an enemy record's third byte; saved Y of the air-current unpacker."
  },
  {
   "address": 12,
   "type": "line",
   "text": "High byte of the $0B pointer."
  },
  {
   "address": 13,
   "type": "line",
   "text": "Pointer to the string being printed by print_string ($0D/$0E). The bubble renderer reuses $0D as the screen row it is working on and $0E as the column."
  },
  {
   "address": 14,
   "type": "line",
   "text": "High byte of the string pointer; the bubble renderer's column."
  },
  {
   "address": 15,
   "type": "line",
   "text": "Colour that print_string writes into colour RAM for each character: set by any string byte below $10."
  },
  {
   "address": 16,
   "type": "line",
   "text": "Round number minus one: 0 on round 1, $63 on round 100. $FF while the title sequence runs and $64 once round 100 is won. Indexes every per-round table."
  },
  {
   "address": 17,
   "type": "line",
   "text": "Pointer $11/$12 into the collision map at $8500 for the actor being moved (set by actor_map_pointer: the cell up and to the left of the sprite); also a general counter and pointer in set-up code."
  },
  {
   "address": 18,
   "type": "line",
   "text": "High byte of the map pointer; the actor index kept across calls in the drop-in."
  },
  {
   "address": 19,
   "type": "line",
   "text": "Scratch pointer $13/$14: the unpacked layout rows at $8B00 while a round is drawn or its air currents filled in."
  },
  {
   "address": 20,
   "type": "line",
   "text": "High byte of the $13 pointer."
  },
  {
   "address": 21,
   "type": "line",
   "text": "A saved by irq_enter and restored before RTI."
  },
  {
   "address": 22,
   "type": "line",
   "text": "X saved by irq_enter."
  },
  {
   "address": 23,
   "type": "line",
   "text": "Y saved by irq_enter."
  },
  {
   "address": 24,
   "type": "line",
   "text": "Destination pointer $18/$19 for the second of the three glyphs of a row the bubble renderer is writing; source pointer of the tile copy in the round builder."
  },
  {
   "address": 25,
   "type": "line",
   "text": "High byte of the second glyph destination."
  },
  {
   "address": 26,
   "type": "line",
   "text": "Destination pointer $1A/$1B for the third glyph of the row; pattern-block pointer in the round builder."
  },
  {
   "address": 27,
   "type": "line",
   "text": "High byte of the third glyph destination."
  },
  {
   "address": 28,
   "type": "line",
   "text": "Value the bottom interrupt writes to $D022 (multicolour 1) for the playfield."
  },
  {
   "address": 29,
   "type": "line",
   "text": "The round's own multicolour 1, from the high nibble of the round's byte in level_colours; copied to mc1_now once the round has scrolled in, and written by the top interrupt while split_line is set."
  },
  {
   "address": 30,
   "type": "line",
   "text": "Value the bottom interrupt writes to $D023 (multicolour 2) for the playfield."
  },
  {
   "address": 31,
   "type": "line",
   "text": "The round's own multicolour 2, from the low nibble of the round's colour byte."
  },
  {
   "address": 32,
   "type": "line",
   "text": "Raster line for the top interrupt while the players float in their bubbles, in the opening story and in the scroll between rounds, when the screen is split and the bubble sprites are animated there; 0 on the title page and in play, which selects line $32 and the buffer flip."
  },
  {
   "address": 33,
   "type": "line",
   "text": "Set non-zero to end the round: by the timer after the last enemy is gone, by a completed EXTEND, by the dead boss being touched. The main loop then cleans up and builds the next round."
  },
  {
   "address": 34,
   "type": "line",
   "text": "Index of the actor (7 down to 0) that update_actors is working on, reloaded into X after calls that destroy it."
  },
  {
   "address": 35,
   "type": "line",
   "text": "Actor's X within its map cell, 0-7 (set by actor_map_pointer); also a scratch position byte in set-up code."
  },
  {
   "address": 36,
   "type": "line",
   "text": "Actor's Y within its map cell, 0-7; scratch elsewhere."
  },
  {
   "address": 37,
   "type": "line",
   "text": "Copy of the current actor's animation frame taken before its state handler runs, used to tell which way it faces."
  },
  {
   "address": 38,
   "type": "line",
   "text": "First byte of the random number generator's state (the value random returns)."
  },
  {
   "address": 39,
   "type": "line",
   "text": "Second byte of the random number generator's state."
  },
  {
   "address": 42,
   "type": "line",
   "text": "Seconds left before the next stage of \"hurry up\": 30 at the start of most rounds, then the delays before the Baron, then nine seconds between the last enemy and the next round."
  },
  {
   "address": 43,
   "type": "line",
   "text": "Counts 50 frames down to make a second; negative stops the round timer."
  },
  {
   "address": 44,
   "type": "line",
   "text": "The round's starting time in seconds (30, 20 from round 57, 10 on round 56), reloaded into round_timer after the Baron appears and by check_deaths when a player is lost after the timer has run down."
  },
  {
   "address": 45,
   "type": "line",
   "text": "0 before \"hurry up\", 1 once the banner has run and the enemies are angry, $FF once the round's enemies are all gone."
  },
  {
   "address": 46,
   "type": "line",
   "text": "Processor port $01 as the interrupt found it, restored on exit."
  },
  {
   "address": 47,
   "type": "line",
   "text": "High byte of the character set that belongs to the buffer being drawn, $40 or $48; flipped with back_screen_hi every pass."
  },
  {
   "address": 48,
   "type": "line",
   "text": "High byte of the screen buffer being drawn, $50 or $54; the other one is on display."
  },
  {
   "address": 49,
   "type": "line",
   "text": "Pointer $31/$32 to the glyph under the first cell of a bubble row; bonus-round counters ($31, $32 are the two players' pick-up counts)."
  },
  {
   "address": 50,
   "type": "line",
   "text": "High byte of the first source glyph pointer; player 2's bonus-round count."
  },
  {
   "address": 51,
   "type": "line",
   "text": "Pointer $33/$34 to the glyph under the second cell."
  },
  {
   "address": 52,
   "type": "line",
   "text": "High byte of the second source glyph pointer."
  },
  {
   "address": 53,
   "type": "line",
   "text": "Pointer $35/$36 to the glyph under the third cell."
  },
  {
   "address": 54,
   "type": "line",
   "text": "High byte of the third source glyph pointer."
  },
  {
   "address": 55,
   "type": "line",
   "text": "Non-zero while play is running: the bottom interrupt then copies the actors to the sprite registers every other frame and the top interrupt runs update_actors. Raised and lowered around anything that must not be animated."
  },
  {
   "address": 56,
   "type": "line",
   "text": "Pointer $38/$39 to the next free dynamic glyph in the back character set (starts at glyph $5E); general scratch pair elsewhere."
  },
  {
   "address": 57,
   "type": "line",
   "text": "High byte of the dynamic glyph pointer."
  },
  {
   "address": 58,
   "type": "line",
   "text": "Scratch $3A/$3B: saved pixel position while a blown bubble is tested, the first glyph destination of a row, colour pointers."
  },
  {
   "address": 59,
   "type": "line",
   "text": "High byte or second byte of the $3A scratch pair."
  },
  {
   "address": 60,
   "type": "line",
   "text": "Number of the next dynamic glyph to hand out (from $5E upwards each pass); loop counters elsewhere."
  },
  {
   "address": 61,
   "type": "line",
   "text": "Rows of the bubble shape still to merge, from the object's sub-row; scratch elsewhere."
  },
  {
   "address": 62,
   "type": "line",
   "text": "Scratch: an object index saved across calls."
  },
  {
   "address": 63,
   "type": "line",
   "text": "Index of the object being drawn, reloaded into X when its draw handler finishes."
  },
  {
   "address": 64,
   "type": "line",
   "text": "Most-used scratch pointer $40/$41: screen and map addresses, pixel positions under test."
  },
  {
   "address": 65,
   "type": "line",
   "text": "High byte of the $40 pointer."
  },
  {
   "address": 66,
   "type": "line",
   "text": "Scratch pointer $42/$43 (usually the clean copy or a second screen); print_score's leading-zero flag."
  },
  {
   "address": 67,
   "type": "line",
   "text": "High byte of the $42 pointer."
  },
  {
   "address": 68,
   "type": "line",
   "text": "Scratch pointer $44/$45 (colour RAM or a glyph)."
  },
  {
   "address": 69,
   "type": "line",
   "text": "High byte of the $44 pointer; the character offset print_two_digits adds to a digit."
  },
  {
   "address": 70,
   "type": "line",
   "text": "Enemies burst by player 1 this pass ($47 for player 2); becomes the food each leaves and the bonus at the end of the pass."
  },
  {
   "address": 71,
   "type": "line",
   "text": "Enemies burst by player 2 this pass."
  },
  {
   "address": 72,
   "type": "line",
   "text": "Last pass's chain count for player 1 ($49 for player 2): the bonus is paid when the count stops growing."
  },
  {
   "address": 73,
   "type": "line",
   "text": "Last pass's chain count for player 2."
  },
  {
   "address": 74,
   "type": "line",
   "text": "Enemies still alive in the round, counted when the round's list is read and down again as each is burst."
  },
  {
   "address": 75,
   "type": "line",
   "text": "Index of the player the current enemy chases: the one matching the enemy's number parity if alive, else the other."
  },
  {
   "address": 76,
   "type": "line",
   "text": "Random 0-3 chosen when a round with EXTEND bubbles is set up."
  },
  {
   "address": 77,
   "type": "line",
   "text": "Non-zero while a water stream is flowing: 4 or 5 give its direction along a floor, $FF means it is falling."
  },
  {
   "address": 78,
   "type": "line",
   "text": "Low byte of the screen offset of the points item ($4F for the special item)."
  },
  {
   "address": 79,
   "type": "line",
   "text": "Low byte of the screen offset of the special item."
  },
  {
   "address": 80,
   "type": "line",
   "text": "High byte (0-3) of the points item's screen offset ($51 for the special item)."
  },
  {
   "address": 81,
   "type": "line",
   "text": "High byte of the special item's screen offset."
  },
  {
   "address": 82,
   "type": "line",
   "text": "Points item of this round: bit 7 set while it waits to appear, $FF once taken, else its number."
  },
  {
   "address": 83,
   "type": "line",
   "text": "Special item of this round, the same way: its number indexes the effect table."
  },
  {
   "address": 84,
   "type": "line",
   "text": "EXTEND letters player 1 holds, one bit each ($55 for player 2); $3F is all six."
  },
  {
   "address": 85,
   "type": "line",
   "text": "EXTEND letters player 2 holds."
  },
  {
   "address": 86,
   "type": "line",
   "text": "The letters drawn on the panel for player 1; redrawn when extend_bits differs."
  },
  {
   "address": 87,
   "type": "line",
   "text": "The letters drawn on the panel for player 2."
  },
  {
   "address": 88,
   "type": "line",
   "text": "Rank of the next round's points item: set from the seconds left when a round is cleared, so a fast clear gives a better item; $FF picks 0-3 at random."
  },
  {
   "address": 89,
   "type": "line",
   "text": "Sprite X of the points item, for the pick-up test ($5A for the special item)."
  },
  {
   "address": 90,
   "type": "line",
   "text": "Sprite X of the special item."
  },
  {
   "address": 91,
   "type": "line",
   "text": "Sprite Y of the points item ($5C for the special item)."
  },
  {
   "address": 92,
   "type": "line",
   "text": "Sprite Y of the special item."
  },
  {
   "address": 93,
   "type": "line",
   "text": "Seconds until the points item appears ($5E for the special item); once it has, a blink timer."
  },
  {
   "address": 94,
   "type": "line",
   "text": "Seconds until the special item appears."
  },
  {
   "address": 95,
   "type": "line",
   "text": "Colour RAM value of the points item ($60 for the special item)."
  },
  {
   "address": 96,
   "type": "line",
   "text": "Colour RAM value of the special item; flashed between two colours for item $18."
  },
  {
   "address": 97,
   "type": "line",
   "text": "Per player ($61, $62): set by an effect so that jumps make a sound and score; cleared when the player loses a life."
  },
  {
   "address": 99,
   "type": "line",
   "text": "Per player ($63, $64): set by an effect so that every step sideways scores."
  },
  {
   "address": 101,
   "type": "line",
   "text": "Per player ($65, $66): set by an effect so that every bubble blown scores."
  },
  {
   "address": 103,
   "type": "line",
   "text": "Passes for which the enemies stand still after the clock is taken; the playfield colours are inverted meanwhile."
  },
  {
   "address": 104,
   "type": "line",
   "text": "Item number of the food that every leftover bubble turns into when the round is cleared: chosen at the start of a food round, or set with the giant food by one of seven special items (the four canes and the three chests, which share five routines); 0 for none."
  },
  {
   "address": 105,
   "type": "line",
   "text": "Score code paid for the giant food."
  },
  {
   "address": 106,
   "type": "line",
   "text": "Which of the five giant foods (0-4), $FF for none: picks its sprite data."
  },
  {
   "address": 107,
   "type": "line",
   "text": "Thirteen characters copied at start-up from start-up data, minus $20: the ten-character \"TOP\" score line and three digits used by the panel."
  },
  {
   "address": 117,
   "type": "line",
   "text": "Three characters within top_text that the title prints as a player's round when it is past 99."
  },
  {
   "address": 120,
   "type": "line",
   "text": "Seven bytes $78-$7E staged for a voice's SID registers: frequency, pulse width, control, attack/decay, sustain/release; $78/$79 also a pointer while an instrument is loaded."
  },
  {
   "address": 121,
   "type": "line",
   "text": "Frequency high byte being staged; high byte of the instrument pointer."
  },
  {
   "address": 122,
   "type": "line",
   "text": "Pulse width or frequency low byte being worked on by the modulators."
  },
  {
   "address": 123,
   "type": "line",
   "text": "Pulse width or frequency high byte being worked on."
  },
  {
   "address": 124,
   "type": "line",
   "text": "Control byte being staged ($08, the test bit, to restart the voice)."
  },
  {
   "address": 125,
   "type": "line",
   "text": "Attack/decay being staged."
  },
  {
   "address": 126,
   "type": "line",
   "text": "Sustain/release being staged."
  },
  {
   "address": 127,
   "type": "line",
   "text": "Voice number saved while X is used as a loop counter."
  },
  {
   "address": 128,
   "type": "line",
   "text": "Scratch pair $80/$81 in the sound driver: saved X, arpeggio table pointer."
  },
  {
   "address": 129,
   "type": "line",
   "text": "High byte of the arpeggio table pointer."
  },
  {
   "address": 130,
   "type": "line",
   "text": "Per voice ($82-$84): index of the top of that voice's return stack, starting at 0, $0C and $18."
  },
  {
   "address": 133,
   "type": "line",
   "text": "Pointer $85/$86 to the music data of the voice being played."
  },
  {
   "address": 134,
   "type": "line",
   "text": "High byte of the music data pointer."
  },
  {
   "address": 135,
   "type": "line",
   "text": "Per voice ($87-$89): semitones added to every note."
  },
  {
   "address": 138,
   "type": "line",
   "text": "Per voice ($8A-$8C): low byte of where the voice's data continues at its next event."
  },
  {
   "address": 141,
   "type": "line",
   "text": "Per voice ($8D-$8F): high byte of where the voice's data continues."
  },
  {
   "address": 144,
   "type": "line",
   "text": "The note or rest byte just read."
  },
  {
   "address": 145,
   "type": "line",
   "text": "Voice the filter follows, $FF for none."
  },
  {
   "address": 146,
   "type": "line",
   "text": "Per voice ($92-$94): current pulse width, low byte, swept every frame."
  },
  {
   "address": 149,
   "type": "line",
   "text": "Per voice ($95-$97): current pulse width, high byte."
  },
  {
   "address": 152,
   "type": "line",
   "text": "Per voice ($98-$9A): current frequency, low byte, moved by vibrato and slides."
  },
  {
   "address": 155,
   "type": "line",
   "text": "Per voice ($9B-$9D): current frequency, high byte."
  },
  {
   "address": 158,
   "type": "line",
   "text": "Pointer $9E/$9F to the sound effect record being started; saved Y while a tune is started."
  },
  {
   "address": 159,
   "type": "line",
   "text": "High byte of the sound effect pointer."
  },
  {
   "address": 160,
   "type": "line",
   "text": "Per voice ($A0-$A2): frames until the voice's next event."
  },
  {
   "address": 163,
   "type": "line",
   "text": "Scratch for the filter cutoff shift."
  },
  {
   "address": 164,
   "type": "line",
   "text": "Number of voices that still have music data: 0 when a tune has ended, which several waits poll."
  },
  {
   "address": 169,
   "type": "line",
   "text": "Read only by a stray instruction byte: the operand of an immediate load hidden behind a BIT (the skip idiom at $23C7), not a variable."
  },
  {
   "address": 171,
   "type": "line",
   "text": "Continues left: 8 in a one-player game and 7 with two players at the start (the panel shows one more), counted down each time a dead player rejoins."
  },
  {
   "address": 172,
   "type": "line",
   "text": "Per player ($AC, $AD): index of the next score at which an extra life is given."
  },
  {
   "address": 173,
   "type": "line",
   "text": "Player 2's extra-life step."
  },
  {
   "address": 174,
   "type": "line",
   "text": "Per player ($AE, $AF): offset of the score byte compared with the extra-life table, 1 for player 1 and 4 for player 2, moved one byte up after the first award."
  },
  {
   "address": 175,
   "type": "line",
   "text": "Player 2's score comparison offset."
  },
  {
   "address": 176,
   "type": "line",
   "text": "Sound effect the main loop should start: 1-5 are effects, set by pick-ups, jumps and kills."
  },
  {
   "address": 177,
   "type": "line",
   "text": "Set when a player jumps, so that the jump effect is played."
  },
  {
   "address": 178,
   "type": "line",
   "text": "State of each actor, players at $B2 and $B3, enemies at $B4-$B9: 0 none, 1 a player in play, 2-9 the eight kinds of enemy, higher values the special states the handler table at $1E3C lists."
  },
  {
   "address": 179,
   "type": "line",
   "text": "Player 2's state."
  },
  {
   "address": 180,
   "type": "line",
   "text": "States of the six enemies (also reached as actor_state+2)."
  },
  {
   "address": 186,
   "type": "line",
   "text": "Sprite X of each actor, players then enemies."
  },
  {
   "address": 187,
   "type": "line",
   "text": "Player 2's X."
  },
  {
   "address": 188,
   "type": "line",
   "text": "Enemy X positions; on round 100 $BC is the boss's X."
  },
  {
   "address": 189,
   "type": "line",
   "text": "Enemy 1's X; on round 100 the boss's Y."
  },
  {
   "address": 190,
   "type": "line",
   "text": "Enemy 2's X; on round 100 the boss's frame offset (0 or $18), 9 while it is beaten."
  },
  {
   "address": 191,
   "type": "line",
   "text": "Enemy 3's X; on round 100 the boss's direction bits (bit 0 right, bit 3 down)."
  },
  {
   "address": 192,
   "type": "line",
   "text": "Enemy 4's X; on round 100 the colour of the boss's six sprites."
  },
  {
   "address": 194,
   "type": "line",
   "text": "Sprite Y of each actor, players then enemies."
  },
  {
   "address": 195,
   "type": "line",
   "text": "Player 2's Y."
  },
  {
   "address": 196,
   "type": "line",
   "text": "Enemy Y positions."
  },
  {
   "address": 198,
   "type": "line",
   "text": "Enemy 2's Y."
  },
  {
   "address": 199,
   "type": "line",
   "text": "Enemy 3's Y."
  },
  {
   "address": 202,
   "type": "line",
   "text": "Type of each of the eighteen objects (bubbles and everything else drawn in characters), an even number that indexes the draw handlers at $040C; $FF for a free slot."
  },
  {
   "address": 203,
   "type": "line",
   "text": "Type of object 1 (objects 0 and 1 are also used for the two Barons and the giant falling block)."
  },
  {
   "address": 204,
   "type": "line",
   "text": "Types of objects 2-17, the sixteen slots enemies' shots are allocated from."
  },
  {
   "address": 220,
   "type": "line",
   "text": "Map column of each object."
  },
  {
   "address": 222,
   "type": "line",
   "text": "Columns of objects 2-17."
  },
  {
   "address": 238,
   "type": "line",
   "text": "Map row of each object."
  },
  {
   "address": 240,
   "type": "line",
   "text": "Rows of objects 2-17."
  },
  {
   "address": 256,
   "type": "line",
   "text": "Bottom of the stack page, used as the frame counter of wait_frames. Also the as-loaded operand of a load in hurry_up whose high byte is patched before it runs."
  },
  {
   "address": 263,
   "type": "line",
   "text": "Base of the 32-byte work area ($0108-$0127) where build_letter_bubbles keeps the background glyphs; indexed from 1."
  },
  {
   "address": 264,
   "type": "line",
   "text": "Thirty-two bytes of background glyphs (characters $11-$14) copied from $4088 while the letter blocks are built."
  },
  {
   "address": 271,
   "type": "line",
   "text": "Second eight bytes of the letter work area (indexed from 1)."
  },
  {
   "address": 279,
   "type": "line",
   "text": "Third eight bytes of the letter work area (indexed from 1)."
  },
  {
   "address": 287,
   "type": "line",
   "text": "Fourth eight bytes of the letter work area (indexed from 1)."
  },
  {
   "address": 331,
   "type": "line",
   "text": "Per object (18): the column it was drawn at this pass."
  },
  {
   "address": 349,
   "type": "line",
   "text": "Per object: the column it was drawn at on the previous pass, where repair_back_buffer restores the background in the buffer that still shows it. Cleared with the 73 bytes from here at the start of a round."
  },
  {
   "address": 361,
   "type": "line",
   "text": "Not a variable: the operand of a BIT skip at $F0AD."
  },
  {
   "address": 367,
   "type": "line",
   "text": "Per object: the row it was drawn at this pass."
  },
  {
   "address": 385,
   "type": "line",
   "text": "Per object: the row it was drawn at on the previous pass."
  },
  {
   "address": 403,
   "type": "line",
   "text": "Per object: who or which way. For a bubble, the player who blew or burst it (0 or 1) with bit 7 set while it travels left; for a shot, its direction."
  },
  {
   "address": 405,
   "type": "line",
   "text": "The same array for objects 2-17, as the enemies' shot code indexes it."
  },
  {
   "address": 425,
   "type": "line",
   "text": "Not a variable: the operand of a BIT skip at $732D."
  },
  {
   "address": 512,
   "type": "line",
   "text": "Low bytes of n \u00d7 8 for n = 0-255, built by start: the offset of glyph n in a character set. Also read as \"sprite register offset\" (0, 8) and as a length-to-pixels table."
  },
  {
   "address": 768,
   "type": "line",
   "text": "High bytes of n \u00d7 8 (0-7)."
  },
  {
   "address": 937,
   "type": "line",
   "text": "Not a variable: the operand of a BIT skip."
  },
  {
   "address": 1024,
   "type": "line",
   "text": "Player 1's score, three bytes of packed decimal, most significant first; the panel prints the six digits and a fixed 0 after them. The cracker's menu put these 1,024 bytes ($0400-$07FF) here from $4800 just before the game started."
  },
  {
   "address": 1027,
   "type": "line",
   "text": "Player 2's score, three packed-decimal bytes."
  },
  {
   "address": 1030,
   "type": "line",
   "text": "The top score, three packed-decimal bytes, replaced whenever a player's score passes it. Starts at 00 20 00, shown as 20000."
  },
  {
   "address": 1033,
   "type": "line",
   "text": "Round (as level) each player was last in, one byte each; shown beside the scores on the title."
  },
  {
   "address": 1034,
   "type": "line",
   "text": "Player 2's round reached."
  },
  {
   "address": 1035,
   "type": "line",
   "text": "Round of whoever holds the top score; starts at $13, shown as 20."
  },
  {
   "address": 1036,
   "type": "line",
   "text": "Thirty-nine addresses, one per even object type 0-$4C: the routine that draws that kind of object. draw_objects jumps through this table by patching the low byte of its JMP ($0422) operand with type + $0C."
  },
  {
   "address": 1114,
   "type": "line",
   "text": "Lives of each player, one byte each: 3 at the start and after a continue (set to 4, then one is taken at once); negative when the player is out."
  },
  {
   "address": 1115,
   "type": "line",
   "text": "Player 2's lives."
  },
  {
   "address": 1116,
   "type": "line",
   "text": "Once a pass: for each player whose death animation has ended (state $0F), go back to the ordinary round tune $0B if a later tune is the current one (number $20 or more, such as the faster round tune, hurry up or the Barons, but not the secret room's $4A), reset the power-ups and clear the player's bit in doors_possible (the letters are kept), take a life and either put the player back at the starting place flashing (the state in invincible_state, normally $10, with timer $4A) or, with no lives left, record the round reached and print GAME OVER. Unless the round timer is stopped ($2B negative: the Barons are out, the clock or the boss) or the round is already cleared (hurry_stage $FF), it also puts hurry_stage back to 0 and reloads the round timer from round_time_base; and while two or more enemies are left it calms the angry ones by calling enemies_angry with its operand changed from $FF to 0 and back. If anybody died it then redraws the lives, and in every case goes on to the check for a player rejoining."
  },
  {
   "address": 1132,
   "type": "line",
   "text": "Draw both players' remaining lives as dots on the panel, up to seven each, in both screen buffers, then run the rejoin check. The rejoin check runs twice, once at the end of each row, since draw_lives_row ends in the JMP at $049D."
  },
  {
   "address": 1147,
   "type": "line",
   "text": "Draw one player's lives: A and Y give the screen address of the row, X the player. Seven cells in both screen buffers, a dot (character $1D) for each life counted from the right and blanks for the rest. A player who is out (lives negative) is skipped and the row left as it is; draw_panel blanks it by lending such a player zero lives."
  },
  {
   "address": 1184,
   "type": "line",
   "text": "The branch of check_deaths for one dead player; reached only from there."
  },
  {
   "address": 1322,
   "type": "line",
   "text": "For each player who is out: if fire is pressed on their joystick and a credit is left, give four lives, state $0F (so check_deaths brings them in on its next pass), clear the score, take a credit and blank the GAME OVER text. With no credits left it patches check_deaths's jump at $049D to an RTS so nobody can rejoin."
  },
  {
   "address": 1453,
   "type": "line",
   "text": "Start tune Y (a multiple of seven plus four, an offset into tune_table): wait for the frame, remember the number in current_tune, set up the three voices and run one step of the music driver."
  },
  {
   "address": 1465,
   "type": "line",
   "text": "Twelve packed-decimal bytes compared with a player's score to award extra lives: 30, then 01, 04, 10, 20, 30 ... The first step compares the middle score byte with $30 (30,000 points); later steps compare the top byte, giving 100,000, 400,000, 1,000,000 and then every million."
  },
  {
   "address": 1477,
   "type": "line",
   "text": "Reset everything that lasts one round: the two players' sprite colours (5 for player 1, 3 for player 2) and player 2's frame, the tune (round tune $0B unless the current tune's number is below $12, that is the opening tune or the round tune itself, or is the secret room's $4A; on round 100 always tune $12), the actors' flags (the players' fast flags are kept), all eighteen objects, the fire runs and the water stream, the stack-page object arrays, the timers and flags of the round and the food-round schedule; on round 100 build the boss's mirrored sprites, otherwise clear the item sprite buffers. The LDY #$12 / BIT at $05E2 runs into an undocumented three-byte no-op ($5C) and still reaches the JSR with Y = $12."
  },
  {
   "address": 1691,
   "type": "line",
   "text": "Zero the three 128-byte sprite buffers at $7D00, $7D80 and $7E00 (sprites $F4-$F9), used for food sprites and the giant bonus."
  },
  {
   "address": 1707,
   "type": "line",
   "text": "Raster interrupt at line 251, below the playfield. Counts the frame; every 50 frames takes a second off the round timer, the round banner's timer (hurry_lamp_on) and the item delays; rewrites three JMP/BIT switches in irq_top; every other frame copies the actors to the sprite registers and, while a water stream is on, steps it (step_water); runs the music driver; on the boss's round positions its six sprites; writes the playfield's two multicolours and hands over to irq_top at line $32 or split_line."
  },
  {
   "address": 1815,
   "type": "line",
   "text": "Common exit of the raster handlers: set the next raster line from A and the next handler from X and Y, acknowledge the interrupt, restore the port and the registers and return. The RTI at $072D is also the NMI handler."
  },
  {
   "address": 1838,
   "type": "line",
   "text": "Raster interrupt above the playfield. In play it shows the buffer that has just been drawn by writing $D018 ($40 for the screen at $5000 with characters at $4000, $52 for $5400 with $4800), then, by switches the bottom handler sets: chains a third handler for the bottom row of the boss, and enables interrupts and runs update_actors. With split_line set it writes the round's own multicolours instead and every eighth frame moves the shape of each of the eight sprites four on or four back (the bubbles the players float in during the opening story and between rounds)."
  },
  {
   "address": 1896,
   "type": "line",
   "text": "JMP patched to BIT by irq_bottom when the boss is on screen: the code after it then sets a third raster interrupt 30 lines below the boss's top."
  },
  {
   "address": 1916,
   "type": "line",
   "text": "JMP patched to BIT by irq_bottom on every other frame of play: the code after it acknowledges the interrupt, enables interrupts and calls update_actors, so the actors' logic runs inside the raster interrupt."
  },
  {
   "address": 1926,
   "type": "line",
   "text": "JMP patched to BIT with the boss switch: it then goes straight to the exit at $0720 without resetting the handler chain."
  },
  {
   "address": 1941,
   "type": "line",
   "text": "Third raster handler, used only while the boss is on screen: moves sprites 2-4 down 42 lines and gives them the next three shapes (the seventh to ninth of the frame), so the three sprites that drew the boss's top row draw its third and bottom row, then hands back to irq_bottom."
  },
  {
   "address": 1961,
   "type": "line",
   "text": "Still irq_boss_lower. The label is here only because the bytes of a BIT skip at $7FA6 read as this address."
  },
  {
   "address": 2017,
   "type": "line",
   "text": "Called from irq_bottom while boss_active is set: put sprites 2-7 in two rows of three at boss X and Y with the six shapes from $D9 + frame, in the boss's colour (irq_boss_lower adds the third row). After round 100 is won ($10 = $64) it walks the figure left and right a pixel a frame, turning (and changing to the mirrored frames) at X $23 on the left and where X wraps past $FF on the right; on the title page ($10 = $FF) it instead flips the ten characters of the title's top line between two texts every 32 frames."
  },
  {
   "address": 2181,
   "type": "line",
   "text": "Clear the screen, set the star glyphs ($FE and $FF) from star_glyphs, black out the colours, and scatter 200 stars at random cells anywhere on the 40 by 25 screen; then write 9 to all of colour RAM, which turns multicolour on for every cell so the stars show in the two shared colours set here, blue (6) for glyph $FE and cyan (3) for glyph $FF."
  },
  {
   "address": 2276,
   "type": "line",
   "text": "One whole game. Shows the story text over the stars with the players floating down in their bubbles, sets up scores, lives (three), credits (eight, or seven with two players) and power-ups, then for each round: builds it, scrolls it in, drops the enemies in, and runs the pass loop at $0A07 until both players are out or the round is done; counts the round up, and after round 100 goes to the ending."
  },
  {
   "address": 2567,
   "type": "line",
   "text": "One pass of play, three frames long: flip and repair the screen buffers (which first waits for a frame), read pause and quit, award extra lives, run the timers, print the scores, move the fires, handle deaths, spawn special bubbles (the JSR at $0A38 is patched to the boss's hit test on round 100), draw every object, push and burst bubbles, age them, test the items, check EXTEND, then wait for the frame counter to pass the two values patched into the compares at $0A5C and $0A60. Measured in the running game: 100 passes in 300 frames."
  },
  {
   "address": 2616,
   "type": "line",
   "text": "JSR whose target is patched: spawn_special_bubble in ordinary rounds, boss_hit_test on round 100; its opcode is set to JSR ($20) when a round with special bubbles or the boss starts."
  },
  {
   "address": 2617,
   "type": "line",
   "text": "Operand of the patched JSR in the pass loop: spawn_special_bubble or boss_hit_test."
  },
  {
   "address": 2618,
   "type": "line",
   "text": "High byte of the pass hook's target."
  },
  {
   "address": 2653,
   "type": "line",
   "text": "Operand of the pass loop's first compare: the frame number at the start of the pass."
  },
  {
   "address": 2657,
   "type": "line",
   "text": "Operand of the second compare: the frame after it; the pass ends when the frame counter is neither."
  },
  {
   "address": 2713,
   "type": "line",
   "text": "Both players are out: stop the actors, print the scores, play tune $20 and wait 150 frames before returning to the title."
  },
  {
   "address": 2729,
   "type": "line",
   "text": "Not a variable: the byte after a BIT skip, read only as an operand."
  },
  {
   "address": 2731,
   "type": "line",
   "text": "A player in state 1 (animation frames 0-7) pushes any bubble below type $24 that is no longer being blown and is within reach in front of them, special and letter bubbles included, whether the player is walking, standing or in the air: a few pixels along per pass, sub-column and column updated, stopped by a wall in the collision map. The player's animation frame (below 4, or 4-7) tells which way they face."
  },
  {
   "address": 3053,
   "type": "line",
   "text": "On every 23rd pass (its countdown is reloaded with 22), with enemies alive and at random (about five times in six), release a bubble from one of four vents chosen at random: the two at the top and the two at the bottom of the playfield, each only if the air current in its map cell points into the playfield. Nothing is released while ten water, fire or thunder bubbles exist (types 6-$0A; letters and plain bubbles are not counted) or no object slot is free. The type comes from special_bubble_kind (reached through the JMP at $0C9C) or, when that JMP is patched to a BIT, from the code behind it, which picks an EXTEND letter."
  },
  {
   "address": 3054,
   "type": "line",
   "text": "Operand of spawn_special_bubble's first LDA: its own 22-pass countdown."
  },
  {
   "address": 3228,
   "type": "line",
   "text": "JMP $0CC1 that the round set-up turns into a BIT, at random in half of the rounds that have special bubbles, so that the letter-bubble code at $0C9F runs instead. That code counts down letter_pick and, when it passes zero, restores the JMP; while it lasts the bubble is one of the five letter types (E, X, T, N, D), chosen from the last letter released plus a random step."
  },
  {
   "address": 3241,
   "type": "line",
   "text": "Second half of the letter-bubble code reached when spawn_kind_switch is a BIT: adds a random number to the last letter and keeps the low three bits, a result of 5-7 being cut to 1-3 with AND 3, so the letter is 0-4; makes the bubble type $0C + 2 \u00d7 letter with colour $0D."
  },
  {
   "address": 3265,
   "type": "line",
   "text": "Choose the new bubble from the bits the round allows (the immediate at $0CC2, patched from the round's flags, ANDed with a random number): bit 0 gives a water bubble (type 6, cyan), bit 1 a fire bubble (8, red), bit 2 a thunder bubble ($0A), otherwise a plain bubble (4). Gives it lifetime $82 and its colour."
  },
  {
   "address": 3266,
   "type": "line",
   "text": "Operand of special_bubble_kind's AND: which of water, fire and thunder this round's vents may release, from bits 1-3 of the round's item_pos_c byte."
  },
  {
   "address": 3314,
   "type": "line",
   "text": "For each object below type $24 (a bubble): if it is still being blown, step it; else if a live player is within 16 pixels, mark it burst (type $34) with the player and its old type remembered; else let it drift: usually by the air current in the collision map cell under it (0 up, 1 right, 2 down, 3 left); when it overlaps another bubble, more often than not a step along an axis chosen at random, kept inside the playfield near its edges. A bubble holding an enemy that leaves the top or the bottom wraps to the other side; any other bubble that does so is ended. Types $24-$32 go through special_object_table, $44 to the fireball and $4C to the falling food."
  },
  {
   "address": 3402,
   "type": "line",
   "text": "Loop tail of move_bubbles, which the special handlers jump back to."
  },
  {
   "address": 3429,
   "type": "line",
   "text": "JMP whose operand move_bubbles patches from special_object_table for object types $24-$32."
  },
  {
   "address": 3430,
   "type": "line",
   "text": "Operand of special_dispatch."
  },
  {
   "address": 3431,
   "type": "line",
   "text": "High byte of special_dispatch's target."
  },
  {
   "address": 3432,
   "type": "line",
   "text": "Eight addresses for object types $24, $26 ... $32: the falling flame, the thunder shot, an enemy's fireball, the boulder, the returning bottle, the two Barons and the falling bolt."
  },
  {
   "address": 3433,
   "type": "line",
   "text": "The special object table read one byte on, for the high bytes."
  },
  {
   "address": 3448,
   "type": "line",
   "text": "Still move_bubbles: object types $44 (the fireball) and $4C (falling food) are sent to their handlers; every other type is left alone."
  },
  {
   "address": 3497,
   "type": "line",
   "text": "Not a variable: the operand of a BIT skip in draw_layout."
  },
  {
   "address": 3527,
   "type": "line",
   "text": "Operand in move_bubbles: of 256, how often two overlapping bubbles part vertically rather than sideways. special_round_setup writes it at the start of every round with an STA, so it holds the round index (0 on round 1 up to $63 on round 100), or 2 on round 73; the values $1E and $E6 (rounds 35 and 97) that the routine loads into Y are never stored. The $1E in the image as loaded lasts only until the first round."
  },
  {
   "address": 3781,
   "type": "line",
   "text": "Object type $4C, food that leftover bubbles turn into when a food round is cleared: falls half a cell a pass until it lands on a platform or leaves the bottom; a player within 16 pixels takes it for 700 points."
  },
  {
   "address": 3912,
   "type": "line",
   "text": "A bubble still travelling from the player's mouth: step it once, or twice a pass while its owner has the fast-bubble power."
  },
  {
   "address": 3937,
   "type": "line",
   "text": "One step of a blown bubble: count its travel down, pick its growth stage from bubble_growth, move it 8 pixels in the owner's direction, catch any enemy it overlaps, and stop it at a wall, when its travel runs out, or when it has an enemy, turning it into a floating bubble. With the JMP at $0F73 patched (round 100) the code at $0F76 makes lightning bubbles instead."
  },
  {
   "address": 3955,
   "type": "line",
   "text": "JMP $0F91 whose opcode boss_round_setup overwrites on round 100 (through the cracker's stub at $3FDA) with $BD, making it a harmless LDA $0F91,X, so that the code at $0F76 runs and a marked bubble becomes a thunder bubble as soon as it has grown; play_game puts the JMP ($4C) back at the start of a game."
  },
  {
   "address": 4187,
   "type": "line",
   "text": "Test object X against the six enemies: one in an ordinary state (2-9), already freed ($0A) or frozen ($16, $17), within 16 pixels, is taken into the bubble. The object becomes type $18 + 2 \u00d7 enemy number, remembers the enemy's kind and takes the frame that kind shows inside a bubble (kind_bubble_frame_m2), and the enemy's own slot is emptied."
  },
  {
   "address": 4307,
   "type": "line",
   "text": "Object type $44, the fireball a player breathes with the fire power: toggle its animation phase, then fly as a thunder shot."
  },
  {
   "address": 4310,
   "type": "line",
   "text": "Object type $26, the shot from a burst thunder bubble (and the boss round's weapon): flies 8 pixels a pass in its direction, kills every enemy it reaches (each is put back in its slot and killed, with a sound), and ends at the playfield's edge."
  },
  {
   "address": 4395,
   "type": "line",
   "text": "Toggle bit 0 of an object's sub-column, used as a two-step animation phase by shots."
  },
  {
   "address": 4404,
   "type": "line",
   "text": "Round 100's replacement for the special-bubble spawner. Every thunder shot (type $26) inside the boss's box, from 8 pixels left of and above the boss's corner to 64 pixels right of it and 56 below, is used up and takes one from boss_hits (50 to start); below zero the boss turns to its beaten frame (9) for $82 passes with its sprites blinking at the end; if nobody touches it in that time it comes back angry with 40 hits. Touching it in the beaten frame ends the round (boss_move)."
  },
  {
   "address": 4511,
   "type": "line",
   "text": "Operand: the boss's frame before it was beaten, put back when it recovers."
  },
  {
   "address": 4535,
   "type": "line",
   "text": "Object type $24, the flame released by a burst fire bubble: falls half a cell a pass. When the cell below is solid it stops and starts a fire run in a free slot: the run's row is the flame's, and it spreads left and right by random lengths of up to 16 cells, each side ending early at a wall or where the floor stops. Leaving the bottom of the playfield ends it."
  },
  {
   "address": 4608,
   "type": "line",
   "text": "Still fire_drop: the part that measures how far the fire run spreads each way. The label is here only because a store in hurry_up carries $1200 as its as-loaded operand; its high byte is patched before it runs."
  },
  {
   "address": 4700,
   "type": "line",
   "text": "Operand: the free fire-run slot found by fire_drop, loaded back into Y to fill it in."
  },
  {
   "address": 4721,
   "type": "line",
   "text": "Shared exit of the special object handlers: back to the move_bubbles loop."
  },
  {
   "address": 4724,
   "type": "line",
   "text": "Object type $2A, the boulder of enemy kind 8: moves one column every second pass in its direction, kills a player it touches, and bursts at a wall."
  },
  {
   "address": 4742,
   "type": "line",
   "text": "One step of a horizontal shot: stop (type $3A, burst) if the collision map shows a wall in the cell just ahead of it in its lower row (the column before its left cell, or the column after its two cells), else move a column and kill any player it touches. The burst type written at $12AC is patched by callers that want another ending."
  },
  {
   "address": 4780,
   "type": "line",
   "text": "Operand of shot_step: the type a shot becomes at a wall, $3A (burst) or, patched by enemy_fireball, $38 (gone)."
  },
  {
   "address": 4788,
   "type": "line",
   "text": "Object type $2C, the bottle thrown by enemy kind 7: flies like the other horizontal shots but, at a wall, turns round instead of ending; when it is back at the column it started from it tells its thrower it has returned (timer $64, shot flag cleared) and vanishes."
  },
  {
   "address": 4857,
   "type": "line",
   "text": "Object type $32, the bolt that enemy kind 9 drops: falls a row a pass, kills a player it touches, and ends at the bottom row, freeing its owner to drop another."
  },
  {
   "address": 4889,
   "type": "line",
   "text": "The five fire runs: each is a row of flame characters of a given length that lasts while its timer ($A770) counts down every fourth pass, changing glyph as it burns out (fire_glyphs), then restores the background. While it burns at full strength it kills every enemy standing in it on the row above (kill_enemy) and takes one off the rank kill_enemy gave, so each leaves the food of rank 8."
  },
  {
   "address": 5054,
   "type": "line",
   "text": "Count down each object's lifetime. At zero: a plain bubble bursts by itself (type $3A); a bubble with an enemy lets it out angry, in the state enemy_release_state, with its frame set to 0; an enemy's readied shot (type $42) is freed. In the last 16 passes a plain bubble alternates with the blink type $48 and a carried enemy's sprite flickers. Then it counts the slots that are free or ending (type $34 or more); if fewer than two are, the table is nearly full and one plain bubble is burst to make room. Two plain bubbles are burst to make room, not one: the JSR to burst_one_plain at $145C and then the fall into it at $145F."
  },
  {
   "address": 5215,
   "type": "line",
   "text": "Turn the highest-numbered plain bubble (type 4) into a burst (type $3A)."
  },
  {
   "address": 5235,
   "type": "line",
   "text": "Object types $2E and $30, the two Barons von Blubba: object slot 0 hunts player 1 and slot 1 player 2. Ends when its player is dying. Kills either player it touches and then ends (through touch_kills with its two compares shifted to $18 and $0E, so that a player carried by water or invincible is killed too). Otherwise it moves in bursts: after a pause of 30 passes it runs one cell a pass along one axis towards its player's cell until the burst's count is used up or it is level with the player; X bursts and Y bursts alternate, and each burst is one cell longer than the last, up to 15."
  },
  {
   "address": 5419,
   "type": "line",
   "text": "Kill a player in the ordinary state within 16 pixels of object X: the two compares pass state $19 and states below $0D, which for a player means state 1, so a player being carried by water, reappearing or made invincible is spared. Sets the player's state to $0E (dying) and returns carry set. The STA at $156E is one of the three places the cracker's invincibility option turns into a load."
  },
  {
   "address": 5445,
   "type": "line",
   "text": "Operand of touch_kills's first compare, $19; baron_move shifts it to $18 for its own test and back, so a Baron also kills a player in state $18, the invincibility of the heart."
  },
  {
   "address": 5449,
   "type": "line",
   "text": "Operand of touch_kills's second compare, $0D; shifted to $0E by baron_move and back, so a Baron also kills a player being carried by water."
  },
  {
   "address": 5496,
   "type": "line",
   "text": "Once a pass. When an item's delay, which irq_bottom counts down in seconds, has run out: an item still waiting appears and is given 12 seconds; one that is on show (or has just been taken) is removed and the background under it restored. Runs the clock's freeze. When the round timer reaches zero: first the \"hurry up\" banner and angry enemies (hurry_stage 1, ten more seconds); then the Barons; and when the last enemy is gone (hurry_stage $FF), puts the players back in state 1 and sets round_done."
  },
  {
   "address": 5665,
   "type": "line",
   "text": "The timer ran out a second time: play tune $43, burst what the first two object slots held, place a Baron for each player at a random one of the four corners and draw it, wait for the tune, start tune $27 (the round tune a step faster) and reload the round timer with hurry_stage back at 0; the timer stays stopped ($2B = $FF) until a Baron has gone."
  },
  {
   "address": 5780,
   "type": "line",
   "text": "Runs while the round timer counts: once the round banner's two seconds are up (hurry_lamp_on, which only round_banner sets, has reached zero) it restores the banner's cells, nine in row 10 and nine in row 12 (the ROUND and READY lines), from the clean screen copy, and on round 100 sets the boss up; when no enemy is left it starts the end of the round, and when exactly one is left it falls into enemies_angry on every pass, so the last enemy is always angry."
  },
  {
   "address": 5860,
   "type": "line",
   "text": "Mark every enemy that is in an ordinary state angry: $FF in its fast flag, so its handler gets a second call on every second run of the actor loop. The value at $16EF is patched to 0 and back by check_deaths to calm them instead."
  },
  {
   "address": 5871,
   "type": "line",
   "text": "Operand of enemies_angry: $FF, or 0 when check_deaths calms the enemies after a player dies."
  },
  {
   "address": 5879,
   "type": "line",
   "text": "The last enemy has gone: stop the sky flash, cancel the special item if it has not appeared or make it time out if it has, pick the next round's points-item rank from the seconds left (plus 8), or a random 0-3 once the Barons have appeared, turn every object except the giant falling block ($46), a player's fireball ($44) and ended ones ($4A) into a pop ($3A), or, with a giant item pending, the plain bubbles and those already ending or popping ($38-$40) into falling food in that item's colour, and give the players nine seconds to collect before the next round. With a giant score pending it clears the enemy slots and starts the giant food (state $15 in the first one); with a giant item pending it also builds its sprites."
  },
  {
   "address": 6003,
   "type": "line",
   "text": "The ending's string: CONGRATULATIONS, YOU HAVE COMPLETED BUBBLE BOBBLE and ! WHAT HEROES !"
  },
  {
   "address": 6078,
   "type": "line",
   "text": "Start of a round: remember each enemy's Y as its target, put all six at the top (Y $15), then for 22 double frames move each enemy that exists down two pixels per double frame; one that has reached its place has its dropping flag counted down instead. Enemies with further to go finish their drop in update_actors."
  },
  {
   "address": 6149,
   "type": "line",
   "text": "Copy the eight actors to the VIC: X and Y, colour (the base colour while the actor's fast flag is set), and the sprite shape, base + animation frame, into the pointers of both screen buffers."
  },
  {
   "address": 6212,
   "type": "line",
   "text": "Wait for the frame, then swap the roles of the two screen buffers and their character sets and repair the new back buffer."
  },
  {
   "address": 6215,
   "type": "line",
   "text": "The same swap without the wait."
  },
  {
   "address": 6227,
   "type": "line",
   "text": "With A the back screen's high byte: rebuild the row-address high bytes, colour the two items, set colour RAM for each object of type below $18 or type $4C (the bubbles and the falling food): two cells a row, or three when it has a sub-column, in the two or three rows it covers; restore from the clean copy at $8B00 every cell an object covered two passes ago; draw the items' four characters; give the ten cells of the water stream their colour ($0B); restore the ten cells under the giant falling block and step that block. At $18C8 the ADC object_col,X takes the carry of the CMP #3 before it, so for the first row of a bubble with a non-zero sub-row the colour cells start one column to the right."
  },
  {
   "address": 6358,
   "type": "line",
   "text": "Operand: the index of the last cell of a bubble's row that gets colour, 1 or 2 by its sub-column, so two or three cells. From here to the end of repair_back_buffer: the erase of old bubbles, the items, the water stream's colour and the giant block."
  },
  {
   "address": 6360,
   "type": "line",
   "text": "Operand: the colour RAM value of the bubble being repaired."
  },
  {
   "address": 6367,
   "type": "line",
   "text": "Operand: the row index restored into Y after the colour loop."
  },
  {
   "address": 6441,
   "type": "line",
   "text": "Operand: the row index restored into Y after the restore loop."
  },
  {
   "address": 6607,
   "type": "line",
   "text": "Object type $46, the block of ten cells (rows of 2, 3, 3 and 2 cells) that falls diagonally after a special item, down a row and left a column each pass: frees and kills every enemy in a bubble and kills every enemy on foot whose position lies within 48 pixels to the right of and below a point 8 pixels up and left of the block's own, and at row $16 ends; otherwise, when a random byte is below 6 (about one pass in 43), it also kills the enemy of that number."
  },
  {
   "address": 6767,
   "type": "line",
   "text": "Enemy X is beaten: remember its kind (enemy_thrown picks its tumbling frames by it), set state $0B (thrown) with rank 9, take one from enemies_left and give it a random arc: sideways speed 1-8, rising speed 1-8, left or right."
  },
  {
   "address": 6838,
   "type": "line",
   "text": "The special item that sets sky_flash_count: flash the border and background four times and start the giant falling object at row 2, a random column from $16."
  },
  {
   "address": 6888,
   "type": "line",
   "text": "Burst whatever objects 0 and 1 hold, then redraw until both slots are free. A bubble holding an enemy keeps its type as the remembered one, so the burst beats the enemy and credits the bubble's owner."
  },
  {
   "address": 6914,
   "type": "line",
   "text": "Draw the objects and flip buffers repeatedly until object slots 0 and 1 are both free."
  },
  {
   "address": 6937,
   "type": "line",
   "text": "Replace every dynamic glyph (character $5E and up) in the back buffer with the clean copy's character, then copy the actors to the sprites."
  },
  {
   "address": 6976,
   "type": "line",
   "text": "The water stream, stepped from the raster interrupt on every second frame: its trail is eleven recorded cells; erase the oldest, draw the other ten as character $1F in cyan, sweep up every actor within 12 pixels of the cell just behind the head (state $0D: enemies are carried to their death, players ride it; a player in a jump is not caught), shift the trail, and move the head: down while it falls, then left or right along the floor it lands on, dropping again where the floor ends, until it leaves the bottom."
  },
  {
   "address": 7337,
   "type": "line",
   "text": "Still update_actors: an actor that is dropping in at the start of the round moves down two pixels a call until it reaches its target Y."
  },
  {
   "address": 7357,
   "type": "line",
   "text": "Run from irq_top every other frame: read both joysticks into the first two input bytes, then for each actor run its drop-in or its state handler (an actor with the fast flag gets a second call on every second run; one whose wait counter is running only has its idle animation stepped), skip enemies while the clock's freeze lasts, and finally test each player in state 1 against every ordinary enemy within 12 pixels: a touch sets the player's state to $0E. On the boss's round it moves the boss instead. The STA actor_state,Y at $1D73 and $1E27 is what the trainer's invincibility turns into an LDA ($B9), so with it on a touch sets no state (cheats.md)."
  },
  {
   "address": 7549,
   "type": "line",
   "text": "Seven bytes nothing reads: five spaces and two zeros between two routines."
  },
  {
   "address": 7556,
   "type": "line",
   "text": "Round 100: move the boss two pixels a call diagonally (the actor loop calls it every second frame; twice a call when angry), bouncing between X $28-$C0 and Y $3A-$B8 and turning its frame set at the sides. A player in state 1 inside its box, from 8 pixels left of and above the boss's corner to 64 pixels right of it and 56 below, dies, unless the boss is in its beaten frame: then that player is recorded as the winner and the round ends."
  },
  {
   "address": 7726,
   "type": "line",
   "text": "Zero the state and position of all six enemies. Entry $1E30 with X = 7 (check_quit) also zeroes the two players' X and Y and the types of object slots 0 and 1, because each of the three arrays runs on into the next; the players' states are not touched."
  },
  {
   "address": 7728,
   "type": "line",
   "text": "Entry of clear_enemies with X chosen by the caller."
  },
  {
   "address": 7738,
   "type": "line",
   "text": "Base address used to index actor_state_table by state \u00d7 2: two bytes before the table, the operand byte of clear_enemies's closing BPL (state 0 is never dispatched, so it is not read as an address)."
  },
  {
   "address": 7739,
   "type": "line",
   "text": "One byte before actor_state_table: the base for its high bytes (the RTS of clear_enemies)."
  },
  {
   "address": 7740,
   "type": "line",
   "text": "Twenty-four addresses, the handler for each actor state 1-$18: the player, the eight enemy kinds (2-9), then released, thrown, falling, carried by water, dying, dead, reappearing, becoming food, food, three bonus states, frozen falling, frozen, and the invincible player."
  },
  {
   "address": 7788,
   "type": "line",
   "text": "Compute the actor's map pointer, copy its animation frame to anim_now and jump to the handler for its state through the operand patched at $1E85."
  },
  {
   "address": 7812,
   "type": "line",
   "text": "JMP whose operand run_actor_state fills in from actor_state_table."
  },
  {
   "address": 7813,
   "type": "line",
   "text": "Operand of actor_dispatch."
  },
  {
   "address": 7814,
   "type": "line",
   "text": "High byte of actor_dispatch's target."
  },
  {
   "address": 7815,
   "type": "line",
   "text": "Animate an actor that is not being moved by its handler: kind 4 flips between two frames, kind 5 cycles four, kind 9 two, everything else the generic walk cycle."
  },
  {
   "address": 7839,
   "type": "line",
   "text": "Enemy kind 9 (state 9), the light grey robot on legs. When its reload timer is out, about one call in twenty at random, if it is standing on a floor above Y $A8 and an object slot is free, it lets a bolt (type $32) fall from its own position and waits $64 calls. In every call it also walks: falling when nothing is under it, else moving four pixels left or right by its control bits and turning at walls."
  },
  {
   "address": 7982,
   "type": "line",
   "text": "Enemy kind 4 (state 4): moves only by jumping. On the ground, when its climb flag is set and the collision map shows a platform within four rows above it, it jumps straight up: 16 calls of waiting, then 15 steps up by jump_arc_enemy. Otherwise it sometimes (level flag set, 30 times in 256) turns to face its target player and hops the way it faces: 15 steps rising one pixel and drifting two pixels a step, bouncing off walls. Either way it then comes down by the arc tables (jump_arc_drift when drifting) and lands on the first floor it meets on the way down."
  },
  {
   "address": 8352,
   "type": "line",
   "text": "Still enemy_hopper: the test for a floor under a falling hopper and its landing."
  },
  {
   "address": 8522,
   "type": "line",
   "text": "Every second call, toggle bit 0 of the actor's animation frame: the two-frame cycle."
  },
  {
   "address": 8537,
   "type": "line",
   "text": "Toggle bit 0 of the actor's animation frame."
  },
  {
   "address": 8546,
   "type": "line",
   "text": "State 1, a player in play. Finishes a bubble being blown; lets the player bounce on a bubble held under them while the stick is up (a bubble within 14 pixels across and 20 below starts a jump); continues a jump or a fall; on the ground reads the stick: up jumps, left and right walk two pixels a call, flipping between two walk frames on every fourth call, fire blows. Standing still for seven calls swaps the idle frame."
  },
  {
   "address": 8716,
   "type": "line",
   "text": "The stick while standing: bit 0 (up) clear starts a jump through start_jump; bits 2 and 3 walk left and right; bit 4 (fire) blows a bubble."
  },
  {
   "address": 8747,
   "type": "line",
   "text": "Begin a jump: 15 steps up the arc, with a sideways drift flag only when the stick leans the way the player already faces (left with a left-facing frame, right with a right-facing one), the jumping frame, and a request for the jump sound."
  },
  {
   "address": 8811,
   "type": "line",
   "text": "Walk two pixels left if the map cell beside the player is not solid (walls do not block a player above Y $2D, or mid-cell), advancing the walk cycle every fourth call; turns the player to face left first. Awards the walking bonus when it is on."
  },
  {
   "address": 8899,
   "type": "line",
   "text": "The same to the right."
  },
  {
   "address": 8936,
   "type": "line",
   "text": "Fire: if the player's reload timer is out and no bubble is being blown, start the six-call blowing animation and remember which way the player faces."
  },
  {
   "address": 8961,
   "type": "line",
   "text": "Step the blowing animation, which counts down from 6; on its third call (count 4) create the bubble in a free object slot at the player's position: type $16 (just blown), lifetime $7D, the player's travel distance, direction, speed and reload from the power-up table, one cell lower when the player is in a jump (rising or coming down) and four or more pixels into a cell. With fire breath in hand it uses one charge and makes a fireball (type $44) instead. Awards the blowing bonus when it is on. Two BIT skips hide an LDA: $2397 is LDA #$80 (object_owner is 0 only when the frame is 9, $80 otherwise) and $23C8 is LDA #$00 (a fireball's sub-column is 2 or 0 by that bit)."
  },
  {
   "address": 9182,
   "type": "line",
   "text": "LDA $37C7,X of blow_animation; patched to RTS in ordinary rounds and restored on round 100, where it marks the bubble with its owner so that it becomes a thunder bubble."
  },
  {
   "address": 9194,
   "type": "line",
   "text": "A player rising: move up by the arc table, wrapping from the top of the screen to the bottom, with the drift of start_jump and wall tests each pixel sideways."
  },
  {
   "address": 9217,
   "type": "line",
   "text": "A player past the top of a jump: come down by the same arc table read forwards, landing on the first floor whose top the feet cross, with the player snapped to the cell."
  },
  {
   "address": 9497,
   "type": "line",
   "text": "End of a jump: clear the jump counters, align X to an even pixel for the way the player faces, and if nothing is under the feet start falling."
  },
  {
   "address": 9596,
   "type": "line",
   "text": "A player with nothing underfoot: fall two pixels a call, wrapping from the bottom of the screen ($F5) to the top ($15), until a floor is under the feet; while falling, on every second call, the stick still moves the player one pixel sideways (or turns them) and fire still blows."
  },
  {
   "address": 9852,
   "type": "line",
   "text": "State $0B, a beaten enemy flying off: spin through four frames, move sideways at its random speed bouncing between X $24 and $F4, rise at its random speed, which drops by one on every fourth call, and from the top come down faster and faster, wrapping vertically; when its falling speed passes a second random limit of 1-8 it becomes state $0C."
  },
  {
   "address": 10031,
   "type": "line",
   "text": "Call fall_to_floor with its tail jump turned into an RTS, so that it returns without spinning the sprite."
  },
  {
   "address": 10045,
   "type": "line",
   "text": "State $0C, a beaten enemy coming down: fall two pixels a call, wrapping at the bottom, until it stands on a floor; then set the state patched into $277F (normally $11, becoming food)."
  },
  {
   "address": 10111,
   "type": "line",
   "text": "Operand of fall_to_floor: the state an enemy takes when it lands, $11 (food) or the saved state of a released enemy."
  },
  {
   "address": 10114,
   "type": "line",
   "text": "JMP to the spin animation at the end of fall_to_floor, turned into an RTS by fall_to_floor_once."
  },
  {
   "address": 10117,
   "type": "line",
   "text": "State $16, an enemy frozen by the special item: light blue, falls to the nearest floor and becomes state $17. The BPL at $27B0 branches to the next instruction: when the enemy straddles two columns and only the third cell under it is solid, it falls anyway; only the first two make it lie."
  },
  {
   "address": 10187,
   "type": "line",
   "text": "State $17, a frozen enemy lying on a floor: a player who touches it kills it (it becomes thrown and is counted like any burst enemy)."
  },
  {
   "address": 10248,
   "type": "line",
   "text": "State $0A, an enemy just out of a bubble or being dropped: fall to the floor, keep it inside the side walls, then clear its jump and fall flags so it restarts in the state saved for it."
  },
  {
   "address": 10317,
   "type": "line",
   "text": "State $0D, an actor swept up by the water stream: it is carried at the cell just behind the stream's head. An enemy carried to the bottom row is counted as beaten and becomes food (state $0C, rank 7); a player is put down at X $64 or $B4 and goes back to state 1. While carried a player's stick is still read: fire blows, and a jump takes the player out of the stream (state 1); walking has no lasting effect because the position is set from the stream on every call."
  },
  {
   "address": 10405,
   "type": "line",
   "text": "State $0E: the death, 32 calls spinning through frames $0E, $0D, $0C and 0 (two calls each) while falling three pixels a call if in the air, then a second sequence of frames $0F-$12 until the counter reaches $C8, when the state becomes $0F and check_deaths takes over."
  },
  {
   "address": 10472,
   "type": "line",
   "text": "State $0F, a dead player waiting for check_deaths: nothing to do."
  },
  {
   "address": 10490,
   "type": "line",
   "text": "State $18, a player after the freezing item: flashes and is controlled as in state 1, but with the control routine run twice a call, so it moves at twice the speed, and the enemy collision test ignores it."
  },
  {
   "address": 10509,
   "type": "line",
   "text": "State $10, a player just back in play: flashes for the count in $8688 and cannot be hurt, then becomes state 1; controlled as in state 1 meanwhile."
  },
  {
   "address": 10518,
   "type": "line",
   "text": "Flip the actor's colour between two values and run the ordinary player control."
  },
  {
   "address": 10529,
   "type": "line",
   "text": "State $11, a beaten enemy that has landed. One enemy per run of the actor loop (the flag at $2922): pick the food for its rank from food_by_rank, colour it, and build its sprite, shape $F2 + actor number, by spreading the food's four 8 by 8 multicolour glyphs through remap_pairs into a 16 by 16 picture in the actor's sprite buffer. It then waits as state $12 for $C8 calls. The LDA fire_breath,X at $2954 indexes $A783 with an enemy's index (2-7), so it reads the food sprite address table that follows, not fire_breath."
  },
  {
   "address": 10530,
   "type": "line",
   "text": "Operand: 0 lets one beaten enemy become food this frame; set after the first and cleared by update_actors."
  },
  {
   "address": 10608,
   "type": "line",
   "text": "Operand: address of the food sprite's left half-columns, from food_sprite_lo/hi."
  },
  {
   "address": 10609,
   "type": "line",
   "text": "High byte of the food sprite destination, left half-columns."
  },
  {
   "address": 10637,
   "type": "line",
   "text": "Operand: the same address for the right half-columns."
  },
  {
   "address": 10638,
   "type": "line",
   "text": "High byte of the food sprite destination, right half-columns."
  },
  {
   "address": 10646,
   "type": "line",
   "text": "Convert one byte of character multicolour pixels to sprite multicolour: each of the four bit pairs that is %10 or %11 has its low bit flipped, which swaps the two shared colours for the sprite's own."
  },
  {
   "address": 10683,
   "type": "line",
   "text": "State $12, food waiting to be eaten: a player within 16 pixels gets the score for its rank from food_scores (in thousands or in hundreds, by the table value) and a sound; it disappears when taken or when its timer runs out."
  },
  {
   "address": 10776,
   "type": "line",
   "text": "State $13, the six enemy sprites that enemies_to_bonus gathered at one point, after a special item: they fly apart, each by its own step from giant_step_x and giant_step_y (six directions: straight up and straight down at four pixels a call, the other four at four pixels sideways and two up or down), while flashing; when the first, which goes straight up, has risen above Y $50 the saved enemies are put back as they were."
  },
  {
   "address": 10815,
   "type": "line",
   "text": "Clear the item sprite buffers and restore the six enemies, in light blue, from the copies saved at $4700-$4737; a slot whose saved state was $11 or more (already food or later) is emptied instead. enemies_left is set to 0."
  },
  {
   "address": 10868,
   "type": "line",
   "text": "State $14: six sprites flashing in the formation of formation_a_x and formation_a_y, switching between expanded and unexpanded every second run (four frames each way), with formation_b_x and formation_b_y for the unexpanded size, until the frame counter passes $3C; then the saved enemies return."
  },
  {
   "address": 10925,
   "type": "line",
   "text": "Put the six enemy sprites at the second formation's positions and, once the frame counter passes $3C, restore the saved enemies."
  },
  {
   "address": 10955,
   "type": "line",
   "text": "State $15: four sprites, two by two (shapes $F4-$F7), make one 48 by 42 giant food after a cleared round. It comes down from the top of the screen four pixels a call, its left half at X $80 and its right half at X $98, until its top is at Y $C8. A player inside its box takes it for the score code in giant_score, and all four sprites vanish."
  },
  {
   "address": 10985,
   "type": "line",
   "text": "Operand: colour of the giant food's four sprites, from giant_sprite_colour."
  },
  {
   "address": 11057,
   "type": "line",
   "text": "Work out where the round's two items will appear and which they are. The round's bytes in item_pos_a, item_pos_b and item_pos_c pack two cell positions; from them come the screen offsets and sprite coordinates used by the pick-up test. The points item is rank points_rank plus 0-3, at most $2E. The special item: nine times in sixteen the one the generator gives when seeded with the round number (so each round has its own usual item, 0-31), six in sixteen any of the 32 at random, one in sixteen item $1E or $1F. While a player who has not lost a life remains (doors_possible) and the round has passed the next door round, the special item is a door instead: $20 after rounds 19, 29, 39, 79 and 89, and $21 after round 49. Round 100 gets its own pair."
  },
  {
   "address": 11197,
   "type": "line",
   "text": "Make points item A the round's: store it with bit 7 set (not yet shown), take its colour and the address of its picture."
  },
  {
   "address": 11314,
   "type": "line",
   "text": "Make special item A the round's, copy both items' pictures (four glyphs each) into characters $42-$45 and $46-$49 of both character sets, and draw the delays: 3-10 seconds for the points item, 1-16 for the special one. On round 100 also give the boss 50 hits and point the pass hook at boss_hit_test."
  },
  {
   "address": 11404,
   "type": "line",
   "text": "Add the playfield's origin ($14, $2D) to the two item positions."
  },
  {
   "address": 11423,
   "type": "line",
   "text": "A = picture number: return in $04/$05 the address of its four glyphs, $9AE0 + 32 \u00d7 A."
  },
  {
   "address": 11447,
   "type": "line",
   "text": "Flash special item $18, then for each live player and each item on show: within 16 pixels takes it. The points item scores from points_item_scores; the special item scores from special_item_scores and runs its effect through the table at $2D65/$2D88. Low-numbered items add their code to the low score byte (tens), the rest to the middle byte (thousands). On round 100 the points item also recharges the weapon."
  },
  {
   "address": 11601,
   "type": "line",
   "text": "JSR whose operand check_items patches with the special item's effect routine."
  },
  {
   "address": 11602,
   "type": "line",
   "text": "Operand of item_effect_call."
  },
  {
   "address": 11603,
   "type": "line",
   "text": "High byte of the special item effect call."
  },
  {
   "address": 11607,
   "type": "line",
   "text": "Operand: the player index restored after a special item's effect."
  },
  {
   "address": 11621,
   "type": "line",
   "text": "Low bytes of the 35 special-item effect routines, by item number."
  },
  {
   "address": 11656,
   "type": "line",
   "text": "High bytes of the 35 special-item effect routines."
  },
  {
   "address": 11691,
   "type": "line",
   "text": "Special item 3, a sweet: the player's reload time drops from 8 to 3 passes of the main loop between bubbles."
  },
  {
   "address": 11698,
   "type": "line",
   "text": "Special item 4, a sweet: the player's bubbles travel 12 steps instead of 8 (the stored travel becomes $8C instead of $88; bit 7 only marks a bubble that has not yet moved) and the range flag becomes $FF."
  },
  {
   "address": 11710,
   "type": "line",
   "text": "Special item 9, the red lamp: the three scoring bonuses and all three bubble powers at once."
  },
  {
   "address": 11719,
   "type": "line",
   "text": "Special item 10, the yellow lamp: fast reload, long range and fast bubbles."
  },
  {
   "address": 11725,
   "type": "line",
   "text": "Special item 5, a sweet: sets the player's bubble speed flag to $FF, so each blown bubble moves two steps a pass."
  },
  {
   "address": 11730,
   "type": "line",
   "text": "Shared tail: request sound 5."
  },
  {
   "address": 11735,
   "type": "line",
   "text": "Special item 8, the blue cross: with the actors stopped end every object, remove both items, then sweep the 28 playfield columns from the bottom row up, two frames a row, turning every background cell into character $FF, a flood, and giving the whole row colour $0B, which in multicolour shows the flood in cyan; players being carried by water return to normal and every enemy is killed."
  },
  {
   "address": 11873,
   "type": "line",
   "text": "Kill every enemy that is in an ordinary state or being carried by water, and zero the count of enemies left."
  },
  {
   "address": 11897,
   "type": "line",
   "text": "Unless objects are already frozen: free every enemy held in a bubble as beaten, turn all eighteen objects into type $4A (gone), clear their remembered cells, and redraw both buffers twice so nothing is left on screen."
  },
  {
   "address": 11968,
   "type": "line",
   "text": "Scrub and flip twice, leaving both screen buffers clean."
  },
  {
   "address": 11980,
   "type": "line",
   "text": "Special item $0B, the purple lamp: load a sprite picture from bonus_sprite_a into the item buffers, end every object and kill every enemy, then save the six enemy slots at $4700 and turn all six sprites into state $13 with shape $F4, flashing border and background between yellow and green; they gather at X $88, Y $91, and when the show is over the enemies come back as they were saved, already beaten, and fall as food."
  },
  {
   "address": 12010,
   "type": "line",
   "text": "Save the six enemies' state, position and shape at $4700-$4737, give them state A, shape $F4 and colour yellow, flash the border and background six times and gather them at X, Y. The round timer is set to $FF (255 seconds), not stopped."
  },
  {
   "address": 12127,
   "type": "line",
   "text": "Special item $0C, a ring: turns on the bonus for jumping."
  },
  {
   "address": 12130,
   "type": "line",
   "text": "Special item $0D, a ring: turns on the bonus for walking."
  },
  {
   "address": 12133,
   "type": "line",
   "text": "Special item $0E, a ring: turns on the bonus for blowing bubbles."
  },
  {
   "address": 12136,
   "type": "line",
   "text": "Special item $0F, the clock: invert the playfield colours and freeze the enemies for $87 passes; the round timer stops."
  },
  {
   "address": 12157,
   "type": "line",
   "text": "Special item $10, a potion: a bonus room of musical-note blocks in colour $0D, drawn with the picture pair at $A2C0."
  },
  {
   "address": 12163,
   "type": "line",
   "text": "Special item $11, a potion: a bonus room of arch-shaped blocks in colour $0C, drawn with the picture pair at $A300."
  },
  {
   "address": 12169,
   "type": "line",
   "text": "Special item $12, a potion: a bonus room of ring-shaped blocks in colour $0F, drawn with the picture pair at $A2E0."
  },
  {
   "address": 12173,
   "type": "line",
   "text": "Clear the playfield of enemies and objects, then fill it with 2 by 2 blocks (characters $42-$45, a note, an arch or a ring by the potion): in every second row from row 1 and every second column, wherever four free cells exist, for a number of rows from 1 to 10 that depends on the round ($2A EOR the round index, reduced by tens), stopping after the row that brings the count to 85 or more; each is remembered with its sprite position and screen address. Thirty seconds on the timer; the players collect them (bonus_collect) for 500 points each; then the scene is cleared and a results panel shows each player's count. Only if every block was taken is there an award: 100,000 points to a player who took at least as many as the other, 50,000 to one who took fewer."
  },
  {
   "address": 12448,
   "type": "line",
   "text": "Still bonus_room: the results panel, each player's count and award."
  },
  {
   "address": 12574,
   "type": "line",
   "text": "Fill a 16 by 6 block of colour RAM at row 7, column 8 ($D920) with colour $0D."
  },
  {
   "address": 12590,
   "type": "line",
   "text": "Clear two blocks of the screen (rows 5-14 and 6-13 of the playfield) to characters $10 and $20: the frame of the results panel."
  },
  {
   "address": 12621,
   "type": "line",
   "text": "Fill X rows of Y+1 cells from the address in $40/$41 with A."
  },
  {
   "address": 12649,
   "type": "line",
   "text": "Copy two 16-byte glyph pairs into characters $42-$45 one byte a frame, from the top and from the bottom at once, so the pictures appear gradually."
  },
  {
   "address": 12687,
   "type": "line",
   "text": "Low bytes of the per-frame routine of bonus_collect, by mode. The two tables overlap (lo: 34 32 71 from $318F, hi: 32 71 37 from $3190): modes 0 and 2 give $3234 and $3771, mode 1 would give $7132 and nothing uses it. Two routines, not three."
  },
  {
   "address": 12688,
   "type": "line",
   "text": "High bytes of the same three routines. Overlaps bonus_step_lo by two bytes: see it."
  },
  {
   "address": 12691,
   "type": "line",
   "text": "Run a bonus scene until every block is taken: each frame print scores, handle deaths and pause, run the mode's own routine (the JSR at $31B1), and for each player in play test every remaining block within 16 pixels; a hit scores the value patched into $3200, restores the four cells from the clean copy and counts for that player."
  },
  {
   "address": 12722,
   "type": "line",
   "text": "Operand of bonus_collect's per-frame call."
  },
  {
   "address": 12723,
   "type": "line",
   "text": "High byte of bonus_collect's per-frame call."
  },
  {
   "address": 12800,
   "type": "line",
   "text": "Operand: score code for one block of the current bonus scene: $50 in the bonus rooms (500 points, in the low score byte) and $12 in the secret room (12,000, in the middle byte; codes below $32 go one byte up)."
  },
  {
   "address": 12852,
   "type": "line",
   "text": "Per-frame routine of the bonus rooms: print the seconds left and each player's count, and when the time is out abandon the scene by dropping the return address."
  },
  {
   "address": 12902,
   "type": "line",
   "text": "Print A as two decimal digits at screen address $41:Y in colour X (the colour goes to the matching cells of colour RAM); each digit's character code is ORed with the byte in zero page $45: 0 from bonus_results and the title (the font's own digits), $60 from bonus_tick_timer (the small digits a bonus scene loads into characters $60-$69)."
  },
  {
   "address": 12947,
   "type": "line",
   "text": "Copy the 25 rows by 32 columns of the clean screen copy at $8B00 back to the screen at $5000."
  },
  {
   "address": 12991,
   "type": "line",
   "text": "Column of the EXTEND congratulation for player 1 and player 2."
  },
  {
   "address": 12993,
   "type": "line",
   "text": "If a player holds all six letters: play tune $2E; twenty times, five frames apart, redraw that player's column of six letter blocks beside the playfield (column 0 for player 1, $1E for player 2, rows $0A-$14) with letters picked at random; clear everything; cover the screen with 2 by 2 pictures of points items picked at random, and on top of them show a panel with the big EXTEND letters and the \"extra life\" text for the player; after 200 frames flip between the two buffers eleven times, add a life, clear the letters, and end the round so play moves on to the next one."
  },
  {
   "address": 13345,
   "type": "line",
   "text": "Record a 2 by 2 block at column A, row Y as a collectable (sprite position and screen address) and draw it."
  },
  {
   "address": 13386,
   "type": "line",
   "text": "Draw a 2 by 2 block of four consecutive characters, the first being the byte in zero page $40 (top left, then bottom left, top right, bottom right), at column X, row Y of the screen the row table points at, coloured from item_colours indexed by the byte in $41. The colour address is the screen address plus $8800, which is colour RAM only for the screen at $5000, so its callers point the row table there first."
  },
  {
   "address": 13450,
   "type": "line",
   "text": "Special items 1 and $15, canes: choose giant food 0 for the end of the round (item $1B, score code $10 or $20)."
  },
  {
   "address": 13461,
   "type": "line",
   "text": "Special items 2 and $17, canes: choose giant food 1 (item $18, score code $20 or $30)."
  },
  {
   "address": 13472,
   "type": "line",
   "text": "Special item $18, the heart: every enemy in an ordinary state becomes frozen (state $16) and every live player invincible (state $18); tune $19 plays, and when the round ends the players return to state 1."
  },
  {
   "address": 13562,
   "type": "line",
   "text": "Special item $19, a chest: choose giant food 2 (item $29, score code $30)."
  },
  {
   "address": 13570,
   "type": "line",
   "text": "Special item $1A, a chest: choose giant food 3 (item $2B, score code $40)."
  },
  {
   "address": 13578,
   "type": "line",
   "text": "Special item $1B, a chest: choose giant food 4 (item $2C, score code $50)."
  },
  {
   "address": 13584,
   "type": "line",
   "text": "Store the giant food's item number, score code and kind."
  },
  {
   "address": 13591,
   "type": "line",
   "text": "When the round is cleared with a giant food chosen: copy its four-sprite picture from the address in giant_sprite_lo/hi into the buffers at $7D00 (for kinds 1-4 the first two sprites, the top half, are then blanked, and kind 1 gets two eight-byte patches), and put its colour into giant_food's code. Then, for the falling food, copy the item's four glyphs into characters $46-$49 and build their mask at $40A8-$40C7: a bit pair is 11 where the picture's pair is empty and 00 elsewhere."
  },
  {
   "address": 13736,
   "type": "line",
   "text": "Eight bytes patched into the giant picture of kind 1."
  },
  {
   "address": 13744,
   "type": "line",
   "text": "Special item $1D, the crystal ball: build a symmetrical picture in the item buffers from bonus_sprite_b, end every object and kill every enemy, and show the six sprites as state $14, the flashing formation; afterwards the beaten enemies come back and fall as food."
  },
  {
   "address": 13857,
   "type": "line",
   "text": "Special item $20, the door: build the secret room. The air currents of round 77 are loaded, and the layout is unpacked from a buffer at $8C00 that holds thirteen bytes placed by secret_wall_offsets and secret_wall_bytes, drawn with the room's own glyphs and colours; the round index is counted up by one. A message is written in the room's own alphabet from secret_text, the boss's sprites are shown in blue at the top (boss_active is set), the picture of item $22 is drawn at both top corners, and 36 blocks (eighteen positions from secret_block_x and secret_block_y, each mirrored left to right) are laid out for the players to collect; the count is set to 37, so taking them all does not end the scene and the per-frame routine secret_room_tick opens the way out."
  },
  {
   "address": 14193,
   "type": "line",
   "text": "Per-frame routine of the secret room: a player who walks to X $8C on the bottom floor once only one block is left drops through to the exit; when a player reaches the bottom (Y $DD) the room ends, with the screen flashing. The drop of the player (Y $9D to $DD at X $8C) happens while pass_count is below $0E, twelve or fewer blocks left; the exit needs pass_count 1 (every block taken) and the player at Y $DD."
  },
  {
   "address": 14279,
   "type": "line",
   "text": "Per player: bit 7 set while the player holds the round-100 weapon, so that every bubble blown is a thunder bubble. Counted down by the potion."
  },
  {
   "address": 14281,
   "type": "line",
   "text": "Bring the new round in from below: the old picture scrolls up a row every frame while the new layout, waiting in the other buffer, is fed in at the bottom, in three stages (blank rows, the top wall, then the 25 rows); the round number's glyphs are rebuilt on each step."
  },
  {
   "address": 14432,
   "type": "line",
   "text": "Build the two characters at the top left that show the round number: blank the glyph pair, copy the wall pattern's corner into them, and overlay the tens and units digits from the small digit shapes that digit_glyph_lo/hi point to; round 100 uses two special shapes."
  },
  {
   "address": 14569,
   "type": "line",
   "text": "Wait a frame and move rows 1-24 of the 32-column playfield up one row, into rows 0-23, rebuilding the round number's glyphs after the first row."
  },
  {
   "address": 14634,
   "type": "line",
   "text": "Set the round timer (30 seconds; 10 on round 56; 20 from round 57), copy the tile glyphs to the low characters, give the new picture its colours, mark every cell holding characters $10-$1D as solid in the collision map, and read the round's enemy list: for each three-byte record the kind (state kind+2), position, delay before it moves (six bits, doubled, counted in runs of the actor loop), facing and four direction bits for its input byte, with colour, sprite base and frame count from the tables by kind and a chase period of the kind's value plus a random 0-31. Then copy the top and bottom map rows outward for wrap-around tests and set up the special-bubble spawner from the round's flags."
  },
  {
   "address": 15032,
   "type": "line",
   "text": "The \"HURRY UP\" banner: make the enemies angry, then scroll a nine-character banner up the middle of the playfield a row at a time, merging its glyphs with the background; at row 11 flash it six times with tune $3C, wait for that tune to end and start tune $27 (the round tune a step faster); then carry it to the top and restore everything. For work space it borrows 256 bytes of draw-handler code at $3CB2: the code is parked in the first page of the back screen and put back at the end, when that screen page is restored from the clean copy."
  },
  {
   "address": 15088,
   "type": "line",
   "text": "Operand high byte, patched with the back screen's page: the store that parks the borrowed code in that screen page. From here hurry_up saves the screen rows it scrolls through."
  },
  {
   "address": 15265,
   "type": "line",
   "text": "Operand: the banner's colour, flipped between $0C and $0F for the flashes."
  },
  {
   "address": 15345,
   "type": "line",
   "text": "Operand high byte, patched with the back screen's page: the load that brings the parked code back."
  },
  {
   "address": 15354,
   "type": "line",
   "text": "Operand high byte, patched with the back screen's page: the store that restores that screen page from the clean copy."
  },
  {
   "address": 15361,
   "type": "line",
   "text": "Build the \"ROUND nn\" and \"READY\" overlay: compose nine banner characters from the digit glyphs and the background under two rows of the playfield into characters $C0-$D1, copy them to the second character set, and print the banner text."
  },
  {
   "address": 15538,
   "type": "line",
   "text": "Draw handler for object types $18-$22, a bubble holding an enemy: keep the enemy's sprite at the bubble's position and animation frame; nothing is drawn in characters."
  },
  {
   "address": 15547,
   "type": "line",
   "text": "Nine bytes inside draw_carrier's code that hurry_up borrows to hold the banner row's colours; the code is put back from its parked copy in the screen when the banner ends."
  },
  {
   "address": 15556,
   "type": "line",
   "text": "Nine more borrowed bytes: the characters under the banner's previous row."
  },
  {
   "address": 15565,
   "type": "line",
   "text": "Nine more: the colours under the banner's previous row."
  },
  {
   "address": 15571,
   "type": "line",
   "text": "Draw handler for type $3C, the second stage of a burst (type $3A goes to draw_pop_start): advance the type by two, to $3E, and draw the first pop picture. The ADC #$10 at $3CFC that places the second graphic column takes the carry the caller left: for a letter bubble's pop (was 8 or more) that column starts one line on."
  },
  {
   "address": 15574,
   "type": "line",
   "text": "Start of 72 borrowed bytes: the banner's nine glyphs merged with the background."
  },
  {
   "address": 15579,
   "type": "line",
   "text": "Draw handler for type $3E: set type $40 and draw the last pop picture."
  },
  {
   "address": 15583,
   "type": "line",
   "text": "Draw handler for type $40: set type $38 (gone on the next pass)."
  },
  {
   "address": 15589,
   "type": "line",
   "text": "Point the renderer at pop picture A + sub-column from pop_gfx_lo/hi and draw it."
  },
  {
   "address": 15646,
   "type": "line",
   "text": "Start of 72 more: the banner's glyphs for the flashing frame."
  },
  {
   "address": 15661,
   "type": "line",
   "text": "Draw handler for type $34, a bubble a player has just burst. Bursts every other bubble within 24 pixels the same way (the chain). If it held an enemy, the enemy is killed and the player's chain count goes up. Otherwise scores 10 points, or 100 for a water, fire or thunder bubble; a letter bubble sets its bit in the player's letters. Then by what it was: water starts the stream at its position, fire becomes a falling flame (type $24), thunder becomes a shot (type $26) fired away from the way the player faces, anything else the pop animation."
  },
  {
   "address": 15735,
   "type": "line",
   "text": "Draw handler for type $3A, a bubble that bursts without being touched: the tail of draw_burst without the chain and the score, so an enemy inside is still killed and the bubble's content released."
  },
  {
   "address": 15785,
   "type": "line",
   "text": "Draw handler for type $38: set type $36 (freed on the next pass) and draw nothing."
  },
  {
   "address": 15991,
   "type": "line",
   "text": "Draw handler for type $32, the falling bolt of enemy kind 9."
  },
  {
   "address": 16020,
   "type": "line",
   "text": "Draw handler for type $26, the thunder shot."
  },
  {
   "address": 16084,
   "type": "line",
   "text": "Draw handler for type $2C, the bottle of enemy kind 7, one of four pictures by its animation phase."
  },
  {
   "address": 16125,
   "type": "line",
   "text": "Draw handler for types $28 and $44, an enemy's fireball and the player's: the picture is chosen by the object's sub-column, which holds its direction (0 or 2) plus a phase bit toggled each pass, so two pictures for each direction alternate."
  },
  {
   "address": 16168,
   "type": "line",
   "text": "Draw handler for type $46: only for object 0, draw the falling block into ten dynamic glyphs merged with the background. Its ten cells are in four rows of 2, 3, 3 and 2 (giant_block_cells), not a square."
  },
  {
   "address": 16260,
   "type": "line",
   "text": "Two offsets into the text buffer at $57D4 for the title's alternating top line."
  },
  {
   "address": 16262,
   "type": "line",
   "text": "First character of each item's 2 by 2 block: $42 for the points item, $46 for the special item."
  },
  {
   "address": 16264,
   "type": "line",
   "text": "Draw handler for type $4C, the food that bubbles turn into when a round is cleared with a giant item pending: drawn from the item's picture in characters $46-$49 (two 16-byte columns at $4230 and $4240) through the mask build_giant_food made at $40A8 and $40B8."
  },
  {
   "address": 16301,
   "type": "line",
   "text": "Not a variable: the operand of the BIT that hides an instruction at $05E4."
  },
  {
   "address": 16304,
   "type": "line",
   "text": "Print one digit of a score for print_score, blanking leading zeros except in the last place. It sits in the block of free memory after the game's code, like the next two stubs, which belong to the cracker's trainer."
  },
  {
   "address": 16323,
   "type": "line",
   "text": "The cracker's stub, called where the game read the keyboard column register: with the menu's \"fast movement\" on it sets both players' fast flags, and with \"level skip\" on, the Commodore key ends the round (the LDA $21 at $3FD4 becomes INC $21). Returns $DC01."
  },
  {
   "address": 16346,
   "type": "line",
   "text": "The cracker's stub at the end of the round-100 set-up: stores the $BD it is entered with in the opcode of blown_switch, which turns the thunder-bubble code on, and sets both players' bubble speed to 4."
  },
  {
   "address": 16358,
   "type": "line",
   "text": "Twenty-six zero bytes: unused space between the code and the character set."
  },
  {
   "address": 16384,
   "type": "line",
   "text": "Character set at $4000, as loaded. Characters 0-9: the digits 0-9, eight bytes each, used for scores, lives and the round counters."
  },
  {
   "address": 16464,
   "type": "line",
   "text": "Characters $0A-$0F: the six shadow pieces draw_layout puts to the right of, under and diagonally below a wall tile."
  },
  {
   "address": 16512,
   "type": "line",
   "text": "Seven bytes that title_patch copies over $F043-$F049: STX level / LDA #3 / STA $D015, the instructions every later visit to the score table runs there."
  },
  {
   "address": 16513,
   "type": "line",
   "text": "Second of those seven bytes: the zero-page operand of the STX, level."
  },
  {
   "address": 16514,
   "type": "line",
   "text": "The first visit to the score table only: enable the two player sprites, replace the seven bytes at $F043 (which set the round and jump here) with the copy at $4080, and go on to the title loop. Later visits run the replacement in place; by then this code has been overwritten by level graphics."
  },
  {
   "address": 16519,
   "type": "line",
   "text": "The copy loop of title_patch. The label is the base of the indexed load at $E662, which reads $4088-$408F: by the time build_letter_bubbles runs, start_round has replaced this code with the round's tile glyphs (characters $10-$14 at $4080-$40A7), so what is read is the background that goes behind the letter bubbles, not letter glyphs."
  },
  {
   "address": 16527,
   "type": "line",
   "text": "Tail of title_patch. The label is the base of the indexed load at $E668, which reads $4090-$4097, by then the round's tile glyph for character $12 (see title_patch_copy)."
  },
  {
   "address": 16533,
   "type": "line",
   "text": "Nineteen bytes after title_patch, part of characters $12-$14 as loaded. In play characters $10-$14 hold copies of the round's five wall glyphs (start_round), and build_letter_bubbles reads $4088-$40A7 as its background pattern."
  },
  {
   "address": 16535,
   "type": "line",
   "text": "Play-time glyph data: base of the third eight bytes build_letter_bubbles copies (indexed from 1)."
  },
  {
   "address": 16543,
   "type": "line",
   "text": "Play-time glyph data: base of the fourth eight bytes build_letter_bubbles copies (indexed from 1)."
  },
  {
   "address": 16552,
   "type": "line",
   "text": "Character $15: the round's wall tile, eight bytes copied from level_tiles by build_round. As loaded it holds a striped block."
  },
  {
   "address": 16560,
   "type": "line",
   "text": "Character $16, top left of the 2 by 2 wall block that lines both sides of the playfield; set per round from wall_blocks."
  },
  {
   "address": 16568,
   "type": "line",
   "text": "Character $17, top right of the wall block."
  },
  {
   "address": 16576,
   "type": "line",
   "text": "Character $18, bottom left of the wall block."
  },
  {
   "address": 16584,
   "type": "line",
   "text": "Character $19, bottom right of the wall block."
  },
  {
   "address": 16592,
   "type": "line",
   "text": "Character $1A: the tens digit of the round number, drawn into the top-left wall block by round_number_glyphs."
  },
  {
   "address": 16598,
   "type": "line",
   "text": "Row 6 of the tens glyph, taken from the wall block so the digit sits on the wall pattern."
  },
  {
   "address": 16599,
   "type": "line",
   "text": "Row 7 of the tens glyph."
  },
  {
   "address": 16600,
   "type": "line",
   "text": "Character $1B: the units digit of the round number."
  },
  {
   "address": 16606,
   "type": "line",
   "text": "Row 6 of the units glyph."
  },
  {
   "address": 16607,
   "type": "line",
   "text": "Row 7 of the units glyph, then characters $1C-$1F: a small corner piece, the dot that counts lives ($1D), the double rule of the panel and score table ($1E) and the water of the stream ($1F)."
  },
  {
   "address": 16640,
   "type": "line",
   "text": "Characters $20-$3F: the space, the letters A-Z at $21-$3A, then full stop, exclamation mark, quotation mark, comma and apostrophe. Strings store these as the code plus $20, so text reads as ASCII with @ for space."
  },
  {
   "address": 16896,
   "type": "line",
   "text": "Characters $40 and $41 as loaded: a two-character picture whose use was not found. At run time the letter-bubble builder overwrites this page from $4250."
  },
  {
   "address": 16912,
   "type": "line",
   "text": "Characters $42-$45, empty as loaded: the points item's four glyphs, copied here from item_pictures each round; also the blocks of the bonus rooms (a note, an arch or a ring)."
  },
  {
   "address": 16944,
   "type": "line",
   "text": "Characters $46-$49, empty as loaded: the special item's four glyphs. From $4250 follow the letter-bubble glyphs build_letter_bubbles makes (characters $4A-$5D) and, from $42F0, the first dynamic glyphs."
  },
  {
   "address": 17094,
   "type": "line",
   "text": "Not a variable: the operand of a BIT skip in print_score_digit."
  },
  {
   "address": 17152,
   "type": "line",
   "text": "Characters $60-$8B as loaded: the 44 pieces of the large BUBBLE BOBBLE lettering of the title page, three characters wide and four high per letter. In play this is dynamic glyph space; bonus scenes load their digits and pictures here."
  },
  {
   "address": 17328,
   "type": "line",
   "text": "Inside the logo glyphs; the secret room writes three eight-byte patterns here (characters $76-$78) for its floor."
  },
  {
   "address": 17336,
   "type": "line",
   "text": "Second of the secret room's three patterns."
  },
  {
   "address": 17344,
   "type": "line",
   "text": "Third of the secret room's three patterns."
  },
  {
   "address": 17408,
   "type": "line",
   "text": "Rest of the title lettering (characters $80-$8B), up to the start-up code at $4460."
  },
  {
   "address": 17504,
   "type": "line",
   "text": "The game's first instruction. Seeds the random generator from the raster line and CIA 1's timer A (retrying on zero), copies the first 128 glyphs to the second character set at $4800, clears $0200-$03FF and builds there the table of multiples of eight, clears zero page from $02, switches the ROMs out ($35), selects video bank 1 (the raster handlers take over $D018 from the first frame), sets the raster interrupt at line 251, the NMI to a bare RTI, multicolour character mode, the players' colours and sprite bases, the panel's \"TOP\" line, and prints the title page with tune $35. Then waits for fire on either port. While it waits, holding S, U, P, O, R and the Commodore key together turns the border red and rewrites every enemy record in the game: kind 0 becomes kind 1 and kind 6 becomes kind 5. This routine and the title's glyphs are later overwritten by level graphics."
  },
  {
   "address": 17664,
   "type": "line",
   "text": "Still start: the label is the base of an indexed store ($3375) in check_extend's celebration, which copies item pictures over this page once the start-up code is no longer needed."
  },
  {
   "address": 17794,
   "type": "line",
   "text": "Release the keyboard rows and keep waiting while the title tune plays."
  },
  {
   "address": 17808,
   "type": "line",
   "text": "Wait for both fire buttons to be released, silence the SID and go to the score table."
  },
  {
   "address": 17831,
   "type": "line",
   "text": "The other five keys of the S U P O R C= test, one keyboard row at a time; on success the enemy list rewrite at $45E3."
  },
  {
   "address": 17920,
   "type": "line",
   "text": "Still start, the tail of the enemy-record rewrite; in play this address is the start of a scratch array."
  },
  {
   "address": 17965,
   "type": "line",
   "text": "The first of the title page's two strings for print_string ($462D-$46EF): four rows of logo characters and WRITTEN BY STEPHEN RUDDY. The second ($46F0-$47B4) has GRAPHICS BY ANDREW THRELFALL, COMMODORE CONVERSION BY SOFTWARE CREATIONS, PRODUCED BY FIREBIRD, LICENSED BY FIREBIRD FROM TAITO ELECTRONICS and PRESS FIRE FOR BUBBLE BOBBLE. Both are overwritten in play."
  },
  {
   "address": 17992,
   "type": "line",
   "text": "Inside the title string; in play, the second half of the banner glyph buffer that round_banner copies to the other character set."
  },
  {
   "address": 18176,
   "type": "line",
   "text": "Inside the title string. In play a scratch array: saved enemy states during the six-sprite bonuses, sprite Y of each bonus block, and the saved pattern during the EXTEND scene."
  },
  {
   "address": 18192,
   "type": "line",
   "text": "In play: saved enemy X positions during the six-sprite bonuses."
  },
  {
   "address": 18208,
   "type": "line",
   "text": "In play: saved enemy Y positions."
  },
  {
   "address": 18224,
   "type": "line",
   "text": "In play: saved enemy sprite bases."
  },
  {
   "address": 18357,
   "type": "line",
   "text": "Eight bytes copied to the actors' base colours at start-up: 5 (green) for player 1, 3 (cyan) for player 2, $0A for the six enemies."
  },
  {
   "address": 18365,
   "type": "line",
   "text": "Eight bytes copied to the actors' sprite bases: $60 for both players, 0 for the enemies."
  },
  {
   "address": 18373,
   "type": "line",
   "text": "Eight bytes copied to the actors' drop-in flags: $FF for the players, 0 for the enemies."
  },
  {
   "address": 18381,
   "type": "line",
   "text": "Thirteen characters, \"GAME  OVER\" and \"ALL\", that start-up copies (less $20) to top_text: the title's alternate top line and the round shown for a finished game."
  },
  {
   "address": 18416,
   "type": "line",
   "text": "Characters $FE and $FF: where star_field puts the two star glyphs. As loaded, the last 22 bytes before it are unused."
  },
  {
   "address": 18424,
   "type": "line",
   "text": "Character $FF, the second star; effect_flood fills both stars' rows with $FF in each character set."
  },
  {
   "address": 18432,
   "type": "line",
   "text": "Second character set ($4800-$4FFF), the one shown with the screen at $5400. Built at run time: start copies the first 128 glyphs here, and each round's tiles, items and dynamic glyphs are written to both sets. As loaded it held the cracker's copy of $0400-$07FF, which the menu moves down before the game starts."
  },
  {
   "address": 18560,
   "type": "line",
   "text": "Second character set, characters $10-$14: copies of the round's wall glyphs."
  },
  {
   "address": 18600,
   "type": "line",
   "text": "Second character set, character $15."
  },
  {
   "address": 18608,
   "type": "line",
   "text": "Second character set, character $16."
  },
  {
   "address": 18616,
   "type": "line",
   "text": "Second character set, character $17."
  },
  {
   "address": 18624,
   "type": "line",
   "text": "Second character set, character $18."
  },
  {
   "address": 18632,
   "type": "line",
   "text": "Second character set, character $19."
  },
  {
   "address": 18640,
   "type": "line",
   "text": "Second character set, characters $1A and $1B: the round number."
  },
  {
   "address": 18688,
   "type": "line",
   "text": "Second character set, second page (start's copy loop)."
  },
  {
   "address": 18944,
   "type": "line",
   "text": "Second character set, third page; the letter bubbles are copied here."
  },
  {
   "address": 18960,
   "type": "line",
   "text": "Second character set, characters $42-$45: the points item."
  },
  {
   "address": 18992,
   "type": "line",
   "text": "Second character set, characters $46-$49: the special item."
  },
  {
   "address": 19200,
   "type": "line",
   "text": "Second character set, fourth page."
  },
  {
   "address": 19968,
   "type": "line",
   "text": "Second character set, characters $C0-$C8: the round banner's glyphs. Also, during bonus scenes, the low bytes of the blocks' screen addresses."
  },
  {
   "address": 20040,
   "type": "line",
   "text": "Second character set, characters $C9-$D1: the second row of the round banner."
  },
  {
   "address": 20224,
   "type": "line",
   "text": "During bonus scenes: high bytes of the blocks' screen addresses."
  },
  {
   "address": 20472,
   "type": "line",
   "text": "Second character set, character $FF."
  },
  {
   "address": 20480,
   "type": "line",
   "text": "First screen buffer ($5000-$53FF), shown with the character set at $4000. 40 columns: the playfield is columns 0-31 and the score panel columns 32-39. Run-time memory."
  },
  {
   "address": 20481,
   "type": "line",
   "text": "Second cell of the first screen: with $5000, the round number's two characters."
  },
  {
   "address": 20510,
   "type": "line",
   "text": "Top row, column 30 of the first screen: read while the next round scrolls in to copy the wall block's characters."
  },
  {
   "address": 20511,
   "type": "line",
   "text": "Top row, column 31 of the first screen."
  },
  {
   "address": 20560,
   "type": "line",
   "text": "Row 2, column 0 of the first screen: a wall-block character, which round_number_glyphs uses to find the block's glyph."
  },
  {
   "address": 20563,
   "type": "line",
   "text": "Row 2, column 3 of the first screen: start of the upper rule of the score table."
  },
  {
   "address": 20655,
   "type": "line",
   "text": "Ten cells of the title's top line in the first screen, switched between two texts."
  },
  {
   "address": 20736,
   "type": "line",
   "text": "Second page of the first screen."
  },
  {
   "address": 20892,
   "type": "line",
   "text": "Row 10, column 12 of the first screen: the nine cells of the round banner's first row."
  },
  {
   "address": 20947,
   "type": "line",
   "text": "Placeholder operand address inside the first screen (print_string's store)."
  },
  {
   "address": 20972,
   "type": "line",
   "text": "Row 12, column 12 of the first screen: the banner's second row."
  },
  {
   "address": 20992,
   "type": "line",
   "text": "Third page of the first screen."
  },
  {
   "address": 21083,
   "type": "line",
   "text": "Row 15, column 3 of the first screen: the lower rule of the score table."
  },
  {
   "address": 21162,
   "type": "line",
   "text": "Row 17, column 2 of the first screen: first of five rows the secret room fills with its floor characters."
  },
  {
   "address": 21202,
   "type": "line",
   "text": "Row 18, column 2: second floor row of the secret room."
  },
  {
   "address": 21242,
   "type": "line",
   "text": "Row 19, column 2: third floor row of the secret room."
  },
  {
   "address": 21248,
   "type": "line",
   "text": "Fourth page of the first screen."
  },
  {
   "address": 21282,
   "type": "line",
   "text": "Row 20, column 2: fourth floor row of the secret room."
  },
  {
   "address": 21322,
   "type": "line",
   "text": "Row 21, column 2: fifth floor row of the secret room."
  },
  {
   "address": 21400,
   "type": "line",
   "text": "Row 23 of the first screen, read by the round scroll."
  },
  {
   "address": 21440,
   "type": "line",
   "text": "Row 24, the bottom row of the first screen, where the round scroll feeds the next round in."
  },
  {
   "address": 21441,
   "type": "line",
   "text": "Bottom row, column 1."
  },
  {
   "address": 21470,
   "type": "line",
   "text": "Bottom row, column 30."
  },
  {
   "address": 21471,
   "type": "line",
   "text": "Bottom row, column 31."
  },
  {
   "address": 21476,
   "type": "line",
   "text": "Bottom row, column 36 of the first screen: the credits digit, decremented in place when a player rejoins."
  },
  {
   "address": 21496,
   "type": "line",
   "text": "The eight sprite pointers of the first screen."
  },
  {
   "address": 21498,
   "type": "line",
   "text": "Sprite pointers 2-7 of the first screen, the enemies' and the boss's."
  },
  {
   "address": 21504,
   "type": "line",
   "text": "Second screen buffer ($5400-$57FF), shown with the character set at $4800; build_round draws each new round here. As loaded it held the cracker's trainer menu ($5400-$55BE)."
  },
  {
   "address": 21505,
   "type": "line",
   "text": "Second cell of the second screen."
  },
  {
   "address": 21760,
   "type": "line",
   "text": "Second page of the second screen."
  },
  {
   "address": 21916,
   "type": "line",
   "text": "Row 10, column 12 of the second screen."
  },
  {
   "address": 21971,
   "type": "line",
   "text": "Placeholder operand address inside the second screen (print_string's store)."
  },
  {
   "address": 21996,
   "type": "line",
   "text": "Row 12, column 12 of the second screen."
  },
  {
   "address": 22016,
   "type": "line",
   "text": "Third page of the second screen."
  },
  {
   "address": 22272,
   "type": "line",
   "text": "Fourth page of the second screen."
  },
  {
   "address": 22484,
   "type": "line",
   "text": "Twenty cells in the second screen's bottom row where the title keeps the two alternative texts of its top line (\"GAME  OVER\" and the other), copied from top_text."
  },
  {
   "address": 22500,
   "type": "line",
   "text": "Bottom row, column 36 of the second screen: the credits digit."
  },
  {
   "address": 22520,
   "type": "line",
   "text": "The eight sprite pointers of the second screen."
  },
  {
   "address": 22522,
   "type": "line",
   "text": "Sprite pointers 2-7 of the second screen."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "Sprites $60-$67 ($5800-$59FF), 24 by 21 multicolour, 64 bytes each: the player's eight walking and standing frames, four facing each way (frames 0-7). Both players share them; only the colour differs. The first nine bytes of sprite $60 are cleared when a round is drawn."
  },
  {
   "address": 22655,
   "type": "line",
   "text": "Round that skip_rounds is heading for. Like the thirteen variables after it, it lives in the unused 64th byte of a sprite."
  },
  {
   "address": 22719,
   "type": "line",
   "text": "$FF once the objects have been ended for a bonus scene, so end_all_objects does nothing a second time."
  },
  {
   "address": 22783,
   "type": "line",
   "text": "Set to 2-5 by special item 7: how many times in a row the screen flashes and the giant block falls. Each time no block is on screen and the count is not zero the pass loop starts another, and the count goes down by one when a block ends."
  },
  {
   "address": 22847,
   "type": "line",
   "text": "Non-zero while the giant falling block is on screen."
  },
  {
   "address": 22911,
   "type": "line",
   "text": "Counts passes (draw_objects increments it); its low bits time the fire runs and the Barons' animation. Bonus scenes reuse it as the number of blocks left."
  },
  {
   "address": 22975,
   "type": "line",
   "text": "Next level whose leftover bubbles turn into food when it is cleared: when a round with this number starts, a food item is chosen for it ((level \u00d7 2 + 9), reduced below $2F) and this is moved on by food_round_step plus one. 0 at the start of a game, so round 1 is always one."
  },
  {
   "address": 23039,
   "type": "line",
   "text": "Step added to next_food_round each time it is reached, itself growing by one: 3 at the start, so the food rounds are 1, 5, 10, 16, 23 and so on."
  },
  {
   "address": 23040,
   "type": "line",
   "text": "Sprites $68-$6B: the player blowing a bubble, two frames facing each way (frames 8-$0B)."
  },
  {
   "address": 23167,
   "type": "line",
   "text": "The state players are in while a timed power lasts: $10 normally, $18 during the freeze item; round_timers puts players in that state back to 1 when the round ends."
  },
  {
   "address": 23231,
   "type": "line",
   "text": "State given to an enemy that gets out of its bubble: $0A normally, $16 (frozen) during the freeze item."
  },
  {
   "address": 23295,
   "type": "line",
   "text": "Non-zero while the nine-sprite boss (or the ending's figure) is on screen: makes the bottom interrupt position it."
  },
  {
   "address": 23296,
   "type": "line",
   "text": "Sprites $6C-$72: the player's death. Sprites $6C-$6E with the last blowing frame are the four spinning frames ($0B-$0E); sprites $6F-$72 are four frames of the dragon with a ring turning over its head (frames $0F-$12), which loop until the death sequence ends."
  },
  {
   "address": 23359,
   "type": "line",
   "text": "Level after which the next secret door may appear: $12 at the start, then 10 more each time, jumping to $4E after the door of round 50."
  },
  {
   "address": 23423,
   "type": "line",
   "text": "One bit per player who has not yet lost a life (1, 2 or 3 at the start); while any is set, secret doors can appear."
  },
  {
   "address": 23487,
   "type": "line",
   "text": "Thunder shots the boss can still take; while it is beaten, the countdown of that state."
  },
  {
   "address": 23551,
   "type": "line",
   "text": "The last EXTEND letter a vent released (0-4), to which the next letter round adds its random step. Kept in the spare byte of a sprite."
  },
  {
   "address": 23552,
   "type": "line",
   "text": "Sprites $70-$72: three of the four looping frames of the dragon with a ring over its head."
  },
  {
   "address": 23615,
   "type": "line",
   "text": "Number of the tune last started with play_tune."
  },
  {
   "address": 23744,
   "type": "line",
   "text": "Sprites $73-$7E: enemy kind 2, the white wind-up robot. Twelve frames: four walking each way, three tumbling when thrown, and one small picture inside a bubble ring that is shown while it is held."
  },
  {
   "address": 24512,
   "type": "line",
   "text": "Sprites $7F-$8A: enemy kind 3, the grey spiky creature, in the same twelve-frame arrangement."
  },
  {
   "address": 25280,
   "type": "line",
   "text": "Sprites $8B-$96: enemy kind 4, the green hooded head on a coiled spring, twelve frames."
  },
  {
   "address": 26048,
   "type": "line",
   "text": "Sprites $97-$9E: enemy kind 5, the pale green flyer, eight frames: four flying, three tumbling, one in a bubble."
  },
  {
   "address": 26560,
   "type": "line",
   "text": "Sprites $9F-$AA: enemy kind 6, the purple whale-shaped flyer, twelve frames."
  },
  {
   "address": 27328,
   "type": "line",
   "text": "Sprites $AB-$B2: enemy kind 7, the green-cloaked one with a red face, eight frames: two walking each way, three tumbling, one in a bubble."
  },
  {
   "address": 27840,
   "type": "line",
   "text": "Sprites $B3-$BA: enemy kind 8, the white robed one, eight frames."
  },
  {
   "address": 28352,
   "type": "line",
   "text": "Sprites $BB-$C0: enemy kind 9, the white robot on cyan legs, six frames: two walking, three tumbling, one in a bubble. The last sprite ends at $703F."
  },
  {
   "address": 28736,
   "type": "line",
   "text": "Music data kept in the last sprite slots ($7040-$7304): five eight-byte drum and bass patterns that several tunes call, then the voices of tunes 2 (the boss round), 3 (the freeze), 4 (game over), 6 (EXTEND), 8 (hurry up), 9 (the Barons), 10 (the secret room) and 11 (the ending). Events are a note and a length index, or a command with bit 7 set (music_command_table)."
  },
  {
   "address": 29445,
   "type": "line",
   "text": "Music command $80, start of a repeat: store the count that follows on the voice's stack, push the position after it, and go on."
  },
  {
   "address": 29463,
   "type": "line",
   "text": "Music command $82, end of a repeat: count down the voice's top repeat; if more remain go back to the pushed position, else drop it and go on."
  },
  {
   "address": 29491,
   "type": "line",
   "text": "Music command $84: copy 14 bytes from the address that follows into the voice's instrument block (frequency modulation only)."
  },
  {
   "address": 29494,
   "type": "line",
   "text": "Music command $86: copy 29 bytes from the address that follows into the voice's instrument block at $F2AE, $F2CB or $F2E8."
  },
  {
   "address": 29517,
   "type": "line",
   "text": "Operand: low byte of the instrument block being filled."
  },
  {
   "address": 29527,
   "type": "line",
   "text": "Low bytes of the three voices' instrument blocks ($F2AE, $F2CB, $F2E8), patched into the copy loops."
  },
  {
   "address": 29530,
   "type": "line",
   "text": "Low bytes of the three voices' working copies of the modulation settings ($F31B, $F33E, $F361)."
  },
  {
   "address": 29533,
   "type": "line",
   "text": "Music command $88: set the voice's transposition to the byte that follows."
  },
  {
   "address": 29542,
   "type": "line",
   "text": "Music command $8A: set the voice's arpeggio table to the byte that follows, an offset into the tables at $F2xx."
  },
  {
   "address": 29560,
   "type": "line",
   "text": "Music command $8C: route voices 1-3 through the filter ($D417 = $F7); the voice that drives the filter is left as it was."
  },
  {
   "address": 29564,
   "type": "line",
   "text": "Music command $8E: route this voice through the filter and let its instrument drive the cutoff."
  },
  {
   "address": 29576,
   "type": "line",
   "text": "Music command $90: filter routing $78, no voice through the filter, and the driving voice set to 3, which matches none of the three voices (0-2), so no note restarts the filter."
  },
  {
   "address": 29582,
   "type": "line",
   "text": "Music command $92: set the transposition from the first byte, then call the pattern at the address that follows."
  },
  {
   "address": 29590,
   "type": "line",
   "text": "Music command $94: push the position after the address that follows and continue at that address, a pattern call."
  },
  {
   "address": 29616,
   "type": "line",
   "text": "Operand: where the called pattern's address lies after the command byte, 1 or 2."
  },
  {
   "address": 29623,
   "type": "line",
   "text": "Music command $96: continue at the address that follows."
  },
  {
   "address": 29629,
   "type": "line",
   "text": "Music command $98: return from a pattern; at the bottom of the voice's stack the voice is finished instead and is switched off."
  },
  {
   "address": 29648,
   "type": "line",
   "text": "Load the music pointer from the top of the voice's stack."
  },
  {
   "address": 29661,
   "type": "line",
   "text": "Music command $9A: copy 16 bytes from the address that follows into the filter sweep block at $F30B."
  },
  {
   "address": 29685,
   "type": "line",
   "text": "Music command $9C: set the instrument's sustain and release byte to $FF and its release time to $FE in the voice's instrument block, so notes ring on; the gate time is not changed."
  },
  {
   "address": 29701,
   "type": "line",
   "text": "Push the music pointer on the voice's stack."
  },
  {
   "address": 29716,
   "type": "line",
   "text": "Replace the music pointer with the address stored at it + Y."
  },
  {
   "address": 29728,
   "type": "line",
   "text": "Add A to the music pointer."
  },
  {
   "address": 29738,
   "type": "line",
   "text": "Filter routing value for each voice: $F1, $F2, $F4."
  },
  {
   "address": 29741,
   "type": "line",
   "text": "Offset of each voice's instrument block from $F2AE: 0, $1D, $3A."
  },
  {
   "address": 29744,
   "type": "line",
   "text": "Offset of each voice's working block from $F31B: 0, $23, $46."
  },
  {
   "address": 29747,
   "type": "line",
   "text": "Each voice's first stack index: 0, $0C, $18."
  },
  {
   "address": 29750,
   "type": "line",
   "text": "Offset of each voice's registers in the SID: 0, 7, 14, and one past the last register of each (7, 14, 21)."
  },
  {
   "address": 29751,
   "type": "line",
   "text": "Each voice's register offset plus seven, the top of the loop that writes a voice's seven registers."
  },
  {
   "address": 29760,
   "type": "line",
   "text": "Sprites $D1-$D8 ($7440-$763F): the large bubble the players float in at the start of a game and between rounds, four sprites to a bubble (two rows of two) in two animation steps. The dragon inside is drawn across the middle, its upper part at the bottom of the top pair and its lower part at the top of the bottom pair."
  },
  {
   "address": 30272,
   "type": "line",
   "text": "Sprites $D9-$E1 ($7640-$787F): the round-100 boss facing right, three rows of three sprites. Sprites 2-7 show the top two rows and irq_boss_lower moves three of them down for the third."
  },
  {
   "address": 30848,
   "type": "line",
   "text": "Sprites $E2-$EA ($7880-$7ABF): the boss in its beaten state (frame 9), nine sprites."
  },
  {
   "address": 31424,
   "type": "line",
   "text": "Reverse the order of the four bit pairs of A: a multicolour byte mirrored left to right."
  },
  {
   "address": 31459,
   "type": "line",
   "text": "Round 100 only: make the nine mirrored boss sprites at $7C40-$7E7F (shown while the boss moves right) from the nine at $7640-$787F (shown while it moves left) by mirroring each of their 21 rows of three bytes; the three sprites of each row of the figure also change places."
  },
  {
   "address": 31535,
   "type": "line",
   "text": "Low bytes of the nine source sprites of build_boss_mirror."
  },
  {
   "address": 31544,
   "type": "line",
   "text": "High bytes of the nine source sprites."
  },
  {
   "address": 31553,
   "type": "line",
   "text": "Low bytes of the nine mirrored sprites' addresses."
  },
  {
   "address": 31562,
   "type": "line",
   "text": "High bytes of the nine mirrored sprites' addresses."
  },
  {
   "address": 31571,
   "type": "line",
   "text": "Print the right-hand panel (1UP, 2UP, TOP, CREDITS), the scores and lives, GAME OVER for a player who is out, and the number of credits plus one."
  },
  {
   "address": 31638,
   "type": "line",
   "text": "The string \"CREDITS\" for row $17, column $21 in colour 3, a second position, and the two digit cells that draw_panel fills in."
  },
  {
   "address": 31652,
   "type": "line",
   "text": "The credits digit of that string, written before it is printed, and the terminator."
  },
  {
   "address": 31654,
   "type": "line",
   "text": "Mark the five fire runs free and switch the water stream off."
  },
  {
   "address": 31667,
   "type": "line",
   "text": "Entry of both raster handlers: save A, X and Y in zero page, clear decimal mode, save the processor port and select RAM with I/O ($35)."
  },
  {
   "address": 31683,
   "type": "line",
   "text": "Wait five frames."
  },
  {
   "address": 31686,
   "type": "line",
   "text": "Wait ten frames."
  },
  {
   "address": 31688,
   "type": "line",
   "text": "Wait A frames, counting in $0100."
  },
  {
   "address": 31700,
   "type": "line",
   "text": "Draw handler for type $16, a bubble on its first pass: make it type 0 and draw it as the smallest stage."
  },
  {
   "address": 31707,
   "type": "line",
   "text": "Draw handler for type $36: free the object slot."
  },
  {
   "address": 31720,
   "type": "line",
   "text": "Print \"GAME OVER\" on the panel in the rows of player X."
  },
  {
   "address": 31742,
   "type": "line",
   "text": "Return in $40/$41 the address in the collision map of object X's cell, and in A its sub-row. The ADC's carry is the ASL's, bit 7 of the row."
  },
  {
   "address": 31764,
   "type": "line",
   "text": "Object type $28, the fireball of enemy kind 3: toggles its animation phase and flies as a horizontal shot that vanishes (type $38) at a wall and kills a player it touches."
  },
  {
   "address": 31777,
   "type": "line",
   "text": "Add 10 points to player X."
  },
  {
   "address": 31782,
   "type": "line",
   "text": "Add packed-decimal A to the score byte at $0400 + Y and carry into the bytes above it: Y selects the player and the digit pair."
  },
  {
   "address": 31799,
   "type": "line",
   "text": "Special item $21, the door of round 50: skip to round 70 (level $45)."
  },
  {
   "address": 31804,
   "type": "line",
   "text": "Special item $22, round 100's potion: count the player's weapon charge down, which sets bit 7 and arms the thunder bubbles."
  },
  {
   "address": 31808,
   "type": "line",
   "text": "576 bytes, zero in the loaded game: the nine mirrored boss sprites built on round 100 (sprites $F1-$F9); the second half is shared with the item sprite buffers."
  },
  {
   "address": 32000,
   "type": "line",
   "text": "Three 128-byte buffers (sprites $F4-$F9), zero in the loaded game: food sprites built from glyphs, the giant food, and the bonus pictures."
  },
  {
   "address": 32055,
   "type": "line",
   "text": "In the item sprite buffer: eight bytes patched into the giant picture of kind 1."
  },
  {
   "address": 32062,
   "type": "line",
   "text": "In the item sprite buffer: a byte of pixels that effect_six_sprites_b writes into its picture."
  },
  {
   "address": 32118,
   "type": "line",
   "text": "In the item sprite buffer: eight more patched bytes for giant kind 1."
  },
  {
   "address": 32128,
   "type": "line",
   "text": "Second 128-byte item sprite buffer (sprites $F6-$F7)."
  },
  {
   "address": 32188,
   "type": "line",
   "text": "In the second buffer: a byte of pixels that effect_six_sprites_b writes into its picture."
  },
  {
   "address": 32194,
   "type": "line",
   "text": "In the second buffer: another byte of pixels of that picture."
  },
  {
   "address": 32256,
   "type": "line",
   "text": "Third 128-byte item sprite buffer (sprites $F8-$F9)."
  },
  {
   "address": 32320,
   "type": "line",
   "text": "In the third buffer: the last byte of pixels that effect_six_sprites_b writes into its picture."
  },
  {
   "address": 32384,
   "type": "line",
   "text": "Read the keyboard: RUN/STOP pauses. The actors stop, the timers are saved, and the game waits for the key to be released, pressed again and released."
  },
  {
   "address": 32435,
   "type": "line",
   "text": "Wait a frame, then read the keyboard."
  },
  {
   "address": 32438,
   "type": "line",
   "text": "Select keyboard row 7 and return the column bits (through the cracker's stub) with the zero flag set when the value is $7F: RUN/STOP and no other key of the row."
  },
  {
   "address": 32449,
   "type": "line",
   "text": "Q (column 6 of row 7) quits: stop everything, silence the SID, drop the return address and go back to the title after 25 frames."
  },
  {
   "address": 32481,
   "type": "line",
   "text": "The message of the secret room: rows of character codes $85-$97 from the room's own alphabet with position codes, printed by print_string."
  },
  {
   "address": 32595,
   "type": "line",
   "text": "Give player X the ordinary bubble: travel $88, reload 8, range flag 4, speed 4, no fire breath, no bonuses, not fast, no weapon. On round 100 falls into the boss set-up."
  },
  {
   "address": 32646,
   "type": "line",
   "text": "Round 100: the special item is the potion ($22) and the points item number $51, both due at once; reload time 8 for both players; eight \"enemies\" so the round cannot be cleared; and the blow routine marks every bubble with its owner."
  },
  {
   "address": 32676,
   "type": "line",
   "text": "Special item $14, an umbrella: skip to three rounds ahead."
  },
  {
   "address": 32679,
   "type": "line",
   "text": "Special item $16, an umbrella: skip to seven rounds ahead."
  },
  {
   "address": 32690,
   "type": "line",
   "text": "Skip to the round in A (never past round 100): drop the caller's return addresses, flash the border, end every object, then build and scroll through each round in between until the target, and rejoin the main loop there."
  },
  {
   "address": 32753,
   "type": "line",
   "text": "Special item 0, the shoe: set the player's fast flag ($FE), so the player's handler gets a second call on every second run of the actor loop: three runs in four frames instead of two."
  },
  {
   "address": 32759,
   "type": "line",
   "text": "Nine zero bytes at the end of the video bank, unused."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "Bubble pictures: graphic columns. Each picture is 24 pixels wide and 16 high, stored as three 16-byte columns (one per character cell), multicolour. bubble_gfx_lo/hi point here: plain bubbles in six sizes and four half-cell shifts from $8000, then from $8240 the masks that go with them (render_mask operands)."
  },
  {
   "address": 32784,
   "type": "line",
   "text": "Second column of the first bubble picture: the base address patched into the renderer's second graphic operand."
  },
  {
   "address": 32800,
   "type": "line",
   "text": "Third column of the first bubble picture."
  },
  {
   "address": 32937,
   "type": "line",
   "text": "Inside the bubble pictures; referenced only as the operand of a BIT skip at $2396, not as data."
  },
  {
   "address": 33344,
   "type": "line",
   "text": "Bubble pictures: mask columns, in the same three-column layout; a set bit keeps the background pixel. Runs to $8487."
  },
  {
   "address": 33360,
   "type": "line",
   "text": "Second column of the first mask."
  },
  {
   "address": 33376,
   "type": "line",
   "text": "Third column of the first mask."
  },
  {
   "address": 33928,
   "type": "line",
   "text": "Three rows above the collision map: copies of its top row, so tests above the screen read the top row. Run-time memory, zero as loaded."
  },
  {
   "address": 33968,
   "type": "line",
   "text": "Second copy of the map's top row."
  },
  {
   "address": 34008,
   "type": "line",
   "text": "Third copy of the map's top row."
  },
  {
   "address": 34048,
   "type": "line",
   "text": "Collision and air-current map, 25 rows of 40 bytes ($8500-$88E7) for the 32 playfield columns: bit 7 set where a wall tile stands, bits 0-1 the air current there (0 up, 1 right, 2 down, 3 left). The last eight bytes of every row are not map: they hold one eight-entry actor array each."
  },
  {
   "address": 34049,
   "type": "line",
   "text": "Map row 0 from column 1, as the flyers test the top row for an opening."
  },
  {
   "address": 34058,
   "type": "line",
   "text": "Map cell row 0, column 10: the top-left vent that special bubbles come from."
  },
  {
   "address": 34068,
   "type": "line",
   "text": "Map cell row 0, column 20: the top-right vent."
  },
  {
   "address": 34080,
   "type": "line",
   "text": "Per actor (8): animation frame, added to the sprite base. Kept in the spare bytes of map row 0."
  },
  {
   "address": 34081,
   "type": "line",
   "text": "Player 2's animation frame."
  },
  {
   "address": 34082,
   "type": "line",
   "text": "Enemies' animation frames."
  },
  {
   "address": 34120,
   "type": "line",
   "text": "Per actor: sprite colour now."
  },
  {
   "address": 34121,
   "type": "line",
   "text": "Player 2's sprite colour now."
  },
  {
   "address": 34122,
   "type": "line",
   "text": "Enemies' sprite colours."
  },
  {
   "address": 34160,
   "type": "line",
   "text": "Per actor: its own colour (5 and 3 for the players), shown while it is fast."
  },
  {
   "address": 34162,
   "type": "line",
   "text": "First enemy's base colour; the title uses it as a text colour."
  },
  {
   "address": 34200,
   "type": "line",
   "text": "Per actor: number of the first sprite of its frame set."
  },
  {
   "address": 34202,
   "type": "line",
   "text": "Enemies' sprite bases."
  },
  {
   "address": 34203,
   "type": "line",
   "text": "Sprite bases from the second enemy on."
  },
  {
   "address": 34240,
   "type": "line",
   "text": "Per actor: 0 while it is still dropping in at the start of a round, $FF once it has landed."
  },
  {
   "address": 34242,
   "type": "line",
   "text": "Enemies' drop-in flags."
  },
  {
   "address": 34280,
   "type": "line",
   "text": "Per actor: its control bits. For the players the joystick register read this frame (bit 0 up, 2 left, 3 right, 4 fire, active low); for enemies a byte the AI keeps in the same layout, with bit 2 its \"wants to jump\" flag and the low bits its heading."
  },
  {
   "address": 34281,
   "type": "line",
   "text": "Player 2's joystick bits, read from port 1."
  },
  {
   "address": 34282,
   "type": "line",
   "text": "Enemies' control bytes."
  },
  {
   "address": 34320,
   "type": "line",
   "text": "Per actor: a small counter that slows its animation."
  },
  {
   "address": 34360,
   "type": "line",
   "text": "Per actor: runs of the actor loop (one every second frame) to wait before its handler is called; for an enemy its start delay from its record, during which it still animates."
  },
  {
   "address": 34361,
   "type": "line",
   "text": "Player 2's wait."
  },
  {
   "address": 34362,
   "type": "line",
   "text": "Enemies' start delays."
  },
  {
   "address": 34400,
   "type": "line",
   "text": "Per actor: countdown to the next change of an enemy's climbing decision."
  },
  {
   "address": 34402,
   "type": "line",
   "text": "Enemies' chase countdowns."
  },
  {
   "address": 34440,
   "type": "line",
   "text": "Per actor: reload value of the chase countdown (from the enemy's kind plus a random 0-31); for a player the flashing time after reappearing."
  },
  {
   "address": 34442,
   "type": "line",
   "text": "Enemies' chase periods."
  },
  {
   "address": 34480,
   "type": "line",
   "text": "Per actor: which of its two chase flags is set next, an offset (0 or $28) between the two flag arrays."
  },
  {
   "address": 34520,
   "type": "line",
   "text": "Per actor: $FF when an enemy should stay on its level or is level with its target."
  },
  {
   "address": 34560,
   "type": "line",
   "text": "Per actor: non-zero when an enemy should try to climb to the platform above."
  },
  {
   "address": 34600,
   "type": "line",
   "text": "Per actor: non-zero gives its handler a second call on every second run of the actor loop, which makes the actor half as fast again. Set for a player by the shoe ($FE) and for angry enemies ($FF)."
  },
  {
   "address": 34601,
   "type": "line",
   "text": "Player 2's fast flag."
  },
  {
   "address": 34602,
   "type": "line",
   "text": "Enemies' fast (angry) flags; $872A alone is the boss's."
  },
  {
   "address": 34640,
   "type": "line",
   "text": "Per actor: number of frames in one facing's set (4 or 2 by enemy kind); frames at or above it face the other way."
  },
  {
   "address": 34642,
   "type": "line",
   "text": "Enemies' frames per facing."
  },
  {
   "address": 34680,
   "type": "line",
   "text": "Per actor: frames per facing minus one, the wrap mask of the walk cycle."
  },
  {
   "address": 34682,
   "type": "line",
   "text": "Enemies' frame masks."
  },
  {
   "address": 34720,
   "type": "line",
   "text": "Per actor: steps left of a jump's rise, $FF when not jumping; for a thrown enemy its sideways speed; for food its timer; for a released enemy its saved state."
  },
  {
   "address": 34722,
   "type": "line",
   "text": "Enemies' jump counters (the array at actor_jump from its third entry)."
  },
  {
   "address": 34760,
   "type": "line",
   "text": "Per actor: index into the arc table on the way down, $FF when not in the second half of a jump; for a thrown enemy its rise time."
  },
  {
   "address": 34762,
   "type": "line",
   "text": "Enemies' fall phases."
  },
  {
   "address": 34800,
   "type": "line",
   "text": "Per actor: $FF while standing or jumping, 0 or more while falling with nothing underfoot; a thrown enemy's direction."
  },
  {
   "address": 34802,
   "type": "line",
   "text": "Enemies' falling flags."
  },
  {
   "address": 34840,
   "type": "line",
   "text": "Per actor: countdown of the player's blowing animation or an enemy's readied shot, $FF when idle."
  },
  {
   "address": 34842,
   "type": "line",
   "text": "Enemies' shot countdowns."
  },
  {
   "address": 34880,
   "type": "line",
   "text": "Per actor: $FF while a jump drifts left; for a beaten enemy, its kind, kept for the tumbling frames."
  },
  {
   "address": 34882,
   "type": "line",
   "text": "Enemies' left-drift flags; a beaten enemy's kind is kept here for its tumbling frames."
  },
  {
   "address": 34920,
   "type": "line",
   "text": "Per actor: $FF while a jump drifts right; a thrown enemy's speed downwards."
  },
  {
   "address": 34922,
   "type": "line",
   "text": "Enemies' right-drift flags; a thrown enemy's downward speed."
  },
  {
   "address": 34960,
   "type": "line",
   "text": "Per actor: a general timer and number: an enemy's reload time, its drop-in target Y at the start of a round, and for food the rank that picks its picture and score."
  },
  {
   "address": 34962,
   "type": "line",
   "text": "Enemies' timers: reload times, drop-in targets and food ranks."
  },
  {
   "address": 35008,
   "type": "line",
   "text": "Map row 24, the bottom row, whose openings the wrap-around tests read."
  },
  {
   "address": 35009,
   "type": "line",
   "text": "Bottom map row from column 1."
  },
  {
   "address": 35017,
   "type": "line",
   "text": "Bottom map row, columns 9-12, the left opening: on round 73 special_round_setup writes the current 2 (down) into these four cells."
  },
  {
   "address": 35018,
   "type": "line",
   "text": "Map cell row 24, column 10: the bottom-left vent."
  },
  {
   "address": 35028,
   "type": "line",
   "text": "Map cell row 24, column 20: the bottom-right vent."
  },
  {
   "address": 35048,
   "type": "line",
   "text": "Three rows below the collision map: copies of its bottom row, for tests below the screen."
  },
  {
   "address": 35057,
   "type": "line",
   "text": "The same four cells in the first copy of the bottom row, written on round 73."
  },
  {
   "address": 35088,
   "type": "line",
   "text": "Second copy of the map's bottom row."
  },
  {
   "address": 35097,
   "type": "line",
   "text": "The same four cells in the second copy of the bottom row, written on round 73."
  },
  {
   "address": 35128,
   "type": "line",
   "text": "Third copy of the map's bottom row."
  },
  {
   "address": 35137,
   "type": "line",
   "text": "The same four cells in the third copy of the bottom row, written on round 73."
  },
  {
   "address": 35160,
   "type": "line",
   "text": "Forty zero bytes as loaded; in play the tail of the last map copy row and unused bytes before the pop pictures."
  },
  {
   "address": 35200,
   "type": "line",
   "text": "Eight pictures of a bursting bubble, three 16-byte graphic columns each: a ring of dots in four half-cell shifts, then scattered sparks in four. pop_gfx_lo/hi point here; they are drawn through the full bubble's mask."
  },
  {
   "address": 35584,
   "type": "line",
   "text": "As loaded: the title page's tune (tune 7), its three voices starting at $8B00, $8BDC and $8CBF and its two instruments at $8DA8 and $8DC5. It can play only once: from the first game on, $8B00-$8EFF is the clean copy of the screen that bubbles are erased from, the path buffer of the floating bubbles and the unpacked layout."
  },
  {
   "address": 35586,
   "type": "line",
   "text": "In play: third byte of the unpacked layout's first row (the base reverse_bits indexes)."
  },
  {
   "address": 35587,
   "type": "line",
   "text": "In play: fourth byte of the first row, whose low two bits take the top row's gap code."
  },
  {
   "address": 35588,
   "type": "line",
   "text": "In play: the unpacked layout from its second row, four bytes a row."
  },
  {
   "address": 35683,
   "type": "line",
   "text": "In play: fourth byte of the unpacked layout's bottom row."
  },
  {
   "address": 35840,
   "type": "line",
   "text": "Second page of the title tune as loaded; in play the second page of the clean screen copy and the Y coordinates of player 1's path."
  },
  {
   "address": 35996,
   "type": "line",
   "text": "In play: the clean copy of the nine cells the round banner covers in row 10."
  },
  {
   "address": 36076,
   "type": "line",
   "text": "In play: the clean copy of the banner's cells in row 12."
  },
  {
   "address": 36096,
   "type": "line",
   "text": "Third page of the title tune as loaded, ending with its instruments at $8DE1; in play the third page of the clean screen copy and player 2's path."
  },
  {
   "address": 36322,
   "type": "line",
   "text": "292 zero bytes as loaded, after the title tune; in play the rest of the clean screen copy."
  },
  {
   "address": 36352,
   "type": "line",
   "text": "In play: fourth page of the clean screen copy and the Y coordinates of player 2's path."
  },
  {
   "address": 36614,
   "type": "line",
   "text": "Object pictures from $8F00 on, three 16-byte columns each as in bubble_gfx. $8F00-$8FBF the Baron, four pictures (two steps, facing each way), and $8FC0-$907F their masks."
  },
  {
   "address": 36992,
   "type": "line",
   "text": "Four half-cell shifts of the water bubble (object type 6): a bubble half full of water."
  },
  {
   "address": 37184,
   "type": "line",
   "text": "Four shifts of the fire bubble (type 8): a bubble with a flame in it."
  },
  {
   "address": 37376,
   "type": "line",
   "text": "Four shifts of the thunder bubble (type $0A): a bubble with a lightning flash across it. Then at $92C0 the thunder shot itself, two columns of graphics and two of mask."
  },
  {
   "address": 37632,
   "type": "line",
   "text": "Four shifts of the falling flame (type $24) and, from $93C0, the four masks shared with the boulder."
  },
  {
   "address": 38016,
   "type": "line",
   "text": "Four shifts of the letter bubble E (type $0C)."
  },
  {
   "address": 38208,
   "type": "line",
   "text": "Four shifts of the letter bubble X (type $0E)."
  },
  {
   "address": 38400,
   "type": "line",
   "text": "Four shifts of the letter bubble T (type $10)."
  },
  {
   "address": 38592,
   "type": "line",
   "text": "Four shifts of the letter bubble N (type $12)."
  },
  {
   "address": 38784,
   "type": "line",
   "text": "Four shifts of the letter bubble D (type $14), then at $9840 and $9870 the boulder's two pictures."
  },
  {
   "address": 39072,
   "type": "line",
   "text": "Four pictures of the bottle (type $2C) tumbling, two columns each, at $98A0, $98C0, $98E0 and $9900; then the bolt of enemy kind 9 at $9920; then the bottle's and the bolt's masks from $9940."
  },
  {
   "address": 39392,
   "type": "line",
   "text": "Four pictures of the fireball (types $28 and $44), two columns each, at $99E0-$9A5F, and their four masks at $9A60-$9ADF."
  },
  {
   "address": 39648,
   "type": "line",
   "text": "Item pictures: 58 of them, 32 bytes each, four multicolour glyphs (top left, bottom left, top right, bottom right) making a 16 by 16 picture. Numbered by the two picture tables: foods, jewels and the special items. item_picture_address returns $9AE0 + 32 \u00d7 n."
  },
  {
   "address": 39904,
   "type": "line",
   "text": "Item pictures 8-15 (second page copied to the characters of the EXTEND scene)."
  },
  {
   "address": 40160,
   "type": "line",
   "text": "Item pictures 16-23."
  },
  {
   "address": 40416,
   "type": "line",
   "text": "Item pictures 24-31."
  },
  {
   "address": 40672,
   "type": "line",
   "text": "Item pictures 32-39; pictures 40-57 follow, to $A21F."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "Item pictures 41-57, 32 bytes each, to $A21F."
  },
  {
   "address": 41504,
   "type": "line",
   "text": "The giant falling block (object type $46): ten glyphs of graphics at $A220-$A26F and their masks at $A270-$A2BF, placed in a 3 by 3 pattern with a tail (giant_block_cells); then 96 bytes of further shapes to $A31F."
  },
  {
   "address": 41760,
   "type": "line",
   "text": "Sprite picture of giant food kind 0, 256 bytes for four sprites, copied to the item buffers by build_giant_food."
  },
  {
   "address": 42016,
   "type": "line",
   "text": "Eight bytes patched into the giant picture of kind 1. The address is also where kinds 1-4 start their 256-byte copy, of which only the second half ($A4A0-$A51F) is kept."
  },
  {
   "address": 42024,
   "type": "line",
   "text": "Start of every bonus scene: stop the actors, end all objects, restore the playfield, remove the enemies and both items, stop the timer, clear the bonus block lists and the item glyphs, and load the scene's digit glyphs (160 bytes from small_digits) into characters $60-$73. Leaves three pointers at the second row of the map, the screen and colour RAM. It sets both delays and the timer to $FF and points_item to 0; special_item is not touched."
  },
  {
   "address": 42100,
   "type": "line",
   "text": "Flip the screen buffers unless the back buffer is already $5400."
  },
  {
   "address": 42110,
   "type": "line",
   "text": "34 unused zero bytes, then at $A4A0 the two-sprite picture shared by giant food kinds 1-4 and 128 more bytes of sprite shapes to $A59F."
  },
  {
   "address": 42400,
   "type": "line",
   "text": "The star field with two rows of character $1E as rules above and below the score table."
  },
  {
   "address": 42423,
   "type": "line",
   "text": "Round 100 is won: add score code $10 to the middle byte of the winner's score (10,000 points) a hundred times, a frame apart (1,000,000 points in all), show the stars and the congratulation text with tune $51, and switch on sprites 2-7, with which place_boss draws the boss's top two rows in colour 5 and walks it to and fro (irq_boss_lower adds the third row as on round 100); then wait for fire to be pressed and released."
  },
  {
   "address": 42424,
   "type": "line",
   "text": "Operand: the player (0 or 1) who touched the beaten boss; the ending pays that player."
  },
  {
   "address": 42533,
   "type": "line",
   "text": "Print the fixed string at $A63A (five blanks, two characters 0 and seven blanks: an empty line of the score table) in colour X at column $0F of row Y: Y is stored as the string's row byte at $A63C and X as the colour byte at $A63D."
  },
  {
   "address": 42546,
   "type": "line",
   "text": "Y positions of the two player sprites on the score table."
  },
  {
   "address": 42548,
   "type": "line",
   "text": "Low bytes of the screen addresses where the score table prints each player's round, and the top round."
  },
  {
   "address": 42551,
   "type": "line",
   "text": "High bytes of those three screen addresses."
  },
  {
   "address": 42554,
   "type": "line",
   "text": "The string print_at prints: a position code with a fixed column $0F and a row byte that print_at fills in, a colour byte it fills in, then five blanks, two zeros and seven blanks, an empty line of the score table."
  },
  {
   "address": 42556,
   "type": "line",
   "text": "Row byte of that string, patched by print_at with Y."
  },
  {
   "address": 42557,
   "type": "line",
   "text": "Colour byte of that string, patched by print_at with X, and the characters that follow."
  },
  {
   "address": 42573,
   "type": "line",
   "text": "Special item 6, the red cross: give the player $13 (19) fireballs: fire then breathes a fireball that flies straight and kills enemies, instead of blowing a bubble."
  },
  {
   "address": 42579,
   "type": "line",
   "text": "Special item 7, the yellow cross: set sky_flash_count to 2-5, the number of flashes and falling blocks that follow one after another."
  },
  {
   "address": 42592,
   "type": "line",
   "text": "Glyphs of the secret room: the room's own alphabet for its message, its frame and floor. effect_secret_room copies 256 bytes from here to characters $60-$7F, of which the first 176 are these glyphs, and the first 50 bytes also to the wall glyph slot."
  },
  {
   "address": 42768,
   "type": "line",
   "text": "Column of each of the 18 block positions of the secret room's left half; each is mirrored to the right half."
  },
  {
   "address": 42786,
   "type": "line",
   "text": "Row of each of those 18 block positions."
  },
  {
   "address": 42805,
   "type": "line",
   "text": "Sprite X where each player stands at the start of a life: $2C and $EC."
  },
  {
   "address": 42807,
   "type": "line",
   "text": "Animation frame each player starts with: 0 (facing right) and 4 (facing left)."
  },
  {
   "address": 42809,
   "type": "line",
   "text": "Row of the GAME OVER text for each player: 7 and $0E. The string itself starts two bytes on."
  },
  {
   "address": 42813,
   "type": "line",
   "text": "The GAME OVER string: a position on the panel (patched for the player), colour 1, \"GAME\", a second position and \"OVER\"."
  },
  {
   "address": 42821,
   "type": "line",
   "text": "Second half of the GAME OVER string: the row byte patched for the player, \"OVER\" and the end code."
  },
  {
   "address": 42827,
   "type": "line",
   "text": "Column of each of the ten cells of the water stream's trail, head last ($A74B-$A755)."
  },
  {
   "address": 42828,
   "type": "line",
   "text": "The trail's columns from the second cell, the source of the shift that moves the trail along."
  },
  {
   "address": 42836,
   "type": "line",
   "text": "Column of the cell behind the stream's head: where carried actors are held."
  },
  {
   "address": 42837,
   "type": "line",
   "text": "Column of the stream's head."
  },
  {
   "address": 42838,
   "type": "line",
   "text": "Row of each of the ten cells of the stream's trail ($A756-$A760); $1D or more means off the bottom."
  },
  {
   "address": 42839,
   "type": "line",
   "text": "The trail's rows from the second cell."
  },
  {
   "address": 42847,
   "type": "line",
   "text": "Row of the cell behind the stream's head."
  },
  {
   "address": 42848,
   "type": "line",
   "text": "Row of the stream's head."
  },
  {
   "address": 42849,
   "type": "line",
   "text": "Per fire run (5): its leftmost column."
  },
  {
   "address": 42854,
   "type": "line",
   "text": "Per fire run: its row."
  },
  {
   "address": 42859,
   "type": "line",
   "text": "Per fire run: its length in cells."
  },
  {
   "address": 42863,
   "type": "line",
   "text": "One byte before the fire timers: the base clear_fire_and_water indexes from 1."
  },
  {
   "address": 42864,
   "type": "line",
   "text": "Per fire run: its burn stage, 6 down to 0, counted down every fourth pass; $FF when the slot is free."
  },
  {
   "address": 42869,
   "type": "line",
   "text": "Per Baron (2): passes left of the pause between its bursts of movement."
  },
  {
   "address": 42871,
   "type": "line",
   "text": "The two columns a Baron can start in: 2 and $1B."
  },
  {
   "address": 42873,
   "type": "line",
   "text": "The two rows a Baron can start in: 5 and $19."
  },
  {
   "address": 42875,
   "type": "line",
   "text": "Per player: calls between bubbles, 8 normally and 3 with the fast-reload power."
  },
  {
   "address": 42876,
   "type": "line",
   "text": "Player 2's reload time."
  },
  {
   "address": 42877,
   "type": "line",
   "text": "Per player: the travel counter a new bubble starts with, $88 normally and $8C with the long-range power: the low bits are its steps of 8 pixels, 8 or 12. Bit 7 is cleared after the first step."
  },
  {
   "address": 42879,
   "type": "line",
   "text": "Per player: copied into a new bubble's cargo slot; 4 normally, $FF with the long-range power, which halves the index into the growth table, so over its twelve steps the bubble is small for one, medium for six and full size for five."
  },
  {
   "address": 42881,
   "type": "line",
   "text": "Per player: copied into a new bubble; 4 normally, $FF with the fast-bubble power, which makes the bubble take two steps a pass."
  },
  {
   "address": 42882,
   "type": "line",
   "text": "Player 2's bubble speed."
  },
  {
   "address": 42883,
   "type": "line",
   "text": "Per player: fireballs left, $FF for none; the fire power gives $13. Also the base of the food sprite address table (low bytes) for actors 2-7."
  },
  {
   "address": 42884,
   "type": "line",
   "text": "After player 2's fire-breath count: low bytes of the food sprite buffers of actors 2-7 ($7D00, $7D40, $7D80, $7DC0, $7E00, $7E40), indexed from fire_breath by actor number."
  },
  {
   "address": 42889,
   "type": "line",
   "text": "Last two low bytes of those buffers, then their high bytes ($7D and $7E), indexed from here by actor number 2-7."
  },
  {
   "address": 42896,
   "type": "line",
   "text": "Item number of the food a beaten enemy leaves, indexed from 1 by its rank (its place in a chain of bursts, or its cause of death): items 8, $11, 2, $18, $0A, $1D, $29, $2B, $2C for ranks 1-9. The byte at this address itself is the last food-buffer high byte."
  },
  {
   "address": 42906,
   "type": "line",
   "text": "Score of each food rank, indexed from 1: 500 points for rank 1 (the code $50 in the low score byte), then 1,000, 2,000, 3,000, 4,000, 5,000, 8,000 and 9,000 for ranks 2-8. Rank 9, which kill_enemy gives every enemy not beaten in a chain, reads the next table's first byte, $0A, which the decimal add turns into 10,000."
  },
  {
   "address": 42915,
   "type": "line",
   "text": "X step per call of each of the six gathering sprites of state $13, indexed by actor 2-7 (the first entries belong to the table before)."
  },
  {
   "address": 42920,
   "type": "line",
   "text": "Y step per call of each of the six gathering sprites, indexed by actor 2-7."
  },
  {
   "address": 42928,
   "type": "line",
   "text": "X of the six sprites in the first flashing formation of state $14: two rows at $54, $84, $B4."
  },
  {
   "address": 42934,
   "type": "line",
   "text": "Y of the six sprites in the first formation: $67 and $91."
  },
  {
   "address": 42940,
   "type": "line",
   "text": "X of the six sprites in the second formation: $78, $90, $A8."
  },
  {
   "address": 42946,
   "type": "line",
   "text": "Y of the six sprites in the second formation: $7C and $91."
  },
  {
   "address": 42952,
   "type": "line",
   "text": "Results of a bonus room: \"BONUS\", and \"500X\" under each player's column, where the counts are printed."
  },
  {
   "address": 42978,
   "type": "line",
   "text": "\"PERFECT\" and its award, printed for a player only when every block was taken; its colour byte is patched to black otherwise."
  },
  {
   "address": 42980,
   "type": "line",
   "text": "Column byte of the PERFECT string, patched for the player."
  },
  {
   "address": 42990,
   "type": "line",
   "text": "Column byte of the award line, patched for the player."
  },
  {
   "address": 42992,
   "type": "line",
   "text": "First character of the award, patched to make \"100000\" or \" 50000\"."
  },
  {
   "address": 42993,
   "type": "line",
   "text": "Second character of the award and the four zeros after it."
  },
  {
   "address": 42999,
   "type": "line",
   "text": "Screen columns of the two players' counts in the bonus results (0 and 9), then the EXTEND message: \"PLAYER n GETS\"."
  },
  {
   "address": 43012,
   "type": "line",
   "text": "The player number in the EXTEND message, patched before printing."
  },
  {
   "address": 43021,
   "type": "line",
   "text": "First characters of the six big letter blocks shown in a row in the EXTEND scene."
  },
  {
   "address": 43027,
   "type": "line",
   "text": "Per player: the fast flag saved while the freeze item overrides it, restored when the round ends."
  },
  {
   "address": 43028,
   "type": "line",
   "text": "Player 2's saved fast flag."
  },
  {
   "address": 43029,
   "type": "line",
   "text": "Low bytes of the five giant food pictures' addresses."
  },
  {
   "address": 43034,
   "type": "line",
   "text": "High bytes of the five giant food pictures' addresses."
  },
  {
   "address": 43039,
   "type": "line",
   "text": "Colour of each of the five giant foods."
  },
  {
   "address": 43044,
   "type": "line",
   "text": "Per player: calls until the next bubble may be blown, counted down every pass."
  },
  {
   "address": 43045,
   "type": "line",
   "text": "Player 2's reload timer."
  },
  {
   "address": 43046,
   "type": "line",
   "text": "Low bytes of the four fireball pictures: two for each direction."
  },
  {
   "address": 43050,
   "type": "line",
   "text": "Low bytes of the four fireball masks, in the same order."
  },
  {
   "address": 43054,
   "type": "line",
   "text": "Screen offsets of the ten cells of the giant falling block (rows of three with a two-cell tail), then four bytes used by neighbouring code."
  },
  {
   "address": 43068,
   "type": "line",
   "text": "Low bytes of the twelve small digit shapes round_number_glyphs draws: 0-9 and the two halves of \"100\"."
  },
  {
   "address": 43080,
   "type": "line",
   "text": "High bytes of those shapes, all $AD."
  },
  {
   "address": 43092,
   "type": "line",
   "text": "Thirty-five bytes: the picture copied into the item sprite buffer by effect_six_sprites_a, a round blob."
  },
  {
   "address": 43127,
   "type": "line",
   "text": "Twenty-seven bytes: nine rows of three bytes that effect_six_sprites_b mirrors top to bottom into a symmetrical picture."
  },
  {
   "address": 43154,
   "type": "line",
   "text": "Picture number of each of the 47 points items, by item number."
  },
  {
   "address": 43201,
   "type": "line",
   "text": "Picture number of each of the 35 special items."
  },
  {
   "address": 43236,
   "type": "line",
   "text": "Colour RAM value of each of the 47 points items (bit 3 set selects multicolour, the low three bits the colour)."
  },
  {
   "address": 43283,
   "type": "line",
   "text": "Colour RAM value of each of the 35 special items."
  },
  {
   "address": 43318,
   "type": "line",
   "text": "Score code of each points item. Items 0-14 are added to the low score byte, which counts tens: 10, 40, 50, 50, 70, 70, 200, 350, 500, 500, 500, 700, 700, 750 and 850 points. From item 15 the code goes to the middle byte, which counts thousands: 1,000 up to 12,000."
  },
  {
   "address": 43365,
   "type": "line",
   "text": "Score code of each special item: for items below $18 it is added to the low score byte (tens), so $10 is 100 points, $20 is 200, $50 is 500 and $01 is 10; from item $18 it goes to the middle byte and counts thousands."
  },
  {
   "address": 43400,
   "type": "line",
   "text": "Thirty-two bytes ANDed into the letter-bubble glyphs: the round outline of a bubble as four glyph masks. Set to $FF while the EXTEND scene builds plain letter blocks."
  },
  {
   "address": 43432,
   "type": "line",
   "text": "Glyph numbers (within the small digit set) of the six characters \"ROUND \" of the round banner."
  },
  {
   "address": 43438,
   "type": "line",
   "text": "Tens digit of the round shown in the banner; 1 for round 100."
  },
  {
   "address": 43439,
   "type": "line",
   "text": "Units digit of the round shown in the banner."
  },
  {
   "address": 43440,
   "type": "line",
   "text": "Third character of the banner's number: blank ($13), or 0 for round 100."
  },
  {
   "address": 43441,
   "type": "line",
   "text": "Seconds for which the ROUND and READY banner stays on screen: round_banner sets 2, the bottom interrupt counts it down, and when it reaches zero the banner's cells are restored and it becomes $FF. Nothing else sets it."
  },
  {
   "address": 43442,
   "type": "line",
   "text": "Per object (18): the blown bubble's travel counter with bit 7 set, 0 once it floats."
  },
  {
   "address": 43460,
   "type": "line",
   "text": "Per object: its position within the cell, 0-3, in steps of two pixels; shots use bit 0 as an animation phase."
  },
  {
   "address": 43462,
   "type": "line",
   "text": "Sub-columns of objects 2-17, as the enemies' shot code indexes them."
  },
  {
   "address": 43478,
   "type": "line",
   "text": "Per object: its offset down within the cell, 0-7 pixels."
  },
  {
   "address": 43480,
   "type": "line",
   "text": "Sub-rows of objects 2-17, as the enemies' shot code indexes them."
  },
  {
   "address": 43496,
   "type": "line",
   "text": "Per object: the colour RAM value of its cells."
  },
  {
   "address": 43514,
   "type": "line",
   "text": "Per object: passes left before it bursts, escapes or vanishes."
  },
  {
   "address": 43516,
   "type": "line",
   "text": "Lifetimes of objects 2-17; a readied enemy shot gets 9 here."
  },
  {
   "address": 43532,
   "type": "line",
   "text": "Per object: its sprite-coordinate X, kept alongside column and sub-column for distance tests."
  },
  {
   "address": 43534,
   "type": "line",
   "text": "The same array for objects 2-17; an enemy's shot keeps its thrower's number here."
  },
  {
   "address": 43550,
   "type": "line",
   "text": "Per object: its sprite-coordinate Y."
  },
  {
   "address": 43552,
   "type": "line",
   "text": "Sprite-coordinate Y of objects 2-17; an enemy's shot keeps its thrower's number here instead."
  },
  {
   "address": 43568,
   "type": "line",
   "text": "Per object: the kind (state) of the enemy held in the bubble; for a new bubble the range flag; for a Baron its burst length."
  },
  {
   "address": 43586,
   "type": "line",
   "text": "Per object: the type it had before it burst, or the held enemy's animation frame, or a Baron's step counter."
  },
  {
   "address": 43588,
   "type": "line",
   "text": "Previous types of objects 2-17; a new falling bolt gets its own type here."
  },
  {
   "address": 43604,
   "type": "line",
   "text": "Low bytes of the address of each object picture's first graphic column, 58 entries by picture number (type \u00d7 2 + shift for bubbles)."
  },
  {
   "address": 43662,
   "type": "line",
   "text": "High bytes of the object pictures' graphic addresses."
  },
  {
   "address": 43720,
   "type": "line",
   "text": "Low bytes of the address of each object picture's first mask column."
  },
  {
   "address": 43778,
   "type": "line",
   "text": "High bytes of the object pictures' mask addresses."
  },
  {
   "address": 43841,
   "type": "line",
   "text": "Low bytes of the eight pop pictures' addresses."
  },
  {
   "address": 43849,
   "type": "line",
   "text": "High bytes of the eight pop pictures' addresses."
  },
  {
   "address": 43857,
   "type": "line",
   "text": "Offset from $0400 of each player's least significant score byte: 2 and 5."
  },
  {
   "address": 43858,
   "type": "line",
   "text": "Indexed from 1 by the number of enemies burst in one chain: the packed-decimal bonus added to the player's middle score byte: 1, 2, 4, 8, 10, 20 thousand. It is the bit table that follows, read as decimal. The byte at this address is player 2's score offset."
  },
  {
   "address": 43859,
   "type": "line",
   "text": "Bit of each player in doors_possible (1 and 2), and from the same address the six letter bits of EXTEND: 1, 2, 4, 8, $10, $20."
  },
  {
   "address": 43861,
   "type": "line",
   "text": "Sprite enable bit of each enemy: 4, 8, $10, $20, $40, $80."
  },
  {
   "address": 43867,
   "type": "line",
   "text": "Low bytes of the four bottle pictures."
  },
  {
   "address": 43871,
   "type": "line",
   "text": "Low bytes of the bottle's masks, followed by the per-kind enemy tables."
  },
  {
   "address": 43873,
   "type": "line",
   "text": "Base of the enemies' colour by kind, indexed by state 2-9, so the first entry used is two bytes on: grey, light grey, green, light green, purple, green, cyan, light grey."
  },
  {
   "address": 43881,
   "type": "line",
   "text": "Base of the first sprite of each enemy kind, indexed by state 2-9: $73, $7F, $8B, $97, $9F, $AB, $B3, $BB."
  },
  {
   "address": 43889,
   "type": "line",
   "text": "Base of each kind's chase period, indexed by state 2-9: $1E, $19, 0, $0F, $14, $14, $0A, $14 calls, to which 0-31 is added at random."
  },
  {
   "address": 43897,
   "type": "line",
   "text": "Base of each kind's frames per facing, indexed by state 2-9: 4 for kinds 2-6 and 2 for kind 7; the entries for kinds 8 and 9 are the first two bytes of the next table, 2 and 0."
  },
  {
   "address": 43905,
   "type": "line",
   "text": "Base of the frame shown while each kind is held in a bubble, indexed by state 2-9: $0B, $0B, $0B, 7, $0B, 7, 7, 5."
  },
  {
   "address": 43913,
   "type": "line",
   "text": "Base of each kind's first tumbling frame, indexed by state 2-9: 7, 7, 7, 3, 7, 3, 3, 1. Followed from $AB93 by the panel's layout string."
  },
  {
   "address": 44033,
   "type": "line",
   "text": "The table of row \u00d7 40 read eight bytes early (rows -4 and up), as the object code indexes it with row \u00d7 2."
  },
  {
   "address": 44034,
   "type": "line",
   "text": "High bytes of the row table as the object code reads it, eight bytes early."
  },
  {
   "address": 44035,
   "type": "line",
   "text": "The same table read six bytes early, as actor_map_pointer indexes it."
  },
  {
   "address": 44036,
   "type": "line",
   "text": "High bytes of the row table as actor_map_pointer reads it, six bytes early."
  },
  {
   "address": 44041,
   "type": "line",
   "text": "Row \u00d7 40 for rows 0-24, low and high byte in turn: the offset of a screen or map row."
  },
  {
   "address": 44042,
   "type": "line",
   "text": "The same table from its first high byte. After its 50 bytes, at $AC41, the story text of the opening."
  },
  {
   "address": 44214,
   "type": "line",
   "text": "Object type of a blown bubble at each step of its flight, indexed by the travel it had left before the step, 8 down to 1: small (0) for three steps, medium (2) for three, full size (4) for the last two. Entry 0 is never used."
  },
  {
   "address": 44221,
   "type": "line",
   "text": "Character drawn for a fire run at each of its seven burn stages; 0 restores the background, $40 and $41 are the tall flames."
  },
  {
   "address": 44228,
   "type": "line",
   "text": "Frame offset of the player's blowing animation at each of its six steps, added to the facing's base."
  },
  {
   "address": 44235,
   "type": "line",
   "text": "Per player: which way the player faced when the bubble was started (0 or 2)."
  },
  {
   "address": 44237,
   "type": "line",
   "text": "Pixels a player rises per call at each of the 16 steps of a jump, and falls on the way down: 0, 1, 1, 2, 2, 2, 3 ... 4."
  },
  {
   "address": 44253,
   "type": "line",
   "text": "The same arc for enemies, slightly flatter at the top."
  },
  {
   "address": 44269,
   "type": "line",
   "text": "Pixels per step for an enemy's jump with sideways drift: 1 a step. After its 16 bytes, at $ACFD, the round banner's string of glyph characters."
  },
  {
   "address": 44309,
   "type": "line",
   "text": "Glyph numbers of the nine characters of the banner's second row, \"READY !!\"."
  },
  {
   "address": 44318,
   "type": "line",
   "text": "Low bytes of row \u00d7 40 for rows -4 to 26, one table for the back screen, the map and colour RAM; the views below read it at other offsets."
  },
  {
   "address": 44319,
   "type": "line",
   "text": "The row table one row on (draw_objects)."
  },
  {
   "address": 44320,
   "type": "line",
   "text": "The row table two rows on (the giant block)."
  },
  {
   "address": 44322,
   "type": "line",
   "text": "The row table from row 0 (draw_block)."
  },
  {
   "address": 44349,
   "type": "line",
   "text": "High bytes of row \u00d7 40 for rows -4 up, to which a page base is added."
  },
  {
   "address": 44350,
   "type": "line",
   "text": "The high-byte table one row on."
  },
  {
   "address": 44351,
   "type": "line",
   "text": "The high-byte table two rows on."
  },
  {
   "address": 44353,
   "type": "line",
   "text": "High bytes of each row's address in the back screen, rebuilt every pass from row_hi_page plus the buffer's page."
  },
  {
   "address": 44380,
   "type": "line",
   "text": "Per row of a screen, 0 or 1: a 1 at rows 7, 13 and 20, where a row's address crosses into the next page. repair_back_buffer adds them up row by row to make row_hi. Then from $AD75 the twelve five-byte small digit shapes that the round number uses."
  },
  {
   "address": 44465,
   "type": "line",
   "text": "The HURRY UP banner: nine glyphs of eight bytes, ORed over the background."
  },
  {
   "address": 44537,
   "type": "line",
   "text": "The banner's nine mask glyphs, used for its flashing frame."
  },
  {
   "address": 44609,
   "type": "line",
   "text": "The two star glyphs (a single dot each), copied to characters $FE and $FF by star_field."
  },
  {
   "address": 44625,
   "type": "line",
   "text": "The enemies of all 100 rounds, one list after another, each ended by a zero byte: three bytes per enemy, at most six. Byte 0: bits 0-2 the kind (0-7, giving state kind + 2), bits 3-7 the column times 8. Byte 1: bits 3-7 the row times 8, bits 0-2 the low bits of its starting control byte (its heading). Byte 2: bits 0-5 half the number of calls it waits before it moves, bit 6 its starting frame (facing left), bit 7 one more control bit. start_round walks the lists from the first to reach the round's own; the title's hidden key combination rewrites the kinds in place."
  },
  {
   "address": 44767,
   "type": "line",
   "text": "Enemy lists continue: the list of round 11 starts here, and the lists of rounds 12-20 follow."
  },
  {
   "address": 44954,
   "type": "line",
   "text": "Enemy lists continue: the list of round 21 starts here, and the lists of rounds 22-30 follow."
  },
  {
   "address": 45135,
   "type": "line",
   "text": "Enemy lists continue: the list of round 31 starts here, and the lists of rounds 32-40 follow."
  },
  {
   "address": 45325,
   "type": "line",
   "text": "Enemy lists continue: the list of round 41 starts here, and the lists of rounds 42-50 follow."
  },
  {
   "address": 45515,
   "type": "line",
   "text": "Enemy lists continue: the list of round 51 starts here, and the lists of rounds 52-60 follow."
  },
  {
   "address": 45699,
   "type": "line",
   "text": "Enemy lists continue: the list of round 61 starts here, and the lists of rounds 62-70 follow."
  },
  {
   "address": 45889,
   "type": "line",
   "text": "Enemy lists continue: the list of round 71 starts here, and the lists of rounds 72-80 follow."
  },
  {
   "address": 46079,
   "type": "line",
   "text": "Enemy lists continue: the list of round 81 starts here, and the lists of rounds 82-90 follow."
  },
  {
   "address": 46269,
   "type": "line",
   "text": "Enemy lists continue: the list of round 91 starts here, and the lists of rounds 92-100 follow."
  },
  {
   "address": 46441,
   "type": "line",
   "text": "Per round: bits 3-7 are the points item's X within the playfield and bits 0-2 the top of its row number."
  },
  {
   "address": 46541,
   "type": "line",
   "text": "Per round: bits 6-7 complete the points item's row; bits 1-5 are the special item's column in two-cell steps; bit 0 goes into the special item's row."
  },
  {
   "address": 46641,
   "type": "line",
   "text": "Per round: bits 4-7 complete the special item's row; bit 0 says whether the round's vents release special bubbles at all, and bits 1-3 which kinds (water, fire, thunder); when bit 0 is set the round may instead be a letter round, chosen at random."
  },
  {
   "address": 46741,
   "type": "line",
   "text": "The air currents of all 100 rounds, a record per round. The first byte is the record's length, or zero for none; a first byte with bit 7 set is a one-byte record meaning \"use round n's currents\" (rounds 2, 36 and 48 use round 1's, round 52 round 50's). Entries follow from the second byte. A rectangle is three bytes: byte 0 has bit 7 set, the direction in bits 5-6 (0 up, 1 right, 2 down, 3 left) and the column in bits 0-4; byte 1 has the row in bits 3-7 and the top three bits of the width; byte 2 the last two bits of the width in bits 6-7 and the height in bits 0-4, width and height both stored less one. A single byte without bit 7 in an entry's place mirrors the left half of the map onto the right, swapping left and right currents."
  },
  {
   "address": 47154,
   "type": "line",
   "text": "Air-current records continue: the record of round 21 starts here, and those of rounds 22-40 follow."
  },
  {
   "address": 47372,
   "type": "line",
   "text": "Air-current records continue: the record of round 41 starts here, and those of rounds 42-60 follow."
  },
  {
   "address": 47555,
   "type": "line",
   "text": "Air-current records continue: the record of round 61 starts here, and those of rounds 62-80 follow."
  },
  {
   "address": 47728,
   "type": "line",
   "text": "Air-current records continue: the record of round 81 starts here, and those of rounds 82-100 follow."
  },
  {
   "address": 47886,
   "type": "line",
   "text": "The 59 wall blocks, 32 bytes each: four multicolour glyphs (top left, top right, bottom left, bottom right) that tile the two side walls of a round. level_pattern picks one per round."
  },
  {
   "address": 48398,
   "type": "line",
   "text": "Wall blocks continue: blocks 16-31, 32 bytes each."
  },
  {
   "address": 48910,
   "type": "line",
   "text": "Wall blocks continue: blocks 32-47, 32 bytes each."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "Wall blocks continue across $C000: the last 14 bytes of block 39, then blocks 40-47."
  },
  {
   "address": 49422,
   "type": "line",
   "text": "Wall blocks continue: blocks 48-58, 32 bytes each."
  },
  {
   "address": 49774,
   "type": "line",
   "text": "The wall tile of each of the 100 rounds, eight bytes each: the one glyph every platform cell is drawn with."
  },
  {
   "address": 50174,
   "type": "line",
   "text": "Wall tiles continue: the tiles of rounds 51-100, eight bytes each."
  },
  {
   "address": 50574,
   "type": "line",
   "text": "Per round: bit 0 opens the top row at columns 9-12 and bit 1 at columns 19-22; bits 2 and 3 do the same for the bottom row. Bits 4-5 are the air current of the top row and bits 6-7 of the bottom row. Players, enemies and bubbles pass through an opening from one edge of the screen to the other."
  },
  {
   "address": 50674,
   "type": "line",
   "text": "The layouts of the 100 rounds, a bit per cell: 23 rows (the top and bottom rows come from level_gaps) of 32 columns. A full layout is 92 bytes, four per row; a round whose level_pattern byte has bit 7 set stores only the left half, 46 bytes, and is mirrored. 55 rounds are halves and 45 full, 6,670 bytes that end exactly at $DFFF: the last 4 KB lie in the RAM under the video and sound chips, which is why unpack_layout switches the I/O out."
  },
  {
   "address": 51594,
   "type": "line",
   "text": "Layouts continue: the layout of round 16 (a mirrored half, 46 bytes) starts here."
  },
  {
   "address": 52514,
   "type": "line",
   "text": "Layouts continue: the layout of round 31 (full, 92 bytes) starts here."
  },
  {
   "address": 53248,
   "type": "line",
   "text": "The layouts continue here, in the RAM under the I/O area ($D000-$DFFF), read only with $01 = $30."
  },
  {
   "address": 53388,
   "type": "line",
   "text": "Layouts continue: the layout of round 43 (full, 92 bytes) starts here."
  },
  {
   "address": 54308,
   "type": "line",
   "text": "Layouts continue: the layout of round 57 (a mirrored half, 46 bytes) starts here."
  },
  {
   "address": 55228,
   "type": "line",
   "text": "Layouts continue: the layout of round 71 (a mirrored half, 46 bytes) starts here."
  },
  {
   "address": 55296,
   "type": "line",
   "text": "Layout data: byte 22 of round 72's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the first cell), which is what every reference to it in the code means."
  },
  {
   "address": 55297,
   "type": "line",
   "text": "Layout data: byte 23 of round 72's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the second cell), which is what every reference to it in the code means."
  },
  {
   "address": 55379,
   "type": "line",
   "text": "Layout data: byte 13 of round 73's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the score table's upper rule), which is what every reference to it in the code means."
  },
  {
   "address": 55471,
   "type": "line",
   "text": "Layout data: byte 13 of round 74's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the title's top line), which is what every reference to it in the code means."
  },
  {
   "address": 55552,
   "type": "line",
   "text": "Layout data: byte 48 of round 75's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the second page), which is what every reference to it in the code means."
  },
  {
   "address": 55708,
   "type": "line",
   "text": "Layout data: byte 20 of round 78's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the round banner's first row), which is what every reference to it in the code means."
  },
  {
   "address": 55763,
   "type": "line",
   "text": "Layout data: byte 75 of round 78's layout. The label is here because the same address, with the I/O switched in, is colour RAM (a placeholder operand of print_string), which is what every reference to it in the code means."
  },
  {
   "address": 55788,
   "type": "line",
   "text": "Layout data: byte 8 of round 79's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the round banner's second row), which is what every reference to it in the code means."
  },
  {
   "address": 55808,
   "type": "line",
   "text": "Layout data: byte 28 of round 79's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the third page), which is what every reference to it in the code means."
  },
  {
   "address": 55899,
   "type": "line",
   "text": "Layout data: byte 73 of round 80's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the score table's lower rule), which is what every reference to it in the code means."
  },
  {
   "address": 56064,
   "type": "line",
   "text": "Layout data: byte 8 of round 84's layout. The label is here because the same address, with the I/O switched in, is colour RAM (the fourth page), which is what every reference to it in the code means."
  },
  {
   "address": 56102,
   "type": "line",
   "text": "Layouts continue: the layout of round 85 (full, 92 bytes) starts here."
  },
  {
   "address": 57022,
   "type": "line",
   "text": "Layouts continue: the layout of round 97 (full, 92 bytes) starts here."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "Build round `level` in the buffer at $5400: reset the buffer roles, copy the round's 8-byte wall tile to character $15 and its 2 by 2 wall block (from wall_blocks by the round's pattern number, or four copies of the tile when the number is $64 or more) to characters $16-$19, take the two multicolours from level_colours, set the timers, unpack the layout bitmap and draw it."
  },
  {
   "address": 57499,
   "type": "line",
   "text": "Draw the unpacked layout at $8B00 (25 rows of four bytes, a bit per cell of 32 columns) into the screen at $5400: a set bit is the wall tile (character $15), and each tile casts a shadow on the empty cells to its right, below and diagonally (characters $0A-$0F). Then the 2 by 2 wall blocks down both sides in columns 0-1 and 30-31, and a little tidying of the top row. The shadow under a tile is $0A for a blank cell and $0D otherwise (an LDA #$0D hidden in the BIT at $E0EE, where the branch at $E0EA lands), and the cell to its right $0C for blank, $0F over $0A or $0D, else $0E (the LDA #$0C hidden in the BIT at $E0DC)."
  },
  {
   "address": 57737,
   "type": "line",
   "text": "Fill the collision map at $8500 with the round's air currents. Starts by giving every cell of a row the direction stored in the low two bits of the row's fourth layout byte, then reads the round's record in air_current_data: a record that is a single byte with bit 7 set means \"the same as round n\"; otherwise it is a list of rectangles, each three bytes giving direction, column, row, width and height, written over the map; a zero byte instead of a rectangle mirrors the left half of every row onto the right with left and right swapped."
  },
  {
   "address": 57856,
   "type": "line",
   "text": "Still build_air_currents: decoding one rectangle. The label is here only because a store in hurry_up carries $E200 as its as-loaded operand; its high byte is patched before it runs."
  },
  {
   "address": 57996,
   "type": "line",
   "text": "Add 40 to the pointer in $04/$05 and decrement X."
  },
  {
   "address": 58009,
   "type": "line",
   "text": "Unpack round X's layout into $8B00 with the I/O switched out ($01 = $30), because the layouts lie in $C5F2-$DFFF, partly under the chips. Each earlier round takes 46 bytes if bit 7 of its byte in level_pattern is set and 92 if not. The round's byte in level_gaps gives the openings of the top and bottom rows and their air currents. A full layout is 23 rows of four bytes copied as they are; a half layout holds two bytes a row, and the other two are their mirror image. After each row the top two bits of that row's first byte are forced on: the left wall."
  },
  {
   "address": 58051,
   "type": "line",
   "text": "The same for the layout at $40/$41 with X the round: used directly for the secret room."
  },
  {
   "address": 58124,
   "type": "line",
   "text": "Operand of the patched JSR that unpacks a layout row."
  },
  {
   "address": 58125,
   "type": "line",
   "text": "High byte of the patched row unpacker call."
  },
  {
   "address": 58143,
   "type": "line",
   "text": "Copy two layout bytes to the row (called twice a row for a full layout)."
  },
  {
   "address": 58146,
   "type": "line",
   "text": "Copy one layout byte to $8B04,X and advance."
  },
  {
   "address": 58154,
   "type": "line",
   "text": "Write the mirror images of the row's first two bytes into its third and fourth, in reverse order."
  },
  {
   "address": 58167,
   "type": "line",
   "text": "Return the byte at $8B02,X with its eight bits in reverse order, and advance X."
  },
  {
   "address": 58190,
   "type": "line",
   "text": "Write the four bytes of a top or bottom row as two halves, from two bits of the gap code: the left half is $FF $FF, or $FF $87 with an opening at columns 9-12; the right half is $FF $FF, or $E1 $FF with an opening at columns 19-22."
  },
  {
   "address": 58197,
   "type": "line",
   "text": "One half of unpack_gap_row: take the next bit of the gap code; clear selects index 0 (no opening), set keeps the index the caller loaded (1 for the left half, 2 for the right)."
  },
  {
   "address": 58218,
   "type": "line",
   "text": "Low bytes of the two row unpackers (full, mirrored), patched into the JSR at $E30B."
  },
  {
   "address": 58220,
   "type": "line",
   "text": "High bytes of the two row unpackers."
  },
  {
   "address": 58222,
   "type": "line",
   "text": "First byte of a half row by index: $FF (no opening), $FF (left half with its opening), $E1 (right half with its opening)."
  },
  {
   "address": 58225,
   "type": "line",
   "text": "Second byte of a half row by index: $FF (no opening), $87 (left half with its opening), $FF (right half with its opening)."
  },
  {
   "address": 58228,
   "type": "line",
   "text": "Black border and background, sprites off, colour RAM to 0, and both screen buffers filled with spaces."
  },
  {
   "address": 58259,
   "type": "line",
   "text": "Fill the screen at $5400 with spaces."
  },
  {
   "address": 58279,
   "type": "line",
   "text": "Print both scores and the top score on the panel of the screen on display, after replacing the top score with any player's score that has passed it."
  },
  {
   "address": 58329,
   "type": "line",
   "text": "Print the three packed-decimal bytes at $0400 + X as six digits at the address in $40/$41, blanking leading zeros."
  },
  {
   "address": 58357,
   "type": "line",
   "text": "Compare the score at $0400 + A with the top score; if it is higher, copy it there and record that player's round as the top round."
  },
  {
   "address": 58398,
   "type": "line",
   "text": "Twelve bytes of code nothing reaches: an earlier form of the leading-zero test that print_score_digit now does."
  },
  {
   "address": 58410,
   "type": "line",
   "text": "Print the string at X (low) and Y (high) on both screen buffers and colour RAM. A byte below $10 sets the colour, $10 ends the string, $1F is followed by a column and a row and moves the print position (which is patched into the three store instructions at $E472), and any other byte is a character code plus $20."
  },
  {
   "address": 58449,
   "type": "line",
   "text": "Operand: the column from a position code, added to the row's address."
  },
  {
   "address": 58482,
   "type": "line",
   "text": "The three stores of print_string, to the screen at $5000, the screen at $5400 and colour RAM; their operands are the print position and are advanced after each character."
  },
  {
   "address": 58483,
   "type": "line",
   "text": "Operand: print position in the screen at $5000."
  },
  {
   "address": 58484,
   "type": "line",
   "text": "High byte of the print position in the screen at $5000."
  },
  {
   "address": 58486,
   "type": "line",
   "text": "Operand: print position in the screen at $5400."
  },
  {
   "address": 58487,
   "type": "line",
   "text": "High byte of the print position in the screen at $5400."
  },
  {
   "address": 58491,
   "type": "line",
   "text": "Operand: print position in colour RAM."
  },
  {
   "address": 58492,
   "type": "line",
   "text": "High byte of the print position in colour RAM."
  },
  {
   "address": 58516,
   "type": "line",
   "text": "Wait until the frame counter changes: the next bottom raster interrupt."
  },
  {
   "address": 58523,
   "type": "line",
   "text": "Copy the screen at $5000 to the clean copy at $8B00 and to the second buffer at $5400."
  },
  {
   "address": 58565,
   "type": "line",
   "text": "Copy the round-number glyphs to the second character set and put their two characters at the top left of the second buffer."
  },
  {
   "address": 58586,
   "type": "line",
   "text": "Arm intro_step to animate the bubble sprites (turns the RTS at $E539 into the LDA of the code behind it) and run it once."
  },
  {
   "address": 58591,
   "type": "line",
   "text": "One frame of the players floating in their bubbles: each live player's four bubble sprites (two rows of two) are placed round the player's position, sprite X high bits set as needed, and all eight are coloured; when armed, the code after $E539 also sets the eight sprites' shapes (the cycling between the two sets is done by irq_top)."
  },
  {
   "address": 58681,
   "type": "line",
   "text": "RTS patched to LDA #$D4: the code that follows then sets the bubble sprites' shapes, $D1-$D4 for sprites 0-3 and $D5-$D8 for sprites 4-7."
  },
  {
   "address": 58682,
   "type": "line",
   "text": "Operand of the instruction made at $E539 when intro_step is armed: $D4, the first shape of a floating bubble."
  },
  {
   "address": 58683,
   "type": "line",
   "text": "The armed tail of intro_step: for X = 3 down to 0 give sprite X the shape in A and sprite X + 4 that shape plus four, in both screens' pointer tables, and step A back by one (the SBC #$04 runs with carry clear and undoes the ADC #$04 and one more)."
  },
  {
   "address": 58706,
   "type": "line",
   "text": "Sprite X high-bit masks for the two players' right-hand bubble sprites."
  },
  {
   "address": 58708,
   "type": "line",
   "text": "Bring the players into the round in their bubbles: disarm the shape code, clear the path buffers at $8B00-$8EFF, and for each player work out a straight line from where they are to their starting place (X $2C or $EC, Y $DD) with trace_line; then replay both paths a point a frame, moving the bubbles, and finally clear split_line."
  },
  {
   "address": 58816,
   "type": "line",
   "text": "High bytes of the two players' path buffers ($8B00 and $8D00; Y coordinates go in the page after each)."
  },
  {
   "address": 58818,
   "type": "line",
   "text": "X of the starting place of each player: $2C and $EC."
  },
  {
   "address": 58820,
   "type": "line",
   "text": "Record the points of a straight line from ($23,$24) to (X,Y) in the path buffer whose page is A: Bresenham's algorithm stepping along the longer axis, one point for each step, X coordinates in one page and Y in the next."
  },
  {
   "address": 58968,
   "type": "line",
   "text": "Make the glyphs of the five letter bubbles as 2 by 2 blocks for the panel and the EXTEND scene: copy the background (characters $11-$14, the wall-block copy, 32 bytes from $4088) to $0108, then for each of the letters E, X, T, N and D build 32 bytes at $4250 onward as the background masked by the bubble mask, ORed with that letter bubble's picture, and ANDed with extend_mask; finally copy characters $40-$5F to the second character set."
  },
  {
   "address": 59085,
   "type": "line",
   "text": "Draw each player's collected letters down the side of the playfield (columns 0-1 for player 1, 30-31 for player 2, from row 10), a 2 by 2 block per letter, in both screen buffers and the clean copy."
  },
  {
   "address": 59100,
   "type": "line",
   "text": "One player's column of letters: address in A (high) and Y (low), X the player."
  },
  {
   "address": 59194,
   "type": "line",
   "text": "First character of each letter's 2 by 2 block on the panel, for D, N, E, T, X, E in the order the bits are tested."
  },
  {
   "address": 59200,
   "type": "line",
   "text": "Fill all 1,024 cells of colour RAM with A."
  },
  {
   "address": 59218,
   "type": "line",
   "text": "Draw handler for type $2A, the boulder: picture $38 + sub-column."
  },
  {
   "address": 59224,
   "type": "line",
   "text": "Draw handler for type $24, the falling flame: picture $34 + sub-column, shifted down by its sub-row."
  },
  {
   "address": 59237,
   "type": "line",
   "text": "Per Baron: 0 or 2, which way it faces, set by baron_move from where its player is."
  },
  {
   "address": 59239,
   "type": "line",
   "text": "Draw handler for types $2E and $30, the Barons: picture $30-$33 by facing and a two-step animation that changes every second pass."
  },
  {
   "address": 59257,
   "type": "line",
   "text": "Draw handler for types 0-$14, every plain, special and letter bubble: picture type \u00d7 2 + sub-column, shifted down by the sub-row. Falls into the renderer."
  },
  {
   "address": 59268,
   "type": "line",
   "text": "With A the picture number: patch the renderer's six table operands, three for the picture's 16-byte graphic columns (bubble_gfx_lo/hi) and three for its masks (bubble_mask_lo/hi), each column 16 bytes after the last."
  },
  {
   "address": 59343,
   "type": "line",
   "text": "The bubble renderer. An object covers three cells across and two or three rows of cells. Starting in the lowest row of cells and working upward line by line, it finds the glyphs now on screen there, replaces the three cells with fresh dynamic characters (numbered from next_glyph), and writes each new glyph as the old glyph ANDed with the picture's mask and ORed with its graphic, for the 16 lines of the picture; the lines of the cells below and above the picture are copied unchanged. The object's sub-row (rows_left) decides how many lines are copied before the picture's bottom line."
  },
  {
   "address": 59465,
   "type": "line",
   "text": "Operand: address of the mask column for the first cell of a row."
  },
  {
   "address": 59466,
   "type": "line",
   "text": "High byte of the first mask column's address."
  },
  {
   "address": 59468,
   "type": "line",
   "text": "Operand: address of the graphic column for the first cell."
  },
  {
   "address": 59469,
   "type": "line",
   "text": "High byte of the first graphic column's address."
  },
  {
   "address": 59475,
   "type": "line",
   "text": "Operand: mask column for the second cell."
  },
  {
   "address": 59476,
   "type": "line",
   "text": "High byte of the second mask column's address."
  },
  {
   "address": 59478,
   "type": "line",
   "text": "Operand: graphic column for the second cell."
  },
  {
   "address": 59479,
   "type": "line",
   "text": "High byte of the second graphic column's address."
  },
  {
   "address": 59485,
   "type": "line",
   "text": "Operand: mask column for the third cell."
  },
  {
   "address": 59486,
   "type": "line",
   "text": "High byte of the third mask column's address."
  },
  {
   "address": 59488,
   "type": "line",
   "text": "Operand: graphic column for the third cell."
  },
  {
   "address": 59489,
   "type": "line",
   "text": "High byte of the third graphic column's address; from here the renderer's row loop continues."
  },
  {
   "address": 59530,
   "type": "line",
   "text": "Move the renderer up to the row of cells above: find the three glyphs on screen there, hand out three more dynamic characters and continue the merge. A picture is merged from its bottom line upward."
  },
  {
   "address": 59662,
   "type": "line",
   "text": "Once a pass: note the chain and letter counts, start the dynamic glyphs again at character $5E of the back character set, and for every object in use remember where it was drawn the last two passes, compute its screen address and jump to its draw handler through object_draw_table. Afterwards pay each player's chain bonus if the chain did not grow this pass, and redraw the EXTEND letters if they changed."
  },
  {
   "address": 59750,
   "type": "line",
   "text": "Operand of draw_objects' JMP: the low byte selects the entry of object_draw_table."
  },
  {
   "address": 59752,
   "type": "line",
   "text": "Common return of the draw handlers that draw nothing: skip the nine glyphs this object would have used."
  },
  {
   "address": 59759,
   "type": "line",
   "text": "Common return after drawing: advance the glyph pointer by 72 bytes and go on to the next object."
  },
  {
   "address": 59832,
   "type": "line",
   "text": "For actor X: split its position into a map cell and the offsets within it (sub_x, sub_y) and set map_ptr to the collision-map cell one column left of the actor's left cell and three rows above the row its Y gives ((Y - $15) / 8), which is the upper of the two rows a standing actor's body covers. Fixed offsets from it then reach the cells the body covers ($01, $02, $29, $2A), those beside it ($00, $28 and $03, $2B), the floor under it ($51, $52) and the row below that ($79, $7A)."
  },
  {
   "address": 59882,
   "type": "line",
   "text": "Random number in A: shifts and mixes the two state bytes and exclusive-ORs the low byte of CIA 1's timer B."
  },
  {
   "address": 59901,
   "type": "line",
   "text": "Enemy kinds 3, 7 and 8 (states 3, 7, 8), the three that shoot along their row: decide whether to shoot, then behave as the walker. While a shot is being readied it counts down; then it fires: a fireball for kind 3 (type $28), a boulder for kind 8 ($2A), or for kind 7 a bottle ($2C) that comes back and that it waits for."
  },
  {
   "address": 59912,
   "type": "line",
   "text": "Enemy kind 2 (state 2) and the movement of the shooters. Falls when nothing is underfoot. On the ground it follows its input bits: bit 0 walks left, bit 1 right, bit 2 starts a jump. chase_timer decides whether it may climb: when allowed it jumps to a platform it finds overhead or across a gap at the end of its floor. At $EAB1 the ADC #$08 runs with the carry the CMP #$06 left set, so the cell probed is map_ptr + 9."
  },
  {
   "address": 60175,
   "type": "line",
   "text": "Every second call advance the actor's frame, wrapping within its facing's set of frames (frame count and mask from the per-kind tables)."
  },
  {
   "address": 60212,
   "type": "line",
   "text": "Fall with the tail patched so that the two-frame animation runs afterwards."
  },
  {
   "address": 60223,
   "type": "line",
   "text": "An enemy with nothing underfoot: fall two pixels a call, wrapping at the bottom, until a floor is under it; then clear the falling flag."
  },
  {
   "address": 60308,
   "type": "line",
   "text": "JMP or BIT, patched by the three entries of the fall routine to choose what runs when the enemy lands."
  },
  {
   "address": 60311,
   "type": "line",
   "text": "The code the patched fall_tail_a falls into for the bolt dropper, kind 9 (enemy_fall_then_flip turns the JMP into a BIT): once landed, set the enemy's heading bit towards its target player (left unless the player's X is greater than its own) and go on to the two-frame animation."
  },
  {
   "address": 60340,
   "type": "line",
   "text": "JMP whose target the three entries of the fall routine patch: the walk animation, the two-frame animation or a plain return."
  },
  {
   "address": 60341,
   "type": "line",
   "text": "Operand of fall_tail_b."
  },
  {
   "address": 60342,
   "type": "line",
   "text": "High byte of fall_tail_b's target."
  },
  {
   "address": 60343,
   "type": "line",
   "text": "The plain return used as the fall's tail by enemy_fall_plain."
  },
  {
   "address": 60344,
   "type": "line",
   "text": "Fall with no animation afterwards."
  },
  {
   "address": 60356,
   "type": "line",
   "text": "Start an enemy's jump: 31 steps, straight up, with the jump-request bit (bit 2) of its control byte cleared."
  },
  {
   "address": 60377,
   "type": "line",
   "text": "An enemy rising or landing from a jump. A jump straight up (counter $1F) starts with 16 calls of waiting, in which the enemy looks the other way and back on every fourth call. Then 15 steps up: by jump_arc_enemy when it has no side flag, or one pixel a step when it has. Then down, by jump_arc_enemy or with a side flag by jump_arc_drift, until a floor is crossed. With a side flag set it drifts two pixels a step and stops drifting at a wall."
  },
  {
   "address": 60639,
   "type": "line",
   "text": "Walk left two pixels, turning the enemy to face left first; at a wall reverse its direction bits."
  },
  {
   "address": 60663,
   "type": "line",
   "text": "Move the actor sideways by A unless the map cell at offset Y from map_ptr is solid, in which case reverse its direction bits."
  },
  {
   "address": 60690,
   "type": "line",
   "text": "Step four pixels left."
  },
  {
   "address": 60696,
   "type": "line",
   "text": "Step four pixels right."
  },
  {
   "address": 60702,
   "type": "line",
   "text": "Walk right two pixels, turning the enemy to face right first."
  },
  {
   "address": 60731,
   "type": "line",
   "text": "The shooter's count has run out: put its readied shot (the object slot it reserved) on the row it stands on, directly in front of it (two columns from its own column on the side it faces), as the shot of its kind, or cancel it if a wall is in the way."
  },
  {
   "address": 60877,
   "type": "line",
   "text": "An enemy standing on a floor with no shot out, one call in four at random: if it faces its target player and that player is level with it (or, one time in 32, higher up; never when the player is lower), reserve a free object slot as a readied shot (type $42) and start the count of seven calls; it will not try again for $96 calls."
  },
  {
   "address": 61002,
   "type": "line",
   "text": "The two-frame animation again, used only by kind 9, the bolt dropper: its idle animation, its walk and the tail of its fall. The hopper uses animate_two_frames."
  },
  {
   "address": 61026,
   "type": "line",
   "text": "Decide how an enemy pursues its target player. Level with the player: set the level flag, clear the climb flag and the jump bit. Higher than the player: clear both flags and the jump bit, so it does not climb. Lower than the player: each time its chase timer runs out (the period is the kind's value plus a random 0-31, set by start_round, not taken from the enemy record) set one of the two flags and clear the other, alternately, so it swaps between trying to climb and not. The decision is kept in the enemy's two chase flags."
  },
  {
   "address": 61106,
   "type": "line",
   "text": "Enemy kind 6 (state 6): flies diagonally two pixels a call, bouncing off walls, floors and ceilings."
  },
  {
   "address": 61151,
   "type": "line",
   "text": "Flying left: face left first, then move."
  },
  {
   "address": 61163,
   "type": "line",
   "text": "Move the flyer two pixels left unless a wall is in the way, in which case reverse its horizontal direction. On entry Y holds the opcode to store at fly_step."
  },
  {
   "address": 61205,
   "type": "line",
   "text": "Opcode patched by fly_left and fly_right with the byte their caller passes in Y: $60 (RTS) for the slow flyer, which ends the reversal there, or $BD for the fast one, which makes it an LDA $8520,X that runs on into fly_flip_facing. It is not a speed."
  },
  {
   "address": 61206,
   "type": "line",
   "text": "Operand bytes of the LDA that fly_step becomes for the fast flyer ($8520, the frame array)."
  },
  {
   "address": 61208,
   "type": "line",
   "text": "When the fast flyer patches fly_step to an LDA: flip the actor's facing frames (EOR 4) as it bounces, then return."
  },
  {
   "address": 61214,
   "type": "line",
   "text": "Flying right: face right first, then move."
  },
  {
   "address": 61226,
   "type": "line",
   "text": "Move the flyer two pixels right unless a wall is in the way, in which case reverse. On entry Y holds the opcode to store at fly_step."
  },
  {
   "address": 61260,
   "type": "line",
   "text": "Move the flyer up by its speed; at the top of the screen (Y $15) wrap to the bottom if the bottom map row's cell in its column is open, and reverse its vertical direction if it is not; also reverse at a ceiling."
  },
  {
   "address": 61344,
   "type": "line",
   "text": "Move the flyer down by its speed; wrap from the bottom to the top through an opening; reverse at a floor."
  },
  {
   "address": 61376,
   "type": "line",
   "text": "Enemy kind 5 (state 5): flies diagonally, one pixel a call vertically and two horizontally, bouncing the same way, with a four-frame animation."
  },
  {
   "address": 61418,
   "type": "line",
   "text": "Every second call step the actor's frame through 0-3."
  },
  {
   "address": 61445,
   "type": "line",
   "text": "The score table: stars, the table's text, each player's last score and round, the two player sprites, then reset the first-round flags and go to the title's key loop."
  },
  {
   "address": 61507,
   "type": "line",
   "text": "As loaded: LDA #$FF / STA level / JMP title_patch, which sets the round before the first. title_patch replaces these seven bytes with STX level / LDA #3 / STA $D015 on the first visit. The cracker's menu stores its starting round minus two in the operand at $F044, so its choice applies to the first game only."
  },
  {
   "address": 61514,
   "type": "line",
   "text": "Print the three scores, fill in each player's round and the top round, and wait for the 1 or 2 key (row 7, columns 0 and 3), each frame drawing a random number; 2 adds the second player. Then count the round up from $FF to 0 and play a game."
  },
  {
   "address": 61554,
   "type": "line",
   "text": "The LDA # in title_loop whose operand at $F073 play_game sets to 1 (the store at $0910): the colour given to the ten cells of the title's top line, 0 (black, so the line does not show) as loaded and 1 (white) once a game has been started."
  },
  {
   "address": 61555,
   "type": "line",
   "text": "Operand of the LDA # at $F072 (see title_two_up). From here the rest of the title loop: prints each player's last round and the top round (two digits; 100 for round 100; the three characters ALL for a finished game) and waits for the key."
  },
  {
   "address": 61644,
   "type": "line",
   "text": "The wait itself: read the keyboard through read_keys_wait."
  },
  {
   "address": 61678,
   "type": "line",
   "text": "The score table's string: BUBBLE BOBBLE, COMMODORE CONVERSION BY SOFTWARE CREATIONS, SCORE, ROUND, TOP, WRITTEN BY STEPHEN RUDDY, CREDITS 10 and PRESS 1 OR 2 TO PLAY."
  },
  {
   "address": 61842,
   "type": "line",
   "text": "Thirteen offsets into the secret room's layout rows where single bytes are patched."
  },
  {
   "address": 61855,
   "type": "line",
   "text": "The thirteen bytes patched at those offsets, shaping the secret room."
  },
  {
   "address": 61868,
   "type": "line",
   "text": "For each player compare the score with the next entry of extra_life_scores; on reaching it add a life, move to the next step and request sound 3. Also, when a tune is not playing over it, start the pending sound effect: number 0-5 from sound_request or the jump request."
  },
  {
   "address": 61963,
   "type": "line",
   "text": "Low bytes of the six sound effect records."
  },
  {
   "address": 61969,
   "type": "line",
   "text": "High bytes of the six sound effect records."
  },
  {
   "address": 61975,
   "type": "line",
   "text": "Called from init_round_state. On round 73 it writes air current 2 (down) into the four cells of the bottom row's left opening (columns 9-12), in the map row and its three copies below. Then it sets the threshold at $0DC7 that decides how overlapping bubbles part. The code loads $1E into Y, or $E6 on rounds 35 and 97, but the store is an STA, so what is written is A: the level number (2 on round 73). The value in Y is never used."
  },
  {
   "address": 62016,
   "type": "line",
   "text": "Addresses of the fifteen music commands $80, $82 ... $9C, entered through the JMP at $F57B whose operand's low byte is the command with its top two bits flipped."
  },
  {
   "address": 62046,
   "type": "line",
   "text": "Ten short arpeggio tables, lists of semitone offsets that a voice steps through one per frame (0, 7 and 12 are the fifth and the octave), selected by music command $8A."
  },
  {
   "address": 62090,
   "type": "line",
   "text": "Low bytes of the three voices' return stacks, four entries each at $F28A, $F296 and $F2A2 by voice_stack_base."
  },
  {
   "address": 62094,
   "type": "line",
   "text": "High bytes of the voices' return stacks."
  },
  {
   "address": 62098,
   "type": "line",
   "text": "Repeat counts kept on the voices' stacks by the loop commands."
  },
  {
   "address": 62126,
   "type": "line",
   "text": "Voice 1's instrument block, 29 bytes filled by music command $86: eleven bytes of frequency modulation (four steps of rate and duration, a delay, flags), the pulse sweep, pulse width, waveform, attack/decay, sustain/release, gate time and release time. Voices 2 and 3 have theirs at $F2CB and $F2E8."
  },
  {
   "address": 62134,
   "type": "line",
   "text": "Arpeggio table address, low byte, in the voice's instrument block (set by music command $8A)."
  },
  {
   "address": 62135,
   "type": "line",
   "text": "Arpeggio table address, high byte, always $F2."
  },
  {
   "address": 62139,
   "type": "line",
   "text": "Frequency modulation flags of the instrument: bit 3 selects an arpeggio, bit 0 and bit 7 choose whether the modulation repeats."
  },
  {
   "address": 62143,
   "type": "line",
   "text": "Pulse sweep flags of the instrument, cleared when a tune starts."
  },
  {
   "address": 62148,
   "type": "line",
   "text": "The instrument's starting pulse width, low byte."
  },
  {
   "address": 62149,
   "type": "line",
   "text": "The instrument's starting pulse width, high byte."
  },
  {
   "address": 62150,
   "type": "line",
   "text": "The instrument's SID control byte: waveform and gate."
  },
  {
   "address": 62151,
   "type": "line",
   "text": "The instrument's attack and decay."
  },
  {
   "address": 62152,
   "type": "line",
   "text": "The instrument's sustain and release."
  },
  {
   "address": 62153,
   "type": "line",
   "text": "Frames the gate stays on, counted from the end of the note."
  },
  {
   "address": 62154,
   "type": "line",
   "text": "Frames the voice keeps sounding after the gate goes off; then the next two voices' blocks."
  },
  {
   "address": 62213,
   "type": "line",
   "text": "Per voice: non-zero while notes may sound on it; start_sfx clears voice 1's so the tune leaves it to the effect."
  },
  {
   "address": 62214,
   "type": "line",
   "text": "Voice 2's enable flag."
  },
  {
   "address": 62215,
   "type": "line",
   "text": "Voice 3's enable flag."
  },
  {
   "address": 62216,
   "type": "line",
   "text": "Per voice: non-zero while the voice still has music to play; cleared when its stream ends."
  },
  {
   "address": 62217,
   "type": "line",
   "text": "Voice 2's data flag."
  },
  {
   "address": 62218,
   "type": "line",
   "text": "Voice 3's data flag."
  },
  {
   "address": 62219,
   "type": "line",
   "text": "Sixteen bytes of filter settings, loaded by music command $9A. The driver uses only the cutoff's two bytes ($F392, $F393)."
  },
  {
   "address": 62235,
   "type": "line",
   "text": "Voice 1's working block, 35 bytes ($F31B-$F33D): the copy of its instrument's 24 modulation bytes and the counters that run them down. Voices 2 and 3 have theirs at $F33E and $F361. Its first word is the first frequency step's rate."
  },
  {
   "address": 62236,
   "type": "line",
   "text": "Working block: first frequency step, high byte of the rate."
  },
  {
   "address": 62237,
   "type": "line",
   "text": "Working block: second frequency step, rate low byte."
  },
  {
   "address": 62238,
   "type": "line",
   "text": "Working block: second frequency step, rate high byte."
  },
  {
   "address": 62239,
   "type": "line",
   "text": "Working block: third frequency step, rate low byte; for an arpeggio the frame counter between steps."
  },
  {
   "address": 62240,
   "type": "line",
   "text": "Working block: third frequency step, rate high byte."
  },
  {
   "address": 62241,
   "type": "line",
   "text": "Working block: fourth frequency step, rate low byte; for an arpeggio its speed in frames."
  },
  {
   "address": 62242,
   "type": "line",
   "text": "Working block: fourth frequency step, rate high byte."
  },
  {
   "address": 62243,
   "type": "line",
   "text": "Working block: duration of the first frequency step; for an arpeggio the low byte of its table."
  },
  {
   "address": 62244,
   "type": "line",
   "text": "Working block: duration of the second step; for an arpeggio the high byte of its table."
  },
  {
   "address": 62245,
   "type": "line",
   "text": "Working block: duration of the third step; for an arpeggio the base note."
  },
  {
   "address": 62246,
   "type": "line",
   "text": "Working block: duration of the fourth step; for an arpeggio the table's length."
  },
  {
   "address": 62247,
   "type": "line",
   "text": "Working block: frames before the modulation starts; for an arpeggio the current position."
  },
  {
   "address": 62248,
   "type": "line",
   "text": "Working block: the frequency modulation flags."
  },
  {
   "address": 62249,
   "type": "line",
   "text": "Working block: frames the pulse width sweeps one way."
  },
  {
   "address": 62250,
   "type": "line",
   "text": "Working block: frames it sweeps back."
  },
  {
   "address": 62251,
   "type": "line",
   "text": "Working block: frames before the pulse sweep starts."
  },
  {
   "address": 62252,
   "type": "line",
   "text": "Working block: the pulse sweep flags (0 for none)."
  },
  {
   "address": 62253,
   "type": "line",
   "text": "Working block: amount added to the pulse width each frame on the way up, low byte."
  },
  {
   "address": 62254,
   "type": "line",
   "text": "Working block: high byte of that amount."
  },
  {
   "address": 62255,
   "type": "line",
   "text": "Working block: amount added on the way back, low byte."
  },
  {
   "address": 62256,
   "type": "line",
   "text": "Working block: high byte of the amount added to the pulse width on the way back."
  },
  {
   "address": 62257,
   "type": "line",
   "text": "Working block: the pulse width the sweep restarts from, low byte."
  },
  {
   "address": 62258,
   "type": "line",
   "text": "Working block: the pulse width the sweep restarts from, high byte."
  },
  {
   "address": 62259,
   "type": "line",
   "text": "Working block: the note's own frequency, low byte, which a repeating modulation returns to."
  },
  {
   "address": 62260,
   "type": "line",
   "text": "Working block: the note's own frequency, high byte."
  },
  {
   "address": 62261,
   "type": "line",
   "text": "Working block: the voice's control byte as last written."
  },
  {
   "address": 62262,
   "type": "line",
   "text": "Working block: the gate countdown."
  },
  {
   "address": 62263,
   "type": "line",
   "text": "Working block: the release countdown; 0 means the voice is silent."
  },
  {
   "address": 62264,
   "type": "line",
   "text": "Working block: frames left of the first frequency step."
  },
  {
   "address": 62265,
   "type": "line",
   "text": "Working block: frames left of the second frequency step."
  },
  {
   "address": 62266,
   "type": "line",
   "text": "Working block: frames left of the third frequency step."
  },
  {
   "address": 62267,
   "type": "line",
   "text": "Working block: frames left of the fourth frequency step."
  },
  {
   "address": 62268,
   "type": "line",
   "text": "Working block: frames left of the pulse sweep's upward half."
  },
  {
   "address": 62269,
   "type": "line",
   "text": "Working block: frames left of its downward half; voice 2's working block follows."
  },
  {
   "address": 62298,
   "type": "line",
   "text": "Voice 2's release countdown, zeroed by silence."
  },
  {
   "address": 62333,
   "type": "line",
   "text": "Voice 3's release countdown, zeroed by silence."
  },
  {
   "address": 62340,
   "type": "line",
   "text": "Working copy of the filter sweep, sixteen bytes."
  },
  {
   "address": 62348,
   "type": "line",
   "text": "Filter sweep settings: duration of its first half."
  },
  {
   "address": 62349,
   "type": "line",
   "text": "Filter sweep settings: duration of its second half."
  },
  {
   "address": 62350,
   "type": "line",
   "text": "Filter sweep settings: frames before it starts."
  },
  {
   "address": 62351,
   "type": "line",
   "text": "Filter sweep settings: a flag byte copied with the block but not read by the sweep; the byte after it is not read by anything found."
  },
  {
   "address": 62353,
   "type": "line",
   "text": "Written when a tune is silenced and when the voice that drives the filter goes quiet; nothing reads it."
  },
  {
   "address": 62354,
   "type": "line",
   "text": "The cutoff's starting value, low part."
  },
  {
   "address": 62355,
   "type": "line",
   "text": "The cutoff's starting value, high part."
  },
  {
   "address": 62356,
   "type": "line",
   "text": "Working copy of the cutoff's low part, written by filter_restart; nothing reads it."
  },
  {
   "address": 62357,
   "type": "line",
   "text": "Working copy of the cutoff's high part, written by filter_restart; nothing reads it."
  },
  {
   "address": 62358,
   "type": "line",
   "text": "Working copy of the first length byte of the filter settings, written by filter_restart; nothing reads or counts it down."
  },
  {
   "address": 62359,
   "type": "line",
   "text": "Working copy of the second length byte of the filter settings; nothing reads it."
  },
  {
   "address": 62360,
   "type": "line",
   "text": "Working copy of the delay byte of the filter settings; nothing reads it."
  },
  {
   "address": 62361,
   "type": "line",
   "text": "One byte before the note length table: lengths are indexed from 1. Also the sweep's flag byte."
  },
  {
   "address": 62362,
   "type": "line",
   "text": "Thirty-two note lengths in frames, multiples 1-32 of the tune's tempo, rebuilt by start_tune."
  },
  {
   "address": 62393,
   "type": "line",
   "text": "Low bytes of the SID frequency of each of the 95 notes, in semitones from the lowest."
  },
  {
   "address": 62488,
   "type": "line",
   "text": "High bytes of the 95 note frequencies."
  },
  {
   "address": 62583,
   "type": "line",
   "text": "Start the tune whose seven-byte record has its third voice's address at tune_table + Y and its tempo byte at tune_table + Y + 2: load the three voices' data addresses, reset each voice's transposition, stack and counters, and build the table of note lengths as multiples of the record's tempo byte."
  },
  {
   "address": 62643,
   "type": "line",
   "text": "Operand of start_tune's ADC: the tune's tempo, the number of frames in the shortest note length."
  },
  {
   "address": 62653,
   "type": "line",
   "text": "Reset the SID: write 8 then 0 to all 23 registers below the volume, stop the three voices and their effects, release the filter, and set full volume with the low-pass filter on ($1F)."
  },
  {
   "address": 62706,
   "type": "line",
   "text": "Called when the voice that drives the filter starts a note: copy the sixteen filter settings to their working block, copy four of them on to further working bytes, and write the starting cutoff to the SID ($D415, $D416). Nothing changes the cutoff afterwards: the working bytes are never read, so no sweep runs."
  },
  {
   "address": 62780,
   "type": "line",
   "text": "Once a frame, for each voice: step its music if it still has data, and run its envelope and modulations while a note sounds. tune_playing counts the voices with data."
  },
  {
   "address": 62811,
   "type": "line",
   "text": "Count the voice's wait down; when it reaches zero read the next events."
  },
  {
   "address": 62826,
   "type": "line",
   "text": "Skip one byte and read the next event."
  },
  {
   "address": 62828,
   "type": "line",
   "text": "Skip A bytes and read the next event."
  },
  {
   "address": 62831,
   "type": "line",
   "text": "Read the voice's next event: a byte with bit 7 set is a command and goes through music_command_table; anything else is a note."
  },
  {
   "address": 62843,
   "type": "line",
   "text": "The JMP through music_command_table."
  },
  {
   "address": 62844,
   "type": "line",
   "text": "Operand of mus_dispatch: low byte of the table entry."
  },
  {
   "address": 62849,
   "type": "line",
   "text": "A note: values up to $5E are pitches (transposed, then looked up in freq_lo/freq_hi), $5F and above rests. Restarts the voice's oscillator with the test bit, loads frequency, pulse width, waveform and envelope from the instrument, restarts the pulse and frequency modulations and the filter if this voice drives it, and sets the gate time. The byte after the note indexes the table of lengths."
  },
  {
   "address": 62984,
   "type": "line",
   "text": "Operand: low byte of the voice's instrument block; from here voice_note copies the modulation settings into the working block."
  },
  {
   "address": 62987,
   "type": "line",
   "text": "Operand: low byte of the voice's working block."
  },
  {
   "address": 63035,
   "type": "line",
   "text": "Read the length byte, set the wait and remember where the voice continues."
  },
  {
   "address": 63065,
   "type": "line",
   "text": "Set the voice's working frequency back to the note's own, then reload the frequency modulation's four step counters from the instrument."
  },
  {
   "address": 63079,
   "type": "line",
   "text": "The reload alone, for a modulation that repeats."
  },
  {
   "address": 63104,
   "type": "line",
   "text": "Reload the pulse-width sweep from its starting value."
  },
  {
   "address": 63117,
   "type": "line",
   "text": "Reload the pulse sweep's two counters."
  },
  {
   "address": 63141,
   "type": "line",
   "text": "One frame of a sounding voice: count the gate time and then clear the gate bit; count the release and then silence the voice; sweep the pulse width up and down by the instrument's two rates; and either step an arpeggio through its table of semitone offsets or run the four-stage frequency modulation (vibrato and slides)."
  },
  {
   "address": 63623,
   "type": "line",
   "text": "Start the sound effect whose 30-byte record is at A (low), Y (high) on voice 1: silence the voice, load pulse, control and envelope, the starting note, gate and release times, and the 24 modulation bytes, then restart the modulations. The LDA live_pulse_start_hi,Y at $F8E9 runs with Y = $FF (the loop before it ends there), so it reads $F431, not $F332."
  },
  {
   "address": 63778,
   "type": "line",
   "text": "Twelve tune records of seven bytes: the addresses of the three voices' data and a tempo, the number of frames in the shortest note. Tunes: 0 the opening story, 1 the round tune, 2 the boss round, 3 the freeze item, 4 game over, 5 the round tune again a step faster, 6 EXTEND, 7 the title, 8 hurry up, 9 the Barons, 10 the secret room, 11 the ending."
  },
  {
   "address": 63779,
   "type": "line",
   "text": "The tune table one byte on, for the high bytes of the voice addresses."
  },
  {
   "address": 63780,
   "type": "line",
   "text": "The tune table two bytes on, as start_tune indexes the tempo."
  },
  {
   "address": 63862,
   "type": "line",
   "text": "The six sound effects, 30 bytes each (the fifth and sixth are set seven bytes apart from the fourth): 24 modulation bytes in the layout of a voice's working block, then control, gate time, release time, pulse width and envelope, and the starting note. They play on voice 1."
  },
  {
   "address": 64056,
   "type": "line",
   "text": "Fifteen instruments of 29 bytes each, loaded with music command $86, and one of 14 bytes at $FBEB for command $84."
  },
  {
   "address": 64505,
   "type": "line",
   "text": "Last fifteen bytes of the 29-byte instrument at $FBEB; one tune loads only its first fourteen with command $84."
  },
  {
   "address": 64520,
   "type": "line",
   "text": "Four 16-byte filter sweep settings, loaded with music command $9A."
  },
  {
   "address": 64584,
   "type": "line",
   "text": "Three 14-byte instruments (frequency modulation only), loaded with music command $84."
  },
  {
   "address": 64626,
   "type": "line",
   "text": "Music data of tunes 0, 1, 3 and 5: the opening story's three voices, the round tune's, and the patterns they call. Runs to $FE87."
  },
  {
   "address": 64922,
   "type": "line",
   "text": "Music data continues: the later patterns of the round tune's melody voice."
  },
  {
   "address": 65160,
   "type": "line",
   "text": "Seven bytes after the last stream that no tune was found to reach."
  },
  {
   "address": 65167,
   "type": "line",
   "text": "Twenty glyphs of eight bytes: the digits 0-9 in two styles, loaded into characters $60-$73 for the bonus scenes' counters (indexed from 1)."
  },
  {
   "address": 65328,
   "type": "line",
   "text": "Per round: the two multicolours of its walls, high nibble for $D022 and low nibble for $D023."
  },
  {
   "address": 65428,
   "type": "line",
   "text": "Per round: bits 0-6 the number of its wall block ($7F: use the wall tile itself), bit 7 set when its layout is stored as a mirrored half."
  },
  {
   "address": 65530,
   "type": "line",
   "text": "NMI vector in RAM: $072D, a bare RTI, so RESTORE does nothing."
  },
  {
   "address": 65534,
   "type": "line",
   "text": "IRQ vector in RAM, rewritten by each raster handler to point at the next: irq_bottom, irq_top or irq_boss_lower."
  },
  {
   "address": 65535,
   "type": "line",
   "text": "High byte of the IRQ vector."
  }
 ]
}