{
 "schema": 1,
 "platform": "c64",
 "game": "i-ball",
 "build": "one-file whole-memory image, $0314-$FFFF, started by an IRQ hook at $033C (I_Ball.prg, MD5 ab57fa0a25cfa9ab7b411317f9a305ca); release unknown",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    1024,
    2047,
    "screen RAM"
   ],
   [
    0,
    255,
    "runtime: zero page, the game's variables (named in the listing) and the music driver's pointers"
   ],
   [
    512,
    827,
    "system: the KERNAL's work area, which the game does not use once it runs"
   ],
   [
    903,
    1023,
    "system: the rest of the cassette buffer and the KERNAL's vectors after start_hook"
   ],
   [
    1024,
    2047,
    "runtime: the screen and the sprite pointers, written by clear_screen, draw_playfield and the text routines"
   ],
   [
    2048,
    2429,
    "never read: the RAM's power-on pattern ($00 and $FF in blocks) and zeros"
   ],
   [
    2430,
    8191,
    "runtime: the map buffer, built from the level's tile list by build_level_map at the start of every level (at the hand-over it holds a map, and at $1FB3 the text SEARCHING LOADING BLOCK? REWIND TO, which the build overwrites); the last two bytes are never written or read"
   ],
   [
    16384,
    16559,
    "runtime: the shot table and the variables after it, cleared by new_game and reset_level; at the hand-over they hold leftover code"
   ],
   [
    16816,
    16860,
    "runtime: the per-sprite sets and the extras flags; at the hand-over they hold leftover code"
   ],
   [
    28833,
    29183,
    "never read: zeros, with seven stray bytes at $70A7"
   ],
   [
    35968,
    40959,
    "never read: the RAM's power-on pattern, with leftovers of a loader at $8CD0-$8DFF (code that copies memory and sets up the screen, and two lines of text), which the game never runs"
   ],
   [
    49247,
    49502,
    "runtime: the high-nybble table, built by make_nybble_table before every sample"
   ],
   [
    49920,
    53247,
    "never read: the RAM's power-on pattern"
   ],
   [
    53248,
    57343,
    "never read: RAM under the I/O area, which the game never banks in for the processor and the video chip (bank 0) cannot see. $D000-$D3FF holds what looks like map rows, left from before the image was saved; the rest is the RAM's power-on pattern"
   ],
   [
    61978,
    65529,
    "never read: leftovers after the effects' definitions, which no pointer reaches: four-bit data like the speech samples', multicolour graphics, and at $FF00 the text **LOADING 12"
   ],
   [
    65530,
    65535,
    "runtime: the hardware NMI and IRQ vectors, written by set_sample_nmi and the interrupt handlers"
   ]
  ],
  "extra": [
   [
    12288,
    14335,
    "character set"
   ],
   [
    8192,
    12287,
    "the sprite shapes $80-$BF: the panels' icons, timer digits, score and meter sprites, Iball's roll, the aliens, the disc, the explosions and the pieces"
   ],
   [
    12288,
    14335,
    "the playfield's character set, which the video chip reads through $D018 (the animated characters at $36F0 and the dot at $37F8 are rewritten in play)"
   ],
   [
    14336,
    16383,
    "the text character set of the title and the screens between levels, with the sprite shapes $E0-$FF above it: the lives, the friends and the explosion"
   ]
  ],
  "edges": [
   0,
   256,
   512,
   1024,
   2048,
   4096,
   16384,
   32768,
   40960,
   49152,
   53248,
   57344
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 827,
   "type": "Undefined"
  },
  {
   "start": 828,
   "end": 902,
   "type": "Code"
  },
  {
   "start": 903,
   "end": 8191,
   "type": "Undefined"
  },
  {
   "start": 8192,
   "end": 16383,
   "type": "Byte"
  },
  {
   "start": 16384,
   "end": 16559,
   "type": "Undefined"
  },
  {
   "start": 16560,
   "end": 16815,
   "type": "Byte"
  },
  {
   "start": 16816,
   "end": 16860,
   "type": "Undefined"
  },
  {
   "start": 16861,
   "end": 18528,
   "type": "Code"
  },
  {
   "start": 18529,
   "end": 18592,
   "type": "Byte"
  },
  {
   "start": 18593,
   "end": 19166,
   "type": "Code"
  },
  {
   "start": 19167,
   "end": 19246,
   "type": "Byte"
  },
  {
   "start": 19247,
   "end": 19484,
   "type": "Code"
  },
  {
   "start": 19485,
   "end": 19508,
   "type": "Byte"
  },
  {
   "start": 19509,
   "end": 19543,
   "type": "Code"
  },
  {
   "start": 19544,
   "end": 19645,
   "type": "Byte"
  },
  {
   "start": 19646,
   "end": 20721,
   "type": "Code"
  },
  {
   "start": 20722,
   "end": 20734,
   "type": "Byte"
  },
  {
   "start": 20735,
   "end": 21443,
   "type": "Code"
  },
  {
   "start": 21444,
   "end": 21606,
   "type": "Byte"
  },
  {
   "start": 21607,
   "end": 21851,
   "type": "Code"
  },
  {
   "start": 21852,
   "end": 21883,
   "type": "Byte"
  },
  {
   "start": 21884,
   "end": 22095,
   "type": "Code"
  },
  {
   "start": 22096,
   "end": 22111,
   "type": "Byte"
  },
  {
   "start": 22112,
   "end": 22154,
   "type": "Code"
  },
  {
   "start": 22155,
   "end": 22162,
   "type": "Byte"
  },
  {
   "start": 22163,
   "end": 22214,
   "type": "Code"
  },
  {
   "start": 22215,
   "end": 22230,
   "type": "Byte"
  },
  {
   "start": 22231,
   "end": 22390,
   "type": "Code"
  },
  {
   "start": 22391,
   "end": 22440,
   "type": "Byte"
  },
  {
   "start": 22441,
   "end": 22863,
   "type": "Code"
  },
  {
   "start": 22864,
   "end": 22872,
   "type": "Screencode Text"
  },
  {
   "start": 22873,
   "end": 22893,
   "type": "Code"
  },
  {
   "start": 22894,
   "end": 22908,
   "type": "Screencode Text"
  },
  {
   "start": 22909,
   "end": 22957,
   "type": "Code"
  },
  {
   "start": 22958,
   "end": 22989,
   "type": "Byte"
  },
  {
   "start": 22990,
   "end": 23185,
   "type": "Code"
  },
  {
   "start": 23186,
   "end": 23236,
   "type": "Screencode Text"
  },
  {
   "start": 23237,
   "end": 23392,
   "type": "Code"
  },
  {
   "start": 23393,
   "end": 23435,
   "type": "Screencode Text"
  },
  {
   "start": 23436,
   "end": 23799,
   "type": "Code"
  },
  {
   "start": 23800,
   "end": 23815,
   "type": "Byte"
  },
  {
   "start": 23816,
   "end": 24019,
   "type": "Code"
  },
  {
   "start": 24020,
   "end": 24036,
   "type": "Byte"
  },
  {
   "start": 24037,
   "end": 24169,
   "type": "Code"
  },
  {
   "start": 24170,
   "end": 24186,
   "type": "Byte"
  },
  {
   "start": 24187,
   "end": 24613,
   "type": "Code"
  },
  {
   "start": 24614,
   "end": 24621,
   "type": "Screencode Text"
  },
  {
   "start": 24622,
   "end": 24682,
   "type": "Code"
  },
  {
   "start": 24683,
   "end": 24874,
   "type": "Byte"
  },
  {
   "start": 24875,
   "end": 25282,
   "type": "Screencode Text"
  },
  {
   "start": 25283,
   "end": 25314,
   "type": "Byte"
  },
  {
   "start": 25315,
   "end": 25374,
   "type": "Code"
  },
  {
   "start": 25375,
   "end": 25418,
   "type": "Byte"
  },
  {
   "start": 25419,
   "end": 25831,
   "type": "Code"
  },
  {
   "start": 25832,
   "end": 25855,
   "type": "Screencode Text"
  },
  {
   "start": 25856,
   "end": 25989,
   "type": "Code"
  },
  {
   "start": 25990,
   "end": 26010,
   "type": "Byte"
  },
  {
   "start": 26011,
   "end": 26285,
   "type": "Code"
  },
  {
   "start": 26286,
   "end": 26405,
   "type": "Byte"
  },
  {
   "start": 26406,
   "end": 27163,
   "type": "Code"
  },
  {
   "start": 27164,
   "end": 27170,
   "type": "Byte"
  },
  {
   "start": 27171,
   "end": 27931,
   "type": "Code"
  },
  {
   "start": 27932,
   "end": 27932,
   "type": "Undefined"
  },
  {
   "start": 27933,
   "end": 28618,
   "type": "Code"
  },
  {
   "start": 28619,
   "end": 28619,
   "type": "Byte"
  },
  {
   "start": 28620,
   "end": 28707,
   "type": "Screencode Text"
  },
  {
   "start": 28708,
   "end": 28798,
   "type": "Code"
  },
  {
   "start": 28799,
   "end": 28828,
   "type": "Screencode Text"
  },
  {
   "start": 28829,
   "end": 29183,
   "type": "Undefined"
  },
  {
   "start": 29184,
   "end": 35967,
   "type": "Byte"
  },
  {
   "start": 35968,
   "end": 40959,
   "type": "Undefined"
  },
  {
   "start": 40960,
   "end": 49151,
   "type": "Byte"
  },
  {
   "start": 49152,
   "end": 49152,
   "type": "Undefined"
  },
  {
   "start": 49153,
   "end": 49209,
   "type": "Code"
  },
  {
   "start": 49210,
   "end": 49211,
   "type": "Byte"
  },
  {
   "start": 49212,
   "end": 49213,
   "type": "Undefined"
  },
  {
   "start": 49214,
   "end": 49239,
   "type": "Code"
  },
  {
   "start": 49240,
   "end": 49502,
   "type": "Undefined"
  },
  {
   "start": 49503,
   "end": 49538,
   "type": "Code"
  },
  {
   "start": 49539,
   "end": 49539,
   "type": "Undefined"
  },
  {
   "start": 49540,
   "end": 49625,
   "type": "Code"
  },
  {
   "start": 49626,
   "end": 49650,
   "type": "Byte"
  },
  {
   "start": 49651,
   "end": 49669,
   "type": "Code"
  },
  {
   "start": 49670,
   "end": 49672,
   "type": "Byte"
  },
  {
   "start": 49673,
   "end": 49732,
   "type": "Code"
  },
  {
   "start": 49733,
   "end": 49919,
   "type": "Byte"
  },
  {
   "start": 49920,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 57344,
   "end": 57352,
   "type": "Byte"
  },
  {
   "start": 57353,
   "end": 58438,
   "type": "Code"
  },
  {
   "start": 58439,
   "end": 58654,
   "type": "Byte"
  },
  {
   "start": 58655,
   "end": 58671,
   "type": "Code"
  },
  {
   "start": 58672,
   "end": 60754,
   "type": "Byte"
  },
  {
   "start": 60755,
   "end": 61074,
   "type": "Code"
  },
  {
   "start": 61075,
   "end": 61349,
   "type": "Byte"
  },
  {
   "start": 61350,
   "end": 61519,
   "type": "Code"
  },
  {
   "start": 61520,
   "end": 61977,
   "type": "Byte"
  },
  {
   "start": 61978,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "cpu_port_ddr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "zpa_01",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2,
   "name": "sprite_ptrs",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "zpa_03",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 4,
   "name": "zpa_04",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 5,
   "name": "zpa_05",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 10,
   "name": "sprite_colours",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 11,
   "name": "zpa_0B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 12,
   "name": "zpa_0C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 13,
   "name": "zpa_0D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18,
   "name": "sprite_pos",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 19,
   "name": "zpa_13",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20,
   "name": "zpa_14",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21,
   "name": "zpa_15",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22,
   "name": "zpa_16",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23,
   "name": "zpa_17",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24,
   "name": "zpa_18",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25,
   "name": "zpa_19",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26,
   "name": "zpa_1A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27,
   "name": "zpa_1B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 28,
   "name": "zpa_1C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29,
   "name": "zpa_1D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30,
   "name": "zpa_1E",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31,
   "name": "zpa_1F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32,
   "name": "zpa_20",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33,
   "name": "zpa_21",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34,
   "name": "sprite_x_msb",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35,
   "name": "sprite_mc0",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36,
   "name": "sprite_mc1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37,
   "name": "sprite_enable",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38,
   "name": "dir_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39,
   "name": "dir_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40,
   "name": "level",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41,
   "name": "sprite_speeds",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42,
   "name": "vertical_speed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44,
   "name": "zpa_2C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 45,
   "name": "zpa_2D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 46,
   "name": "zpa_2E",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 47,
   "name": "zpa_2F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49,
   "name": "zpa_31",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 51,
   "name": "zpa_33",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52,
   "name": "zpa_34",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 54,
   "name": "zpa_36",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55,
   "name": "zpa_37",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56,
   "name": "zpa_38",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 57,
   "name": "sprite_bit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "sprite_multi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59,
   "name": "lives",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60,
   "name": "dying",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "death_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62,
   "name": "background",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 63,
   "name": "death_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64,
   "name": "wait_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 65,
   "name": "score",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 71,
   "name": "timer_units",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 72,
   "name": "timer_tens",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 73,
   "name": "timer_frames",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 74,
   "name": "in_logic",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 75,
   "name": "logic_skipped",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 78,
   "name": "tile_list",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 79,
   "name": "zpa_4F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 80,
   "name": "tile_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 81,
   "name": "zpa_51",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 82,
   "name": "tile_num",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 83,
   "name": "zpa_53",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 84,
   "name": "tile_dest",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 85,
   "name": "zpa_55",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 86,
   "name": "tiles_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 87,
   "name": "tile_rows",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 88,
   "name": "map_done",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 127,
   "name": "cia_mask",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 128,
   "name": "fine_scroll",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 129,
   "name": "row_drawn",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 130,
   "name": "map_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 131,
   "name": "zpa_83",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 132,
   "name": "scroll_speed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 133,
   "name": "scroll_dir",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 134,
   "name": "friction_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 135,
   "name": "friction_reload",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 136,
   "name": "input_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 137,
   "name": "input_rate",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 138,
   "name": "facing_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 139,
   "name": "roll_frame",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 140,
   "name": "anim_frame",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 141,
   "name": "anim_frames",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 143,
   "name": "rows_scrolled",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 147,
   "name": "zpa_93",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 148,
   "name": "zpa_94",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 149,
   "name": "level_over",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 150,
   "name": "probe_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 151,
   "name": "probe",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 163,
   "name": "alien_probe",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 175,
   "name": "hit_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 176,
   "name": "alien_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 177,
   "name": "explode_frame",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 185,
   "name": "row_lo",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 197,
   "name": "zpa_C5",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 204,
   "name": "zpa_CC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 210,
   "name": "row_hi",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 235,
   "name": "vertical_limit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 236,
   "name": "horizontal_limit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 237,
   "name": "materialising",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 238,
   "name": "start_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 239,
   "name": "start_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 240,
   "name": "gather_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 241,
   "name": "piece_speed",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 242,
   "name": "wall_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 243,
   "name": "shot_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 244,
   "name": "disc_countdown",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 245,
   "name": "disc_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 246,
   "name": "game_ended",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 247,
   "name": "freeze",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 248,
   "name": "freeze_frames",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 249,
   "name": "laser_heat",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 250,
   "name": "cool_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 251,
   "name": "overheat_lock",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 252,
   "name": "music_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 253,
   "name": "zpa_FD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 254,
   "name": "zpa_FE",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 255,
   "name": "zpa_FF",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 389,
   "name": "f_0185",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 788,
   "name": "f_0314",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 792,
   "name": "a_0318",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 793,
   "name": "a_0319",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 828,
   "name": "start_hook",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 843,
   "name": "b_034B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 865,
   "name": "b_0361",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 876,
   "name": "b_036C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 881,
   "name": "b_0371",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 1024,
   "name": "f_0400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1032,
   "name": "f_0408",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1036,
   "name": "f_040C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1119,
   "name": "f_045F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1120,
   "name": "f_0460",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1196,
   "name": "f_04AC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1201,
   "name": "f_04B1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1280,
   "name": "f_0500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1307,
   "name": "f_051B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1441,
   "name": "f_05A1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1482,
   "name": "f_05CA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1516,
   "name": "f_05EC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1522,
   "name": "f_05F2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1536,
   "name": "f_0600",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1559,
   "name": "f_0617",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1560,
   "name": "f_0618",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1631,
   "name": "f_065F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1647,
   "name": "f_066F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1792,
   "name": "f_0700",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1833,
   "name": "f_0729",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1871,
   "name": "f_074F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1874,
   "name": "f_0752",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1887,
   "name": "f_075F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1944,
   "name": "f_0798",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1952,
   "name": "f_07A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1955,
   "name": "f_07A3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1960,
   "name": "f_07A8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1984,
   "name": "f_07C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2018,
   "name": "f_07E2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2040,
   "name": "f_07F8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2041,
   "name": "a_07F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2042,
   "name": "a_07FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2043,
   "name": "a_07FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2044,
   "name": "a_07FC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2045,
   "name": "a_07FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2046,
   "name": "a_07FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2047,
   "name": "a_07FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 8192,
   "name": "sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9216,
   "name": "sprites_90",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9984,
   "name": "meter_sprite",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10048,
   "name": "sprites_9d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11072,
   "name": "sprites_ad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11264,
   "name": "sprites_b0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12288,
   "name": "charset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13312,
   "name": "charset_80",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14064,
   "name": "anim_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14128,
   "name": "charset_e6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14320,
   "name": "char_fe",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14328,
   "name": "char_dot",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14329,
   "name": "char_dot_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14335,
   "name": "char_dot_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14336,
   "name": "charset_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14656,
   "name": "charset_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15680,
   "name": "sprites_f5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16376,
   "name": "char_dot_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "shot_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16409,
   "name": "shot_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16434,
   "name": "shot_char",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16459,
   "name": "shot_col_ram",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16484,
   "name": "shot_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16509,
   "name": "shot_live",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16534,
   "name": "up_shot_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16535,
   "name": "up_shot_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16536,
   "name": "last_push",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16537,
   "name": "shot_char_now",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16539,
   "name": "f_409B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16540,
   "name": "score_adder",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16543,
   "name": "a_409F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 16544,
   "name": "a_40A0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 16546,
   "name": "alien_kind",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16554,
   "name": "random_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16560,
   "name": "random_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16816,
   "name": "forming",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16817,
   "name": "forming_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16825,
   "name": "exploding",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16826,
   "name": "spawn_blocked",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16827,
   "name": "colour_cycle",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16828,
   "name": "is_disc",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16829,
   "name": "single_laser",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16830,
   "name": "turbo_on",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16831,
   "name": "smart_armed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16833,
   "name": "spray_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16834,
   "name": "shield_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16835,
   "name": "extended_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16836,
   "name": "twin_laser",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16837,
   "name": "hyper_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16838,
   "name": "molecule_armed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16839,
   "name": "faulty_disc",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16840,
   "name": "fuel_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16842,
   "name": "brakes_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16844,
   "name": "cooler_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16845,
   "name": "ripple_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16846,
   "name": "down_shot_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16847,
   "name": "down_shot_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16848,
   "name": "molecule_frames",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16849,
   "name": "shield_meter",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16850,
   "name": "brakes_meter",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16851,
   "name": "shield_tick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16852,
   "name": "brakes_tick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16853,
   "name": "paused",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16854,
   "name": "pause_held",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16855,
   "name": "laser_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16856,
   "name": "iball_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16857,
   "name": "laser_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16858,
   "name": "iball_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16859,
   "name": "facing_right",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16860,
   "name": "irq_top_busy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16861,
   "name": "old_irq_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16869,
   "name": "old_panel_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16912,
   "name": "b_4210",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16929,
   "name": "b_4221",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16939,
   "name": "old_panel_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16964,
   "name": "b_4244",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16975,
   "name": "b_424F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17003,
   "name": "new_game",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17019,
   "name": "b_427B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17022,
   "name": "j_427E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17024,
   "name": "b_4280",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17083,
   "name": "b_42BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17094,
   "name": "b_42C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17101,
   "name": "b_42CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17123,
   "name": "start_level",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17161,
   "name": "b_4309",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17173,
   "name": "old_tbl_4315",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17179,
   "name": "b_431B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17186,
   "name": "next_level",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17189,
   "name": "old_tbl_4325",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17197,
   "name": "old_tbl_432D",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17198,
   "name": "b_432E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17201,
   "name": "game_over",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 17205,
   "name": "old_tbl_4335",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17220,
   "name": "reset_level",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17221,
   "name": "old_tbl_4345",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17229,
   "name": "old_tbl_434D",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17285,
   "name": "b_4385",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17293,
   "name": "b_438D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17301,
   "name": "b_4395",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17309,
   "name": "b_439D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17406,
   "name": "init_game_irq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17458,
   "name": "irq_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17515,
   "name": "b_446B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17521,
   "name": "b_4471",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17522,
   "name": "b_4472",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17536,
   "name": "a_4480",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17591,
   "name": "b_44B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17594,
   "name": "b_44BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17611,
   "name": "b_44CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17614,
   "name": "b_44CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17631,
   "name": "b_44DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17657,
   "name": "j_44F9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17659,
   "name": "a_44FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17661,
   "name": "a_44FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17668,
   "name": "a_4504",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17670,
   "name": "irq_panel_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17707,
   "name": "b_452B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17712,
   "name": "j_4530",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17715,
   "name": "j_4533",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17749,
   "name": "b_4555",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17763,
   "name": "b_4563",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17766,
   "name": "j_4566",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17767,
   "name": "a_4567",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17769,
   "name": "a_4569",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17771,
   "name": "a_456B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17773,
   "name": "irq_logic",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17810,
   "name": "b_4592",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17836,
   "name": "b_45AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17854,
   "name": "j_45BE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17873,
   "name": "b_45D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17914,
   "name": "b_45FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17984,
   "name": "b_4640",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17997,
   "name": "b_464D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18018,
   "name": "b_4662",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18028,
   "name": "j_466C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18034,
   "name": "irq_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18083,
   "name": "b_46A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18098,
   "name": "j_46B2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18108,
   "name": "a_46BC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18110,
   "name": "a_46BE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18112,
   "name": "a_46C0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18114,
   "name": "panel_sprites_top",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18157,
   "name": "b_46ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18174,
   "name": "b_46FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18184,
   "name": "unused_sprites_off",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18190,
   "name": "panel_sprites_bottom",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18215,
   "name": "b_4727",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18342,
   "name": "scroll_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18362,
   "name": "b_47BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18369,
   "name": "j_47C1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18381,
   "name": "b_47CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18390,
   "name": "draw_playfield",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18404,
   "name": "b_47E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18407,
   "name": "j_47E7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18445,
   "name": "b_480D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18447,
   "name": "b_480F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18449,
   "name": "b_4811",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18450,
   "name": "a_4812",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18451,
   "name": "a_4813",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18453,
   "name": "a_4815",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18454,
   "name": "a_4816",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18472,
   "name": "b_4828",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18486,
   "name": "b_4836",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18490,
   "name": "clear_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18494,
   "name": "b_483E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18508,
   "name": "b_484C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18517,
   "name": "set_fine_scroll",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18529,
   "name": "panel_top_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18545,
   "name": "panel_top_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18546,
   "name": "panel_top_colour_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18547,
   "name": "panel_top_colour_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18548,
   "name": "panel_top_colour_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18549,
   "name": "panel_top_colour_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18550,
   "name": "panel_top_colour_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18551,
   "name": "panel_top_colour_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18552,
   "name": "panel_top_colour_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18553,
   "name": "panel_top_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18559,
   "name": "timer_tens_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18560,
   "name": "timer_units_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18561,
   "name": "panel_bottom_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18577,
   "name": "panel_bottom_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18578,
   "name": "panel_bottom_colour_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18579,
   "name": "panel_bottom_colour_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18580,
   "name": "panel_bottom_colour_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18581,
   "name": "panel_bottom_colour_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18582,
   "name": "panel_bottom_colour_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18583,
   "name": "panel_bottom_colour_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18584,
   "name": "panel_bottom_colour_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18585,
   "name": "panel_bottom_ptrs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18586,
   "name": "panel_bottom_ptr_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18587,
   "name": "panel_bottom_ptr_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18588,
   "name": "panel_bottom_ptr_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18589,
   "name": "panel_bottom_ptr_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18590,
   "name": "panel_bottom_ptr_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18591,
   "name": "panel_bottom_ptr_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18592,
   "name": "panel_bottom_ptr_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18593,
   "name": "fill_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18595,
   "name": "b_48A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18609,
   "name": "b_48B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18618,
   "name": "scroll_back",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 18640,
   "name": "b_48D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18655,
   "name": "b_48DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18680,
   "name": "b_48F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18686,
   "name": "sprites_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18695,
   "name": "b_4907",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18705,
   "name": "b_4911",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18729,
   "name": "read_controls",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18736,
   "name": "b_4930",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18758,
   "name": "b_4946",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18773,
   "name": "j_4955",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18791,
   "name": "b_4967",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18806,
   "name": "j_4976",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18824,
   "name": "b_4988",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18839,
   "name": "j_4997",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18857,
   "name": "b_49A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18872,
   "name": "r_49B8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 18873,
   "name": "push_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18887,
   "name": "b_49C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18890,
   "name": "push_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18904,
   "name": "b_49D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18907,
   "name": "push_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18925,
   "name": "b_49ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18928,
   "name": "push_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18946,
   "name": "b_4A02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18949,
   "name": "limit_speeds",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18963,
   "name": "b_4A13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18971,
   "name": "b_4A1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18985,
   "name": "b_4A29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18993,
   "name": "r_4A31",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 18994,
   "name": "move_iball",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19019,
   "name": "b_4A4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19024,
   "name": "b_4A50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19030,
   "name": "a_4A56",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19043,
   "name": "b_4A63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19045,
   "name": "j_4A65",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19068,
   "name": "b_4A7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19073,
   "name": "b_4A81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19088,
   "name": "b_4A90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19090,
   "name": "r_4A92",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19091,
   "name": "friction",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19098,
   "name": "b_4A9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19112,
   "name": "b_4AA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19122,
   "name": "b_4AB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19132,
   "name": "r_4ABC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19133,
   "name": "animate_iball",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19147,
   "name": "b_4ACB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19154,
   "name": "j_4AD2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19164,
   "name": "b_4ADC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19167,
   "name": "roll_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19175,
   "name": "roll_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19183,
   "name": "level_ptr_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19199,
   "name": "level_ptr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19215,
   "name": "level_colour3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19231,
   "name": "level_char_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19247,
   "name": "build_level_map",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19279,
   "name": "a_4B4F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19283,
   "name": "a_4B53",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19313,
   "name": "j_4B71",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19336,
   "name": "b_4B88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19340,
   "name": "b_4B8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19381,
   "name": "b_4BB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19395,
   "name": "b_4BC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19398,
   "name": "a_4BC6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19399,
   "name": "a_4BC7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19424,
   "name": "b_4BE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19429,
   "name": "b_4BE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19439,
   "name": "r_4BEF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19440,
   "name": "next_tile_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19451,
   "name": "b_4BFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19469,
   "name": "b_4C0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19484,
   "name": "r_4C1C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19485,
   "name": "anim_frame_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19497,
   "name": "anim_frame_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19509,
   "name": "animate_chars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19530,
   "name": "b_4C4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19534,
   "name": "b_4C4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19535,
   "name": "a_4C4F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19536,
   "name": "a_4C50",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19544,
   "name": "dot_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19594,
   "name": "dot_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19646,
   "name": "place_dots",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19648,
   "name": "b_4CC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19680,
   "name": "b_4CE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19681,
   "name": "a_4CE1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19682,
   "name": "a_4CE2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19688,
   "name": "a_4CE8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19689,
   "name": "a_4CE9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19690,
   "name": "b_4CEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19694,
   "name": "old_dot_scroll",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19702,
   "name": "b_4CF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19712,
   "name": "b_4D00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19719,
   "name": "b_4D07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19721,
   "name": "b_4D09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19727,
   "name": "r_4D0F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19728,
   "name": "old_dot_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19736,
   "name": "b_4D18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19746,
   "name": "old_dot_wrap_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19751,
   "name": "old_dot_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19759,
   "name": "b_4D2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19771,
   "name": "old_dot_wrap_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19776,
   "name": "clear_dot_char",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19780,
   "name": "b_4D44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19792,
   "name": "rotate_char_fe",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19794,
   "name": "b_4D52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19796,
   "name": "b_4D54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19813,
   "name": "b_4D65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19821,
   "name": "j_4D6D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19828,
   "name": "probe_background",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19857,
   "name": "b_4D91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19861,
   "name": "j_4D95",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19864,
   "name": "probe_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19885,
   "name": "b_4DAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19888,
   "name": "b_4DB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19890,
   "name": "b_4DB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19891,
   "name": "a_4DB3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19892,
   "name": "a_4DB4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19915,
   "name": "b_4DCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19920,
   "name": "bounce_iball",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19928,
   "name": "b_4DD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19946,
   "name": "b_4DEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19957,
   "name": "b_4DF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19959,
   "name": "b_4DF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19977,
   "name": "b_4E09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19985,
   "name": "j_4E11",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19993,
   "name": "b_4E19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20015,
   "name": "b_4E2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20023,
   "name": "b_4E37",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20025,
   "name": "b_4E39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20061,
   "name": "b_4E5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20067,
   "name": "b_4E63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20074,
   "name": "b_4E6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20079,
   "name": "r_4E6F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20080,
   "name": "start_materialise",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20120,
   "name": "materialise_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20135,
   "name": "b_4EA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20138,
   "name": "b_4EAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20202,
   "name": "b_4EEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20246,
   "name": "b_4F16",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20252,
   "name": "b_4F1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20287,
   "name": "b_4F3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20329,
   "name": "r_4F69",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20330,
   "name": "move_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20347,
   "name": "b_4F7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20353,
   "name": "j_4F81",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20377,
   "name": "b_4F99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20383,
   "name": "b_4F9F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20397,
   "name": "b_4FAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20400,
   "name": "b_4FB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20425,
   "name": "b_4FC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20431,
   "name": "j_4FCF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20457,
   "name": "b_4FE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20463,
   "name": "b_4FEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20477,
   "name": "b_4FFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20480,
   "name": "b_5000",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20489,
   "name": "bottom_limit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20507,
   "name": "b_501B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20513,
   "name": "hit_wall",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20529,
   "name": "b_5031",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20530,
   "name": "a_5032",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20535,
   "name": "r_5037",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20536,
   "name": "kill_iball",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20577,
   "name": "death_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20596,
   "name": "b_5074",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20603,
   "name": "death_explode",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 20623,
   "name": "b_508F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20640,
   "name": "b_50A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20647,
   "name": "b_50A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20684,
   "name": "death_flash",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 20708,
   "name": "b_50E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20719,
   "name": "b_50EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20722,
   "name": "death_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20735,
   "name": "death_fly",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20782,
   "name": "b_512E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20784,
   "name": "b_5130",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20789,
   "name": "b_5135",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20797,
   "name": "remove_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20815,
   "name": "a_514F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20823,
   "name": "a_5157",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20831,
   "name": "a_515F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20839,
   "name": "materialise_wait",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20875,
   "name": "b_518B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20884,
   "name": "b_5194",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20896,
   "name": "b_51A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20922,
   "name": "r_51BA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20923,
   "name": "fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20948,
   "name": "b_51D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20980,
   "name": "r_51F4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20981,
   "name": "b_51F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21046,
   "name": "b_5236",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21057,
   "name": "b_5241",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21061,
   "name": "shot_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21083,
   "name": "b_525B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21084,
   "name": "a_525C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21085,
   "name": "a_525D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21091,
   "name": "b_5263",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21093,
   "name": "b_5265",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21102,
   "name": "b_526E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21134,
   "name": "shot_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21156,
   "name": "b_52A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21157,
   "name": "a_52A5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21158,
   "name": "a_52A6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21164,
   "name": "b_52AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21166,
   "name": "b_52AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21175,
   "name": "b_52B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21209,
   "name": "shot_char_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21224,
   "name": "b_52E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21236,
   "name": "r_52F4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 21237,
   "name": "move_shots",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21239,
   "name": "b_52F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21244,
   "name": "j_52FC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21248,
   "name": "b_5300",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21285,
   "name": "b_5325",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21288,
   "name": "a_5328",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21289,
   "name": "a_5329",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21295,
   "name": "a_532F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21296,
   "name": "a_5330",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21304,
   "name": "b_5338",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21319,
   "name": "a_5347",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21320,
   "name": "a_5348",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21321,
   "name": "b_5349",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21359,
   "name": "b_536F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21387,
   "name": "b_538B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21388,
   "name": "a_538C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21389,
   "name": "a_538D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21394,
   "name": "j_5392",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21402,
   "name": "b_539A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21418,
   "name": "a_53AA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21419,
   "name": "a_53AB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21439,
   "name": "a_53BF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21440,
   "name": "a_53C0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21444,
   "name": "alien_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21452,
   "name": "alien_frames_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21462,
   "name": "alien_frames_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21482,
   "name": "alien_frames_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21506,
   "name": "alien_frames_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21514,
   "name": "alien_frames_5",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21528,
   "name": "alien_frames_6",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21536,
   "name": "screen_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21586,
   "name": "anim_counts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21587,
   "name": "anim_count_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21588,
   "name": "anim_count_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21589,
   "name": "anim_count_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21590,
   "name": "anim_count_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21591,
   "name": "anim_count_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21592,
   "name": "anim_count_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21593,
   "name": "anim_limits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21600,
   "name": "anim_ptrs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21601,
   "name": "anim_ptr_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21602,
   "name": "anim_ptr_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21603,
   "name": "anim_ptr_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21604,
   "name": "anim_ptr_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21605,
   "name": "anim_ptr_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21606,
   "name": "anim_ptr_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21607,
   "name": "alien_anim_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21609,
   "name": "b_5469",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21625,
   "name": "b_5479",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21692,
   "name": "draw_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21694,
   "name": "b_54BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21723,
   "name": "b_54DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21724,
   "name": "a_54DC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21725,
   "name": "a_54DD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21727,
   "name": "a_54DF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21728,
   "name": "a_54E0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21743,
   "name": "b_54EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21750,
   "name": "score_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21762,
   "name": "b_5502",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21763,
   "name": "a_5503",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21768,
   "name": "a_5508",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21786,
   "name": "b_551A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21852,
   "name": "digit_glyph_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21862,
   "name": "digit_glyph_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21872,
   "name": "score_dest_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21873,
   "name": "score_dest_lo_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21874,
   "name": "score_dest_lo_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21875,
   "name": "score_dest_lo_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21876,
   "name": "score_dest_lo_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21877,
   "name": "score_dest_lo_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21878,
   "name": "score_dest_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21879,
   "name": "score_dest_hi_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21880,
   "name": "score_dest_hi_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21881,
   "name": "score_dest_hi_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21882,
   "name": "score_dest_hi_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21883,
   "name": "score_dest_hi_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21884,
   "name": "add_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21886,
   "name": "b_557E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21902,
   "name": "b_558E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21908,
   "name": "timer_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21915,
   "name": "b_559B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21931,
   "name": "b_55AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21933,
   "name": "b_55AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21940,
   "name": "clear_adder",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21944,
   "name": "b_55B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21951,
   "name": "spawn_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21977,
   "name": "b_55D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21983,
   "name": "r_55DF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 21984,
   "name": "spawn_alien",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21990,
   "name": "b_55E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22004,
   "name": "b_55F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22028,
   "name": "a_560C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22030,
   "name": "a_560E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22067,
   "name": "b_5633",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22074,
   "name": "b_563A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22078,
   "name": "random_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22096,
   "name": "alien_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22112,
   "name": "pick_kind",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22138,
   "name": "b_567A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22155,
   "name": "kind_choices",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22163,
   "name": "place_alien",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22182,
   "name": "b_56A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22190,
   "name": "b_56AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22197,
   "name": "random_x",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22215,
   "name": "spawn_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22223,
   "name": "spawn_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22231,
   "name": "random_y",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22249,
   "name": "alien_pointers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22255,
   "name": "b_56EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22271,
   "name": "b_56FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22277,
   "name": "ride_scroll",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22283,
   "name": "b_570B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22308,
   "name": "b_5724",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22314,
   "name": "b_572A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22329,
   "name": "start_forming",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22351,
   "name": "forming_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22357,
   "name": "b_5755",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22385,
   "name": "b_5771",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22391,
   "name": "forming_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22441,
   "name": "end_forming",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22461,
   "name": "probe_alien",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22513,
   "name": "b_57F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22515,
   "name": "b_57F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22517,
   "name": "b_57F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22518,
   "name": "a_57F6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22519,
   "name": "a_57F7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22542,
   "name": "b_580E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22549,
   "name": "alien_near_walls",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22557,
   "name": "b_581D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22571,
   "name": "b_582B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22574,
   "name": "j_582E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22575,
   "name": "a_582F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22577,
   "name": "a_5831",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22579,
   "name": "unspawn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22596,
   "name": "alien_near_iball",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22618,
   "name": "b_585A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22628,
   "name": "j_5864",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22648,
   "name": "b_5878",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22658,
   "name": "j_5882",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22663,
   "name": "r_5887",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22664,
   "name": "molecule_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22701,
   "name": "r_58AD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22702,
   "name": "smart_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22741,
   "name": "lasers_follow_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22743,
   "name": "b_58D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22753,
   "name": "lasers_follow_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22755,
   "name": "b_58E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22765,
   "name": "level_end",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 22779,
   "name": "j_58FB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22795,
   "name": "b_590B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22816,
   "name": "b_5920",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22828,
   "name": "delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22831,
   "name": "b_592F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22832,
   "name": "a_5930",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22833,
   "name": "b_5931",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22840,
   "name": "j_5938",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22845,
   "name": "b_593D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22864,
   "name": "txt_well_done",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22873,
   "name": "j_5959",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22875,
   "name": "b_595B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22894,
   "name": "txt_completed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22909,
   "name": "j_597D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22958,
   "name": "level_digit_units",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22974,
   "name": "level_digit_tens",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22990,
   "name": "rescue_screens",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 23011,
   "name": "b_59E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23027,
   "name": "b_59F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23050,
   "name": "b_5A0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23066,
   "name": "b_5A1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23089,
   "name": "b_5A31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23105,
   "name": "b_5A41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23128,
   "name": "b_5A58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23144,
   "name": "b_5A68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23167,
   "name": "you_have_rescued",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23169,
   "name": "b_5A81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23186,
   "name": "txt_rescued",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23202,
   "name": "txt_lover",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23212,
   "name": "txt_eddy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23221,
   "name": "txt_glow",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23230,
   "name": "txt_noball",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23237,
   "name": "show_friend",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 23274,
   "name": "b_5AEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23276,
   "name": "b_5AEC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23294,
   "name": "b_5AFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23312,
   "name": "b_5B10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23363,
   "name": "j_5B43",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23390,
   "name": "b_5B5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23393,
   "name": "txt_incredible",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23413,
   "name": "txt_completed_game",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23431,
   "name": "txt_iball",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23436,
   "name": "wait_fire_release",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 23463,
   "name": "b_5BA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23470,
   "name": "j_5BAE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23497,
   "name": "b_5BC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23508,
   "name": "alien_hits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23514,
   "name": "b_5BDA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23536,
   "name": "b_5BF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23545,
   "name": "alien_shot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23558,
   "name": "b_5C06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23560,
   "name": "b_5C08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23561,
   "name": "a_5C09",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23572,
   "name": "b_5C14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23597,
   "name": "b_5C2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23605,
   "name": "b_5C35",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23617,
   "name": "b_5C41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23625,
   "name": "b_5C49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23645,
   "name": "b_5C5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23650,
   "name": "j_5C62",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23700,
   "name": "clear_shot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23730,
   "name": "b_5CB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23748,
   "name": "a_5CC4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23749,
   "name": "a_5CC5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23753,
   "name": "a_5CC9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23754,
   "name": "a_5CCA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23762,
   "name": "explode_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23768,
   "name": "b_5CD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23791,
   "name": "b_5CEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23794,
   "name": "b_5CF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23800,
   "name": "explode_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23816,
   "name": "alien_touch",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23827,
   "name": "b_5D13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23854,
   "name": "b_5D2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23875,
   "name": "b_5D43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23889,
   "name": "b_5D51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23897,
   "name": "j_5D59",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23903,
   "name": "r_5D5F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23904,
   "name": "steer_aliens",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23910,
   "name": "b_5D66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23941,
   "name": "b_5D85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23944,
   "name": "b_5D88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23953,
   "name": "steer_across",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23981,
   "name": "b_5DAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23989,
   "name": "r_5DB5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23990,
   "name": "b_5DB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24011,
   "name": "b_5DCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24020,
   "name": "alien_speed_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 24037,
   "name": "steer_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24055,
   "name": "j_5DF7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24068,
   "name": "b_5E04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24077,
   "name": "b_5E0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24097,
   "name": "a_5E21",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24108,
   "name": "b_5E2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24112,
   "name": "b_5E30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24126,
   "name": "b_5E3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24137,
   "name": "b_5E49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24157,
   "name": "a_5E5D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24170,
   "name": "alien_accel_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 24187,
   "name": "alien_walls",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24195,
   "name": "b_5E83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24221,
   "name": "b_5E9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24230,
   "name": "b_5EA6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24235,
   "name": "j_5EAB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24237,
   "name": "b_5EAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24263,
   "name": "b_5EC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24272,
   "name": "b_5ED0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24275,
   "name": "j_5ED3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24283,
   "name": "b_5EDB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24297,
   "name": "b_5EE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24306,
   "name": "b_5EF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24308,
   "name": "b_5EF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24322,
   "name": "b_5F02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24333,
   "name": "show_lives",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24348,
   "name": "b_5F1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24353,
   "name": "r_5F21",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 24354,
   "name": "time_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24366,
   "name": "game_over_screen",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 24391,
   "name": "take_disc",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24403,
   "name": "msg_irq_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24495,
   "name": "b_5FAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24496,
   "name": "a_5FB0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24498,
   "name": "a_5FB2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24500,
   "name": "a_5FB4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24502,
   "name": "msg_irq_charset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24545,
   "name": "a_5FE1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24547,
   "name": "screen_between",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24549,
   "name": "b_5FE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24570,
   "name": "game_over_text",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 24572,
   "name": "b_5FFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24614,
   "name": "txt_game",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 24618,
   "name": "txt_over",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 24622,
   "name": "give_extra",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24656,
   "name": "b_6050",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24657,
   "name": "a_6051",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24658,
   "name": "a_6052",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24680,
   "name": "b_6068",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24683,
   "name": "disc_checkpoints",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 24715,
   "name": "saved_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 24795,
   "name": "saved_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 24875,
   "name": "extra_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25283,
   "name": "disc_order",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 25315,
   "name": "restore_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25317,
   "name": "b_62E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25333,
   "name": "extras_names_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25345,
   "name": "b_6301",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25346,
   "name": "a_6302",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25351,
   "name": "a_6307",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25369,
   "name": "b_6319",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25375,
   "name": "extra_name_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 25397,
   "name": "extra_name_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 25419,
   "name": "apply_extra",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25429,
   "name": "b_6355",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25436,
   "name": "b_635C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25443,
   "name": "b_6363",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25450,
   "name": "b_636A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25457,
   "name": "b_6371",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25464,
   "name": "b_6378",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25471,
   "name": "b_637F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25478,
   "name": "b_6386",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25485,
   "name": "b_638D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25492,
   "name": "b_6394",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25499,
   "name": "b_639B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25506,
   "name": "b_63A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25513,
   "name": "b_63A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25520,
   "name": "b_63B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25527,
   "name": "b_63B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25534,
   "name": "b_63BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25541,
   "name": "r_63C5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25542,
   "name": "j_63C6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25561,
   "name": "j_63D9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25572,
   "name": "j_63E4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25583,
   "name": "j_63EF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25599,
   "name": "j_63FF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25610,
   "name": "j_640A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25654,
   "name": "j_6436",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25670,
   "name": "b_6446",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25673,
   "name": "j_6449",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25684,
   "name": "j_6454",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25700,
   "name": "j_6464",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25711,
   "name": "j_646F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25717,
   "name": "j_6475",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25722,
   "name": "j_647A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25730,
   "name": "r_6482",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25731,
   "name": "j_6483",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25776,
   "name": "j_64B0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25787,
   "name": "b_64BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25790,
   "name": "j_64BE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25801,
   "name": "j_64C9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25812,
   "name": "show_overheat",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25822,
   "name": "b_64DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25832,
   "name": "txt_overheat",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 25856,
   "name": "save_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25858,
   "name": "b_6502",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25876,
   "name": "a_6514",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25886,
   "name": "smart_missile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25892,
   "name": "b_6524",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25950,
   "name": "b_655E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25958,
   "name": "clear_meter",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25962,
   "name": "b_656A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25969,
   "name": "fill_meter",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25971,
   "name": "b_6573",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25973,
   "name": "b_6575",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25990,
   "name": "meter_pattern",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26011,
   "name": "shield_meters",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26026,
   "name": "b_65AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26048,
   "name": "b_65C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26063,
   "name": "b_65CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26078,
   "name": "b_65DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26100,
   "name": "b_65F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26118,
   "name": "r_6606",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26119,
   "name": "check_pause",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26149,
   "name": "r_6625",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26150,
   "name": "b_6626",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26156,
   "name": "b_662C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26184,
   "name": "disc_rollback",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26221,
   "name": "r_666D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26222,
   "name": "b_666E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26231,
   "name": "b_6677",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26240,
   "name": "b_6680",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26249,
   "name": "b_6689",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26258,
   "name": "b_6692",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26268,
   "name": "b_669C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26277,
   "name": "b_66A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26286,
   "name": "beam_r_back",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26296,
   "name": "beam_r_front",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26306,
   "name": "beam_r_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26316,
   "name": "beam_r_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26326,
   "name": "beam_r_live",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26336,
   "name": "beam_r_shrink",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26346,
   "name": "beam_l_back",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26356,
   "name": "beam_l_front",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26366,
   "name": "beam_l_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26376,
   "name": "beam_l_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26386,
   "name": "beam_l_live",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26396,
   "name": "beam_l_shrink",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26406,
   "name": "laser_fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26421,
   "name": "b_6735",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26426,
   "name": "r_673A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26427,
   "name": "b_673B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26434,
   "name": "b_6742",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26439,
   "name": "laser_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26441,
   "name": "b_6749",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26452,
   "name": "b_6754",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26467,
   "name": "b_6763",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26497,
   "name": "a_6781",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26506,
   "name": "b_678A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26507,
   "name": "a_678B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26508,
   "name": "a_678C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26513,
   "name": "r_6791",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26514,
   "name": "b_6792",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26534,
   "name": "a_67A6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26548,
   "name": "laser_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26550,
   "name": "b_67B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26561,
   "name": "b_67C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26576,
   "name": "b_67D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26606,
   "name": "a_67EE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26615,
   "name": "b_67F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26616,
   "name": "a_67F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26617,
   "name": "a_67F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26622,
   "name": "r_67FE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26623,
   "name": "b_67FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26643,
   "name": "a_6813",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26654,
   "name": "move_lasers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26656,
   "name": "b_6820",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26670,
   "name": "a_682E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26671,
   "name": "b_682F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26679,
   "name": "move_beam_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26697,
   "name": "b_6849",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26722,
   "name": "b_6862",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26734,
   "name": "b_686E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26735,
   "name": "a_686F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26736,
   "name": "a_6870",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26739,
   "name": "a_6873",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26742,
   "name": "b_6876",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26761,
   "name": "b_6889",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26764,
   "name": "b_688C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26780,
   "name": "b_689C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26786,
   "name": "j_68A2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26798,
   "name": "b_68AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26832,
   "name": "b_68D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26840,
   "name": "b_68D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26841,
   "name": "a_68D9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26842,
   "name": "a_68DA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26857,
   "name": "b_68E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26860,
   "name": "a_68EC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26861,
   "name": "a_68ED",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26864,
   "name": "a_68F0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26868,
   "name": "end_beam_right",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 26889,
   "name": "j_6909",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26891,
   "name": "b_690B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26905,
   "name": "a_6919",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26906,
   "name": "b_691A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26912,
   "name": "move_beam_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26930,
   "name": "b_6932",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26955,
   "name": "b_694B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26965,
   "name": "b_6955",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26968,
   "name": "a_6958",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26969,
   "name": "a_6959",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26984,
   "name": "b_6968",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26986,
   "name": "a_696A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26989,
   "name": "b_696D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27008,
   "name": "b_6980",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27011,
   "name": "b_6983",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27027,
   "name": "b_6993",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27033,
   "name": "j_6999",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27045,
   "name": "b_69A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27079,
   "name": "b_69C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27087,
   "name": "b_69CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27088,
   "name": "a_69D0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27089,
   "name": "a_69D1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27104,
   "name": "b_69E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27107,
   "name": "a_69E3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27108,
   "name": "a_69E4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27123,
   "name": "b_69F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27137,
   "name": "b_6A01",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27139,
   "name": "a_6A03",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27143,
   "name": "end_beam_left",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27164,
   "name": "ripple",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27165,
   "name": "ripple_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27166,
   "name": "ripple_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27167,
   "name": "ripple_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27168,
   "name": "ripple_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27169,
   "name": "ripple_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27170,
   "name": "ripple_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27171,
   "name": "ripple_fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27189,
   "name": "r_6A35",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27190,
   "name": "j_6A36",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27242,
   "name": "b_6A6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27296,
   "name": "ripple_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27309,
   "name": "r_6AAD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27310,
   "name": "b_6AAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27355,
   "name": "b_6ADB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27360,
   "name": "b_6AE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27364,
   "name": "b_6AE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27365,
   "name": "a_6AE5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27366,
   "name": "a_6AE6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27384,
   "name": "b_6AF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27392,
   "name": "b_6B00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27394,
   "name": "b_6B02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27395,
   "name": "a_6B03",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27396,
   "name": "a_6B04",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27404,
   "name": "b_6B0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27407,
   "name": "a_6B0F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27408,
   "name": "a_6B10",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27409,
   "name": "j_6B11",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27426,
   "name": "b_6B22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27460,
   "name": "b_6B44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27463,
   "name": "b_6B47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27479,
   "name": "b_6B57",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27485,
   "name": "j_6B5D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27497,
   "name": "b_6B69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27540,
   "name": "b_6B94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27543,
   "name": "b_6B97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27545,
   "name": "b_6B99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27546,
   "name": "a_6B9A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27547,
   "name": "a_6B9B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27553,
   "name": "b_6BA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27556,
   "name": "a_6BA4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27557,
   "name": "a_6BA5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27560,
   "name": "a_6BA8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27561,
   "name": "a_6BA9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27562,
   "name": "j_6BAA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27579,
   "name": "b_6BBB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27605,
   "name": "b_6BD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27609,
   "name": "end_ripple",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27633,
   "name": "j_6BF1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27678,
   "name": "b_6C1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27683,
   "name": "b_6C23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27687,
   "name": "b_6C27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27688,
   "name": "a_6C28",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27689,
   "name": "a_6C29",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27707,
   "name": "b_6C3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27715,
   "name": "b_6C43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27717,
   "name": "b_6C45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27718,
   "name": "a_6C46",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27719,
   "name": "a_6C47",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27727,
   "name": "b_6C4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27730,
   "name": "a_6C52",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27731,
   "name": "a_6C53",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27732,
   "name": "j_6C54",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27749,
   "name": "b_6C65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27783,
   "name": "b_6C87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27786,
   "name": "b_6C8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27802,
   "name": "b_6C9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27808,
   "name": "j_6CA0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27820,
   "name": "b_6CAC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27863,
   "name": "b_6CD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27866,
   "name": "b_6CDA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27868,
   "name": "b_6CDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27869,
   "name": "a_6CDD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27870,
   "name": "a_6CDE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27876,
   "name": "b_6CE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27879,
   "name": "a_6CE7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27880,
   "name": "a_6CE8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27883,
   "name": "a_6CEB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27884,
   "name": "a_6CEC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27885,
   "name": "j_6CED",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27902,
   "name": "b_6CFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27928,
   "name": "b_6D18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27932,
   "name": "music_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27933,
   "name": "game_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27967,
   "name": "b_6D3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28013,
   "name": "b_6D6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28028,
   "name": "b_6D7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28033,
   "name": "j_6D81",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28060,
   "name": "b_6D9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28071,
   "name": "init_title_irq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28119,
   "name": "title_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28208,
   "name": "b_6E30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28225,
   "name": "j_6E41",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28232,
   "name": "b_6E48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28251,
   "name": "b_6E5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28253,
   "name": "b_6E5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28269,
   "name": "j_6E6D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28289,
   "name": "b_6E81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28306,
   "name": "b_6E92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28323,
   "name": "b_6EA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28345,
   "name": "b_6EB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28358,
   "name": "b_6EC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28368,
   "name": "j_6ED0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28369,
   "name": "a_6ED1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 28371,
   "name": "a_6ED3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 28373,
   "name": "a_6ED5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 28375,
   "name": "title_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28520,
   "name": "title_text",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28522,
   "name": "b_6F6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28538,
   "name": "b_6F7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28554,
   "name": "b_6F8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28570,
   "name": "b_6F9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28586,
   "name": "b_6FAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28602,
   "name": "b_6FBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28620,
   "name": "txt_firebird",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28637,
   "name": "txt_presents",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28645,
   "name": "txt_title",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28650,
   "name": "txt_credit",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28684,
   "name": "txt_rescue",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28690,
   "name": "txt_press_fire",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28708,
   "name": "title_text_names",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 28710,
   "name": "b_7026",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28728,
   "name": "b_7038",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28746,
   "name": "b_704A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28764,
   "name": "b_705C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28782,
   "name": "b_706E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28799,
   "name": "txt_choice",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28819,
   "name": "txt_music",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28824,
   "name": "txt_fx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29184,
   "name": "anim_char_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29568,
   "name": "tiles",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30208,
   "name": "level_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30568,
   "name": "level_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30928,
   "name": "level_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31288,
   "name": "level_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31648,
   "name": "level_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32008,
   "name": "level_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32368,
   "name": "level_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32728,
   "name": "level_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "level_8_rest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33088,
   "name": "level_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33448,
   "name": "level_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33808,
   "name": "level_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34168,
   "name": "level_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34528,
   "name": "level_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34888,
   "name": "level_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35248,
   "name": "level_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35608,
   "name": "level_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35968,
   "name": "f_8C80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38912,
   "name": "f_9800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40960,
   "name": "sample_iball",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41984,
   "name": "sample_iball_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43008,
   "name": "sample_iball_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44032,
   "name": "sample_oh_no",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44444,
   "name": "sample_oh_no_ad9c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44508,
   "name": "sample_oh_no_addc",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45056,
   "name": "sample_oh_no_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46080,
   "name": "sample_oh_no_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46848,
   "name": "sample_game_over",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47872,
   "name": "sample_game_over_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48896,
   "name": "sample_game_over_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49152,
   "name": "f_C000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49153,
   "name": "sample_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49185,
   "name": "sample_pitch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49212,
   "name": "sample_first",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49213,
   "name": "sample_end",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49214,
   "name": "sample_stop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49246,
   "name": "sample_busy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49247,
   "name": "nybble_table",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49502,
   "name": "a_C15E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49503,
   "name": "make_nybble_table",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49520,
   "name": "b_C170",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49522,
   "name": "b_C172",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49538,
   "name": "r_C182",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49539,
   "name": "nybble_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49540,
   "name": "play_sample",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49550,
   "name": "set_sample_nmi",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49561,
   "name": "sample_nmi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49571,
   "name": "a_C1A3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49577,
   "name": "a_C1A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49578,
   "name": "a_C1AA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49587,
   "name": "b_C1B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49588,
   "name": "a_C1B4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49589,
   "name": "a_C1B5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49622,
   "name": "j_C1D6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 49626,
   "name": "pitch_steps",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49643,
   "name": "sample_first_pages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49647,
   "name": "sample_end_pages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49651,
   "name": "say",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49670,
   "name": "test_keys",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49673,
   "name": "sample_test",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49696,
   "name": "b_C220",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49703,
   "name": "b_C227",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49717,
   "name": "b_C235",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49725,
   "name": "b_C23D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49733,
   "name": "test_held",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53453,
   "name": "a_D0CD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55308,
   "name": "f_D80C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55391,
   "name": "f_D85F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55392,
   "name": "f_D860",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55468,
   "name": "f_D8AC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55473,
   "name": "f_D8B1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55552,
   "name": "f_D900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55579,
   "name": "f_D91B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55713,
   "name": "f_D9A1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55754,
   "name": "f_D9CA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55788,
   "name": "f_D9EC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55794,
   "name": "f_D9F2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55808,
   "name": "f_DA00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55831,
   "name": "f_DA17",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55832,
   "name": "f_DA18",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55903,
   "name": "f_DA5F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55919,
   "name": "f_DA6F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56040,
   "name": "f_DAE8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56064,
   "name": "f_DB00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56105,
   "name": "f_DB29",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56143,
   "name": "f_DB4F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56146,
   "name": "f_DB52",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56159,
   "name": "f_DB5F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56216,
   "name": "f_DB98",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56227,
   "name": "f_DBA3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56232,
   "name": "f_DBA8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56256,
   "name": "f_DBC0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56290,
   "name": "f_DBE2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "vibrato_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57347,
   "name": "vibrato_depth",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57350,
   "name": "vibrato_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57353,
   "name": "music_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57362,
   "name": "b_E012",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57399,
   "name": "b_E037",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57405,
   "name": "b_E03D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57419,
   "name": "b_E04B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57422,
   "name": "b_E04E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57437,
   "name": "b_E05D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57448,
   "name": "j_E068",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57486,
   "name": "b_E08E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57489,
   "name": "b_E091",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57511,
   "name": "b_E0A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57525,
   "name": "b_E0B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57606,
   "name": "b_E106",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57609,
   "name": "j_E109",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57612,
   "name": "b_E10C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57644,
   "name": "b_E12C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57663,
   "name": "j_E13F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57740,
   "name": "b_E18C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57746,
   "name": "j_E192",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57769,
   "name": "b_E1A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57772,
   "name": "j_E1AC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57808,
   "name": "j_E1D0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57838,
   "name": "b_E1EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57868,
   "name": "b_E20C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57888,
   "name": "b_E220",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57896,
   "name": "b_E228",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57916,
   "name": "j_E23C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57927,
   "name": "b_E247",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57944,
   "name": "j_E258",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57963,
   "name": "b_E26B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57973,
   "name": "j_E275",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57992,
   "name": "b_E288",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58002,
   "name": "j_E292",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58050,
   "name": "a_E2C2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58059,
   "name": "b_E2CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58076,
   "name": "a_E2DC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58082,
   "name": "b_E2E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58099,
   "name": "b_E2F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58145,
   "name": "b_E321",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58168,
   "name": "b_E338",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58198,
   "name": "b_E356",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58220,
   "name": "b_E36C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58223,
   "name": "j_E36F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58226,
   "name": "b_E372",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58278,
   "name": "b_E3A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58304,
   "name": "b_E3C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58323,
   "name": "b_E3D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58331,
   "name": "j_E3DB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58345,
   "name": "b_E3E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58373,
   "name": "b_E405",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58395,
   "name": "j_E41B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58419,
   "name": "j_E433",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58428,
   "name": "j_E43C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58437,
   "name": "f_E445",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58438,
   "name": "f_E446",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58439,
   "name": "note_freqs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58440,
   "name": "note_freqs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58504,
   "name": "note_freqs_mid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58633,
   "name": "voice_regs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58636,
   "name": "music_vars",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58637,
   "name": "music_track_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58640,
   "name": "music_pat_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58643,
   "name": "music_note_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58646,
   "name": "music_pat_byte",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58649,
   "name": "music_wave",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58652,
   "name": "music_note",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58655,
   "name": "music_on",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58666,
   "name": "music_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58672,
   "name": "music_vars_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58679,
   "name": "music_gate_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58682,
   "name": "music_byte",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58684,
   "name": "music_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58685,
   "name": "music_inst_wave",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58686,
   "name": "music_vib_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58687,
   "name": "music_pw_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58688,
   "name": "music_e540",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58691,
   "name": "music_pulse_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58694,
   "name": "music_tempo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58695,
   "name": "music_tempo_reload",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58696,
   "name": "music_bar",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58697,
   "name": "music_inst_ofs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58698,
   "name": "music_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58699,
   "name": "music_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58702,
   "name": "music_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58705,
   "name": "music_slide",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58708,
   "name": "music_slide_flag",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58711,
   "name": "music_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58713,
   "name": "music_note_byte",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58715,
   "name": "music_pulse_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58718,
   "name": "music_pulse_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58721,
   "name": "music_first_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58724,
   "name": "music_frame",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58726,
   "name": "music_noise_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58730,
   "name": "music_filter",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58733,
   "name": "music_drum_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58736,
   "name": "music_arp_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58737,
   "name": "music_transpose",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58740,
   "name": "music_arp_0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58741,
   "name": "music_arp_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58742,
   "name": "music_arp_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58743,
   "name": "arpeggios",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58744,
   "name": "arpeggio_second",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58755,
   "name": "pattern_21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58781,
   "name": "pattern_26",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58803,
   "name": "pattern_22",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58829,
   "name": "pattern_23",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58854,
   "name": "pattern_24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58874,
   "name": "pattern_25",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58892,
   "name": "drum_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58917,
   "name": "pattern_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58991,
   "name": "pattern_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59004,
   "name": "pattern_20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59017,
   "name": "pattern_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59049,
   "name": "drum_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59078,
   "name": "pattern_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59092,
   "name": "pattern_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59120,
   "name": "pattern_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59147,
   "name": "instruments",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59148,
   "name": "inst_pw_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59149,
   "name": "inst_wave",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59150,
   "name": "inst_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59151,
   "name": "inst_sr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59152,
   "name": "inst_vibrato",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59153,
   "name": "inst_pw_speed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59154,
   "name": "inst_flags_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59218,
   "name": "instruments_mid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59291,
   "name": "pattern_33",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59315,
   "name": "instruments_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59316,
   "name": "inst_b1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59318,
   "name": "inst_b3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59320,
   "name": "inst_b5",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59321,
   "name": "inst_b6",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59322,
   "name": "inst_b7",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59386,
   "name": "instruments_b_mid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59459,
   "name": "track_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59462,
   "name": "track_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59465,
   "name": "pattern_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59500,
   "name": "pattern_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59535,
   "name": "pattern_34",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59563,
   "name": "track_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59610,
   "name": "track_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59733,
   "name": "track_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59912,
   "name": "pattern_00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59914,
   "name": "pattern_02",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59962,
   "name": "pattern_29",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60015,
   "name": "pattern_01",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60034,
   "name": "pattern_05",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60056,
   "name": "voice_instrument",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60059,
   "name": "pattern_04",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60092,
   "name": "pattern_06",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60113,
   "name": "pattern_07",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60148,
   "name": "pattern_08",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60247,
   "name": "pattern_09",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60338,
   "name": "pattern_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60430,
   "name": "pattern_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60475,
   "name": "pattern_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60504,
   "name": "pattern_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60594,
   "name": "pattern_27",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60654,
   "name": "pattern_31",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60658,
   "name": "pattern_28",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60661,
   "name": "pattern_32",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60676,
   "name": "pattern_30",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60752,
   "name": "effect_req",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60753,
   "name": "effect_req_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60754,
   "name": "effect_req_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60755,
   "name": "effects_stop_entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60758,
   "name": "effects_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60763,
   "name": "j_ED5B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60781,
   "name": "b_ED6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60789,
   "name": "b_ED75",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60797,
   "name": "b_ED7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60822,
   "name": "b_ED96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60826,
   "name": "a_ED9A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 60827,
   "name": "a_ED9B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 60842,
   "name": "b_EDAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60862,
   "name": "b_EDBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60876,
   "name": "b_EDCC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60904,
   "name": "b_EDE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60929,
   "name": "j_EE01",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60948,
   "name": "j_EE14",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60966,
   "name": "b_EE26",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60969,
   "name": "j_EE29",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 60972,
   "name": "b_EE2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 60992,
   "name": "b_EE40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61003,
   "name": "j_EE4B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 61006,
   "name": "b_EE4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61024,
   "name": "b_EE60",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61039,
   "name": "b_EE6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61044,
   "name": "j_EE74",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 61047,
   "name": "j_EE77",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 61053,
   "name": "r_EE7D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 61054,
   "name": "effects_stop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 61075,
   "name": "effect_notes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61076,
   "name": "effect_notes_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61140,
   "name": "effect_notes_mid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61267,
   "name": "effect_voice_regs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61270,
   "name": "effect_vars",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61271,
   "name": "effect_frame",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61272,
   "name": "effect_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61273,
   "name": "effect_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61276,
   "name": "effect_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61279,
   "name": "effect_start_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61282,
   "name": "effect_start_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61285,
   "name": "effect_dstep_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61288,
   "name": "effect_dstep_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61291,
   "name": "effect_step_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61294,
   "name": "effect_step_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61297,
   "name": "effect_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61300,
   "name": "effect_rate",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61303,
   "name": "effect_wave_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61306,
   "name": "effect_wave_first",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61309,
   "name": "effect_script_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61312,
   "name": "effect_first_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61315,
   "name": "effect_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61318,
   "name": "effect_wave",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61321,
   "name": "effect_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61324,
   "name": "effect_wave_now",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61327,
   "name": "effect_script",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61330,
   "name": "effect_tick",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61333,
   "name": "effect_work",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61334,
   "name": "effect_scripts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61342,
   "name": "effect_scripts_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61350,
   "name": "effect_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 61495,
   "name": "b_F037",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 61520,
   "name": "effect_script_data",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61626,
   "name": "effect_defs_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61627,
   "name": "edef_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61630,
   "name": "edef_wave",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61633,
   "name": "edef_note_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61697,
   "name": "effect_defs_a_mid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61802,
   "name": "effect_defs_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61803,
   "name": "edef_wave_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61804,
   "name": "edef_wave_first",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61805,
   "name": "edef_script",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61806,
   "name": "edef_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61807,
   "name": "edef_dstep_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61808,
   "name": "edef_dstep_hi_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61872,
   "name": "effect_defs_b_mid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64816,
   "name": "f_FD30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64931,
   "name": "KERNAL_IOINITj",
   "type": "Predefined",
   "kind": "system"
  }
 ],
 "comments": [
  {
   "address": 2,
   "type": "line",
   "text": "The play sprites' eight pointers (sprites 0-7), written to $07F8 by sprites_out. Sprite 0 is Iball."
  },
  {
   "address": 10,
   "type": "line",
   "text": "The play sprites' eight colours, written to $D027-$D02E by sprites_out."
  },
  {
   "address": 18,
   "type": "line",
   "text": "The play sprites' positions, X and Y for each of the eight ($12/$13 is Iball), written to $D000-$D00F by sprites_out."
  },
  {
   "address": 34,
   "type": "line",
   "text": "The play sprites' X high bits ($D010), always 0 in play."
  },
  {
   "address": 35,
   "type": "line",
   "text": "Sprite multicolour 0 in play ($D025)."
  },
  {
   "address": 36,
   "type": "line",
   "text": "Sprite multicolour 1 in play ($D026)."
  },
  {
   "address": 37,
   "type": "line",
   "text": "Which play sprites are on (bit n for sprite n), written to $D015."
  },
  {
   "address": 38,
   "type": "line",
   "text": "Each sprite's horizontal direction, bit n for sprite n: set is right."
  },
  {
   "address": 39,
   "type": "line",
   "text": "Each sprite's vertical direction, bit n for sprite n: set is down."
  },
  {
   "address": 40,
   "type": "line",
   "text": "The level, 0-15."
  },
  {
   "address": 41,
   "type": "line",
   "text": "Each sprite's two speeds, horizontal and vertical, in pixels a step: a logic pass for the aliens, a run of irq_top for Iball ($29/$2A is Iball: horizontal_speed, vertical_speed)."
  },
  {
   "address": 42,
   "type": "line",
   "text": "Iball's vertical speed (sprite 0's), pixels for each run of irq_top."
  },
  {
   "address": 57,
   "type": "line",
   "text": "Work: the bit of the sprite a loop is on."
  },
  {
   "address": 58,
   "type": "line",
   "text": "Which play sprites are multicolour ($D01C); a forming alien is taken out of it."
  },
  {
   "address": 59,
   "type": "line",
   "text": "Lives left; below zero the game is over."
  },
  {
   "address": 60,
   "type": "line",
   "text": "The death's stage: 0 alive, 1 to 3 the stages of death_step."
  },
  {
   "address": 61,
   "type": "line",
   "text": "death_flash's place in death_colours."
  },
  {
   "address": 62,
   "type": "line",
   "text": "The playfield's background colour ($D021), 0 except during death_flash."
  },
  {
   "address": 63,
   "type": "line",
   "text": "Frames between steps in death_fly and materialise_wait."
  },
  {
   "address": 64,
   "type": "line",
   "text": "materialise_wait's delay before Iball may appear."
  },
  {
   "address": 65,
   "type": "line",
   "text": "The score, six decimal digits, highest first."
  },
  {
   "address": 71,
   "type": "line",
   "text": "The level timer's units digit."
  },
  {
   "address": 72,
   "type": "line",
   "text": "The level timer's tens digit."
  },
  {
   "address": 73,
   "type": "line",
   "text": "Logic passes to the timer's next second (from 50)."
  },
  {
   "address": 74,
   "type": "line",
   "text": "Set while irq_logic's work runs, so a second interrupt does not start it again."
  },
  {
   "address": 75,
   "type": "line",
   "text": "Set when irq_logic found its work still running."
  },
  {
   "address": 78,
   "type": "line",
   "text": "build_level_map's pointer into the level's tile list."
  },
  {
   "address": 80,
   "type": "line",
   "text": "build_level_map's pointer to the current tile's 16 characters."
  },
  {
   "address": 82,
   "type": "line",
   "text": "build_level_map's work on the tile number (times 16, and its page in $53)."
  },
  {
   "address": 84,
   "type": "line",
   "text": "build_level_map's destination in the map buffer."
  },
  {
   "address": 86,
   "type": "line",
   "text": "Tiles left in the current row of six."
  },
  {
   "address": 87,
   "type": "line",
   "text": "Rows of tiles built."
  },
  {
   "address": 88,
   "type": "line",
   "text": "Set when the 60th row of tiles is built."
  },
  {
   "address": 127,
   "type": "line",
   "text": "Read by init_game_irq and init_title_irq as the value to write to CIA 1's interrupt control; nothing in the game writes it (its value is the KERNAL's)."
  },
  {
   "address": 128,
   "type": "line",
   "text": "The vertical fine scroll, 0-7."
  },
  {
   "address": 129,
   "type": "line",
   "text": "Set in a logic pass when the playfield moved by a whole row and was redrawn."
  },
  {
   "address": 130,
   "type": "line",
   "text": "The map buffer address of the playfield's top row."
  },
  {
   "address": 132,
   "type": "line",
   "text": "The scroll's speed, pixels a logic pass."
  },
  {
   "address": 133,
   "type": "line",
   "text": "The scroll's direction: 0 forward (the map moves down the screen), 1 backward."
  },
  {
   "address": 134,
   "type": "line",
   "text": "Runs of irq_top to the next friction step."
  },
  {
   "address": 135,
   "type": "line",
   "text": "Runs of irq_top between friction steps (20)."
  },
  {
   "address": 136,
   "type": "line",
   "text": "Runs of irq_top to the next reading of the controls."
  },
  {
   "address": 137,
   "type": "line",
   "text": "Runs of irq_top between readings of the controls: 2, or 1 with the Hyper Brakes."
  },
  {
   "address": 138,
   "type": "line",
   "text": "1 when Iball last pushed left."
  },
  {
   "address": 139,
   "type": "line",
   "text": "Iball's roll frame, 0-7."
  },
  {
   "address": 140,
   "type": "line",
   "text": "animate_chars's frame number."
  },
  {
   "address": 141,
   "type": "line",
   "text": "How many frames animate_chars cycles through (12)."
  },
  {
   "address": 143,
   "type": "line",
   "text": "Rows the playfield has moved, counted by draw_playfield and scroll_back; not read."
  },
  {
   "address": 149,
   "type": "line",
   "text": "Set when the level ends: won, or the game is over."
  },
  {
   "address": 150,
   "type": "line",
   "text": "The character column the probes start from."
  },
  {
   "address": 151,
   "type": "line",
   "text": "The twelve characters round Iball, three rows of four (probe_background)."
  },
  {
   "address": 163,
   "type": "line",
   "text": "The twelve characters round an alien, three rows of four (probe_alien)."
  },
  {
   "address": 175,
   "type": "line",
   "text": "alien_shot's work: the screen row of a shot character beside the alien."
  },
  {
   "address": 176,
   "type": "line",
   "text": "The character row of the alien probe_alien last looked at."
  },
  {
   "address": 177,
   "type": "line",
   "text": "Each sprite's frame in its explosion ($B1 + sprite number)."
  },
  {
   "address": 185,
   "type": "line",
   "text": "The low bytes of the 25 screen rows' addresses, copied from $5420 at the start of a game."
  },
  {
   "address": 210,
   "type": "line",
   "text": "The high bytes of the 25 screen rows' addresses."
  },
  {
   "address": 235,
   "type": "line",
   "text": "Iball's vertical speed limit: 3, 4 with the Turbo Boost, 5 with the Fuel Injection."
  },
  {
   "address": 236,
   "type": "line",
   "text": "Iball's horizontal speed limit, 3."
  },
  {
   "address": 237,
   "type": "line",
   "text": "Iball's materialising stage: 0 done, 1-3 the stages of materialise_step."
  },
  {
   "address": 238,
   "type": "line",
   "text": "Where Iball appears and where he died: X."
  },
  {
   "address": 239,
   "type": "line",
   "text": "Where Iball appears and where he died: Y."
  },
  {
   "address": 240,
   "type": "line",
   "text": "The distance the pieces still have to travel while materialising."
  },
  {
   "address": 241,
   "type": "line",
   "text": "The pieces' speed while materialising or dying."
  },
  {
   "address": 242,
   "type": "line",
   "text": "The level's character colour plus 8, written into colour RAM wherever a shot or laser has been."
  },
  {
   "address": 243,
   "type": "line",
   "text": "The colour new shots take, 1-7."
  },
  {
   "address": 244,
   "type": "line",
   "text": "Aliens to kill before the next to form is a disc; below zero the next is one."
  },
  {
   "address": 245,
   "type": "line",
   "text": "The place in the disc sequence (disc_order), 0-31."
  },
  {
   "address": 246,
   "type": "line",
   "text": "Set at game over: materialising stops."
  },
  {
   "address": 247,
   "type": "line",
   "text": "Set while a message is in the bottom rows (an extra's name, LASER OVERHEATED): the play stands still."
  },
  {
   "address": 248,
   "type": "line",
   "text": "Frames the message stays."
  },
  {
   "address": 249,
   "type": "line",
   "text": "The laser's heat: up one for each logic pass with fire held, down one every fourth run of irq_top; at 250 it overheats."
  },
  {
   "address": 250,
   "type": "line",
   "text": "Runs of irq_top to the laser's next cooling step (from 4)."
  },
  {
   "address": 251,
   "type": "line",
   "text": "Runs of irq_top left in which an overheated laser cannot fire (from 100)."
  },
  {
   "address": 252,
   "type": "line",
   "text": "The music driver's and the effects player's pointers ($FC-$FF)."
  },
  {
   "address": 828,
   "type": "line",
   "text": "The hook the saved file starts through, in the cassette buffer: the file's first two bytes point the KERNAL's IRQ vector here, so the first interrupt after the file is in memory runs it. It acknowledges the video chip, blanks the screen, blacks the border and background and clears colour RAM, resets the stack, copies the KERNAL's default vectors back to $0314-$0333, waits 25 frames, calls IOINIT ($FDA3), unblanks, sets $01 to $36 and jumps to the game's start at $6D1D. Not the game's code: whoever saved the memory image added it."
  },
  {
   "address": 8192,
   "type": "line",
   "text": "The sprite shapes $80-$8F (64 bytes each): the ten extras icons ($80-$89, top panel then bottom), then the digits 0-5 ($8A-$8F) of the timer and the level number."
  },
  {
   "address": 9216,
   "type": "line",
   "text": "The sprite shapes $90-$9B: digits 6-9, Iball's six faces ($94-$99, three for each way he faces) and the two score sprites ($9A, $9B), blank until draw_score writes the digits into them."
  },
  {
   "address": 9984,
   "type": "line",
   "text": "Sprite $9C, the meter: filled by fill_meter and emptied a byte at a time while the Electro Shield or the Hyper Brakes last."
  },
  {
   "address": 10048,
   "type": "line",
   "text": "The sprite shapes $9D-$AF: a small ball ($9D, the lives sprite when none are left), the big striped ball the pieces of Iball are drawn with ($9E), and the aliens: kind 0's spinning ball ($9F-$A2), kind 1's sparkle ($A3-$A7) and kind 2's bug ($A8-$AC), then kind 3's first frames."
  },
  {
   "address": 11072,
   "type": "line",
   "text": "The sprite shapes $AD-$AF: kind 3's flipping half-disc, its first three frames."
  },
  {
   "address": 11264,
   "type": "line",
   "text": "The sprite shapes $B0-$BF: kind 3's flipping half-disc (to $B3), kind 4's face ($B4-$B6), kind 5's face ($B7-$BA), the bonus disc ($BB-$BE), and $BF, which no pointer the game sets names."
  },
  {
   "address": 12288,
   "type": "line",
   "text": "The playfield's character set, 256 multicolour characters: the walls, the shot and laser characters (1-5), the animated characters ($DE-$ED) and the electrified walls ($EE and up), which kill."
  },
  {
   "address": 13312,
   "type": "line",
   "text": "The playfield's characters $80-$DD."
  },
  {
   "address": 14064,
   "type": "line",
   "text": "The 16 animated characters $DE-$ED, rewritten from anim_char_frames by animate_chars."
  },
  {
   "address": 14128,
   "type": "line",
   "text": "The playfield's characters $E6-$FD, the electrified walls from $EE."
  },
  {
   "address": 14320,
   "type": "line",
   "text": "Character $FE, rotated two bits left every logic pass by rotate_char_fe."
  },
  {
   "address": 14328,
   "type": "line",
   "text": "Character $FF, the dot, set up by clear_dot_char."
  },
  {
   "address": 14329,
   "type": "line",
   "text": "Character $FF's rows 1-7, read and written by the old dot routines."
  },
  {
   "address": 14335,
   "type": "line",
   "text": "Character $FF's last row, the one clear_dot_char sets to $10."
  },
  {
   "address": 14336,
   "type": "line",
   "text": "The text character set of the title page and the screens between levels: the letters A-Z as characters 1-26, the digits as $1B-$24 (draw_score takes the score's glyphs from here, one byte early, at $38D7), and punctuation. Its upper part is sprite shapes (charset_sprites)."
  },
  {
   "address": 14656,
   "type": "line",
   "text": "The sprite shapes $E5-$F4, at $3940-$3D3F: in the text set at $3800, after its characters and on into its upper half. The lives ($E5-$E8, by lives left), the alien explosion ($E9-$F0) and the four friends ($F1 Lover Ball, $F2 Eddy Ball, $F3 Glow Ball, $F4 No Ball)."
  },
  {
   "address": 15680,
   "type": "line",
   "text": "The sprite shapes $F5-$FF, empty: no pointer the game sets names them."
  },
  {
   "address": 16376,
   "type": "line",
   "text": "Character $FF of the text set, the dot, copied from the playfield set by screen_between."
  },
  {
   "address": 16384,
   "type": "line",
   "text": "The 24 shots' columns."
  },
  {
   "address": 16409,
   "type": "line",
   "text": "The 24 shots' rows."
  },
  {
   "address": 16434,
   "type": "line",
   "text": "The 24 shots' characters (1-3)."
  },
  {
   "address": 16459,
   "type": "line",
   "text": "The 24 shots' colours."
  },
  {
   "address": 16484,
   "type": "line",
   "text": "The 24 shots' directions: 1 down, 0 up."
  },
  {
   "address": 16509,
   "type": "line",
   "text": "The 24 shots' slots: 1 in use."
  },
  {
   "address": 16534,
   "type": "line",
   "text": "Where an upward shot starts: column."
  },
  {
   "address": 16535,
   "type": "line",
   "text": "Where an upward shot starts: row."
  },
  {
   "address": 16536,
   "type": "line",
   "text": "The last vertical push: 0 up, 1 down. Shots and the ripple go that way."
  },
  {
   "address": 16537,
   "type": "line",
   "text": "The shot character new shots take (1-3)."
  },
  {
   "address": 16540,
   "type": "line",
   "text": "Six digits added to the score by add_score."
  },
  {
   "address": 16546,
   "type": "line",
   "text": "Each sprite's kind of alien, 0-7 (the frame list it animates with)."
  },
  {
   "address": 16554,
   "type": "line",
   "text": "The place in the random table at $40B0."
  },
  {
   "address": 16560,
   "type": "line",
   "text": "256 bytes of random numbers, read in turn (random_index) to choose a new alien's place, kind and colour. Nothing writes them."
  },
  {
   "address": 16816,
   "type": "line",
   "text": "The aliens still forming (bit n for sprite n): they flicker and cannot harm Iball."
  },
  {
   "address": 16817,
   "type": "line",
   "text": "Each forming alien's frame count, to 50."
  },
  {
   "address": 16825,
   "type": "line",
   "text": "The aliens exploding (bit n)."
  },
  {
   "address": 16826,
   "type": "line",
   "text": "Set when a new alien's place is no good, or when an alien touches Iball."
  },
  {
   "address": 16827,
   "type": "line",
   "text": "Counted up every frame; multicolour register 1 shows it, so walls in that colour flash."
  },
  {
   "address": 16828,
   "type": "line",
   "text": "Which aliens are bonus discs (bit n)."
  },
  {
   "address": 16829,
   "type": "line",
   "text": "The Single Lazer is held."
  },
  {
   "address": 16830,
   "type": "line",
   "text": "Set by the Turbo Boost; nothing reads it."
  },
  {
   "address": 16831,
   "type": "line",
   "text": "The Smart Missile is held, ready to fire."
  },
  {
   "address": 16833,
   "type": "line",
   "text": "The Bullet Spray is held: shots go up and down at once."
  },
  {
   "address": 16834,
   "type": "line",
   "text": "The Electro Shield is on: walls do not kill."
  },
  {
   "address": 16835,
   "type": "line",
   "text": "Set by Extended Play; nothing reads it."
  },
  {
   "address": 16836,
   "type": "line",
   "text": "The Twin Laser Set is held."
  },
  {
   "address": 16837,
   "type": "line",
   "text": "Hyperspace is on: the playfield runs to the goal."
  },
  {
   "address": 16838,
   "type": "line",
   "text": "The Molecule Bomb is held, ready to set off."
  },
  {
   "address": 16839,
   "type": "line",
   "text": "The Faulty Disc is on: every wall kills."
  },
  {
   "address": 16840,
   "type": "line",
   "text": "Cleared when the Fuel Injection is taken away; nothing sets it."
  },
  {
   "address": 16842,
   "type": "line",
   "text": "The Hyper Brakes are on."
  },
  {
   "address": 16844,
   "type": "line",
   "text": "The Lazer Cooler is held: the laser does not overheat."
  },
  {
   "address": 16845,
   "type": "line",
   "text": "The Rainbow Ripple is held."
  },
  {
   "address": 16846,
   "type": "line",
   "text": "Where a downward shot starts: column."
  },
  {
   "address": 16847,
   "type": "line",
   "text": "Where a downward shot starts: row."
  },
  {
   "address": 16848,
   "type": "line",
   "text": "Logic passes left of the Molecule Bomb (from 255)."
  },
  {
   "address": 16849,
   "type": "line",
   "text": "The Electro Shield's place in clearing the meter sprite."
  },
  {
   "address": 16850,
   "type": "line",
   "text": "The Hyper Brakes' place in clearing the meter sprite."
  },
  {
   "address": 16851,
   "type": "line",
   "text": "Logic passes to the shield meter's next step."
  },
  {
   "address": 16852,
   "type": "line",
   "text": "Logic passes to the brakes meter's next step."
  },
  {
   "address": 16853,
   "type": "line",
   "text": "The game is paused."
  },
  {
   "address": 16854,
   "type": "line",
   "text": "The pause key is still down from the last toggle."
  },
  {
   "address": 16855,
   "type": "line",
   "text": "Iball's column plus 2, where beams start."
  },
  {
   "address": 16856,
   "type": "line",
   "text": "Iball's character column."
  },
  {
   "address": 16857,
   "type": "line",
   "text": "Iball's row plus 1, where beams run."
  },
  {
   "address": 16858,
   "type": "line",
   "text": "Iball's character row."
  },
  {
   "address": 16859,
   "type": "line",
   "text": "1 when Iball last pushed right."
  },
  {
   "address": 16860,
   "type": "line",
   "text": "Set while irq_top's work runs."
  },
  {
   "address": 16861,
   "type": "line",
   "text": "Never reached: the end of an interrupt handler (NOP, then A, X and Y set to 1 and RTI) that nothing jumps to."
  },
  {
   "address": 16869,
   "type": "line",
   "text": "Never called: an older panel_sprites_top, the same work from tables at $4315, $4325 and $432D, where new_game's code is now."
  },
  {
   "address": 16939,
   "type": "line",
   "text": "Never called: an older panel_sprites_bottom, its tables at $4335, $4345 and $434D, ending with a jump to game_start."
  },
  {
   "address": 17003,
   "type": "line",
   "text": "Starts a game from the title. Banks everything but the I/O to RAM ($01 = $35), starts the music (music_on) when the title chose music and stops it otherwise (music_off), copies the 25 screen-row addresses into zero page (row_lo at $B9, row_hi at $D2), sets up the score digits (score_init), installs the interrupt chain, clears the meters, the disc sequence, the random index, the level, the extras icons' colours, the score, the extras flags at $41BE-$41CE and the molecule timer, sets lives to 3, both speed limits to 3 and the disc countdown to $FF (the first alien to form is a disc), then falls into start_level."
  },
  {
   "address": 17123,
   "type": "line",
   "text": "Starts the level in level: silences the SID, blanks the screen, builds the level's map (build_level_map), clears the screen, resets the level (reset_level), installs the interrupt chain (four times) and starts Iball materialising. Then the level's main loop: each pass shows the lives (show_lives), ends the game when lives has gone below zero, kills Iball when both timer digits reach zero (time_up), and leaves for level_end ($58ED) when level_over is set. Everything else happens in the interrupts."
  },
  {
   "address": 17173,
   "type": "line",
   "text": "Not a table: old_panel_top would read its sprite positions here, where start_level's code now is."
  },
  {
   "address": 17186,
   "type": "line",
   "text": "Advances level by one, back to 0 after level 15, and starts it (start_level). Reached from the level-complete screen."
  },
  {
   "address": 17189,
   "type": "line",
   "text": "Not a table: old_panel_top's colours, inside next_level's code now."
  },
  {
   "address": 17197,
   "type": "line",
   "text": "Not a table: old_panel_top's pointers, inside next_level's code now."
  },
  {
   "address": 17201,
   "type": "line",
   "text": "Lives have run out: waits until sprite_enable is 0 (the last death's pieces have flown off), sets level_over and the freeze flag, clears the screen (blank_for_message), shows the lives (none) and goes to the GAME OVER screen (game_over_screen)."
  },
  {
   "address": 17205,
   "type": "line",
   "text": "Not a table: old_panel_bottom's positions, inside game_over's code now."
  },
  {
   "address": 17220,
   "type": "line",
   "text": "Resets everything for the start of a level: puts the map pointer at the bottom of the map and draws the first screen (draw_playfield), prepares the dot character, fills the extras-name pointer table (extras_names_init), clears the laser heat counters, sets the timer to 50 (tens 5, units 0), clears the per-sprite sets and the extras in use, the shot table $4001-$4095, the alien animation counters at $5452, the laser tables at $66AE and the ripple laser at $6A1C, sets the friction delay to 20 frames, the input rate to every 2 frames, the shot character and colour to 1, the animated-character frame count to 12, the row count to 24, multicolour text on, the timer's frame count to 50, clears the score adder, and zeroes the scroll, the speeds, the directions and the animation counters, with every sprite multicoloured and the sprite multicolours light grey ($0F) and dark grey ($0B)."
  },
  {
   "address": 17221,
   "type": "line",
   "text": "Not a table: old_panel_bottom's colours, inside reset_level's code now."
  },
  {
   "address": 17229,
   "type": "line",
   "text": "Not a table: old_panel_bottom's pointers, inside reset_level's code now."
  },
  {
   "address": 17406,
   "type": "line",
   "text": "Installs the game's raster interrupt chain: turns off CIA 1's interrupts (with the value in zero page $7F, where the constant $7F was surely meant), stops its timer A, enables the video chip's raster interrupt at line 0 and points the hardware IRQ vector at irq_top ($4432). Called once from new_game and four times from start_level."
  },
  {
   "address": 17458,
   "type": "line",
   "text": "Raster interrupt 1 of 4, at line 0. Sets the next at line $36 (irq_panel_end) and enables interrupts, so the rest can overrun. Unless the extras message is up (freeze), cools the laser by one every fourth time it runs and counts the overheat lock-out down. Turns on extended colour mode and the top panel's character set (its own operand at $4480, $0C for $3000 or $0E for $3800), puts the timer's two digits into the top panel's sprite pointers ($8A plus the digit, at $487F/$4880), sets up the top panel's sprites (panel_sprites_top) and the fine scroll. Then the frame's player logic: while materialising, only materialise_step; while dying, only death_step; otherwise, unless the level is over, the message is up, hyperspace is on or the game is paused: the brakes (friction), the bottom limit (bottom_limit), the controls (read_controls), the speed limits (limit_speeds), Iball's move (move_iball), the probe round him (probe_background) and his bounces (bounce_iball)."
  },
  {
   "address": 17536,
   "type": "line",
   "text": "Self-modified: the operand of ORA #$0C at $447F, the top panel's character set ($0C for $3000 in play, $0E for $3800 on the screens between levels), set by the STA at $4290, $5BCB and $5FF3."
  },
  {
   "address": 17659,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves X here with the STX at $4435 on entry, and the LDX #$00 at $44FA puts it back on the way out."
  },
  {
   "address": 17661,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves Y here with the STY at $4438 on entry, and the LDY #$00 at $44FC puts it back on the way out."
  },
  {
   "address": 17668,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves A here with the STA at $4432 on entry, and the LDA #$00 at $4503 puts it back on the way out."
  },
  {
   "address": 17670,
   "type": "line",
   "text": "Raster interrupt 2 of 4, at line $36, where the top panel ends. While a speech sample plays (sample_busy) it only blacks the background and does not move the chain on, so the same interrupt comes back each frame and the game stands still until the sample has finished. Otherwise sets the next at line $92 (irq_logic), turns extended colour off, puts the background colour back, steps multicolour register 1 every frame (the electrified walls' flashing) and register 2 with it while faulty_disc is set, writes the play sprites to the chip (sprites_out) and runs the music or the sound effects, as the title chose (music_flag)."
  },
  {
   "address": 17767,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves A here with the STA at $4506 on entry, and the LDA #$00 at $4566 puts it back on the way out."
  },
  {
   "address": 17769,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves X here with the STX at $4509 on entry, and the LDX #$00 at $4568 puts it back on the way out."
  },
  {
   "address": 17771,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves Y here with the STY at $450C on entry, and the LDY #$00 at $456A puts it back on the way out."
  },
  {
   "address": 17773,
   "type": "line",
   "text": "Raster interrupt 3 of 4, at line $92: the game's logic, which can take longer than a frame. in_logic guards it: an interrupt that finds it set only re-arms irq_bottom and leaves (via $466C), so the logic runs every frame on a quiet screen but misses more the busier it is: with seven aliens about it ran in 695 of 1,350 frames. Everything it calls counts in these logic passes, not in frames. Otherwise sets the next interrupt, irq_bottom at $F8, or while the extras message is up the message band's own (msg_irq_top) at $E0 plus the fine scroll. Then, every frame: on the rescue screen (sprite 1's pointer $F3) cycles sprite 1's colour, rotates character $FE, steps the colour of the top panel's sprite 5. Unless the level is over or the message is up: the pause key (check_pause), the end of faulty_disc once the map pointer is below $0B00, and unless paused the scroll (scroll_step); then, unless Iball is dying, materialising or in hyperspace, the meters (shield_meters), the timer (timer_tick), the aliens riding the scroll, their steering, their hits and their moves, and unless a row was just drawn, the shot's character, the alien animations, fire, explosions, Iball's touches, spawning, the two armed keys and Iball's roll. Unless the message is up, the lasers and shots move. Every frame it redraws the score (draw_score) and steps the animated characters, and in play sets the aliens' sprite pointers."
  },
  {
   "address": 18028,
   "type": "line",
   "text": "irq_logic's early exit when the previous frame's logic is still running: restores the registers and returns from the interrupt."
  },
  {
   "address": 18034,
   "type": "line",
   "text": "Raster interrupt 4 of 4, at line $F8, the bottom panel. Sets the next interrupt at line 0 (irq_top), or straight to $36 (irq_panel_end) when irq_top has not finished this frame (irq_top_busy), turns extended colour on for the panel, blacks the background and sets up the bottom panel's sprites (panel_sprites_bottom)."
  },
  {
   "address": 18108,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves A here with the STA at $4672 on entry, and the LDA #$00 at $46BB puts it back on the way out."
  },
  {
   "address": 18110,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves X here with the STX at $4675 on entry, and the LDX #$00 at $46BD puts it back on the way out."
  },
  {
   "address": 18112,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves Y here with the STY at $4678 on entry, and the LDY #$00 at $46BF puts it back on the way out."
  },
  {
   "address": 18114,
   "type": "line",
   "text": "Sets up the eight sprites of the top panel: 25-row mode on ($D011 bit 3), all eight sprites shown, multicolour on sprites 0-4, no expansion, X high bits for sprites 6 and 7, the sprite multicolours, and each sprite's colour, pointer and position from the tables at $4871 (colours), $4879 (pointers) and $4861 (positions). The first five are extras icons; the last two are the timer's digits."
  },
  {
   "address": 18184,
   "type": "line",
   "text": "Turns all sprites off and returns. Nothing calls it."
  },
  {
   "address": 18190,
   "type": "line",
   "text": "Sets up the eight sprites of the bottom panel from the tables at $4881 (positions), $4891 (colours) and $4899 (pointers): all shown, multicolour on sprites 0-4 and 7, sprite 7's X high bit, the sprite multicolours, border and background black. The store at $4760 writes sprite 7's colour to $D027+X with X at $FF from the loop before, which is $D126, a mirror of $D026: it sets sprite multicolour 1 to the same value, and the store at $4798 then puts $0B back."
  },
  {
   "address": 18342,
   "type": "line",
   "text": "The logic pass's scroll. In hyperspace: hides every sprite (sprite_enable 0), turns the scroll forward and sets its speed to 6. Otherwise backward scrolling goes to scroll_back. Forward: adds scroll_speed to the fine scroll, and when it passes 7, takes eight off, sets row_drawn and moves a row up the map (draw_playfield)."
  },
  {
   "address": 18390,
   "type": "line",
   "text": "Moves the map pointer up one row (24 bytes) and redraws the playfield: 25 rows of 24 characters from the map buffer at the pointer into the screen at columns 8-31 ($0408 onwards), through a copy loop whose source and destination it writes into its own operands ($4812/$4813, $4815/$4816). Also moves the lasers' rows with the map (lasers_follow_up), counts the rows (rows_scrolled), and in hyperspace sets level_over once the pointer is below $099E (the top two rows of the map)."
  },
  {
   "address": 18450,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $9800 at $4811, set by the STA at $47DD, the STA at $4820, the STA at $48F1."
  },
  {
   "address": 18451,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $9800 at $4811, set by the STA at $47E9, the INC at $4825."
  },
  {
   "address": 18453,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $0408 at $4814, set by the STA at $47EE, the STA at $482E."
  },
  {
   "address": 18454,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $0408 at $4814, set by the STA at $47F3, the INC at $4833."
  },
  {
   "address": 18490,
   "type": "line",
   "text": "Fills the screen memory $0400-$07E7 with character 0."
  },
  {
   "address": 18517,
   "type": "line",
   "text": "Puts the fine scroll (fine_scroll, 0-7) into the low three bits of $D011."
  },
  {
   "address": 18529,
   "type": "line",
   "text": "The top panel's eight sprite positions, X and Y in turn: five extras icons from X $4D, 30 pixels apart, at Y $19, then the timer's two digits."
  },
  {
   "address": 18545,
   "type": "line",
   "text": "The top panel's eight sprite colours: the five extras icons (0, dark, until their extra is given; Turbo Boost, Single Lazer, Smart Missile, Bullet Spray, Electro Shield), then the top panel's sixth sprite (stepped every logic pass) and the timer's two digits (yellow)."
  },
  {
   "address": 18546,
   "type": "line",
   "text": "The colour of the top panel's sprite 1 (Single Lazer)."
  },
  {
   "address": 18547,
   "type": "line",
   "text": "The colour of the top panel's sprite 2 (Smart Missile)."
  },
  {
   "address": 18548,
   "type": "line",
   "text": "The colour of the top panel's sprite 3 (Bullet Spray)."
  },
  {
   "address": 18549,
   "type": "line",
   "text": "The colour of the top panel's sprite 4 (Electro Shield)."
  },
  {
   "address": 18550,
   "type": "line",
   "text": "The colour of the top panel's sprite 5 (the meter)."
  },
  {
   "address": 18551,
   "type": "line",
   "text": "The colour of the top panel's sprite 6 (the timer's tens)."
  },
  {
   "address": 18552,
   "type": "line",
   "text": "The colour of the top panel's sprite 7 (the timer's units)."
  },
  {
   "address": 18553,
   "type": "line",
   "text": "The top panel's eight sprite pointers: the icons $80-$84, the meter sprite $9C, and the timer's two digits ($8A plus the digit, written by irq_top)."
  },
  {
   "address": 18559,
   "type": "line",
   "text": "The top panel's sprite 6 pointer: the timer's tens digit, $8A plus the digit, written by irq_top."
  },
  {
   "address": 18560,
   "type": "line",
   "text": "The top panel's sprite 7 pointer: the timer's units digit, $8A plus the digit."
  },
  {
   "address": 18561,
   "type": "line",
   "text": "The bottom panel's eight sprite positions, X and Y in turn, at Y $FF: five extras icons, the two score sprites and the lives sprite."
  },
  {
   "address": 18577,
   "type": "line",
   "text": "The bottom panel's eight sprite colours: five extras icons (Twin Laser Set, Molecule Bomb, Hyper Brakes, Lazer Cooler, Rainbow Ripple; 0 until given), the two score sprites (light blue) and the lives sprite (grey)."
  },
  {
   "address": 18578,
   "type": "line",
   "text": "The colour of the bottom panel's sprite 1 (Molecule Bomb)."
  },
  {
   "address": 18579,
   "type": "line",
   "text": "The colour of the bottom panel's sprite 2 (Hyper Brakes)."
  },
  {
   "address": 18580,
   "type": "line",
   "text": "The colour of the bottom panel's sprite 3 (Lazer Cooler)."
  },
  {
   "address": 18581,
   "type": "line",
   "text": "The colour of the bottom panel's sprite 4 (Rainbow Ripple)."
  },
  {
   "address": 18582,
   "type": "line",
   "text": "The colour of the bottom panel's sprite 5 (the score's left half)."
  },
  {
   "address": 18583,
   "type": "line",
   "text": "The colour of the bottom panel's sprite 6 (the score's right half)."
  },
  {
   "address": 18584,
   "type": "line",
   "text": "The colour of the bottom panel's sprite 7 (the lives)."
  },
  {
   "address": 18585,
   "type": "line",
   "text": "The bottom panel's eight sprite pointers: the icons $85-$89, the score sprites $9A and $9B, and the lives sprite (written by show_lives)."
  },
  {
   "address": 18586,
   "type": "line",
   "text": "The bottom panel's sprite 1 pointer: the Molecule Bomb icon ($86)."
  },
  {
   "address": 18587,
   "type": "line",
   "text": "The bottom panel's sprite 2 pointer: the Hyper Brakes icon ($87)."
  },
  {
   "address": 18588,
   "type": "line",
   "text": "The bottom panel's sprite 3 pointer: the Lazer Cooler icon ($88)."
  },
  {
   "address": 18589,
   "type": "line",
   "text": "The bottom panel's sprite 4 pointer: the Rainbow Ripple icon ($89)."
  },
  {
   "address": 18590,
   "type": "line",
   "text": "The bottom panel's sprite 5 pointer: the score sprite, left half ($9A)."
  },
  {
   "address": 18591,
   "type": "line",
   "text": "The bottom panel's sprite 6 pointer: the score sprite, right half ($9B)."
  },
  {
   "address": 18592,
   "type": "line",
   "text": "The bottom panel's sprite 7 pointer: the lives sprite, set by show_lives."
  },
  {
   "address": 18593,
   "type": "line",
   "text": "Fills colour RAM $D800-$DBE7 with A."
  },
  {
   "address": 18618,
   "type": "line",
   "text": "The backward scroll. At the bottom of the map (pointer at or past $1DA6) there is nowhere to go: Iball's bottom Y limit becomes $E6 and the scroll speed 0. Otherwise the limit is $AA, and scroll_speed comes off the fine scroll; when it goes below 0, eight go back on, row_drawn is set, the map pointer moves a row down and the playfield is redrawn (from $47E7), with the lasers' rows moved too (lasers_follow_down)."
  },
  {
   "address": 18686,
   "type": "line",
   "text": "Writes the eight play sprites to the video chip: the enable mask (sprite_enable), the 17 position bytes at $12-$22 to $D000-$D010, the pointers at $02-$09, the colours at $0A-$11, and the two sprite multicolours ($23, $24)."
  },
  {
   "address": 18729,
   "type": "line",
   "text": "Reads the stick in port 2 and the movement keys, once every input_rate runs of irq_top (2, or 1 with the Hyper Brakes). Each test drives seven of the keyboard's eight rows at once, so several keys do each job. Up: stick up, or E, T, U, O, @, up-arrow or Q (column 6, rows 1-7). Down: stick down, or S, F, H, K, colon, = or C= (column 5, rows 1-7). Left: stick left, or Z, B or right SHIFT (column 4, rows 1, 3 and 6). Right: stick right, or cursor down, left SHIFT, X, V, N, comma or / (column 7, rows 0-6)."
  },
  {
   "address": 18873,
   "type": "line",
   "text": "Up: notes the last vertical push as up (last_push = 0) and adds one to vertical_speed when Iball moves up, or takes one off when he moves down."
  },
  {
   "address": 18890,
   "type": "line",
   "text": "Down: notes the last vertical push as down (last_push = 1) and adds one to vertical_speed when Iball moves down, or takes one off when he moves up."
  },
  {
   "address": 18907,
   "type": "line",
   "text": "Left: Iball faces left (facing_left = 1, facing_right = 0); adds one to horizontal_speed when he moves left, or takes one off when he moves right."
  },
  {
   "address": 18928,
   "type": "line",
   "text": "Right: Iball faces right (facing_left = 0, facing_right = 1); adds one to horizontal_speed when he moves right, or takes one off when he moves left."
  },
  {
   "address": 18949,
   "type": "line",
   "text": "A speed pushed below zero turns Iball round: the direction bit of sprite 0 flips and the speed becomes 1. A speed that reaches its limit is taken down by one: vertical_speed against vertical_limit, horizontal_speed against horizontal_limit, so the top speed is one less than the limit."
  },
  {
   "address": 18994,
   "type": "line",
   "text": "Moves Iball by his speeds. Vertically he stays between Y $6C and the bottom limit (its own operand at $4A56, $AA or $E6): going up past $6C hands his speed to the scroll (scroll_speed, forward), going down past the limit hands it to a backward scroll. Horizontally he stays between X $57 and $FF; reaching either side turns him round."
  },
  {
   "address": 19030,
   "type": "line",
   "text": "Self-modified: the operand of CMP #$AA at $4A55, Iball's bottom Y limit ($AA, or $E6 at the bottom of the map), set by bottom_limit ($5017, $501D) and scroll_back ($48C8, $48D2)."
  },
  {
   "address": 19091,
   "type": "line",
   "text": "The brakes: every friction_delay runs of irq_top (reloaded from friction_reload, 20) takes one off the scroll speed and both of Iball's speeds, none going below zero."
  },
  {
   "address": 19133,
   "type": "line",
   "text": "Steps Iball's roll: sprite 0's pointer from the eight-frame table at $4AE7 when facing left, or $4ADF otherwise, with the frame counter at $8B."
  },
  {
   "address": 19167,
   "type": "line",
   "text": "Iball's roll facing right: eight sprite pointers, each shown twice ($94-$96 and back)."
  },
  {
   "address": 19175,
   "type": "line",
   "text": "Iball's roll facing left: eight sprite pointers ($97-$99 and back)."
  },
  {
   "address": 19183,
   "type": "line",
   "text": "The low bytes of the 16 levels' tile lists, 360 bytes apart from $7600."
  },
  {
   "address": 19199,
   "type": "line",
   "text": "The high bytes of the 16 levels' tile lists."
  },
  {
   "address": 19215,
   "type": "line",
   "text": "Each level's multicolour register 2 ($D023), five colours that repeat."
  },
  {
   "address": 19231,
   "type": "line",
   "text": "Each level's character colour (plus 8 for multicolour), five that repeat."
  },
  {
   "address": 19247,
   "type": "line",
   "text": "Builds the level's map before play, into the buffer at $097E-$1FFD: 60 rows of six tiles from the level's 360-byte tile list (its address from level_ptr_lo/level_ptr_hi), each tile four characters by four from the tile set at $7380 (16 bytes a tile; numbers $10-$1F reach the second page of tiles, $20 and up the third). Also sets $D023 from level_colour3, the walls' colour (level_char_colour plus 8, for multicolour) into wall_colour and the whole of colour RAM."
  },
  {
   "address": 19279,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$01 at $4B4E, the low byte of the level's tile list, from level_ptr_lo (the STA at $4B34)."
  },
  {
   "address": 19283,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$01 at $4B52, the high byte of the level's tile list, from level_ptr_hi (the STA at $4B3A)."
  },
  {
   "address": 19398,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $8C80 at $4BC5, set by the STA at $4B58, the STA at $4BB7, the STA at $4BD8."
  },
  {
   "address": 19399,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $8C80 at $4BC5, set by the STA at $4B5F, the STA at $4BBC, the INC at $4BDD."
  },
  {
   "address": 19440,
   "type": "line",
   "text": "Moves build_level_map's destination to the next tile: four characters right, and after six tiles on to the next row of tiles (72 more bytes, three character rows). After 60 rows of tiles sets the finished flag ($58)."
  },
  {
   "address": 19485,
   "type": "line",
   "text": "The low bytes of animate_chars's 12 frames: three 128-byte frames at $7200, $7280 and $7300, each three times, in the order $7200, $7280, $7300, $7280."
  },
  {
   "address": 19497,
   "type": "line",
   "text": "The high bytes of animate_chars's 12 frames."
  },
  {
   "address": 19509,
   "type": "line",
   "text": "Copies the next 128-byte frame of the animated characters into the character set at $36F0-$376F (16 characters), from the frame addresses at anim_frame_lo/anim_frame_hi, through anim_frames (12) frames, one a call."
  },
  {
   "address": 19535,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $7200 at $4C4E, set by the STA at $4C3A."
  },
  {
   "address": 19536,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $7200 at $4C4E, set by the STA at $4C40."
  },
  {
   "address": 19544,
   "type": "line",
   "text": "The rows of place_dots's 50 dots, two to a row."
  },
  {
   "address": 19594,
   "type": "line",
   "text": "The columns of place_dots's 50 dots (between 8 and 31)."
  },
  {
   "address": 19646,
   "type": "line",
   "text": "Puts character $FF at 50 fixed places on the screen, wherever character 0 is: rows from the list at $4C58, columns from $4C8A. Used for the screens between levels."
  },
  {
   "address": 19681,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $4CE0, set by the STA at $4CD2."
  },
  {
   "address": 19682,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $4CE0, set by the STA at $4CC6, the INC at $4CDA."
  },
  {
   "address": 19688,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $4CE7, set by the STA at $4CD5."
  },
  {
   "address": 19689,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $4CE7, set by the STA at $4CC9, the INC at $4CDD."
  },
  {
   "address": 19694,
   "type": "line",
   "text": "Never called: an older way of moving the dot character with the scroll, shifting character $FF's rows up or down (old_dot_up, old_dot_down) once for each pixel of scroll_speed, or setting it afresh (clear_dot_char) when the fine scroll is 0."
  },
  {
   "address": 19728,
   "type": "line",
   "text": "Never called: rotates character $FF's eight rows down by one, the last coming round to the top through its own operand at $4D22."
  },
  {
   "address": 19746,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$04 at $4D21, where old_dot_down keeps the row that comes round."
  },
  {
   "address": 19751,
   "type": "line",
   "text": "Never called: rotates character $FF's eight rows up by one, the first coming round to the bottom through its own operand at $4D3B."
  },
  {
   "address": 19771,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$04 at $4D3A, where old_dot_up keeps the row that comes round."
  },
  {
   "address": 19776,
   "type": "line",
   "text": "Clears character $FF's eight bytes ($37F8-$37FF) and sets one pixel in its last row ($10): the dot."
  },
  {
   "address": 19792,
   "type": "line",
   "text": "Rotates each of the eight bytes of character $FE ($37F0-$37F7) two bits to the left, wrapping round: a pattern that moves one multicolour pixel each logic pass."
  },
  {
   "address": 19828,
   "type": "line",
   "text": "Copies the twelve screen characters round Iball into probe ($97-$A2), three rows of four, from the column under his X and the row under his Y, the fine scroll allowed for in the direction he moves. Entry $4D98 does the same from the row in A and the column in $96, for materialise_wait."
  },
  {
   "address": 19864,
   "type": "line",
   "text": "The second half of probe_background, entered by materialise_wait with the character row in A and the column in $96: copies the twelve characters there into probe."
  },
  {
   "address": 19891,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $4DB2, set by the STA at $4DA5, the STA at $4DC3."
  },
  {
   "address": 19892,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $4DB2, set by the STA at $4D9C, the INC at $4DAA, the INC at $4DC8."
  },
  {
   "address": 19920,
   "type": "line",
   "text": "Bounces Iball off the walls: a probe character of $06 or more is solid. Moving right the right-hand column is tested, moving left the left-hand one, then moving down the bottom row and moving up the top row. A hit reverses that direction (a vertical hit also stops the scroll) and goes to hit_wall with the character. A hit on the top row while the map pointer is in its top two rows (below $09AE) is the goal: level_over is set instead."
  },
  {
   "address": 20080,
   "type": "line",
   "text": "Starts Iball materialising at X $AE, Y $A0: materialising = 1, its delays, the death flag cleared, and the materialise sound on all three voices ($49, $40, $49)."
  },
  {
   "address": 20120,
   "type": "line",
   "text": "One step of Iball materialising, run by irq_top. Stage 1 (materialise_wait) waits for the place to be clear of walls; stage 2 puts eight pieces round it, 70 pixels out in each direction, all eight sprites shown and multicoloured, and the materialise sound; stage 3 (from $4F1C) brings them in a little faster each step (to at most 5 pixels) until they meet: then only sprite 0 is left, on the start position, coloured grey ($0C), and play begins."
  },
  {
   "address": 20330,
   "type": "line",
   "text": "Moves the sprites by their speeds: for each sprite in sprite_enable (from sprite 1 in play, from 0 while materialising or dying), X by its horizontal speed ($29 + 2n) in the direction of bit n of $26 (set: right), Y by its vertical speed ($2A + 2n) in the direction of bit n of $27 (set: down). A sprite that would leave X $57-$FF or Y $3C-$E6 is taken off (remove_sprite)."
  },
  {
   "address": 20489,
   "type": "line",
   "text": "Sets Iball's bottom Y limit in move_iball's operand ($4A56): $E6 when the map pointer is at or past $1DA6, the bottom of the map, else $AA."
  },
  {
   "address": 20513,
   "type": "line",
   "text": "A bounce off character A. With the Electro Shield on (shield_on) nothing happens; with faulty_disc set every wall kills; otherwise characters $EE and up, the electrified ones, kill. The comparison is made on its own operand ($5032), where it stores A."
  },
  {
   "address": 20530,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$01 at $5031, the character Iball has just bounced off, set by the STA at $5021 (hit_wall's entry)."
  },
  {
   "address": 20536,
   "type": "line",
   "text": "Iball dies: dying = 1, the disc sequence goes back (disc_rollback), faulty_disc is cleared and $D023 gets the level's colour back, the death sound starts and \"OH NO!\" plays (sample 1, pitch $8C). Reached from hit_wall, from an alien's touch and from time_up."
  },
  {
   "address": 20577,
   "type": "line",
   "text": "One step of the death, run by irq_top. Stage 1 (death_explode) breaks Iball up; stage 2 (death_flash) flashes the background; stage 3 (death_fly) sends the pieces off and, when they have gone, starts a new materialise. Any other stage only sets $3F to 2."
  },
  {
   "address": 20599,
   "type": "line",
   "text": "Never reached: an RTS and a JMP $4662 after death_step's last branch, left over from an earlier version."
  },
  {
   "address": 20603,
   "type": "line",
   "text": "Stage 1 of the death: remembers where Iball was ($EE/$EF), shows all eight sprites multicoloured, stops the scroll, puts the eight sprites at his place with every speed 0, takes a life, and gives the pieces their directions ($D6 across, $F8 up and down). Its colour-and-pointer loop at $508F ends with dex and beq, so it runs for sprite 7 alone; death_flash sets every pointer afterwards."
  },
  {
   "address": 20684,
   "type": "line",
   "text": "Stage 2 of the death: the background colour steps through the 13 colours at death_colours, one a step; then sprite 0 turns white, every sprite gets the piece shape ($9E) and stage 3 begins."
  },
  {
   "address": 20722,
   "type": "line",
   "text": "The 13 background colours the screen flashes through when Iball dies."
  },
  {
   "address": 20735,
   "type": "line",
   "text": "Stage 3 of the death: every piece moves at the same speed, starting at 10 and slowing by one every two steps to 1, until all have left the screen; then stage 4 and a new materialise (start_materialise)."
  },
  {
   "address": 20797,
   "type": "line",
   "text": "Takes off the sprite whose bit is in $39: clears it from sprite_enable and from the three per-sprite sets, forming ($41B0), exploding ($41B9) and is_disc ($41BC). Writes the inverted mask into its own operands."
  },
  {
   "address": 20815,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $514E, set by the STA at $5141."
  },
  {
   "address": 20823,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $5156, set by the STA at $5144."
  },
  {
   "address": 20831,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $515E, set by the STA at $5147."
  },
  {
   "address": 20839,
   "type": "line",
   "text": "Stage 1 of materialising: probes the twelve characters at the start position; while the delay ($40, from 50) lasts, or while any is a wall, it scrolls the map backward, a little faster every four steps (up to 6), to clear the place. When the delay is over and the place is clear, stage 2."
  },
  {
   "address": 20923,
   "type": "line",
   "text": "Fire: the stick's button in port 2, or W, R, Y, I, P, * or left-arrow (column 1, rows 1-7). Nothing while the overheat lock-out lasts. Each logic pass with fire held heats the laser by one (and fires again) unless the Lazer Cooler is on; at 250 it overheats: the message band goes up for 50 frames (freeze, freeze_frames), fire is locked out for 100 frames and LASER OVERHEATED is shown (show_overheat). Otherwise works out Iball's character column and row (shot and laser starts), runs the lasers (laser_fire) and the ripple (ripple_fire), and puts a shot in the shot table: with the Bullet Spray both ways, else down when the last vertical push was down and up otherwise."
  },
  {
   "address": 21061,
   "type": "line",
   "text": "Starts a shot going down, two rows below Iball, if that screen character is below 5 (empty, or a shot or laser) and a slot is free among the 24 at $407D: its character, column, row, colour and direction (1, down)."
  },
  {
   "address": 21084,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $525B, set by the STA at $5253."
  },
  {
   "address": 21085,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $525B, set by the STA at $524A, the INC at $5258."
  },
  {
   "address": 21134,
   "type": "line",
   "text": "Starts a shot going up, a row below Iball's top, if that screen character is below 5 and a slot is free among the 24: its character, column, row, colour and direction (0, up)."
  },
  {
   "address": 21157,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $52A4, set by the STA at $529C."
  },
  {
   "address": 21158,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $52A4, set by the STA at $5293, the INC at $52A1."
  },
  {
   "address": 21209,
   "type": "line",
   "text": "Steps the shot character through 1, 2, 3 and the shot colour through 1-7, once a logic pass: new shots take them."
  },
  {
   "address": 21237,
   "type": "line",
   "text": "Moves every live shot one character row each logic pass, up or down. It puts the wall colour back in the shot's colour cell; unless a row has just been drawn, it ends the shot if the character there is now 5 or more, and clears it otherwise. Then the shot moves; one that reaches row 0 or row 24, or a character of 5 or more, ends, and the others are written at the new place in their character and colour. Addresses go into its own operands (the screen row from row_lo/row_hi, colour RAM $D4 pages above)."
  },
  {
   "address": 21288,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $5327, set by the STA at $531A."
  },
  {
   "address": 21289,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $5327, set by the STA at $530D, the INC at $5322."
  },
  {
   "address": 21295,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $532E, set by the STA at $5317."
  },
  {
   "address": 21296,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $532E, set by the STA at $5307, the INC at $531F."
  },
  {
   "address": 21319,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $5346, set by the STA at $5341."
  },
  {
   "address": 21320,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $5346, set by the STA at $533B."
  },
  {
   "address": 21388,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $538B, set by the STA at $5364, the STA at $5383."
  },
  {
   "address": 21389,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $538B, set by the STA at $535B, the INC at $5369, the STA at $537A, the DEC at $5388."
  },
  {
   "address": 21418,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $53A9, set by the STA at $53A3."
  },
  {
   "address": 21419,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $53A9, set by the STA at $539D."
  },
  {
   "address": 21439,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $53BE, set by the STA at $53B8."
  },
  {
   "address": 21440,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $53BE, set by the STA at $53B2."
  },
  {
   "address": 21444,
   "type": "line",
   "text": "The seven kinds of alien's animations: sprite pointer lists, each frame shown twice. Kind 0, the spinning ball, at $53C4 (8 entries); kind 1 at $53CC (10), 2 at $53D6 (20), 3 at $53EA (24), 4 at $5402 (8), 5 at $540A (14) and the bonus disc, kind 6, at $5418 (8). The counts are the limits at $5459."
  },
  {
   "address": 21452,
   "type": "line",
   "text": "Kind 1's animation, the sparkle: 10 sprite pointers, each frame twice."
  },
  {
   "address": 21462,
   "type": "line",
   "text": "Kind 2's animation, the bug: 20 sprite pointers, each frame twice."
  },
  {
   "address": 21482,
   "type": "line",
   "text": "Kind 3's animation, the flipping half-disc: 24 sprite pointers, each frame twice."
  },
  {
   "address": 21506,
   "type": "line",
   "text": "Kind 4's animation, the face: 8 sprite pointers, each frame twice."
  },
  {
   "address": 21514,
   "type": "line",
   "text": "Kind 5's animation, the face: 14 sprite pointers, each frame twice."
  },
  {
   "address": 21528,
   "type": "line",
   "text": "Kind 6's animation, the bonus disc: 8 sprite pointers, each frame twice."
  },
  {
   "address": 21536,
   "type": "line",
   "text": "The 25 screen rows' addresses from $0400, low bytes then high bytes, copied to row_lo and row_hi at the start of a game."
  },
  {
   "address": 21586,
   "type": "line",
   "text": "The seven alien animations' frame counters."
  },
  {
   "address": 21587,
   "type": "line",
   "text": "Kind 1's animation counter."
  },
  {
   "address": 21588,
   "type": "line",
   "text": "Kind 2's animation counter."
  },
  {
   "address": 21589,
   "type": "line",
   "text": "Kind 3's animation counter."
  },
  {
   "address": 21590,
   "type": "line",
   "text": "Kind 4's animation counter."
  },
  {
   "address": 21591,
   "type": "line",
   "text": "Kind 5's animation counter."
  },
  {
   "address": 21592,
   "type": "line",
   "text": "Kind 6's animation counter."
  },
  {
   "address": 21593,
   "type": "line",
   "text": "The seven alien animations' lengths: 8, 10, 20, 24, 8, 14 and 8."
  },
  {
   "address": 21600,
   "type": "line",
   "text": "Each kind of alien's current sprite pointer, set by alien_anim_step."
  },
  {
   "address": 21601,
   "type": "line",
   "text": "Kind 1's current sprite pointer."
  },
  {
   "address": 21602,
   "type": "line",
   "text": "Kind 2's current sprite pointer."
  },
  {
   "address": 21603,
   "type": "line",
   "text": "Kind 3's current sprite pointer."
  },
  {
   "address": 21604,
   "type": "line",
   "text": "Kind 4's current sprite pointer."
  },
  {
   "address": 21605,
   "type": "line",
   "text": "Kind 5's current sprite pointer."
  },
  {
   "address": 21606,
   "type": "line",
   "text": "Kind 6's current sprite pointer (the disc)."
  },
  {
   "address": 21607,
   "type": "line",
   "text": "Steps the seven alien animation counters at $5452 (each wrapping at its limit in $5459) and looks up each one's current sprite pointer in its frame list ($53C4, $53CC, $53D6, $53EA, $5402, $540A, $5418) into $5460-$5466, one pointer per kind of alien."
  },
  {
   "address": 21692,
   "type": "line",
   "text": "Draws the six score digits into the score sprites: for each digit, its eight-byte glyph (from the address in digit_glyph_lo/hi) into the sprite at the place in score_dest_lo/hi, one byte every three (a sprite's row)."
  },
  {
   "address": 21724,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $54DB, set by the STA at $54C4."
  },
  {
   "address": 21725,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $54DB, set by the STA at $54CA."
  },
  {
   "address": 21727,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $54DE, set by the STA at $54D0, the STA at $54E7."
  },
  {
   "address": 21728,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $54DE, set by the STA at $54D6, the DEC at $54EC."
  },
  {
   "address": 21750,
   "type": "line",
   "text": "Fills digit_glyph_lo/hi with the addresses of the ten digit glyphs, eight bytes apart from $38D7 (in the second character set), and score_dest_lo/hi with each score digit's place in the score sprites ($26B0, $26B1, $26B2, $26F0, $26F1, $26F2)."
  },
  {
   "address": 21763,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $5502, set by the STA at $54FA, the STA at $5512."
  },
  {
   "address": 21768,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $5507, set by the STA at $54FF, the INC at $5517."
  },
  {
   "address": 21852,
   "type": "line",
   "text": "The low bytes of the ten digit glyphs' addresses, filled by score_init."
  },
  {
   "address": 21862,
   "type": "line",
   "text": "The high bytes of the ten digit glyphs' addresses."
  },
  {
   "address": 21872,
   "type": "line",
   "text": "The low bytes of the six score digits' places in the score sprites, filled by score_init."
  },
  {
   "address": 21873,
   "type": "line",
   "text": "The low byte of score digit 2's place in the score sprites ($B1)."
  },
  {
   "address": 21874,
   "type": "line",
   "text": "The low byte of score digit 3's place in the score sprites ($B2)."
  },
  {
   "address": 21875,
   "type": "line",
   "text": "The low byte of score digit 4's place in the score sprites ($F0)."
  },
  {
   "address": 21876,
   "type": "line",
   "text": "The low byte of score digit 5's place in the score sprites ($F1)."
  },
  {
   "address": 21877,
   "type": "line",
   "text": "The low byte of score digit 6's place in the score sprites ($F2)."
  },
  {
   "address": 21878,
   "type": "line",
   "text": "The high bytes of the six score digits' places."
  },
  {
   "address": 21879,
   "type": "line",
   "text": "The high byte of score digit 2's place in the score sprites ($26)."
  },
  {
   "address": 21880,
   "type": "line",
   "text": "The high byte of score digit 3's place in the score sprites ($26)."
  },
  {
   "address": 21881,
   "type": "line",
   "text": "The high byte of score digit 4's place in the score sprites ($26)."
  },
  {
   "address": 21882,
   "type": "line",
   "text": "The high byte of score digit 5's place in the score sprites ($26)."
  },
  {
   "address": 21883,
   "type": "line",
   "text": "The high byte of score digit 6's place in the score sprites ($26)."
  },
  {
   "address": 21884,
   "type": "line",
   "text": "Adds the six digits of the score adder ($409C-$40A1, highest first) to the score ($41-$46), carrying into the digit to the left. Every caller first clears the adder (clear_adder) and puts one value in one digit."
  },
  {
   "address": 21908,
   "type": "line",
   "text": "The level timer: every 50 logic passes ($49) takes one off the units digit (timer_units), borrowing from the tens (timer_tens), and stops at 00. A timer second is a real second only while the logic runs every frame; with seven aliens about it ran in 695 of 1,350 frames, so the timer ran at about half speed."
  },
  {
   "address": 21940,
   "type": "line",
   "text": "Clears the six digits of the score adder at $409C."
  },
  {
   "address": 21951,
   "type": "line",
   "text": "Spawning, once a logic pass. While the Molecule Bomb lasts (molecule_frames, 255 logic passes) counts it down and sets the bottom panel's sprite 1 colour from it, the icon fading; no alien forms. Otherwise tries to start one (spawn_alien) and steps the colours of those forming (forming_step)."
  },
  {
   "address": 21972,
   "type": "line",
   "text": "Never reached: would turn the Molecule Bomb's icon black. spawn_step jumps past it."
  },
  {
   "address": 21984,
   "type": "line",
   "text": "Starts an alien in the first sprite of 1-7 not in use, if there is one: speeds 0, a random place (place_alien) away from walls and from Iball (probe_alien, alien_near_walls, alien_near_iball). If it fits: it joins sprite_enable, becomes a disc when the disc countdown is negative (the countdown starts again at 20), begins forming (start_forming) and takes a random kind (pick_kind). If not, it is taken away again (unspawn)."
  },
  {
   "address": 22028,
   "type": "line",
   "text": "Self-modified: the operand of LDX #$00 at $560B, set by the STX at $5602."
  },
  {
   "address": 22030,
   "type": "line",
   "text": "Self-modified: the operand of LDY #$00 at $560D, set by the STY at $5605."
  },
  {
   "address": 22078,
   "type": "line",
   "text": "Gives sprite X a colour from the 16 at $5650, picked by the low four bits of the next byte of the random table ($40B0, index random_index)."
  },
  {
   "address": 22096,
   "type": "line",
   "text": "The 16 colours a formed alien can take."
  },
  {
   "address": 22112,
   "type": "line",
   "text": "Gives the new alien a kind (0-7 from the random table, through the list at $568B) in alien_kind, or kind 6 when it is a disc, which also sets the disc sound on all three voices."
  },
  {
   "address": 22155,
   "type": "line",
   "text": "The eight kinds a new alien can be, picked at random: 0, 1, 2, 3, 4, 5, 3 and 2 (kind 3 and 2 twice, kind 6 only for discs, 7 never)."
  },
  {
   "address": 22163,
   "type": "line",
   "text": "Places the new alien: when the screen is scrolling it appears at the edge the map comes from, Y $41 (scrolling forward) or $D7 (backward), else at a random Y from the eight at $56CF; X is one of the eight at $56C7, picked at random."
  },
  {
   "address": 22197,
   "type": "line",
   "text": "Picks the alien's X from the eight at $56C7 with the next random byte."
  },
  {
   "address": 22215,
   "type": "line",
   "text": "The eight X places where a new alien can appear."
  },
  {
   "address": 22223,
   "type": "line",
   "text": "The eight Y places where a new alien can appear when the screen is still."
  },
  {
   "address": 22231,
   "type": "line",
   "text": "Picks the alien's Y from the eight at $56CF with the next random byte."
  },
  {
   "address": 22249,
   "type": "line",
   "text": "Sets sprites 7 down to 1's pointers from their kinds: each alien not exploding gets the current frame for its kind ($5460 plus alien_kind)."
  },
  {
   "address": 22277,
   "type": "line",
   "text": "Gives every alien (sprites 1-7) the scroll's speed and direction vertically, so they keep their place on the map as it moves. steer_aliens then changes it for sprites 1-4, which steer up and down towards Iball, adding speed or taking it off; sprites 5-7 steer only across and keep the scroll's speed."
  },
  {
   "address": 22323,
   "type": "line",
   "text": "Never reached: the end of an interrupt handler (PLA, TAY, PLA, TAX, PLA, RTI) that nothing jumps to."
  },
  {
   "address": 22329,
   "type": "line",
   "text": "Marks the new alien as forming: in the forming set, its frame count at 0, and out of the multicolour set, so it shows in one colour while it flickers into being."
  },
  {
   "address": 22351,
   "type": "line",
   "text": "Steps every forming alien's colour through the 50 colours at $5777, one a logic pass; at the end it is formed (end_forming)."
  },
  {
   "address": 22391,
   "type": "line",
   "text": "The 50 colours a forming alien flickers through: greys, then every colour twice in turn."
  },
  {
   "address": 22441,
   "type": "line",
   "text": "An alien has finished forming: multicolour on, out of the forming set, and a random colour (random_colour). From now on it can harm Iball."
  },
  {
   "address": 22461,
   "type": "line",
   "text": "Copies the twelve screen characters round the sprite whose position is at $12+Y into alien_probe ($A3-$AE), three rows of four, and its character row into alien_row ($B0)."
  },
  {
   "address": 22518,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $57F5, set by the STA at $57E9, the STA at $5806."
  },
  {
   "address": 22519,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $57F5, set by the STA at $57E0, the INC at $57EE, the INC at $580B."
  },
  {
   "address": 22549,
   "type": "line",
   "text": "Sets spawn_blocked when any of the twelve characters round the new alien is a wall ($06 or more)."
  },
  {
   "address": 22574,
   "type": "line",
   "text": "Common exit: puts back the X and Y saved in its own operands ($582F, $5831) and returns."
  },
  {
   "address": 22575,
   "type": "line",
   "text": "Self-modified: the operand of LDX #$00 at $582E, set by the STX at $57BD, the STX at $5815, the STX at $5BFC, the STX at $5E7E, the STX at $602E."
  },
  {
   "address": 22577,
   "type": "line",
   "text": "Self-modified: the operand of LDY #$00 at $5830, set by the STY at $57C0, the STY at $5818, the STY at $5BF9, the STY at $5E7B, the STY at $6031."
  },
  {
   "address": 22579,
   "type": "line",
   "text": "Takes the alien just placed away again: out of sprite_enable, its position zeroed."
  },
  {
   "address": 22596,
   "type": "line",
   "text": "Sets spawn_blocked when the sprite at $12+Y is within 20 pixels of Iball across and 18 down; spawning uses it to keep new aliens away from him, and alien_touch to find a collision."
  },
  {
   "address": 22664,
   "type": "line",
   "text": "With the Molecule Bomb armed, F1, M or right SHIFT (column 4, rows 0, 4 and 6) sets it off: no aliens form for 255 logic passes (molecule_frames), and its sound."
  },
  {
   "address": 22702,
   "type": "line",
   "text": "With the Smart Missile armed, full stop, right SHIFT or SPACE (column 4, rows 5-7) fires it: its icon goes dark, every alien on screen but the discs explodes (smart_missile), and its sound."
  },
  {
   "address": 22741,
   "type": "line",
   "text": "When the map moves down a row on screen, moves the row of every laser down one too (the row tables at $66CC and $6708)."
  },
  {
   "address": 22753,
   "type": "line",
   "text": "The other way: every laser's row up one."
  },
  {
   "address": 22765,
   "type": "line",
   "text": "The level is won. Hides the sprites, starts the fanfare, and turns the time left into points: one second at a time, with a short wait, adds 10 to the score until the timer reads 00. Then clears the screen and writes WELL DONE and COMPLETED LEVEL, and the level's number in two digit sprites (from level_digit_units/tens); after levels 4, 8, 12 and 16 the friend rescued (rescue screens); then waits for fire to be released and pressed again, and starts the next level. After level 16 it shows THAT WAS INCREDIBALL, YOU HAVE COMPLETED IBALL, waits, and goes back to the title."
  },
  {
   "address": 22828,
   "type": "line",
   "text": "Waits X times Y turns of an inner loop (Y is written into its own operand at $5930; 0 counts 256)."
  },
  {
   "address": 22832,
   "type": "line",
   "text": "Self-modified: the operand of LDY #$00 at $592F, the inner count of delay, set by the STY at $592C from the caller's Y."
  },
  {
   "address": 22864,
   "type": "line",
   "text": "WELL DONE, the level-end screen's first line (written in yellow at row 2)."
  },
  {
   "address": 22873,
   "type": "line",
   "text": "Writes COMPLETED LEVEL on row 4 of the level-end screen, in cyan."
  },
  {
   "address": 22894,
   "type": "line",
   "text": "COMPLETED LEVEL."
  },
  {
   "address": 22909,
   "type": "line",
   "text": "Shows the level's number in sprites 0 and 1 (tens and units, digit sprites from $8A, from level_digit_tens/units), both light blue and single-colour, with sprites 0 and 1 the only ones on."
  },
  {
   "address": 22958,
   "type": "line",
   "text": "The units digit of each level's number (1-16), for the level-end screen."
  },
  {
   "address": 22974,
   "type": "line",
   "text": "The tens digit of each level's number."
  },
  {
   "address": 22990,
   "type": "line",
   "text": "After levels 4, 8, 12 and 16 (level 3, 7, 11, 15): writes YOU HAVE RESCUED and the friend's name in green, with the fanfare on all three voices, and shows the friend (show_friend); after the others goes straight to waiting for fire."
  },
  {
   "address": 23167,
   "type": "line",
   "text": "Writes YOU HAVE RESCUED on row 12, in green."
  },
  {
   "address": 23186,
   "type": "line",
   "text": "YOU HAVE RESCUED."
  },
  {
   "address": 23202,
   "type": "line",
   "text": "LOVER BALL, rescued after level 4; also on the title page."
  },
  {
   "address": 23212,
   "type": "line",
   "text": "EDDY BALL, rescued after level 8."
  },
  {
   "address": 23221,
   "type": "line",
   "text": "GLOW BALL, rescued after level 12."
  },
  {
   "address": 23230,
   "type": "line",
   "text": "NO BALL, rescued after level 16."
  },
  {
   "address": 23237,
   "type": "line",
   "text": "Shows Iball (sprite 2, pointer $94, grey) and the friend rescued (sprite 3, pointer A, colour X) side by side, with the level number still in sprites 0 and 1. After No Ball, the fourth, writes THAT WAS INCREDIBALL, YOU HAVE COMPLETED and IBALL on rows 20, 21 and 23, waits five long delays and for fire, and goes back to the title."
  },
  {
   "address": 23393,
   "type": "line",
   "text": "THAT WAS INCREDIBALL, the end of the game."
  },
  {
   "address": 23413,
   "type": "line",
   "text": "YOU HAVE COMPLETED."
  },
  {
   "address": 23431,
   "type": "line",
   "text": "IBALL, the last line of the end."
  },
  {
   "address": 23436,
   "type": "line",
   "text": "Waits until fire is released, waits a moment, waits for fire again, and starts the next level."
  },
  {
   "address": 23505,
   "type": "line",
   "text": "Never reached: a JMP to wait_fire_release after rescue_screens' last branch."
  },
  {
   "address": 23508,
   "type": "line",
   "text": "For each alien in play that is not exploding: probes the characters round it (probe_alien), checks them for shots and lasers (alien_shot) and for walls (alien_walls)."
  },
  {
   "address": 23545,
   "type": "line",
   "text": "An alien whose twelve surrounding characters include a shot (character 1-3) on the row of a live shot, or a laser or ripple character (4 or 5), is hit: it starts exploding and the shot is cleared (clear_shot), for 10 points. Killing an alien that is not a disc takes one off the disc countdown. Shooting a disc sets a sound of its own, but the hit sound written after it in the same frame replaces it. For a laser or ripple hit, X holds the character's place in the probe (0-3), not a shot's slot, so clear_shot ends shot slot 0-3 instead."
  },
  {
   "address": 23561,
   "type": "line",
   "text": "Self-modified: the zero-page address of LDA $A3 at $5C08, set by the STA at $5C01, the STA at $5C1F."
  },
  {
   "address": 23700,
   "type": "line",
   "text": "Ends shot X: marks it free and puts the wall colour and character 0 back at its place."
  },
  {
   "address": 23748,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $5CC3, set by the STA at $5CBE."
  },
  {
   "address": 23749,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $5CC3, set by the STA at $5CB8."
  },
  {
   "address": 23753,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $5CC8, set by the STA at $5CAA."
  },
  {
   "address": 23754,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $5CC8, set by the STA at $5CA0, the INC at $5CAF."
  },
  {
   "address": 23762,
   "type": "line",
   "text": "Steps every exploding alien through the 16 explosion frames at $5CF8, one a logic pass; after the last it is taken off (remove_sprite)."
  },
  {
   "address": 23800,
   "type": "line",
   "text": "An alien's explosion: 16 sprite pointers, $E9-$F0 each twice."
  },
  {
   "address": 23816,
   "type": "line",
   "text": "Iball against the aliens: an alien in play, not exploding and not forming (a disc counts even while forming) that comes within 20 pixels across and 18 down of him (alien_near_iball) kills him, or if it is a disc gives him the disc's extra (take_disc)."
  },
  {
   "address": 23904,
   "type": "line",
   "text": "Steers the aliens that are formed and not exploding: sprites 1 and 2 home in on Iball vertically only, 3 and 4 both ways, 5 to 7 across only."
  },
  {
   "address": 23953,
   "type": "line",
   "text": "Turns the alien towards Iball across and sets its horizontal speed to the level's (alien_speed_x); near either side (X $FB and up, or below $5B) it stops."
  },
  {
   "address": 24020,
   "type": "line",
   "text": "Each level's horizontal speed for the aliens that home in across: 1 on levels 1-4, 2 on 5-13, 3 on 14-16 (17 bytes; the last is not read)."
  },
  {
   "address": 24037,
   "type": "line",
   "text": "Steers the alien towards Iball vertically: ride_scroll has just given it the scroll's speed, and this adds the level's step (alien_accel_y) towards him, or takes it off when it moves away, turning it round when the result goes below zero."
  },
  {
   "address": 24097,
   "type": "line",
   "text": "Self-modified: the operand of SBC #$00 at $5E20, set by the STA at $5E1A."
  },
  {
   "address": 24157,
   "type": "line",
   "text": "Self-modified: the operand of SBC #$00 at $5E5C, set by the STA at $5E56."
  },
  {
   "address": 24170,
   "type": "line",
   "text": "Each level's vertical step for the aliens that home in vertically: 1 on levels 1-8, 2 on 9-15, 3 on 16 (17 bytes; the last is not read)."
  },
  {
   "address": 24187,
   "type": "line",
   "text": "An alien next to a wall: one above or below it puts it back on the scroll (the scroll's speed and direction vertically); one on the side it moves towards stops it across."
  },
  {
   "address": 24333,
   "type": "line",
   "text": "Puts the lives into the bottom panel's last sprite: pointer $E5 plus the lives, for 0 to 3, unchanged above 3, and $9D when none are left."
  },
  {
   "address": 24354,
   "type": "line",
   "text": "The timer has run out: kills Iball and sets the timer back to 50."
  },
  {
   "address": 24366,
   "type": "line",
   "text": "Waits for any speech to finish, waits, says \"GAME OVER!\" (sample 2 at pitch $8C), writes GAME OVER (game_over_text), waits and goes back to the title."
  },
  {
   "address": 24391,
   "type": "line",
   "text": "Iball has taken a disc: the message band goes up for 100 frames (freeze) and the next extra in the disc sequence is given and named (give_extra)."
  },
  {
   "address": 24403,
   "type": "line",
   "text": "The extras message's first interrupt, at line $E7 plus the fine scroll: sets the next (msg_irq_charset) at line $E7 plus the fine scroll, puts every sprite at X 0 so none shows on the message row, multicolour and extended colour on, and counts the message's frames down; at 0 the freeze ends and the two rows are put back (restore_rows)."
  },
  {
   "address": 24496,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves A here with the STA at $5F53 on entry, and the LDA #$00 at $5FAF puts it back on the way out."
  },
  {
   "address": 24498,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves X here with the STX at $5F56 on entry, and the LDX #$00 at $5FB1 puts it back on the way out."
  },
  {
   "address": 24500,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves Y here with the STY at $5F59 on entry, and the LDY #$00 at $5FB3 puts it back on the way out."
  },
  {
   "address": 24502,
   "type": "line",
   "text": "The extras message's second interrupt: sets irq_bottom at $F8 next, switches to the character set at $3800 and extended colour off, for the message's letters."
  },
  {
   "address": 24545,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves A here with the STA at $5FB6 on entry, and the LDA #$00 at $5FE0 puts it back on the way out."
  },
  {
   "address": 24547,
   "type": "line",
   "text": "Prepares a screen between levels or at the game's end: copies the dot character into the second character set ($3FF8), clears the screen, sets the top panel's character set to $3800 (irq_top's operand at $4480 = $0E) and puts the dots on the screen (place_dots)."
  },
  {
   "address": 24570,
   "type": "line",
   "text": "Writes GAME and OVER on rows 11 and 12 in white, waits two long delays and goes back to the title (game_start)."
  },
  {
   "address": 24614,
   "type": "line",
   "text": "GAME."
  },
  {
   "address": 24618,
   "type": "line",
   "text": "OVER."
  },
  {
   "address": 24622,
   "type": "line",
   "text": "Saves the bottom two rows and clears them in green (save_rows, its colour operand at $6514 set to 5), copies the next extra's name (24 characters, through the pointer tables extra_name_lo/hi) into row 23, gives the extra (apply_extra) and moves the disc sequence on; after the 32nd disc it carries on from the 29th."
  },
  {
   "address": 24657,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $6050, set by the STA at $6045."
  },
  {
   "address": 24658,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $6050, set by the STA at $604B."
  },
  {
   "address": 24683,
   "type": "line",
   "text": "For each place in the disc sequence, the checkpoint a death sends it back to: 1, 2, 4, 8, 13, 18 or 26."
  },
  {
   "address": 24715,
   "type": "line",
   "text": "The bottom two rows' characters, kept by save_rows while a message is up."
  },
  {
   "address": 24795,
   "type": "line",
   "text": "The bottom two rows' colours, kept by save_rows."
  },
  {
   "address": 24875,
   "type": "line",
   "text": "The 17 extras' names, 24 characters each, centred: TURBO BOOST, SINGLE LAZER, SMART MISSILE, EXTRA SCORE, BULLET SPRAY, ELECTRO SHIELD, EXTENDED PLAY, TWIN LASER SET, HYPERSPACE, MOLECULE BOMB, FAULTY DISC, FUEL INJECTION, BONUS BALL, HYPER BRAKES, TIMER REWIND, LAZER COOLER, RAINBOW RIPPLE."
  },
  {
   "address": 25283,
   "type": "line",
   "text": "The order the discs give their extras in, 32 places: Turbo Boost, Single Lazer, Smart Missile, Extra Score, Bullet Spray, Electro Shield, Extra Score, Extended Play, Twin Laser Set, Hyperspace, Molecule Bomb, Extended Play, Faulty Disc, Fuel Injection, Bonus Ball, Hyper Brakes, Timer Rewind, Faulty Disc, Lazer Cooler, Electro Shield, Timer Rewind, Extra Score, Extra Score, Hyper Brakes, Faulty Disc, Timer Rewind, Rainbow Ripple, Bonus Ball, Hyper Brakes, Faulty Disc, Extra Score, Extra Score; after the last, places 29-32 again."
  },
  {
   "address": 25315,
   "type": "line",
   "text": "Puts back the bottom two rows of the screen and their colours from where save_rows kept them ($608B, $60DB)."
  },
  {
   "address": 25333,
   "type": "line",
   "text": "Fills the tables extra_name_lo/hi with the addresses of the 17 extras' names, 24 bytes apart from $612B."
  },
  {
   "address": 25346,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $6301, set by the STA at $62F9, the STA at $6311."
  },
  {
   "address": 25351,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $6306, set by the STA at $62FE, the INC at $6316."
  },
  {
   "address": 25375,
   "type": "line",
   "text": "The low bytes of the 17 extras' names' addresses, filled by extras_names_init (22 bytes reserved)."
  },
  {
   "address": 25397,
   "type": "line",
   "text": "The high bytes of the names' addresses."
  },
  {
   "address": 25419,
   "type": "line",
   "text": "Gives the extra whose number is next in the disc sequence (disc_order), through a chain of comparisons to one routine per extra ($63C6-$64D3)."
  },
  {
   "address": 25542,
   "type": "line",
   "text": "Extra 0, Turbo Boost: its icon lit (top panel sprite 0, red), vertical_limit 4, horizontal_limit 3."
  },
  {
   "address": 25561,
   "type": "line",
   "text": "Extra 1, Single Lazer: its icon lit (blue), single_laser on."
  },
  {
   "address": 25572,
   "type": "line",
   "text": "Extra 2, Smart Missile: its icon lit (purple), armed."
  },
  {
   "address": 25583,
   "type": "line",
   "text": "Extra 3, Extra Score: adds the level halved plus one, in hundreds, to the score."
  },
  {
   "address": 25599,
   "type": "line",
   "text": "Extra 4, Bullet Spray: its icon lit (green), shots go both ways."
  },
  {
   "address": 25610,
   "type": "line",
   "text": "Extra 5, Electro Shield: its icon lit (orange), shield_on, its meter full and the Hyper Brakes cancelled (their meter cleared, their icon dark), the meter sprite filled, the input rate back to every 2 runs of irq_top."
  },
  {
   "address": 25654,
   "type": "line",
   "text": "Extra 6, Extended Play: 20 more seconds (the tens digit up by two, at most 9)."
  },
  {
   "address": 25673,
   "type": "line",
   "text": "Extra 7, Twin Laser Set: its icon lit (bottom panel sprite 0, cyan), twin_laser on."
  },
  {
   "address": 25684,
   "type": "line",
   "text": "Extra 8, Hyperspace: hyperspace on and its sound."
  },
  {
   "address": 25700,
   "type": "line",
   "text": "Extra 9, Molecule Bomb: its icon lit (bottom panel sprite 1, light blue), armed."
  },
  {
   "address": 25711,
   "type": "line",
   "text": "Extra 10, Faulty Disc: faulty_disc on, so every wall kills."
  },
  {
   "address": 25717,
   "type": "line",
   "text": "Extra 11, Fuel Injection: vertical_limit 5."
  },
  {
   "address": 25722,
   "type": "line",
   "text": "Extra 12, Bonus Ball: one more life (at most 127)."
  },
  {
   "address": 25731,
   "type": "line",
   "text": "Extra 13, Hyper Brakes: brakes_on, its icon lit (light green), the Electro Shield cancelled (its icon dark), its meter full, the meter sprite filled, and the controls read every run of irq_top (input rate 1)."
  },
  {
   "address": 25775,
   "type": "line",
   "text": "Never reached: a second RTS after the Hyper Brakes' routine."
  },
  {
   "address": 25776,
   "type": "line",
   "text": "Extra 14, Timer Rewind: 40 more seconds (the tens digit up by four, at most 9)."
  },
  {
   "address": 25790,
   "type": "line",
   "text": "Extra 15, Lazer Cooler: cooler_on (no overheating), its icon lit (red)."
  },
  {
   "address": 25801,
   "type": "line",
   "text": "Extra 16, Rainbow Ripple: ripple_on, its icon lit (purple)."
  },
  {
   "address": 25812,
   "type": "line",
   "text": "Saves the bottom two rows and clears them in red (save_rows, its colour operand at $6514 set to 2), and writes LASER OVERHEATED in row 23."
  },
  {
   "address": 25832,
   "type": "line",
   "text": "LASER OVERHEATED, centred in 24 characters."
  },
  {
   "address": 25856,
   "type": "line",
   "text": "Copies the bottom two rows of the screen and their colours ($0798-$07E7) to $608B and $60DB, and clears them: character 0, in the colour its callers write into its own operand at $6514."
  },
  {
   "address": 25876,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $6513, the colour save_rows clears the message rows to: 5 (green) for an extra's name, 2 (red) for LASER OVERHEATED."
  },
  {
   "address": 25886,
   "type": "line",
   "text": "Sets sprites 1-7 exploding, all but the discs and those already exploding, each with 10 points and one off the disc countdown. It does not test sprite_enable, so a slot with no alien in it scores and counts too."
  },
  {
   "address": 25958,
   "type": "line",
   "text": "Clears the meter sprite at $2700 (63 bytes)."
  },
  {
   "address": 25969,
   "type": "line",
   "text": "Fills the meter sprite at $2700 with the 21-byte pattern at $6586, three times."
  },
  {
   "address": 25990,
   "type": "line",
   "text": "Seven rows of the meter sprite (21 bytes), which fill_meter writes three times over the sprite at $2700."
  },
  {
   "address": 26011,
   "type": "line",
   "text": "While the Electro Shield is on, every seventh logic pass clears one more byte of the meter sprite (its count, from 5, has to pass below zero), 63 bytes in about 441 passes; when all 63 are clear the shield ends (icon dark). The Hyper Brakes' meter runs the same way, and when it ends the input rate goes back to every 2 frames."
  },
  {
   "address": 26119,
   "type": "line",
   "text": "Pause: RUN/STOP, or cursor down, left SHIFT, V, N, comma or / (column 7, every row but 2), toggles paused, once per press."
  },
  {
   "address": 26184,
   "type": "line",
   "text": "Iball has died: moves the disc sequence back to its last checkpoint (from the table at $606B) and takes away the extra given there: positions 1 (Single Lazer), 2 (Smart Missile), 4 (Bullet Spray), 8 (Twin Laser Set), 13 (Fuel Injection: vertical_limit back to 4), 18 (Lazer Cooler) and 26 (Rainbow Ripple). The next disc offers it again."
  },
  {
   "address": 26286,
   "type": "line",
   "text": "Each right-hand beam's back, as a column offset (8 beams, two spare bytes)."
  },
  {
   "address": 26296,
   "type": "line",
   "text": "Each right-hand beam's front column."
  },
  {
   "address": 26306,
   "type": "line",
   "text": "Each right-hand beam's length in characters."
  },
  {
   "address": 26316,
   "type": "line",
   "text": "Each right-hand beam's screen row."
  },
  {
   "address": 26326,
   "type": "line",
   "text": "Each right-hand beam's slot: 1 in use."
  },
  {
   "address": 26336,
   "type": "line",
   "text": "Set when a right-hand beam has stopped and is shrinking."
  },
  {
   "address": 26346,
   "type": "line",
   "text": "Each left-hand beam's back, as a column offset."
  },
  {
   "address": 26356,
   "type": "line",
   "text": "Each left-hand beam's front column."
  },
  {
   "address": 26366,
   "type": "line",
   "text": "Each left-hand beam's length."
  },
  {
   "address": 26376,
   "type": "line",
   "text": "Each left-hand beam's screen row."
  },
  {
   "address": 26386,
   "type": "line",
   "text": "Each left-hand beam's slot."
  },
  {
   "address": 26396,
   "type": "line",
   "text": "Set when a left-hand beam is shrinking."
  },
  {
   "address": 26406,
   "type": "line",
   "text": "With the Single Lazer: fires a laser beam the way Iball faces (laser_right or laser_left); with the Twin Laser Set as well, both ways. Each beam takes a free slot of eight."
  },
  {
   "address": 26439,
   "type": "line",
   "text": "Starts a beam to the right of Iball, if a slot is free and the character beside him is not a wall: its row, length, direction and limit. The laser sound plays unless the Rainbow Ripple is on."
  },
  {
   "address": 26497,
   "type": "line",
   "text": "Self-modified: the operand of ADC #$01 at $6780, set by the STA at $6769."
  },
  {
   "address": 26507,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $678A, set by the STA at $6782."
  },
  {
   "address": 26508,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $678A, set by the STA at $6779, the INC at $6787."
  },
  {
   "address": 26534,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $67A5, set by the STA at $676C."
  },
  {
   "address": 26548,
   "type": "line",
   "text": "Starts a beam to the left of Iball, the same way."
  },
  {
   "address": 26606,
   "type": "line",
   "text": "Self-modified: the operand of ADC #$00 at $67ED, set by the STA at $67D6."
  },
  {
   "address": 26616,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $67F7, set by the STA at $67EF."
  },
  {
   "address": 26617,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $67F7, set by the STA at $67E6, the INC at $67F4."
  },
  {
   "address": 26643,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $6812, set by the STA at $67D9."
  },
  {
   "address": 26654,
   "type": "line",
   "text": "Grows or shrinks every right-hand beam (move_beam_right), then the left-hand ones (from $6909)."
  },
  {
   "address": 26670,
   "type": "line",
   "text": "Self-modified: the operand of LDX #$00 at $682D, set by the STX at $6827."
  },
  {
   "address": 26679,
   "type": "line",
   "text": "One logic pass of a right-hand beam: unless a row has just been drawn, clears its characters; then it grows (to eight characters) as it moves right, and once it reaches column $20 or a wall it shrinks from behind until it is gone, when it ends (end_beam_right). Its characters are 4, the laser character. The test at $683B meant to end a beam on a row drawn away never ends one: both of its branches go on."
  },
  {
   "address": 26735,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $686E, set by the STA at $685A."
  },
  {
   "address": 26736,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $686E, set by the STA at $6850, the INC at $685F."
  },
  {
   "address": 26739,
   "type": "line",
   "text": "Self-modified: the operand of CPY #$00 at $6872, set by the STA at $6869."
  },
  {
   "address": 26841,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $68D8, set by the STA at $68C5."
  },
  {
   "address": 26842,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $68D8, set by the STA at $68B8, the INC at $68CD."
  },
  {
   "address": 26860,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $68EB, set by the STA at $68C2."
  },
  {
   "address": 26861,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $68EB, set by the STA at $68B5, the INC at $68CA."
  },
  {
   "address": 26864,
   "type": "line",
   "text": "Self-modified: the operand of CPY #$00 at $68EF, set by the STA at $68D5."
  },
  {
   "address": 26868,
   "type": "line",
   "text": "Frees right-hand beam X."
  },
  {
   "address": 26905,
   "type": "line",
   "text": "Self-modified: the operand of LDX #$00 at $6918, set by the STX at $6912."
  },
  {
   "address": 26912,
   "type": "line",
   "text": "The same for a left-hand beam, moving left to column 8."
  },
  {
   "address": 26968,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6957, set by the STA at $6943, the STA at $6960."
  },
  {
   "address": 26969,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6957, set by the STA at $6939, the INC at $6948, the DEC at $6965."
  },
  {
   "address": 26986,
   "type": "line",
   "text": "Self-modified: the operand of CPY #$00 at $6969, set by the STA at $6952."
  },
  {
   "address": 27088,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $69CF, set by the STA at $69BC, the STA at $69EB."
  },
  {
   "address": 27089,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $69CF, set by the STA at $69AF, the INC at $69C4, the DEC at $69F0."
  },
  {
   "address": 27107,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $69E2, set by the STA at $69B9, the STA at $69F9."
  },
  {
   "address": 27108,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $69E2, set by the STA at $69AC, the INC at $69C1, the DEC at $69FE."
  },
  {
   "address": 27139,
   "type": "line",
   "text": "Self-modified: the operand of CPY #$00 at $6A02, set by the STA at $69CC."
  },
  {
   "address": 27143,
   "type": "line",
   "text": "Frees left-hand beam X."
  },
  {
   "address": 27164,
   "type": "line",
   "text": "The ripple's state: running, its column, its rows of height, its first and last rows, its direction (1 down), and whether it is shrinking."
  },
  {
   "address": 27165,
   "type": "line",
   "text": "The ripple: the band's column (Iball's column less 2)."
  },
  {
   "address": 27166,
   "type": "line",
   "text": "The ripple: its height in rows."
  },
  {
   "address": 27167,
   "type": "line",
   "text": "The ripple: its first row."
  },
  {
   "address": 27168,
   "type": "line",
   "text": "The ripple: its last row."
  },
  {
   "address": 27169,
   "type": "line",
   "text": "The ripple: its direction: 1 down, 0 up."
  },
  {
   "address": 27170,
   "type": "line",
   "text": "The ripple: set while it shrinks."
  },
  {
   "address": 27171,
   "type": "line",
   "text": "With the Rainbow Ripple, starts a ripple if none is running: a band seven characters wide, from two columns left of Iball's to four right of it, going up, or down when the last push was down; and its sound."
  },
  {
   "address": 27296,
   "type": "line",
   "text": "One logic pass of the ripple: puts the wall colour back where it was, clears its characters (5), grows the band by a row (up to nine rows) as it moves, writing character 5 in the empty cells with the row count as colour, so the rows flash in many colours; ends at the screen's top or bottom."
  },
  {
   "address": 27365,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6AE4, set by the STA at $6AC7, the STA at $6AF0."
  },
  {
   "address": 27366,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6AE4, set by the STA at $6ABD, the INC at $6AD2, the INC at $6AF5."
  },
  {
   "address": 27395,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $6B02, set by the STA at $6ACD, the STA at $6B1A."
  },
  {
   "address": 27396,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $6B02, set by the STA at $6AB7, the INC at $6AD8, the INC at $6B1F."
  },
  {
   "address": 27407,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6B0E, set by the STA at $6ACA, the STA at $6B25."
  },
  {
   "address": 27408,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6B0E, set by the STA at $6AB4, the INC at $6AD5, the STA at $6B2B."
  },
  {
   "address": 27546,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $6B99, set by the STA at $6B80, the STA at $6BB3."
  },
  {
   "address": 27547,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $6B99, set by the STA at $6B6E, the INC at $6B8B, the INC at $6BB8."
  },
  {
   "address": 27556,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6BA3, set by the STA at $6B83, the STA at $6BBE."
  },
  {
   "address": 27557,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6BA3, set by the STA at $6B71, the INC at $6B8E, the STA at $6BC4."
  },
  {
   "address": 27560,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6BA7, set by the STA at $6B86, the STA at $6BCD."
  },
  {
   "address": 27561,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6BA7, set by the STA at $6B77, the INC at $6B91, the INC at $6BD2."
  },
  {
   "address": 27609,
   "type": "line",
   "text": "Ends the ripple: clears its table at $6A1C."
  },
  {
   "address": 27688,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6C27, set by the STA at $6C0A, the STA at $6C33."
  },
  {
   "address": 27689,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6C27, set by the STA at $6C00, the INC at $6C15, the DEC at $6C38."
  },
  {
   "address": 27718,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $6C45, set by the STA at $6C10, the STA at $6C5D."
  },
  {
   "address": 27719,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $6C45, set by the STA at $6BFA, the INC at $6C1B, the DEC at $6C62."
  },
  {
   "address": 27730,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6C51, set by the STA at $6C0D, the STA at $6C68."
  },
  {
   "address": 27731,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6C51, set by the STA at $6BF7, the INC at $6C18, the STA at $6C6E."
  },
  {
   "address": 27869,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $AD9C at $6CDC, set by the STA at $6CC3, the STA at $6CF6."
  },
  {
   "address": 27870,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $AD9C at $6CDC, set by the STA at $6CB1, the INC at $6CCE, the DEC at $6CFB."
  },
  {
   "address": 27879,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6CE6, set by the STA at $6CC6, the STA at $6D01."
  },
  {
   "address": 27880,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6CE6, set by the STA at $6CB4, the INC at $6CD1, the STA at $6D07."
  },
  {
   "address": 27883,
   "type": "line",
   "text": "Self-modified: the low byte of the address in STA $AD9C at $6CEA, set by the STA at $6CC9, the STA at $6D10."
  },
  {
   "address": 27884,
   "type": "line",
   "text": "Self-modified: the high byte of the address in STA $AD9C at $6CEA, set by the STA at $6CBA, the INC at $6CD4, the DEC at $6D15."
  },
  {
   "address": 27932,
   "type": "line",
   "text": "The title's choice: 1 music, 0 sound effects."
  },
  {
   "address": 27933,
   "type": "line",
   "text": "The game's first instruction, and where the end of every game comes back to. Installs the title interrupt (four times), starts the music, clears the screen, writes the title page and its sprites, then says \"IBALL!\" (sample 0, pitch $8C), waits for it, says it again four times with short waits between, waits, says it once more at a lower pitch ($5A), and waits. Then the title loop: fire or the column-1 keys (W, R, Y, I, P, * or left-arrow) start a game, unless a sample is playing; the music stops when music was not chosen."
  },
  {
   "address": 28071,
   "type": "line",
   "text": "Installs the title screen's interrupt: CIA 1's interrupts off (with zero page $7F, as in init_game_irq), its timer stopped, a raster interrupt at line 0 going to title_irq ($6DD7), $01 = $35. Its read of $D0CD (a mirror of $D00D) does nothing."
  },
  {
   "address": 28119,
   "type": "line",
   "text": "The title screen's interrupt, once a frame: runs the music driver, selects the character set at $3800, multicolour text off, border and background black, extended colour off, 25 rows, fine scroll 3. Reads 1 (music: music_flag 1) and 2 (effects: 0) and shows MUSIC or FX in the bottom row. Steps sprite 4's colour (Glow Ball's glow). Plays a speech sample on a key: cursor down, left SHIFT, X, V, N, comma or / say sample 0 (\"IBALL!\"), Z, B or right SHIFT sample 1, full stop, right SHIFT or SPACE sample 2. The stick in port 2 sets the pitch: up raises it, down lowers it, through the CIA timer value at $C021 from $5A to $FA."
  },
  {
   "address": 28369,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves A here with the STA at $6DD7 on entry, and the LDA #$00 at $6ED0 puts it back on the way out."
  },
  {
   "address": 28371,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves X here with the STX at $6DDA on entry, and the LDX #$00 at $6ED2 puts it back on the way out."
  },
  {
   "address": 28373,
   "type": "line",
   "text": "Self-modified: the interrupt handler saves Y here with the STY at $6DDD on entry, and the LDY #$00 at $6ED4 puts it back on the way out."
  },
  {
   "address": 28375,
   "type": "line",
   "text": "Puts the six sprites of the title screen: two Iballs beside the title and the four friends below RESCUE, with their colours, multicolours and pointers ($94, $97, $F1-$F4)."
  },
  {
   "address": 28520,
   "type": "line",
   "text": "Writes the title page: FIREBIRD SOFTWARE, PRESENTS, IBALL, COMMODORE VERSION BY ANDREW BETTS, RESCUE, PRESS FIRE TO PLAY, the four friends' names and 1 MUSIC ON 2 FX ON, each in its colour."
  },
  {
   "address": 28619,
   "type": "line",
   "text": "One byte, $60, after title_text's last JMP; nothing reads it."
  },
  {
   "address": 28620,
   "type": "line",
   "text": "FIREBIRD SOFTWARE, the title page's first line."
  },
  {
   "address": 28637,
   "type": "line",
   "text": "PRESENTS."
  },
  {
   "address": 28645,
   "type": "line",
   "text": "IBALL."
  },
  {
   "address": 28650,
   "type": "line",
   "text": "COMMODORE VERSION  BY ANDREW BETTS."
  },
  {
   "address": 28684,
   "type": "line",
   "text": "RESCUE."
  },
  {
   "address": 28690,
   "type": "line",
   "text": "PRESS FIRE TO PLAY."
  },
  {
   "address": 28708,
   "type": "line",
   "text": "The rest of title_text: the four friends' names under their sprites and the line 1 MUSIC ON 2 FX ON."
  },
  {
   "address": 28799,
   "type": "line",
   "text": "1 MUSIC ON  2 FX ON, the title's bottom line."
  },
  {
   "address": 28819,
   "type": "line",
   "text": "MUSIC, shown in the bottom row when music is chosen."
  },
  {
   "address": 28824,
   "type": "line",
   "text": "FX, padded to five characters, shown when sound effects are chosen."
  },
  {
   "address": 29184,
   "type": "line",
   "text": "Three 128-byte frames of the 16 animated characters ($DE-$ED in the playfield set), which animate_chars copies to $36F0 in turn."
  },
  {
   "address": 29568,
   "type": "line",
   "text": "The playfield's 40 tiles, 16 bytes each: four rows of four character numbers. Levels are built from them by build_level_map. Tile 33 is empty (all character 0) and makes up most of every level; tiles 28-32 are the same block, the 16 animated characters ($DE-$ED), and no level uses tile 32."
  },
  {
   "address": 30208,
   "type": "line",
   "text": "Level 1's tile list: 60 rows of six tile numbers (360 bytes), the top of the level first."
  },
  {
   "address": 30568,
   "type": "line",
   "text": "Level 2's tile list, 60 rows of six tiles."
  },
  {
   "address": 30928,
   "type": "line",
   "text": "Level 3's tile list, 60 rows of six tiles."
  },
  {
   "address": 31288,
   "type": "line",
   "text": "Level 4's tile list, 60 rows of six tiles; Lover Ball is rescued after it."
  },
  {
   "address": 31648,
   "type": "line",
   "text": "Level 5's tile list, 60 rows of six tiles."
  },
  {
   "address": 32008,
   "type": "line",
   "text": "Level 6's tile list, 60 rows of six tiles."
  },
  {
   "address": 32368,
   "type": "line",
   "text": "Level 7's tile list, 60 rows of six tiles."
  },
  {
   "address": 32728,
   "type": "line",
   "text": "Level 8's tile list, 60 rows of six tiles; Eddy Ball is rescued after it."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "Level 8's tile list continued past $8000."
  },
  {
   "address": 33088,
   "type": "line",
   "text": "Level 9's tile list, 60 rows of six tiles."
  },
  {
   "address": 33448,
   "type": "line",
   "text": "Level 10's tile list, 60 rows of six tiles."
  },
  {
   "address": 33808,
   "type": "line",
   "text": "Level 11's tile list, 60 rows of six tiles."
  },
  {
   "address": 34168,
   "type": "line",
   "text": "Level 12's tile list, 60 rows of six tiles; Glow Ball is rescued after it."
  },
  {
   "address": 34528,
   "type": "line",
   "text": "Level 13's tile list, 60 rows of six tiles."
  },
  {
   "address": 34888,
   "type": "line",
   "text": "Level 14's tile list, 60 rows of six tiles."
  },
  {
   "address": 35248,
   "type": "line",
   "text": "Level 15's tile list, 60 rows of six tiles."
  },
  {
   "address": 35608,
   "type": "line",
   "text": "Level 16's tile list, 60 rows of six tiles; No Ball is rescued after it, and the game ends."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "Speech sample 0, \"IBALL!\": 3 KB of four-bit volumes, two to a byte, played low half first through the SID's volume register by sample_nmi."
  },
  {
   "address": 41984,
   "type": "line",
   "text": "The second kilobyte of sample 0 (\"IBALL!\")."
  },
  {
   "address": 43008,
   "type": "line",
   "text": "The third kilobyte of sample 0 (\"IBALL!\")."
  },
  {
   "address": 44032,
   "type": "line",
   "text": "Speech sample 1, \"OH NO!\": 2.75 KB of four-bit volumes, two to a byte, played when Iball dies."
  },
  {
   "address": 44444,
   "type": "line",
   "text": "A byte of sample 1 (\"OH NO!\"). The self-modifying routines are assembled with $AD9C as a placeholder address, written over before they run, which is why the disassembler names it."
  },
  {
   "address": 44508,
   "type": "line",
   "text": "Sample 1 (\"OH NO!\") continued."
  },
  {
   "address": 45056,
   "type": "line",
   "text": "The second kilobyte of sample 1 (\"OH NO!\")."
  },
  {
   "address": 46080,
   "type": "line",
   "text": "The last three-quarters of a kilobyte of sample 1 (\"OH NO!\")."
  },
  {
   "address": 46848,
   "type": "line",
   "text": "Speech sample 2, \"GAME OVER!\": 2.25 KB of four-bit volumes, two to a byte. Sample number 3 plays the same bytes."
  },
  {
   "address": 47872,
   "type": "line",
   "text": "The second kilobyte of sample 2 (\"GAME OVER!\")."
  },
  {
   "address": 48896,
   "type": "line",
   "text": "The last page of sample 2 (\"GAME OVER!\")."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "One byte, $3F, before the speech code; nothing reads it."
  },
  {
   "address": 49153,
   "type": "line",
   "text": "Starts the sample whose first and last pages are in sample_first and sample_end: points the player's two reads ($C1A9/$C1AA, $C1B4/$C1B5) at the first page, sets CIA 2's timer A to the pitch (its own operand at $C021, $5A-$FA cycles) and its interrupt on, so the timer raises an NMI every pitch cycles, and sets sample_busy. Its INC $0185,X changes a byte of the stack page and does nothing for the sample."
  },
  {
   "address": 49185,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$8C at $C020, the speech pitch: CIA 2 timer A's count, so the cycles between two of the sample's four-bit volumes. The game sets $8C and $5A; on the title screen the stick moves it between $5A and $FA."
  },
  {
   "address": 49210,
   "type": "line",
   "text": "Two zero bytes between sample_start and its variables; nothing reads them."
  },
  {
   "address": 49212,
   "type": "line",
   "text": "The playing sample's first page."
  },
  {
   "address": 49213,
   "type": "line",
   "text": "The playing sample's end page."
  },
  {
   "address": 49214,
   "type": "line",
   "text": "Ends the sample: CIA 2's interrupts off, its timer A stopped (one-shot mode), the KERNAL's NMI vector at $0318 set to $FE47 (unused while the KERNAL is banked out) and sample_busy cleared."
  },
  {
   "address": 49246,
   "type": "line",
   "text": "Set while a speech sample plays."
  },
  {
   "address": 49247,
   "type": "line",
   "text": "256 bytes, each its index's high four bits, built by make_nybble_table before every sample."
  },
  {
   "address": 49503,
   "type": "line",
   "text": "Fills the 256 bytes at $C05F with each index's high four bits (byte N holds N / 16): the table the player turns a sample byte's upper half into a volume with. It means to skip the work when the table is there already, but it tests the last byte for $10 where the table holds $0F, so it builds it on every call."
  },
  {
   "address": 49539,
   "type": "line",
   "text": "make_nybble_table's count, 0-255."
  },
  {
   "address": 49540,
   "type": "line",
   "text": "Starts a sample: the NMI vector at $FFFA to sample_nmi, the high-nybble table, then sample_start."
  },
  {
   "address": 49550,
   "type": "line",
   "text": "Points the hardware NMI vector at sample_nmi ($C199)."
  },
  {
   "address": 49561,
   "type": "line",
   "text": "The sample player, on every CIA 2 timer NMI: each sample byte holds two four-bit volumes, played one per NMI through the SID's volume register ($D418), the lower half first and then the upper (looked up in the table at $C05F), when the pointer moves on. At the end page it stops (sample_stop). The half it plays is the low bit of its own operand at $C1A3, counted up each NMI."
  },
  {
   "address": 49571,
   "type": "line",
   "text": "Self-modified: the operand of LDA #$00 at $C1A2, set by the INC at $C19F."
  },
  {
   "address": 49577,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $C05F at $C1A8, set by the STA at $C003, the STA at $C01A, the INC at $C1C0."
  },
  {
   "address": 49578,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $C05F at $C1A8, set by the STA at $C012, the INC at $C1C5."
  },
  {
   "address": 49588,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $C05F at $C1B3, set by the STA at $C006, the STA at $C01D, the INC at $C1BD."
  },
  {
   "address": 49589,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $C05F at $C1B3, set by the STA at $C015, the INC at $C1C8."
  },
  {
   "address": 49626,
   "type": "line",
   "text": "17 values from $5A to $E3, each about 6 % above the one before (a semitone), within the range of sample_pitch. No instruction reads them: perhaps the speech was once played along a scale."
  },
  {
   "address": 49643,
   "type": "line",
   "text": "The first page of each speech sample: $A0, $AC, $B7, and $B7 again for number 3."
  },
  {
   "address": 49647,
   "type": "line",
   "text": "The page each sample stops at: $AC, $B7, $C0, $C0."
  },
  {
   "address": 49651,
   "type": "line",
   "text": "Plays speech sample A (0 \"IBALL!\", 1 \"OH NO!\", 2 \"GAME OVER!\"): takes its first and end pages from sample_first_pages and sample_end_pages and starts it (play_sample)."
  },
  {
   "address": 49670,
   "type": "line",
   "text": "Three key numbers ($38, $3B, $08: the KERNAL's numbers for keys 1, 2 and 3) for sample_test."
  },
  {
   "address": 49673,
   "type": "line",
   "text": "A test program for the speech that nothing calls: loops for ever, showing sample_busy in the border and counting the background colour, and says sample 0, 1 or 2 when key 1, 2 or 3 is pressed (read from the KERNAL's last key, $C5), once per press."
  },
  {
   "address": 49733,
   "type": "line",
   "text": "sample_test's flag: a key is still held."
  },
  {
   "address": 49734,
   "type": "line",
   "text": "A stale copy of the game's code as it once stood at $4246-$42FF (the end of panel_sprites_bottom's older version and the start of new_game), never run here."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "The music driver's vibrato state for the three voices: the current step ($E000-$E002), the depth ($E003-$E005) and the direction ($E006-$E008)."
  },
  {
   "address": 57347,
   "type": "line",
   "text": "Each voice's vibrato depth."
  },
  {
   "address": 57350,
   "type": "line",
   "text": "Each voice's vibrato direction."
  },
  {
   "address": 57353,
   "type": "line",
   "text": "The music driver, called once a frame by the title screen and, in play, when music was chosen. Its state byte music_state says what to do: $00 play; $40 reset the three voices and start from the beginning; $C0 silence the voices, then stay stopped ($80). Playing: for each voice, steps its track (a list of pattern numbers) and its pattern (notes with lengths, instrument changes and slides), and each frame applies the instrument's effects: vibrato, pulse-width sweep, arpeggio, filter sweep and others."
  },
  {
   "address": 57772,
   "type": "line",
   "text": "A note ending: when the pattern's bit 5 is clear, the note's length has run out and the driver's tempo counter is at 0, releases the voice (attack, sustain and release 0) and changes the border colour (INC $D020). None of these instructions ran in the play recorded for the code map."
  },
  {
   "address": 58050,
   "type": "line",
   "text": "Self-modified: the operand of CMP #$0E at $E2C1, set by the STA at $E2A9."
  },
  {
   "address": 58076,
   "type": "line",
   "text": "Self-modified: the operand of CMP #$08 at $E2DB, set by the STA at $E29F."
  },
  {
   "address": 58428,
   "type": "line",
   "text": "Steps the driver's three-frame counter (for the arpeggio), and returns."
  },
  {
   "address": 58437,
   "type": "line",
   "text": "The note frequency table at $E447 read one note down: the slide at $E228 reads entries at $E445 and $E446 plus twice the note, which are the previous note's. These two addresses are only that table's base minus 2, inside the code before it."
  },
  {
   "address": 58438,
   "type": "line",
   "text": "The RTS that ends music_play. The label here is the note table base minus 1 (see $E445): the slide reads the previous note's high byte through it."
  },
  {
   "address": 58439,
   "type": "line",
   "text": "The music driver's note table: 97 frequencies, low byte then high, from note 0 up."
  },
  {
   "address": 58440,
   "type": "line",
   "text": "The note table read one byte on: each note's high byte."
  },
  {
   "address": 58504,
   "type": "line",
   "text": "The note table continued."
  },
  {
   "address": 58633,
   "type": "line",
   "text": "The SID register offsets of the three voices: 0, 7 and 14."
  },
  {
   "address": 58636,
   "type": "line",
   "text": "The music driver's working variables, three bytes each for the three voices: the voice being worked on ($E50C), each voice's place in its track ($E50D) and in its pattern ($E510), the note's frames left ($E513), the pattern byte ($E516), the gate and waveform ($E519), the note ($E51C), the frequency ($E54B high, $E54E low), the pulse width ($E55B, $E55E), the transpose ($E571), the tempo counters ($E546-$E548), the state ($E54A) and the arpeggio's three offsets ($E574-$E576)."
  },
  {
   "address": 58637,
   "type": "line",
   "text": "Each voice's place in its track."
  },
  {
   "address": 58640,
   "type": "line",
   "text": "Each voice's place in its pattern."
  },
  {
   "address": 58643,
   "type": "line",
   "text": "Each voice's frames left in its note."
  },
  {
   "address": 58646,
   "type": "line",
   "text": "Each voice's current pattern byte (its length and flags)."
  },
  {
   "address": 58649,
   "type": "line",
   "text": "Each voice's waveform and gate."
  },
  {
   "address": 58652,
   "type": "line",
   "text": "Each voice's note, transposed."
  },
  {
   "address": 58655,
   "type": "line",
   "text": "Starts the music: full volume ($D418 = $1F) and the driver's state to \"start\" ($40)."
  },
  {
   "address": 58666,
   "type": "line",
   "text": "Stops the music: the driver's state to \"silence and stop\" ($C0)."
  },
  {
   "address": 58672,
   "type": "line",
   "text": "The music driver's variables after music_off: more of them, three bytes a voice (see music_vars)."
  },
  {
   "address": 58679,
   "type": "line",
   "text": "Each voice's gate mask ($FF, or $FE to release)."
  },
  {
   "address": 58682,
   "type": "line",
   "text": "Work: the pattern byte being decoded."
  },
  {
   "address": 58684,
   "type": "line",
   "text": "Work: the voice number being played."
  },
  {
   "address": 58685,
   "type": "line",
   "text": "Work: the instrument's waveform."
  },
  {
   "address": 58686,
   "type": "line",
   "text": "Work: the vibrato's speed."
  },
  {
   "address": 58687,
   "type": "line",
   "text": "Work: the pulse sweep's speed."
  },
  {
   "address": 58688,
   "type": "line",
   "text": "Each voice's byte cleared at a note's start; nothing else uses it."
  },
  {
   "address": 58691,
   "type": "line",
   "text": "Each voice's pulse sweep direction."
  },
  {
   "address": 58694,
   "type": "line",
   "text": "The tempo counter: frames to the next step."
  },
  {
   "address": 58695,
   "type": "line",
   "text": "The tempo: frames between steps."
  },
  {
   "address": 58696,
   "type": "line",
   "text": "A long counter, from $70; its wrap holds the tempo for a frame."
  },
  {
   "address": 58697,
   "type": "line",
   "text": "Work: the instrument's offset in the tables (number times 8)."
  },
  {
   "address": 58698,
   "type": "line",
   "text": "The music driver's state: $00 playing, $40 start, $C0 stop, $80 stopped."
  },
  {
   "address": 58699,
   "type": "line",
   "text": "Each voice's frequency, high byte."
  },
  {
   "address": 58702,
   "type": "line",
   "text": "Each voice's frequency, low byte."
  },
  {
   "address": 58705,
   "type": "line",
   "text": "Each voice's slide amount from the pattern."
  },
  {
   "address": 58708,
   "type": "line",
   "text": "Each voice's slide flag from the pattern."
  },
  {
   "address": 58711,
   "type": "line",
   "text": "Work: the instrument's effect flags."
  },
  {
   "address": 58713,
   "type": "line",
   "text": "Work: the pattern's note byte."
  },
  {
   "address": 58715,
   "type": "line",
   "text": "Each voice's pulse width, low byte."
  },
  {
   "address": 58718,
   "type": "line",
   "text": "Each voice's pulse width, high byte."
  },
  {
   "address": 58721,
   "type": "line",
   "text": "Each voice's count of first frames left."
  },
  {
   "address": 58724,
   "type": "line",
   "text": "Each voice's frames since its note began."
  },
  {
   "address": 58726,
   "type": "line",
   "text": "The voice-3 noise burst's frame count."
  },
  {
   "address": 58730,
   "type": "line",
   "text": "The filter cutoff each voice's instrument sweeps."
  },
  {
   "address": 58733,
   "type": "line",
   "text": "Each voice's place in its drum table."
  },
  {
   "address": 58736,
   "type": "line",
   "text": "The arpeggio's step, 0-2, stepped each frame."
  },
  {
   "address": 58737,
   "type": "line",
   "text": "Each voice's transpose from its track."
  },
  {
   "address": 58740,
   "type": "line",
   "text": "The arpeggio's first offset, 0."
  },
  {
   "address": 58741,
   "type": "line",
   "text": "The arpeggio's second offset."
  },
  {
   "address": 58742,
   "type": "line",
   "text": "The arpeggio's third offset."
  },
  {
   "address": 58743,
   "type": "line",
   "text": "The arpeggios' two upper notes, in semitones above the note played, a pair for each arpeggio number: 24 and 0, 7 and 12, 4 and 9, 5 and 8, 5 and 0, 0 and $FA. An instrument with the arpeggio flag names one in its second half."
  },
  {
   "address": 58744,
   "type": "line",
   "text": "The arpeggio table read one byte on: each pair's second value."
  },
  {
   "address": 58755,
   "type": "line",
   "text": "Music pattern 21, 12 notes, ending $FF; played by voice 3."
  },
  {
   "address": 58781,
   "type": "line",
   "text": "Music pattern 26, 8 notes, ending $FF; played by voice 3."
  },
  {
   "address": 58803,
   "type": "line",
   "text": "Music pattern 22, 10 notes, ending $FF; played by voice 2."
  },
  {
   "address": 58829,
   "type": "line",
   "text": "Music pattern 23, 10 notes, ending $FF; played by voice 2."
  },
  {
   "address": 58854,
   "type": "line",
   "text": "Music pattern 24, 7 notes, ending $FF; played by voice 2."
  },
  {
   "address": 58874,
   "type": "line",
   "text": "Music pattern 25, 7 notes, ending $FF; played by voice 2."
  },
  {
   "address": 58892,
   "type": "line",
   "text": "Instrument 2's drum table: waveform and pitch steps, one a frame, ending $85."
  },
  {
   "address": 58917,
   "type": "line",
   "text": "Music pattern 14, 23 notes and 19 rests, ending $FF; played by voice 1."
  },
  {
   "address": 58991,
   "type": "line",
   "text": "Music pattern 15, 4 notes and 3 rests, ending $FF; played by voice 3."
  },
  {
   "address": 59004,
   "type": "line",
   "text": "Music pattern 20, 4 notes and 3 rests, ending $FF; played by voice 3."
  },
  {
   "address": 59017,
   "type": "line",
   "text": "Music pattern 16, 6 notes, ending $FF; played by voice 2."
  },
  {
   "address": 59032,
   "type": "line",
   "text": "17 bytes laid out like a pattern, ending $FF, that no pattern pointer names: never read."
  },
  {
   "address": 59049,
   "type": "line",
   "text": "Instrument 6's drum table, ending $85, then ten zero bytes."
  },
  {
   "address": 59078,
   "type": "line",
   "text": "Music pattern 18, 5 notes, ending $FF; played by voice 3."
  },
  {
   "address": 59092,
   "type": "line",
   "text": "Music pattern 19, 10 notes and 2 rests, ending $FF; played by voice 3."
  },
  {
   "address": 59120,
   "type": "line",
   "text": "Music pattern 17, 4 notes, ending $FF; played by voice 3."
  },
  {
   "address": 59130,
   "type": "line",
   "text": "17 bytes laid out like a drum table, ending $85, that no instrument names: never read."
  },
  {
   "address": 59147,
   "type": "line",
   "text": "The music's 18 instruments, eight bytes each: pulse width low and high, waveform, attack/decay, sustain/release, vibrato (depth and speed), pulse sweep speed and effect flags: bit 2 a different waveform for the first frames, 3 a drum table, 4 the arpeggio, 5 the filter sweep, 6 a different pitch for the first frames, 7 a noise burst on voice 3."
  },
  {
   "address": 59148,
   "type": "line",
   "text": "The instruments read from their byte 1: pulse width high."
  },
  {
   "address": 59149,
   "type": "line",
   "text": "The instruments read from their byte 2: waveform."
  },
  {
   "address": 59150,
   "type": "line",
   "text": "The instruments read from their byte 3: attack/decay."
  },
  {
   "address": 59151,
   "type": "line",
   "text": "The instruments read from their byte 4: sustain/release."
  },
  {
   "address": 59152,
   "type": "line",
   "text": "The instruments read from their byte 5: vibrato."
  },
  {
   "address": 59153,
   "type": "line",
   "text": "The instruments read from their byte 6: pulse sweep speed."
  },
  {
   "address": 59154,
   "type": "line",
   "text": "The instruments read from byte 7, their effect flags (the same byte as inst_flags, through another base)."
  },
  {
   "address": 59218,
   "type": "line",
   "text": "The instruments' first halves continued."
  },
  {
   "address": 59291,
   "type": "line",
   "text": "Music pattern 33, 9 notes and 2 rests, ending $FF; played by voice 1."
  },
  {
   "address": 59315,
   "type": "line",
   "text": "The 18 instruments' second eight bytes, read by the effects their flags select: a drum table's address (or the arpeggio number, or the first frames' pitch and waveform), the starting pulse width, the pulse sweep's two limits (one in each half of a byte), the filter's resonance and its sweep step."
  },
  {
   "address": 59316,
   "type": "line",
   "text": "The instruments' second half, byte 1: a drum table's high byte, or the first frames' waveform."
  },
  {
   "address": 59318,
   "type": "line",
   "text": "The instruments' second half, byte 3: the starting pulse width's low byte."
  },
  {
   "address": 59320,
   "type": "line",
   "text": "The instruments' second half, byte 5: the pulse sweep's two limits."
  },
  {
   "address": 59321,
   "type": "line",
   "text": "The instruments' second half, byte 6: the filter's resonance and routing ($D417)."
  },
  {
   "address": 59322,
   "type": "line",
   "text": "The instruments' second half, byte 7: the filter sweep's step."
  },
  {
   "address": 59386,
   "type": "line",
   "text": "The instruments' second halves continued."
  },
  {
   "address": 59459,
   "type": "line",
   "text": "The three voices' track addresses, low bytes then high: $E8AB, $E8DA and $E955."
  },
  {
   "address": 59462,
   "type": "line",
   "text": "The three tracks' addresses, high bytes."
  },
  {
   "address": 59465,
   "type": "line",
   "text": "The 35 patterns' addresses, low bytes ($E849) then high ($E86C)."
  },
  {
   "address": 59500,
   "type": "line",
   "text": "The 35 patterns' addresses, high bytes."
  },
  {
   "address": 59535,
   "type": "line",
   "text": "Music pattern 34, 9 notes and 4 rests, ending $FF; played by voice 1."
  },
  {
   "address": 59563,
   "type": "line",
   "text": "The track of voice 1: 46 pattern numbers, with transposes ($80 plus the step), ending $FF."
  },
  {
   "address": 59610,
   "type": "line",
   "text": "The track of voice 2: 122 pattern numbers, with transposes ($80 plus the step), ending $FF."
  },
  {
   "address": 59733,
   "type": "line",
   "text": "The track of voice 3: 178 pattern numbers, with transposes ($80 plus the step), ending $FF."
  },
  {
   "address": 59912,
   "type": "line",
   "text": "Music pattern 0, no notes, 1 rest, ending $FF; played by voice 1 and 2 and 3."
  },
  {
   "address": 59914,
   "type": "line",
   "text": "Music pattern 2, 22 notes and 1 rest, ending $FF; played by voice 2."
  },
  {
   "address": 59962,
   "type": "line",
   "text": "Music pattern 29, 23 notes, ending $FF; played by voice 2."
  },
  {
   "address": 60015,
   "type": "line",
   "text": "Music pattern 1 (also pattern 3), 7 notes, ending $FF; played by voice 2."
  },
  {
   "address": 60034,
   "type": "line",
   "text": "Music pattern 5, 8 notes, ending $FF; played by voice 2."
  },
  {
   "address": 60056,
   "type": "line",
   "text": "Each voice's current instrument, between patterns 5 and 4 in memory; the driver starts them at 17."
  },
  {
   "address": 60059,
   "type": "line",
   "text": "Music pattern 4, 13 notes, ending $FF; played by voice 2."
  },
  {
   "address": 60092,
   "type": "line",
   "text": "Music pattern 6, 9 notes, ending $FF; played by voice 2."
  },
  {
   "address": 60113,
   "type": "line",
   "text": "Music pattern 7, 13 notes, ending $FF; played by voice 2."
  },
  {
   "address": 60148,
   "type": "line",
   "text": "Music pattern 8, 48 notes and 1 rest, ending $FF; played by voice 3."
  },
  {
   "address": 60247,
   "type": "line",
   "text": "Music pattern 9, 44 notes and 2 rests, ending $FF; played by voice 3."
  },
  {
   "address": 60338,
   "type": "line",
   "text": "Music pattern 12, 45 notes and 1 rest, ending $FF; played by voice 3."
  },
  {
   "address": 60430,
   "type": "line",
   "text": "Music pattern 13, 21 notes and 2 rests, ending $FF; played by voice 3."
  },
  {
   "address": 60475,
   "type": "line",
   "text": "Music pattern 10, 12 notes, ending $FF; played by voice 1."
  },
  {
   "address": 60504,
   "type": "line",
   "text": "Music pattern 11, 44 notes, ending $FF; played by voice 1."
  },
  {
   "address": 60594,
   "type": "line",
   "text": "Music pattern 27, 27 notes and 4 rests, ending $FF; played by voice 1."
  },
  {
   "address": 60654,
   "type": "line",
   "text": "Music pattern 31, 1 note, ending $FF; played by voice 1."
  },
  {
   "address": 60658,
   "type": "line",
   "text": "Music pattern 28, 8 notes, ending $FF; played by voice 1."
  },
  {
   "address": 60661,
   "type": "line",
   "text": "Music pattern 32, 7 notes, ending $FF; played by voice 1."
  },
  {
   "address": 60676,
   "type": "line",
   "text": "Music pattern 30, 34 notes and 2 rests, ending $FF; played by voice 1."
  },
  {
   "address": 60747,
   "type": "line",
   "text": "Five bytes before the effects player's requests: $FF and four zeros, which no instruction reads."
  },
  {
   "address": 60752,
   "type": "line",
   "text": "The three voices' effect requests: $40 plus a number starts that effect, $FF is idle."
  },
  {
   "address": 60753,
   "type": "line",
   "text": "Voice 2's effect request."
  },
  {
   "address": 60754,
   "type": "line",
   "text": "Voice 3's effect request."
  },
  {
   "address": 60755,
   "type": "line",
   "text": "A jump to effects_stop, the effects player's second entry. The game never calls it."
  },
  {
   "address": 60758,
   "type": "line",
   "text": "The sound effects player, called once a frame in play when effects were chosen. Each voice takes requests in its byte at $ED50-$ED52: bit 7 set is idle, $40 plus a number starts that effect (effect_start), and anything else runs the effect: a frequency that slides up or down by a step that itself changes, by a script of steps (the scripts' addresses at $EF96/$EF9E), with its waveform and its gate held for a length, then the voice off and the request back to idle ($FF)."
  },
  {
   "address": 60826,
   "type": "line",
   "text": "Self-modified: the low byte of the address in LDA $C000 at $ED99, set by the STA at $ED8D."
  },
  {
   "address": 60827,
   "type": "line",
   "text": "Self-modified: the high byte of the address in LDA $C000 at $ED99, set by the STA at $ED93."
  },
  {
   "address": 61054,
   "type": "line",
   "text": "Stops the effect on voice A: its request back to idle and the voice's control, attack/decay and sustain/release registers to 0. Nothing in the game calls it (through effects_stop_entry or otherwise)."
  },
  {
   "address": 61075,
   "type": "line",
   "text": "The effects player's note table: 96 frequencies, low byte then high, from note 0 up; an effect's definition names its starting note."
  },
  {
   "address": 61076,
   "type": "line",
   "text": "The effects' note table read one byte on: each note's high byte."
  },
  {
   "address": 61140,
   "type": "line",
   "text": "The effects' note table continued."
  },
  {
   "address": 61267,
   "type": "line",
   "text": "The SID register offsets of the three voices for the effects player: 0, 7 and 14."
  },
  {
   "address": 61270,
   "type": "line",
   "text": "The effects player's working variables, three bytes each (one per voice) from $EF59: frequency low and high, its starting value, the step and its change, the waveform, the tick rate and count, the script and its place, the gate time and length."
  },
  {
   "address": 61271,
   "type": "line",
   "text": "The effects player's frame counter."
  },
  {
   "address": 61272,
   "type": "line",
   "text": "Work: the voice number."
  },
  {
   "address": 61273,
   "type": "line",
   "text": "Each voice's effect frequency, low byte."
  },
  {
   "address": 61276,
   "type": "line",
   "text": "Each voice's effect frequency, high byte."
  },
  {
   "address": 61279,
   "type": "line",
   "text": "Each voice's starting frequency, low byte."
  },
  {
   "address": 61282,
   "type": "line",
   "text": "Each voice's starting frequency, high byte."
  },
  {
   "address": 61285,
   "type": "line",
   "text": "Each voice's step change, low byte."
  },
  {
   "address": 61288,
   "type": "line",
   "text": "Each voice's step change, high byte."
  },
  {
   "address": 61291,
   "type": "line",
   "text": "Each voice's slide step, low byte."
  },
  {
   "address": 61294,
   "type": "line",
   "text": "Each voice's slide step, high byte."
  },
  {
   "address": 61297,
   "type": "line",
   "text": "Each voice's effect flags."
  },
  {
   "address": 61300,
   "type": "line",
   "text": "Each voice's tick rate."
  },
  {
   "address": 61303,
   "type": "line",
   "text": "Each voice's alternate waveform."
  },
  {
   "address": 61306,
   "type": "line",
   "text": "Each voice's first frames' waveform."
  },
  {
   "address": 61309,
   "type": "line",
   "text": "Each voice's place in its script."
  },
  {
   "address": 61312,
   "type": "line",
   "text": "Each voice's first frames left."
  },
  {
   "address": 61315,
   "type": "line",
   "text": "Each voice's ticks left."
  },
  {
   "address": 61318,
   "type": "line",
   "text": "Each voice's main waveform."
  },
  {
   "address": 61321,
   "type": "line",
   "text": "Each voice's length, for the gate test."
  },
  {
   "address": 61324,
   "type": "line",
   "text": "Each voice's waveform this frame."
  },
  {
   "address": 61327,
   "type": "line",
   "text": "Each voice's script number."
  },
  {
   "address": 61330,
   "type": "line",
   "text": "Each voice's frames to its next tick."
  },
  {
   "address": 61333,
   "type": "line",
   "text": "Work: the definition's offset, then a count."
  },
  {
   "address": 61334,
   "type": "line",
   "text": "The addresses of the eight effect scripts, low bytes at $EF96 then high at $EF9E, all in page $F0."
  },
  {
   "address": 61342,
   "type": "line",
   "text": "The effect scripts' addresses, high bytes."
  },
  {
   "address": 61350,
   "type": "line",
   "text": "Starts effect N on voice X from its eight-byte definitions in the tables at $F0BA and $F16A: the start frequency, the step and its change, waveform, gate time, a second waveform and its length, the script, and the pitch (a note from the table at $EE93). Writes the first seven SID registers of the voice from the definition, and sets the volume to 15."
  },
  {
   "address": 61520,
   "type": "line",
   "text": "The eight effect scripts: each a list of steps, one a tick: 1 slides the frequency up, 2 down, $80 and up go back to the starting frequency, $FF loops to the start, anything else holds."
  },
  {
   "address": 61626,
   "type": "line",
   "text": "The first eight bytes of each of the 22 effects' definitions: seven values effect_start writes straight into the voice's SID registers (frequency, pulse width, waveform, attack/decay, sustain/release; the frequency's two bytes are also the slide's first step and the waveform the one the effect returns to), then the starting note."
  },
  {
   "address": 61627,
   "type": "line",
   "text": "The effects' definitions read from byte 1: the frequency's high byte, also the step's."
  },
  {
   "address": 61630,
   "type": "line",
   "text": "The effects' definitions read from byte 4: the waveform."
  },
  {
   "address": 61633,
   "type": "line",
   "text": "The effects' definitions read from byte 7 (the starting note)."
  },
  {
   "address": 61697,
   "type": "line",
   "text": "The effects' first definitions continued."
  },
  {
   "address": 61802,
   "type": "line",
   "text": "The second eight bytes of each of the 22 effects' definitions: the flags and tick rate, two more waveforms (one alternated with, one for the first frames), the script number and the first frames' count in one byte, the length, and the step's change (two bytes); the eighth is not read."
  },
  {
   "address": 61803,
   "type": "line",
   "text": "The effects' second definitions read from byte 1: alternate waveform."
  },
  {
   "address": 61804,
   "type": "line",
   "text": "The effects' second definitions read from byte 2: first frames' waveform."
  },
  {
   "address": 61805,
   "type": "line",
   "text": "The effects' second definitions read from byte 3: script number and first frames' count."
  },
  {
   "address": 61806,
   "type": "line",
   "text": "The effects' second definitions read from byte 4: length."
  },
  {
   "address": 61807,
   "type": "line",
   "text": "The effects' second definitions read from byte 5: step change, low byte."
  },
  {
   "address": 61808,
   "type": "line",
   "text": "The effects' second definitions read from byte 6."
  },
  {
   "address": 61872,
   "type": "line",
   "text": "The effects' second definitions continued."
  }
 ]
}