{
 "schema": 1,
 "platform": "c64",
 "game": "gunship",
 "part": "title",
 "build": "original disk, Rapidlok V6, PAL, C64 Preservation Project gunship_s1/s2[microprose_1985](rl6)(pal)",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    24576,
    25599,
    "screen RAM"
   ],
   [
    84,
    86,
    "BASIC's own JMP for its functions, copied from the ROM at power-on: the machine's code, not the game's"
   ],
   [
    115,
    138,
    "BASIC's CHRGET, copied from the ROM at power-on: the machine's code, which runs while the boot program runs"
   ],
   [
    512,
    806,
    "the input buffer and the KERNAL's work area, where Rapidlok's loader runs while a file loads: the loader stands in front of the game and is not annotated (kit/skills/core/10-orient)"
   ],
   [
    1024,
    2047,
    "the text screen, where BASIC prints the credits"
   ],
   [
    4325,
    6143,
    "BASIC's variables and strings, after the boot program's end and under the top of BASIC it sets ($1700)"
   ],
   [
    16384,
    26623,
    "bank 1: the bitmap at $4000 and the screen colours at $6000 that the title draws into as it runs, and the rest of the 10 KB it clears"
   ],
   [
    38596,
    38597,
    "two bytes after TITLE's file that nothing uses"
   ],
   [
    49152,
    65535,
    "bank 3: the second copy of the bitmap and screen colours ($C000 and $E000), drawn as the title runs; the I/O and the KERNAL are above $D000"
   ]
  ],
  "extra": [],
  "edges": [
   0,
   256,
   512,
   1024,
   2048,
   4096,
   16384,
   32768,
   40960,
   49152,
   53248,
   57344
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 2048,
   "type": "Undefined"
  },
  {
   "start": 2049,
   "end": 4324,
   "type": "BASIC"
  },
  {
   "start": 4325,
   "end": 6143,
   "type": "Undefined"
  },
  {
   "start": 6144,
   "end": 16383,
   "type": "Byte"
  },
  {
   "start": 16384,
   "end": 28671,
   "type": "Undefined"
  },
  {
   "start": 28672,
   "end": 31871,
   "type": "Byte"
  },
  {
   "start": 31872,
   "end": 32767,
   "type": "Undefined"
  },
  {
   "start": 32768,
   "end": 32966,
   "type": "Code"
  },
  {
   "start": 32967,
   "end": 32968,
   "type": "Byte"
  },
  {
   "start": 32969,
   "end": 33015,
   "type": "Code"
  },
  {
   "start": 33016,
   "end": 33023,
   "type": "Byte"
  },
  {
   "start": 33024,
   "end": 33948,
   "type": "Code"
  },
  {
   "start": 33949,
   "end": 33949,
   "type": "Undefined"
  },
  {
   "start": 33950,
   "end": 34095,
   "type": "Code"
  },
  {
   "start": 34096,
   "end": 34097,
   "type": "Undefined"
  },
  {
   "start": 34098,
   "end": 34577,
   "type": "Code"
  },
  {
   "start": 34578,
   "end": 34585,
   "type": "Byte"
  },
  {
   "start": 34586,
   "end": 34939,
   "type": "Code"
  },
  {
   "start": 34940,
   "end": 35000,
   "type": "Byte"
  },
  {
   "start": 35001,
   "end": 36128,
   "type": "Code"
  },
  {
   "start": 36129,
   "end": 36261,
   "type": "Byte"
  },
  {
   "start": 36262,
   "end": 36425,
   "type": "Code"
  },
  {
   "start": 36426,
   "end": 36471,
   "type": "Byte"
  },
  {
   "start": 36472,
   "end": 36682,
   "type": "Code"
  },
  {
   "start": 36683,
   "end": 38595,
   "type": "Byte"
  },
  {
   "start": 38596,
   "end": 38597,
   "type": "Undefined"
  },
  {
   "start": 38598,
   "end": 38640,
   "type": "Byte"
  },
  {
   "start": 38641,
   "end": 38906,
   "type": "Undefined"
  },
  {
   "start": 38907,
   "end": 49151,
   "type": "Byte"
  },
  {
   "start": 49152,
   "end": 65465,
   "type": "Undefined"
  },
  {
   "start": 65466,
   "end": 65532,
   "type": "Code"
  },
  {
   "start": 65533,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 1,
   "name": "zpa_01",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 165,
   "name": "zpa_A5",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 166,
   "name": "zpa_A6",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 167,
   "name": "zpa_A7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 168,
   "name": "zpa_A8",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 169,
   "name": "zpa_A9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 170,
   "name": "zpa_AA",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 678,
   "name": "a_02A6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2049,
   "name": "basic_list_guard",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2061,
   "name": "line_1_locks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2112,
   "name": "line_2_mark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2151,
   "name": "line_10_memory",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2230,
   "name": "line_20_small",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2261,
   "name": "line_40_split",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2421,
   "name": "line_110_logo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2513,
   "name": "line_200_title",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2626,
   "name": "line_400_credits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3201,
   "name": "line_470_library",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3280,
   "name": "line_500_begin",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3345,
   "name": "line_1000_roster",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3509,
   "name": "line_1100_corrupted",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3790,
   "name": "line_1200_clear",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3946,
   "name": "line_1230_write",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4088,
   "name": "line_16000_load",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4177,
   "name": "line_16050_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6144,
   "name": "chopper_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6400,
   "name": "chopper_colours_p2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6656,
   "name": "chopper_colours_p3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6904,
   "name": "chopper_colours_p4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7064,
   "name": "chopper_colours_r23",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7144,
   "name": "chopper_colours_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7168,
   "name": "chopper_cells",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8128,
   "name": "chopper_cells_r24",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8168,
   "name": "chopper_cells_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8192,
   "name": "chopper_bitmap_0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8272,
   "name": "chopper_row0_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8352,
   "name": "chopper_row0_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8432,
   "name": "chopper_row0_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9152,
   "name": "chopper_bitmap_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10112,
   "name": "chopper_bitmap_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11072,
   "name": "chopper_bitmap_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12032,
   "name": "chopper_bitmap_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12992,
   "name": "chopper_bitmap_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13952,
   "name": "chopper_bitmap_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14912,
   "name": "chopper_bitmap_21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15872,
   "name": "chopper_bitmap_24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16192,
   "name": "chopper_bitmap_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "a_4000",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 16464,
   "name": "f_4050",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16520,
   "name": "f_4088",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16544,
   "name": "f_40A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16624,
   "name": "f_40F0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17024,
   "name": "f_4280",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17104,
   "name": "f_42D0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17184,
   "name": "f_4320",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17264,
   "name": "f_4370",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17344,
   "name": "f_43C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17424,
   "name": "f_4410",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17504,
   "name": "f_4460",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17584,
   "name": "f_44B0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17664,
   "name": "f_4500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17919,
   "name": "f_45FF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24576,
   "name": "f_6000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24616,
   "name": "f_6028",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24696,
   "name": "f_6078",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24776,
   "name": "f_60C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24832,
   "name": "f_6100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24856,
   "name": "f_6118",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24936,
   "name": "f_6168",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25016,
   "name": "f_61B8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25088,
   "name": "f_6200",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25096,
   "name": "f_6208",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25176,
   "name": "f_6258",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25256,
   "name": "f_62A8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25336,
   "name": "f_62F8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25388,
   "name": "a_632C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25389,
   "name": "a_632D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25390,
   "name": "a_632E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25401,
   "name": "a_6339",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25402,
   "name": "a_633A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25404,
   "name": "a_633C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25416,
   "name": "f_6348",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25468,
   "name": "a_637C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25496,
   "name": "f_6398",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25592,
   "name": "a_63F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25593,
   "name": "a_63F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25594,
   "name": "a_63FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25595,
   "name": "f_63FB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28672,
   "name": "sprite_rotor",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28928,
   "name": "sprite_rotor_hub",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29440,
   "name": "sprite_turret_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29952,
   "name": "sprite_turret_top_r",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30464,
   "name": "sprite_turret_low",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30976,
   "name": "sprite_turret_low_r",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31488,
   "name": "sprite_glints",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "small_unpack",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32771,
   "name": "small_copy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32774,
   "name": "unpack",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32798,
   "name": "j_801E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32816,
   "name": "b_8030",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32845,
   "name": "unpack_expand",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32863,
   "name": "unpack_next",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32871,
   "name": "unpack_run",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32889,
   "name": "unpack_count",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32896,
   "name": "j_8080",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32910,
   "name": "b_808E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32920,
   "name": "b_8098",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32926,
   "name": "unpack_read",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32936,
   "name": "r_80A8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32937,
   "name": "unpack_write",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32947,
   "name": "b_80B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32953,
   "name": "r_80B9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32954,
   "name": "b_80BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32967,
   "name": "unpack_value",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32968,
   "name": "unpack_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32969,
   "name": "copy",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32974,
   "name": "b_80CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32989,
   "name": "b_80DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33001,
   "name": "b_80E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33010,
   "name": "b_80F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33016,
   "name": "gap_80F8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33024,
   "name": "title_main",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33074,
   "name": "title_setup",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33078,
   "name": "b_8136",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33174,
   "name": "title_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33239,
   "name": "title_tempo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33247,
   "name": "b_81DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33253,
   "name": "title_screen_on",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33281,
   "name": "b_8201",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33284,
   "name": "b_8204",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33287,
   "name": "b_8207",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33301,
   "name": "title_rise",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33317,
   "name": "b_8225",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33327,
   "name": "b_822F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33360,
   "name": "b_8250",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33369,
   "name": "b_8259",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33383,
   "name": "title_rise_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33396,
   "name": "b_8274",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33431,
   "name": "b_8297",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33447,
   "name": "title_rise_rows",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33479,
   "name": "b_82C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33493,
   "name": "b_82D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33497,
   "name": "b_82D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33514,
   "name": "b_82EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33517,
   "name": "title_frame_wait",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33520,
   "name": "j_82F0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33528,
   "name": "title_hover",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33530,
   "name": "b_82FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33539,
   "name": "title_hover_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33553,
   "name": "b_8311",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33587,
   "name": "b_8333",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33617,
   "name": "title_hover_colours",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33619,
   "name": "b_8353",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33649,
   "name": "title_hover_rows",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33668,
   "name": "b_8384",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33673,
   "name": "b_8389",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33687,
   "name": "b_8397",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33691,
   "name": "b_839B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33705,
   "name": "title_stages",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33730,
   "name": "b_83C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33748,
   "name": "title_letter",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33788,
   "name": "b_83FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33791,
   "name": "b_83FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33805,
   "name": "b_840D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33818,
   "name": "b_841A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33828,
   "name": "title_glints",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33845,
   "name": "b_8435",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33855,
   "name": "title_flip",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33865,
   "name": "b_8449",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33868,
   "name": "b_844C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33871,
   "name": "b_844F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33879,
   "name": "title_tune",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33888,
   "name": "b_8460",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33911,
   "name": "title_show_wait",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33917,
   "name": "b_847D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33923,
   "name": "title_pause",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33928,
   "name": "j_8488",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33948,
   "name": "r_849C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33949,
   "name": "pause_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33950,
   "name": "key_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33962,
   "name": "title_end",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33976,
   "name": "b_84B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33989,
   "name": "sprites_to_shadow",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33991,
   "name": "b_84C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34033,
   "name": "rotor_band",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34059,
   "name": "b_850B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34079,
   "name": "r_851F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34080,
   "name": "flip",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34096,
   "name": "tempo_by_tv",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34098,
   "name": "rotor_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34108,
   "name": "b_853C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34129,
   "name": "b_8551",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34145,
   "name": "j_8561",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34208,
   "name": "b_85A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34276,
   "name": "rotor_source",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34291,
   "name": "b_85F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34306,
   "name": "j_8602",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34372,
   "name": "b_8644",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34442,
   "name": "rotor_copy",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 34443,
   "name": "rotor_src1_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34444,
   "name": "rotor_src1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34446,
   "name": "rotor_dst1_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34447,
   "name": "rotor_dst1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34449,
   "name": "rotor_src2_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34450,
   "name": "rotor_src2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34452,
   "name": "rotor_dst2_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34453,
   "name": "rotor_dst2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34455,
   "name": "rotor_src3_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34456,
   "name": "rotor_src3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34458,
   "name": "rotor_dst3_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34459,
   "name": "rotor_dst3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34461,
   "name": "rotor_src4_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34462,
   "name": "rotor_src4_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34464,
   "name": "rotor_dst4_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34465,
   "name": "rotor_dst4_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34467,
   "name": "rotor_src5_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34468,
   "name": "rotor_src5_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34470,
   "name": "rotor_dst5_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34471,
   "name": "rotor_dst5_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34473,
   "name": "rotor_src6_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34474,
   "name": "rotor_src6_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34476,
   "name": "rotor_dst6_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34477,
   "name": "rotor_dst6_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34479,
   "name": "rotor_src7_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34480,
   "name": "rotor_src7_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34482,
   "name": "rotor_dst7_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34483,
   "name": "rotor_dst7_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34485,
   "name": "rotor_src8_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34486,
   "name": "rotor_src8_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34488,
   "name": "rotor_dst8_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34489,
   "name": "rotor_dst8_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34493,
   "name": "rotor_clear_below",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34527,
   "name": "b_86DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34543,
   "name": "clear_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34563,
   "name": "b_8703",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34564,
   "name": "clear_dst_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34565,
   "name": "clear_dst_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34571,
   "name": "b_870B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34572,
   "name": "clear_dst2_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34573,
   "name": "clear_dst2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34578,
   "name": "rotor_frame_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34582,
   "name": "rotor_frame_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34586,
   "name": "delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34588,
   "name": "b_871C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34616,
   "name": "voice3_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34620,
   "name": "b_873C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34627,
   "name": "draw_letter",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34685,
   "name": "letter_place",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34696,
   "name": "letter_carry",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34707,
   "name": "letter_cells",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 34709,
   "name": "b_8795",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34714,
   "name": "letter_mask_l",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34725,
   "name": "letter_bytes",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34728,
   "name": "b_87A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34736,
   "name": "b_87B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34738,
   "name": "b_87B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34743,
   "name": "letter_mask_r",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34783,
   "name": "letter_done",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34832,
   "name": "b_8810",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34860,
   "name": "b_882C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34877,
   "name": "b_883D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34886,
   "name": "b_8846",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34910,
   "name": "r_885E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34911,
   "name": "letter_note",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34940,
   "name": "letter_left_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34947,
   "name": "letter_right_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34954,
   "name": "letter_place_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34961,
   "name": "letter_place_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34968,
   "name": "letter_width",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34989,
   "name": "glint_turret",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34993,
   "name": "glint_letter",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34997,
   "name": "letter_dest_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34999,
   "name": "letter_dest_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35001,
   "name": "nmi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35008,
   "name": "turret_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35076,
   "name": "r_8904",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35077,
   "name": "start_irq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35136,
   "name": "irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35160,
   "name": "b_8958",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35173,
   "name": "b_8965",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35301,
   "name": "b_89E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35313,
   "name": "b_89F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35322,
   "name": "j_89FA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35363,
   "name": "mast_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35368,
   "name": "head_y_l",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35373,
   "name": "head_y_r",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35428,
   "name": "irq_line_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35435,
   "name": "irq_band",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35453,
   "name": "irq_line_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35460,
   "name": "b_8A84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35540,
   "name": "b_8AD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35552,
   "name": "b_8AE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35561,
   "name": "irq_exit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35566,
   "name": "j_8AEE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35572,
   "name": "irq_saved_01",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35581,
   "name": "copy_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35623,
   "name": "b_8B27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35637,
   "name": "b_8B35",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35647,
   "name": "b_8B3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35690,
   "name": "b_8B6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35704,
   "name": "b_8B78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35714,
   "name": "b_8B82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35720,
   "name": "b_8B88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35721,
   "name": "row_src1_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35722,
   "name": "row_src1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35724,
   "name": "row_dst1_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35725,
   "name": "row_dst1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35727,
   "name": "row_src2_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35728,
   "name": "row_src2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35730,
   "name": "row_dst2_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35731,
   "name": "row_dst2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35733,
   "name": "row_src3_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35734,
   "name": "row_src3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35736,
   "name": "row_dst3_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35737,
   "name": "row_dst3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35739,
   "name": "row_src4_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35740,
   "name": "row_src4_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35742,
   "name": "row_dst4_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35743,
   "name": "row_dst4_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35752,
   "name": "scroll_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35800,
   "name": "b_8BD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35807,
   "name": "b_8BDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35874,
   "name": "colours_src1_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35875,
   "name": "colours_src1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35883,
   "name": "b_8C2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35950,
   "name": "colours_src3_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35951,
   "name": "colours_src3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35959,
   "name": "scroll_cells",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36015,
   "name": "b_8CAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36027,
   "name": "b_8CBB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36029,
   "name": "b_8CBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36030,
   "name": "cells_src_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36031,
   "name": "cells_src_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36033,
   "name": "cells_dst_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36034,
   "name": "cells_dst_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36053,
   "name": "b_8CD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36066,
   "name": "b_8CE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36071,
   "name": "j_8CE7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36072,
   "name": "cells_new_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36073,
   "name": "cells_new_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36083,
   "name": "r_8CF3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36084,
   "name": "load_file",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36129,
   "name": "file_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36147,
   "name": "file_name_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36150,
   "name": "file_name_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36153,
   "name": "file_name_len",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36156,
   "name": "file_load_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36159,
   "name": "file_load_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36162,
   "name": "bitmap_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36187,
   "name": "bitmap_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36212,
   "name": "screen_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36237,
   "name": "screen_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36262,
   "name": "rotor_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36271,
   "name": "b_8DAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36281,
   "name": "b_8DB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36303,
   "name": "b_8DCF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36304,
   "name": "rotor_voices",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36308,
   "name": "b_8DD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36349,
   "name": "b_8DFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36352,
   "name": "j_8E00",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36372,
   "name": "b_8E14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36396,
   "name": "b_8E2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36401,
   "name": "rotor_set_pitch",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36409,
   "name": "j_8E39",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36426,
   "name": "rotor_sound_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36427,
   "name": "rotor_on_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36430,
   "name": "rotor_off_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36433,
   "name": "rotor_control",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36434,
   "name": "rotor_control_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36435,
   "name": "rotor_control_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36436,
   "name": "rotor_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36439,
   "name": "rotor_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36441,
   "name": "rotor_freq_hi_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36442,
   "name": "rotor_sweep",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36445,
   "name": "voice_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36448,
   "name": "rotor_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36451,
   "name": "rotor_sid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36472,
   "name": "tune_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36474,
   "name": "b_8E7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36489,
   "name": "tune_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36495,
   "name": "b_8E8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36500,
   "name": "j_8E94",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36511,
   "name": "b_8E9F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36523,
   "name": "b_8EAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36564,
   "name": "b_8ED4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36601,
   "name": "b_8EF9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36611,
   "name": "b_8F03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36623,
   "name": "tune_next_voice",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36631,
   "name": "r_8F17",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36632,
   "name": "tune_read",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36633,
   "name": "stream_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36634,
   "name": "stream_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36643,
   "name": "b_8F23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36646,
   "name": "multiply",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36659,
   "name": "b_8F33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36674,
   "name": "b_8F42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36681,
   "name": "product",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36683,
   "name": "tune_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36684,
   "name": "tune_note",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36685,
   "name": "multiply_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36686,
   "name": "multiply_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36687,
   "name": "tune_voice_on",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36690,
   "name": "tune_done",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36691,
   "name": "tune_stream_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36694,
   "name": "tune_stream_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36697,
   "name": "tune_wave",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36700,
   "name": "tune_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36703,
   "name": "tune_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36706,
   "name": "frame_ready",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36707,
   "name": "sprite_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36710,
   "name": "sprite_x_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36715,
   "name": "sprite_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36719,
   "name": "sprite_y_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36720,
   "name": "sprite_y_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36721,
   "name": "sprite_y_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36722,
   "name": "sprite_y_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36723,
   "name": "sprite_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36731,
   "name": "sprite_shape",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36732,
   "name": "sprite_shape_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36733,
   "name": "sprite_shape_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36734,
   "name": "sprite_shape_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36735,
   "name": "sprite_shape_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36736,
   "name": "sprite_shape_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36737,
   "name": "sprite_shape_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36738,
   "name": "sprite_shape_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36739,
   "name": "sprite_x_high",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36740,
   "name": "hover_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36744,
   "name": "chopper_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36745,
   "name": "rotor_frame_no",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36746,
   "name": "irq_part",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36747,
   "name": "rotor_buffer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36748,
   "name": "draw_buffer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36749,
   "name": "draw_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36750,
   "name": "vic_bank",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36752,
   "name": "buffer_page",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36754,
   "name": "file_no",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36755,
   "name": "turret_glint_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36762,
   "name": "letter_glint_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36769,
   "name": "turret_view",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36770,
   "name": "slow_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36771,
   "name": "slow_steps",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36772,
   "name": "turret_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36773,
   "name": "turret_started",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36774,
   "name": "letter_glint_frame",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36776,
   "name": "rotor_shape",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36777,
   "name": "shown_buffer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36778,
   "name": "band_buffer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36779,
   "name": "copy_to_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36780,
   "name": "copy_from_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36781,
   "name": "reveal_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36786,
   "name": "rows_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36787,
   "name": "letter_cells_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36788,
   "name": "hover_frames",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36789,
   "name": "hover_frames_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36790,
   "name": "letter_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36791,
   "name": "letter_no",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36792,
   "name": "letters_started",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36793,
   "name": "letter_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36794,
   "name": "turret_done",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36795,
   "name": "letters_done",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36796,
   "name": "fine_scroll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36797,
   "name": "unused_8FBD",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36864,
   "name": "tune_tempo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36867,
   "name": "tune_waves",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36870,
   "name": "note_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36994,
   "name": "note_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37118,
   "name": "tune_sid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37143,
   "name": "tune_voice_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37319,
   "name": "tune_voice_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38144,
   "name": "tune_voice_2b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38353,
   "name": "tune_voice_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38598,
   "name": "rotor_row_save",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38599,
   "name": "shadow_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38600,
   "name": "shadow_x_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38601,
   "name": "shadow_x_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38602,
   "name": "shadow_x_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38603,
   "name": "shadow_x_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38604,
   "name": "shadow_x_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38605,
   "name": "shadow_x_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38606,
   "name": "shadow_x_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38607,
   "name": "shadow_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38608,
   "name": "shadow_y_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38609,
   "name": "shadow_y_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38610,
   "name": "shadow_y_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38611,
   "name": "shadow_y_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38612,
   "name": "shadow_y_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38613,
   "name": "shadow_y_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38614,
   "name": "shadow_y_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38615,
   "name": "shadow_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38616,
   "name": "shadow_colour_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38617,
   "name": "shadow_colour_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38618,
   "name": "shadow_colour_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38619,
   "name": "shadow_colour_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38620,
   "name": "shadow_colour_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38621,
   "name": "shadow_colour_6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38622,
   "name": "shadow_colour_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38623,
   "name": "shadow_shape",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38626,
   "name": "shadow_shape_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38631,
   "name": "shadow_x_high",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38632,
   "name": "frame_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38633,
   "name": "rotor_pitch_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38636,
   "name": "rotor_pitch_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38639,
   "name": "rotor_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38640,
   "name": "irq_frames",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38907,
   "name": "pack_escape",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38908,
   "name": "pack_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38909,
   "name": "pack_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38910,
   "name": "pack_end",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38911,
   "name": "pack_end_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38912,
   "name": "logo_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39912,
   "name": "logo_colours_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39936,
   "name": "logo_cells",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40936,
   "name": "logo_cells_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40960,
   "name": "rotor_frame_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41600,
   "name": "rotor_frame_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41680,
   "name": "rotor_frame_2_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41760,
   "name": "rotor_frame_2_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41840,
   "name": "rotor_frame_2_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41920,
   "name": "rotor_frame_2_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42000,
   "name": "rotor_frame_2_5",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42080,
   "name": "rotor_frame_2_6",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42160,
   "name": "rotor_frame_2_7",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42240,
   "name": "rotor_frame_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42880,
   "name": "rotor_frame_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43520,
   "name": "logo_letters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44480,
   "name": "logo_letters_low",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45120,
   "name": "logo_empty_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46080,
   "name": "logo_empty_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47040,
   "name": "logo_empty_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48000,
   "name": "logo_empty_22",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48960,
   "name": "logo_bitmap_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 56256,
   "name": "f_DBC0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56296,
   "name": "f_DBE8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "f_E000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57384,
   "name": "f_E028",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57464,
   "name": "f_E078",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57544,
   "name": "f_E0C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57600,
   "name": "f_E100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57624,
   "name": "f_E118",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57704,
   "name": "f_E168",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57784,
   "name": "f_E1B8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57856,
   "name": "f_E200",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57864,
   "name": "f_E208",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57944,
   "name": "f_E258",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58024,
   "name": "f_E2A8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58104,
   "name": "f_E2F8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58156,
   "name": "a_E32C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58157,
   "name": "a_E32D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58158,
   "name": "a_E32E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58169,
   "name": "a_E339",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58170,
   "name": "a_E33A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58172,
   "name": "a_E33C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58184,
   "name": "f_E348",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58236,
   "name": "a_E37C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58264,
   "name": "f_E398",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58360,
   "name": "a_E3F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58361,
   "name": "a_E3F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58362,
   "name": "a_E3FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58363,
   "name": "f_E3FB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65466,
   "name": "KERNAL_SETLFS",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65469,
   "name": "KERNAL_SETNAM",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65493,
   "name": "KERNAL_LOAD",
   "type": "Predefined",
   "kind": "system"
  }
 ],
 "comments": [
  {
   "address": 1,
   "type": "line",
   "text": "The 6510's memory layout: $37 the ROMs and the I/O in, $36 BASIC's ROM out, $05 only the I/O in, $00 everything RAM."
  },
  {
   "address": 165,
   "type": "line",
   "text": "The copies' and the unpacker's source pointer, low byte; BASIC puts F here."
  },
  {
   "address": 166,
   "type": "line",
   "text": "The source pointer's high byte."
  },
  {
   "address": 167,
   "type": "line",
   "text": "The destination pointer, low byte; BASIC puts T here."
  },
  {
   "address": 168,
   "type": "line",
   "text": "The destination pointer's high byte."
  },
  {
   "address": 169,
   "type": "line",
   "text": "The copy's length, low byte; BASIC puts L here."
  },
  {
   "address": 170,
   "type": "line",
   "text": "The copy's length, high byte."
  },
  {
   "address": 678,
   "type": "line",
   "text": "The KERNAL's TV flag: 1 on a PAL machine, 0 on NTSC."
  },
  {
   "address": 2049,
   "type": "line",
   "text": "Line 0: REM, five DELs and a shifted L ($CC, a byte that is no keyword). LIST prints \"0 REM\", the five DELs rub it out, and the $CC stops LIST with ?SYNTAX ERROR, so the listing shows nothing but the error."
  },
  {
   "address": 2061,
   "type": "line",
   "text": "Line 1: switches off the CIA's timer interrupt (56333), points the NMI vector at an RTI in the KERNAL ($FEC1, so RESTORE does nothing), moves the STOP vector past its test ($F6EA, so RUN/STOP never reads as pressed), and makes the border and the screen blue."
  },
  {
   "address": 2112,
   "type": "line",
   "text": "Line 2: clears the screen and prints 129x03 in light blue, near the middle of the blue screen and hard to see: a mark whose meaning is unknown."
  },
  {
   "address": 2151,
   "type": "line",
   "text": "Lines 10-11: lowers the top of BASIC to $1700 (23 pages), so the pictures above it are safe from BASIC's strings; MM = 54 ($36, the memory layout for the copies: BASIC's ROM out, the I/O and the KERNAL in); A0-A5 = 165-170, the six bytes $A5-$AA the copies read."
  },
  {
   "address": 2230,
   "type": "line",
   "text": "Lines 20-30: loads SMALL, which runs by itself as soon as it is in: Rapidlok returns to its first byte, $8000, and its unpacker turns the packed picture at $97FB into the MicroProse picture at $9800-$BFFF."
  },
  {
   "address": 2261,
   "type": "line",
   "text": "Lines 40-60: helpers. 40 splits V into HI and LO; 52-54 put F (from), T (to) and L (length) into $A5-$AA and MM into the A register; 50 copies with SMALL's routine at 32771 ($8003); 60 copies with the library's at 30030 ($754E), once TYPE is in."
  },
  {
   "address": 2421,
   "type": "line",
   "text": "Lines 110-140: copies the MicroProse picture from $9800 to $D800-$FFFF with every ROM and the I/O out (MM = 0), and shows it: VIC bank 3, screen colours at $D800, bitmap at $E000, multicolour bitmap mode."
  },
  {
   "address": 2513,
   "type": "line",
   "text": "Lines 200-320: loads TITLE, which runs by itself (Rapidlok returns to $8100) and returns here when the tune has played or a key is pressed; then the text screen in the lower-case set, VIC bank 0, light grey border and white screen, and the credits (400) before 470."
  },
  {
   "address": 2626,
   "type": "line",
   "text": "Lines 400-460: the credits: design and programming by Andy Hollis and Arnold Hendrick with Sid Meier and Gregg Tavares, screen art by Michael Haire, Michele Mahan and Kim Disney, copyright 1986 MicroProse. Line 460 prints LOAD \"begin\",8,1 in white on the white screen, where it cannot be seen, for line 512's RETURN to enter."
  },
  {
   "address": 3201,
   "type": "line",
   "text": "Lines 470-480: loads TYPE (the library at $7500) and MAP.CHR.TN, and copies 8000 bytes, a bitmap's worth, from $A000 to $E000 with the library's copy routine."
  },
  {
   "address": 3280,
   "type": "line",
   "text": "Lines 500-520: checks the roster (1000), clears the two bytes at 944-945 in the cassette buffer, puts a RETURN in the keyboard buffer and ends with NEW: the RETURN enters the hidden LOAD line, and BASIC loads the front end, BEGIN."
  },
  {
   "address": 3345,
   "type": "line",
   "text": "Lines 1000-1020: reads the roster from side 1, track 1 sectors 1 to 4, into $8C00-$8FFF, a sector at a time through drive buffer 1 and the library's read call (KE+69), then calls the check MAP.CHR.TN brought to 28672 ($7000); a zero in $A5 means the roster is good."
  },
  {
   "address": 3509,
   "type": "line",
   "text": "Lines 1100-1150: ROSTER DATA HAS BEEN CORRUPTED!, blamed on the drive's alignment or speed; waits for a key, with the CIA's interrupt on just long enough for the keyboard to be read."
  },
  {
   "address": 3790,
   "type": "line",
   "text": "Lines 1200-1220: clears the roster: zeroes $8C00-$8FFF with the library's copy (KE+48) and writes one pilot back, Kilroy: 11 at $8EC0, the name at $8FC0, a 1 at $8FE8."
  },
  {
   "address": 3946,
   "type": "line",
   "text": "Lines 1230-1250: writes the four sectors back to track 1 (the library's write call, KE+72, then U2), shows the credits again and checks the roster once more."
  },
  {
   "address": 4088,
   "type": "line",
   "text": "Lines 16000-16040: loads the file named in F$ with the KERNAL's LOAD (65493), the address taken from the file (secondary address 1), and tries again until the status shows no error but end of file."
  },
  {
   "address": 4177,
   "type": "line",
   "text": "Lines 16050-16080: puts F$ at 830 ($033E) and calls SETLFS (65466: file 0, device 8, secondary address 1) and SETNAM (65469) twice."
  },
  {
   "address": 6144,
   "type": "line",
   "text": "The helicopter picture's screen colours, two colours to each 8 by 8 cell, 1000 bytes; the title moves CHOPPER's picture here from $9800 and then copies the first 160 bytes of the logo picture's colours over its top four rows."
  },
  {
   "address": 6400,
   "type": "line",
   "text": "The helicopter's screen colours, second page: the colour copy at $8333 reads it into $6100 or $E100."
  },
  {
   "address": 6656,
   "type": "line",
   "text": "The helicopter's screen colours, third page, copied into $6200 or $E200."
  },
  {
   "address": 6904,
   "type": "line",
   "text": "The helicopter's screen colours from $1AF8: the colour copy's fourth pass takes $1AF8-$1BF7, overlapping the third, so that four passes of 256 cover the 1000 colours and stop short of the sprite pointers at $63F8."
  },
  {
   "address": 7064,
   "type": "line",
   "text": "The helicopter's screen colours, rows 23 and 24: where the LDAs at $8C21 and $8C6D point once the helicopter is up, the two rows scroll_colours brings in last."
  },
  {
   "address": 7144,
   "type": "line",
   "text": "The 24 bytes after the helicopter's 1000 screen colours: not shown; the last eight are a paint program's sprite pointers, $28-$2F."
  },
  {
   "address": 7168,
   "type": "line",
   "text": "The helicopter picture's third colour for each cell (the colour RAM's value), 1000 bytes, which the title scrolls into colour RAM as the helicopter rises."
  },
  {
   "address": 8128,
   "type": "line",
   "text": "The helicopter's third colours, row 24: where the LDA at $8CE7 points once the helicopter is up, the last row scroll_cells brings in."
  },
  {
   "address": 8168,
   "type": "line",
   "text": "The 24 bytes after the third-colour cells: not shown."
  },
  {
   "address": 8192,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: rows 0 to 2, empty: the rotor frames go above the helicopter's top."
  },
  {
   "address": 8272,
   "type": "line",
   "text": "The helicopter picture's row 0, bytes 80 to 159: where copy_row's second LDA ($8B8E) points between copies."
  },
  {
   "address": 8352,
   "type": "line",
   "text": "The helicopter picture's row 0, bytes 160 to 239: where copy_row's third LDA ($8B94) points between copies."
  },
  {
   "address": 8432,
   "type": "line",
   "text": "The helicopter picture's row 0, bytes 240 to 319: where copy_row's fourth LDA ($8B9A) points between copies."
  },
  {
   "address": 9152,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: rows 3 to 5; the drawing starts in row 5."
  },
  {
   "address": 10112,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: rows 6 to 8."
  },
  {
   "address": 11072,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: rows 9 to 11."
  },
  {
   "address": 12032,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: rows 12 to 14."
  },
  {
   "address": 12992,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: rows 15 to 17."
  },
  {
   "address": 13952,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: rows 18 to 20."
  },
  {
   "address": 14912,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: rows 21 to 23; row 23 is empty."
  },
  {
   "address": 15872,
   "type": "line",
   "text": "The helicopter picture's bitmap, 25 rows of 320 bytes: row 24, empty."
  },
  {
   "address": 16192,
   "type": "line",
   "text": "The 192 bytes after the helicopter's 8000-byte bitmap: zeros, not shown."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "METAL, the title's sprite shapes, 50 of 64 bytes, numbers $C0-$F1 in the VIC's bank 1 ($F000 in bank 3 is a copy). $C0-$C3: the top of the rotor mast, one shape for each of the four rotor frames, sprite 0."
  },
  {
   "address": 28928,
   "type": "line",
   "text": "Shapes $C4-$CB: the rotor head, two shapes side by side for each of the four rotor frames, sprites 1 and 2."
  },
  {
   "address": 29440,
   "type": "line",
   "text": "Shapes $CC-$D3: the top left quarter of the chin gun's turret, seven views of it as it swivels, sprite 4; $D3 is blank."
  },
  {
   "address": 29952,
   "type": "line",
   "text": "Shapes $D4-$DB: the turret's top right quarter, sprite 5; $DB is blank, and the glints use it for none."
  },
  {
   "address": 30464,
   "type": "line",
   "text": "Shapes $DC-$E3: the turret's bottom left quarter, sprite 6; $E3 is the shape sprite 1 lays over the letter N."
  },
  {
   "address": 30976,
   "type": "line",
   "text": "Shapes $E4-$EB: the turret's bottom right quarter, sprite 7; $EB is the shape sprite 2 lays over the letter S."
  },
  {
   "address": 31488,
   "type": "line",
   "text": "Shapes $EC-$F1: two glints, three sizes each, that flash on the turret and on each letter of GUNSHIP as it is drawn."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "SMALL's entry, where Rapidlok's load returns: JMP to the unpacker."
  },
  {
   "address": 32771,
   "type": "line",
   "text": "The copy BASIC calls (SYS 32771) and TITLE uses: JMP to $80C9."
  },
  {
   "address": 32774,
   "type": "line",
   "text": "Unpacks a picture: moves the packed bytes, which end at the address in $97FE, up so that they end at $BFFF, then expands them from $9800 up: a byte is copied, unless it is the escape byte ($97FB), which is followed by a value and a count; the value is written 4 + count times, and a count of 255 is followed by another. Stops when $BFFF has been written, with BASIC's ROM out ($01 = $36) while it works."
  },
  {
   "address": 32845,
   "type": "line",
   "text": "The moved data's start becomes the source, $9800 the destination."
  },
  {
   "address": 32863,
   "type": "line",
   "text": "Takes the next byte; anything but the escape byte is copied as it is."
  },
  {
   "address": 32871,
   "type": "line",
   "text": "A run: the value, written four times, then the count."
  },
  {
   "address": 32889,
   "type": "line",
   "text": "The run's count: writes the value that many times more; a count of 255 is followed by another count."
  },
  {
   "address": 32926,
   "type": "line",
   "text": "Reads the next packed byte from ($A5) and moves the pointer on."
  },
  {
   "address": 32937,
   "type": "line",
   "text": "Writes A at ($A7); when that was $BFFF, drops its caller's return address and returns from the unpacker with the ROMs back in ($01 = $37)."
  },
  {
   "address": 32967,
   "type": "line",
   "text": "The value of the run being written."
  },
  {
   "address": 32968,
   "type": "line",
   "text": "The count of the run being written."
  },
  {
   "address": 32969,
   "type": "line",
   "text": "Copies $AA:$A9 bytes from ($A5) to ($A7), upwards, with the memory layout in A put in $01 and interrupts off, then puts the ROMs back ($01 = $37)."
  },
  {
   "address": 33016,
   "type": "line",
   "text": "Eight bytes between SMALL ($8000-$80F7) and TITLE ($8100): neither load changes them, and nothing reads them."
  },
  {
   "address": 33024,
   "type": "line",
   "text": "TITLE's start, where Rapidlok's load returns. Loads CHOPPER and unpacks it, moves it from $9800 to $1800-$3FFF; loads ROTORS and unpacks it to $9800 (the GUNSHIP picture); loads METAL, the sprites, to $7000."
  },
  {
   "address": 33074,
   "type": "line",
   "text": "Silences the SID; copies the GUNSHIP picture's top four rows of colours over the helicopter's ($9800 to $1800 and $9C00 to $1C00, 160 bytes each); clears bank 1's bitmap and screen ($4000-$67FF) by copying a zero up through them."
  },
  {
   "address": 33174,
   "type": "line",
   "text": "The sprites: all eight on, 0 and 3 hi-res and the others multicolour, sprite 0 twice as tall and wide, sprites 3-7 behind the picture; then copies bank 1 to bank 3 ($4000 bytes, every ROM and the I/O out) so that both buffers start blank."
  },
  {
   "address": 33239,
   "type": "line",
   "text": "The tune's tempo for each voice from the TV system ($02A6: 1 for PAL): 2 frames to a length unit on PAL (40 ms at 50 frames a second) and 3 on NTSC (50 ms at 60)."
  },
  {
   "address": 33253,
   "type": "line",
   "text": "Starts the raster interrupt, a red border and background, multicolour bitmap mode with the bitmap at $4000 and the screen at $6000, and fades the volume up from 0 to 15, one step every 8 interrupts."
  },
  {
   "address": 33301,
   "type": "line",
   "text": "The helicopter rises, one pixel line a frame: checks for a key, raises the rotor sound's pitch every fourth frame, and moves on to the next stage once the helicopter is at row 4. At rows 6 and 5 frames without a step come in between, more and more of them, so the helicopter slows and settles."
  },
  {
   "address": 33383,
   "type": "line",
   "text": "One pixel up: the fine scroll ($8FBC) counts down from 7, and when it wraps the helicopter's row ($8F88) goes up one; the rotor frame is drawn, and the turret's four sprites are moved up with the helicopter."
  },
  {
   "address": 33447,
   "type": "line",
   "text": "What the frame adds to the hidden buffer, by the fine scroll: at 7 it shows it (8520) and scrolls the colour RAM (8C77); at 1 to 5 it copies 4 of the helicopter's character rows (its picture's rows 4-7, 8-11 ... 20-23) a row higher than in the buffer shown; at 0 it scrolls the buffer's screen colours (8BA8)."
  },
  {
   "address": 33517,
   "type": "line",
   "text": "Asks the interrupt for a new frame ($8F62) and waits until it has been shown."
  },
  {
   "address": 33528,
   "type": "line",
   "text": "The helicopter is up: the sprites 0-3 take their places on its rotor, and the hover loop starts."
  },
  {
   "address": 33539,
   "type": "line",
   "text": "One frame of the hover: checks for a key, draws the rotor frame, counts the frames ($8FB4). In the first frames the other buffer catches up: the screen colours, then the picture's rows 4 to 23, 4 rows every 8 frames, so both buffers hold the helicopter at its last place."
  },
  {
   "address": 33617,
   "type": "line",
   "text": "Copies the helicopter's screen colours ($1800-$1BFF) into the buffer being drawn, at $6000 or $E000."
  },
  {
   "address": 33649,
   "type": "line",
   "text": "Copies the next 4 of the helicopter's character rows into the buffer being drawn."
  },
  {
   "address": 33705,
   "type": "line",
   "text": "The stages after the helicopter is up: wait for frame 130, swivel the turret (one view every 6 frames) until its frame is below 0, then draw the letters of GUNSHIP one at a time, each with a note and a glint."
  },
  {
   "address": 33748,
   "type": "line",
   "text": "Draws a letter of GUNSHIP (8743) into one buffer, then, 10 frames on, into the other and moves to the next letter; after the seventh it silences the third voice and the stage ends."
  },
  {
   "address": 33828,
   "type": "line",
   "text": "Moves the glints on: sprite 0's on the letter just drawn ($88B1 shapes), sprite 3's on the turret ($88AD shapes); at step 6 of each letter's wait the turret turns one view back."
  },
  {
   "address": 33855,
   "type": "line",
   "text": "From frame 128 of the hover on, shows the buffer just drawn (8520) each frame; then waits for the interrupt."
  },
  {
   "address": 33879,
   "type": "line",
   "text": "The letters are done: waits 20 frames, starts the tune (8E78), and loops on the rotor animation until the tune has ended or a key is pressed; then waits 20 frames more and ends the title."
  },
  {
   "address": 33911,
   "type": "line",
   "text": "Flips the buffers (8520) and waits for the interrupt to show the frame."
  },
  {
   "address": 33923,
   "type": "line",
   "text": "Waits 20 frames, the rotor turning, unless a key is pressed."
  },
  {
   "address": 33949,
   "type": "line",
   "text": "The frames title_pause has left to wait."
  },
  {
   "address": 33950,
   "type": "line",
   "text": "Reads the whole keyboard: drives all the rows of CIA 1 low and, if any column reads low, ends the title (84AA)."
  },
  {
   "address": 33962,
   "type": "line",
   "text": "Ends the title: drops the return address, puts the KERNAL and the I/O back ($01 = $37), stops the VIC's interrupt, silences the SID, and returns to whoever called title_main: BASIC's SYS, which goes on to line 300."
  },
  {
   "address": 33989,
   "type": "line",
   "text": "Called by the interrupt: copies the sprites' x, y, colour and shape for the next frame ($8F63-$8F82) and the x high bits ($8F83) to the copies it reads ($96C7-$96E7), and the rotor frame to $8FA8; then sets the turret's sprites (88C0)."
  },
  {
   "address": 34033,
   "type": "line",
   "text": "From the helicopter's height (row times 8 plus the fine scroll) sets the lines of the interrupt's second and third parts (the LDAs at $8A63 and $8A7C) and the y of the rotor's sprites (at $8A22, $8A27 and $8A2C), so all of them rise with it; past line 255 they stay."
  },
  {
   "address": 34080,
   "type": "line",
   "text": "Swaps the buffers: $8F8C says which is being drawn (0 for bank 3 at $C000, 1 for bank 1 at $4000), and $8F8D gets that buffer's page."
  },
  {
   "address": 34096,
   "type": "line",
   "text": "The tune's tempo: 3 frames to a length unit for NTSC (index 0), 2 for PAL (index 1)."
  },
  {
   "address": 34098,
   "type": "line",
   "text": "Draws the next rotor frame (of 4, counted down in $8F89) into one buffer, the other each time ($8F8B), two character rows from the helicopter's row less 2: eight 80-byte copies, their addresses written into the instructions at $868A-$86B7 first. Rows off the bottom of the screen go to $6464, out of sight."
  },
  {
   "address": 34276,
   "type": "line",
   "text": "The source addresses for the rotor copy, the frame's strip at $A000, $A280, $A500 or $A780 ($8712, $8716)."
  },
  {
   "address": 34442,
   "type": "line",
   "text": "The copy: X from 79 to 0, eight LDA/STA pairs 80 bytes apart."
  },
  {
   "address": 34443,
   "type": "line",
   "text": "The rotor copy's LDA number 1 ($868A), low byte of its source: the frame's strip plus 0, set by rotor_frame."
  },
  {
   "address": 34444,
   "type": "line",
   "text": "The rotor copy's LDA number 1, high byte of its source."
  },
  {
   "address": 34446,
   "type": "line",
   "text": "The rotor copy's STA number 1 ($868D), low byte of its destination: the helicopter's row less 2 in the buffer, plus 0."
  },
  {
   "address": 34447,
   "type": "line",
   "text": "The rotor copy's STA number 1, high byte of its destination."
  },
  {
   "address": 34449,
   "type": "line",
   "text": "The rotor copy's LDA number 2 ($8690), low byte of its source: the frame's strip plus 80, set by rotor_frame."
  },
  {
   "address": 34450,
   "type": "line",
   "text": "The rotor copy's LDA number 2, high byte of its source."
  },
  {
   "address": 34452,
   "type": "line",
   "text": "The rotor copy's STA number 2 ($8693), low byte of its destination: the helicopter's row less 2 in the buffer, plus 80."
  },
  {
   "address": 34453,
   "type": "line",
   "text": "The rotor copy's STA number 2, high byte of its destination."
  },
  {
   "address": 34455,
   "type": "line",
   "text": "The rotor copy's LDA number 3 ($8696), low byte of its source: the frame's strip plus 160, set by rotor_frame."
  },
  {
   "address": 34456,
   "type": "line",
   "text": "The rotor copy's LDA number 3, high byte of its source."
  },
  {
   "address": 34458,
   "type": "line",
   "text": "The rotor copy's STA number 3 ($8699), low byte of its destination: the helicopter's row less 2 in the buffer, plus 160."
  },
  {
   "address": 34459,
   "type": "line",
   "text": "The rotor copy's STA number 3, high byte of its destination."
  },
  {
   "address": 34461,
   "type": "line",
   "text": "The rotor copy's LDA number 4 ($869C), low byte of its source: the frame's strip plus 240, set by rotor_frame."
  },
  {
   "address": 34462,
   "type": "line",
   "text": "The rotor copy's LDA number 4, high byte of its source."
  },
  {
   "address": 34464,
   "type": "line",
   "text": "The rotor copy's STA number 4 ($869F), low byte of its destination: the helicopter's row less 2 in the buffer, plus 240."
  },
  {
   "address": 34465,
   "type": "line",
   "text": "The rotor copy's STA number 4, high byte of its destination."
  },
  {
   "address": 34467,
   "type": "line",
   "text": "The rotor copy's LDA number 5 ($86A2), low byte of its source: the frame's strip plus 320, set by rotor_frame."
  },
  {
   "address": 34468,
   "type": "line",
   "text": "The rotor copy's LDA number 5, high byte of its source."
  },
  {
   "address": 34470,
   "type": "line",
   "text": "The rotor copy's STA number 5 ($86A5), low byte of its destination: the helicopter's row less 2 in the buffer, plus 320."
  },
  {
   "address": 34471,
   "type": "line",
   "text": "The rotor copy's STA number 5, high byte of its destination."
  },
  {
   "address": 34473,
   "type": "line",
   "text": "The rotor copy's LDA number 6 ($86A8), low byte of its source: the frame's strip plus 400, set by rotor_frame."
  },
  {
   "address": 34474,
   "type": "line",
   "text": "The rotor copy's LDA number 6, high byte of its source."
  },
  {
   "address": 34476,
   "type": "line",
   "text": "The rotor copy's STA number 6 ($86AB), low byte of its destination: the helicopter's row less 2 in the buffer, plus 400."
  },
  {
   "address": 34477,
   "type": "line",
   "text": "The rotor copy's STA number 6, high byte of its destination."
  },
  {
   "address": 34479,
   "type": "line",
   "text": "The rotor copy's LDA number 7 ($86AE), low byte of its source: the frame's strip plus 480, set by rotor_frame."
  },
  {
   "address": 34480,
   "type": "line",
   "text": "The rotor copy's LDA number 7, high byte of its source."
  },
  {
   "address": 34482,
   "type": "line",
   "text": "The rotor copy's STA number 7 ($86B1), low byte of its destination: the helicopter's row less 2 in the buffer, plus 480."
  },
  {
   "address": 34483,
   "type": "line",
   "text": "The rotor copy's STA number 7, high byte of its destination."
  },
  {
   "address": 34485,
   "type": "line",
   "text": "The rotor copy's LDA number 8 ($86B4), low byte of its source: the frame's strip plus 560, set by rotor_frame."
  },
  {
   "address": 34486,
   "type": "line",
   "text": "The rotor copy's LDA number 8, high byte of its source."
  },
  {
   "address": 34488,
   "type": "line",
   "text": "The rotor copy's STA number 8 ($86B7), low byte of its destination: the helicopter's row less 2 in the buffer, plus 560."
  },
  {
   "address": 34489,
   "type": "line",
   "text": "The rotor copy's STA number 8, high byte of its destination."
  },
  {
   "address": 34493,
   "type": "line",
   "text": "Clears the character row under the rotor strip (86EF) once the fine scroll is at 6 or 7, so the old frame's bottom row does not stay behind."
  },
  {
   "address": 34543,
   "type": "line",
   "text": "Clears 320 bytes, one character row of the bitmap, from the address in the STA at $8703 (and, 256 on, the STA at $870B)."
  },
  {
   "address": 34564,
   "type": "line",
   "text": "clear_row's first STA ($8703), low byte of the row it clears: the row under the rotor strip, or $6000."
  },
  {
   "address": 34565,
   "type": "line",
   "text": "clear_row's first STA, high byte of the row it clears."
  },
  {
   "address": 34572,
   "type": "line",
   "text": "clear_row's second STA ($870B), low byte: the row's address plus 255, so with X from 64 to 1 it clears the row's last 64 bytes."
  },
  {
   "address": 34573,
   "type": "line",
   "text": "clear_row's second STA, high byte."
  },
  {
   "address": 34578,
   "type": "line",
   "text": "Low bytes of the four rotor frames' places in the GUNSHIP picture: $00, $80, $00, $80."
  },
  {
   "address": 34582,
   "type": "line",
   "text": "Pages of the four rotor frames, added to $A0: $A000, $A280, $A500 and $A780."
  },
  {
   "address": 34586,
   "type": "line",
   "text": "A pause of 2048 reads of $FFFF,X, about 10 milliseconds."
  },
  {
   "address": 34616,
   "type": "line",
   "text": "Silences the SID's third voice."
  },
  {
   "address": 34627,
   "type": "line",
   "text": "Draws letter $8FB7 of GUNSHIP, five character rows tall, from the GUNSHIP picture ($AA00 on) into row 19 of the buffer being drawn, with the KERNAL, BASIC and the I/O out: the cells at its left and right edges are merged through masks, so the helicopter's pixels beside the letter stay. Then sets the letter's glint and plays its note."
  },
  {
   "address": 34685,
   "type": "line",
   "text": "draw_letter's LDA at $877C: the low byte of the letter's place in its row, to which the buffer's row 19 is added for the destination."
  },
  {
   "address": 34696,
   "type": "line",
   "text": "draw_letter's LDA at $8787: the letter's carry into the high byte (1 for P), to which the buffer's row 19 is added."
  },
  {
   "address": 34707,
   "type": "line",
   "text": "One character row of the letter: the left cell through its mask, the middle cells copied, the right cell through its mask; then the next row, 320 bytes on."
  },
  {
   "address": 34714,
   "type": "line",
   "text": "The AND at $8799: the mask for the letter's left cells, from $887C; a set bit takes the letter's pixel, a clear one keeps the screen's."
  },
  {
   "address": 34725,
   "type": "line",
   "text": "The LDX at $87A4: how many bytes of the letter's middle cells to copy straight, from $8898."
  },
  {
   "address": 34743,
   "type": "line",
   "text": "The AND at $87B6: the mask for the letter's right cells, from $8883."
  },
  {
   "address": 34783,
   "type": "line",
   "text": "The letter is in: puts the glint (sprite 0) on it, plays its note on all three voices (885F), and sets sprite 0's high x bit for P, the last. For U, N and H it changes a few cells' colours in both screens ($632C-$637C and $E32C-$E37C); for N and S it gives sprites 1 and 2 the shapes they lay over those letters ($E3, $EB)."
  },
  {
   "address": 34911,
   "type": "line",
   "text": "Plays a short burst of noise on the voice at offset X: frequency $0300, attack 0, decay 10, sustain and release 0."
  },
  {
   "address": 34940,
   "type": "line",
   "text": "For each of the seven letters, the mask for its left column of cells: the bits of the letter's own pixels."
  },
  {
   "address": 34947,
   "type": "line",
   "text": "For each letter, the mask for its right column of cells."
  },
  {
   "address": 34954,
   "type": "line",
   "text": "For each letter, the low byte of its first cell in the bitmap."
  },
  {
   "address": 34961,
   "type": "line",
   "text": "For each letter, the carry into the high byte: 1 for the last letter, P, past the 256th byte of its row."
  },
  {
   "address": 34968,
   "type": "line",
   "text": "For each letter, the number of bytes (8 to a cell) of its middle cells."
  },
  {
   "address": 34989,
   "type": "line",
   "text": "The shapes of sprite 3's glint on the turret, used from the end: $EC, $ED, $EE, then blank ($DB)."
  },
  {
   "address": 34993,
   "type": "line",
   "text": "The shapes of sprite 0's glint on a letter, used from the end: $EF, $F0, $F1, then blank ($DB)."
  },
  {
   "address": 34997,
   "type": "line",
   "text": "The low byte of row 19 of each buffer's bitmap, where the letters go: $C0."
  },
  {
   "address": 34999,
   "type": "line",
   "text": "The high byte of row 19, less the 1 the addition carries: $D7 for bank 3 ($D7C0) and $57 for bank 1 ($57C0)."
  },
  {
   "address": 35001,
   "type": "line",
   "text": "The NMI handler while the KERNAL is out: puts the KERNAL back ($01 = $37) and jumps through its NMI vector."
  },
  {
   "address": 35008,
   "type": "line",
   "text": "Sets sprites 3 to 7 for the turret's view $8FA1 (0 to 6; nothing when negative): sprite 3's x from $8F93, shapes $CC+view for sprite 4 and 8 more for each of 5, 6 and 7; and the four quarters' y from the helicopter's row and fine scroll."
  },
  {
   "address": 35077,
   "type": "line",
   "text": "Starts the title's raster interrupt: CIA 1's timer off; the RAM vectors at $FFFA-$FFFF pointed at nmi ($88B9) and irq ($8940), the reset too; the raster compare at line 0; $01 = $05, the KERNAL and BASIC out and the I/O in."
  },
  {
   "address": 35136,
   "type": "line",
   "text": "The raster interrupt, in three parts down the screen. Line 0: if the main loop has a frame ready ($8F62), sets the fine scroll, takes the new buffer and the sprites' copies, and sets sprites 3-7 (the turret and its glint); shows the rotor's buffer; puts sprites 0-2 on the rotor head; plays the rotor sound and the tune; the next part at the line in the LDA at $8A63."
  },
  {
   "address": 35363,
   "type": "line",
   "text": "The LDA at $8A22: the rotor mast sprite's y in the top part, the helicopter's height plus 18, so it rises with it (set by rotor_band)."
  },
  {
   "address": 35368,
   "type": "line",
   "text": "The LDA at $8A27: the y of the rotor head's left sprite, 29 lines under the mast's."
  },
  {
   "address": 35373,
   "type": "line",
   "text": "The LDA at $8A2C: the y of the rotor head's right sprite."
  },
  {
   "address": 35428,
   "type": "line",
   "text": "The LDA at $8A63: the line of the interrupt's second part, under the rotor's band: the helicopter's height (row times 8 plus the fine scroll) plus 54."
  },
  {
   "address": 35435,
   "type": "line",
   "text": "The second part, below the rotor's band: shows the helicopter's buffer (CIA 2's port A), the next part at the line in the LDA at $8A7C. The third part, from $8A84: sprites 0-2 become the letter's glint and the two shapes over N and S, at the places in the copies; the next interrupt at line 0."
  },
  {
   "address": 35453,
   "type": "line",
   "text": "The LDA at $8A7C: the line of the interrupt's third part, 88 lines below the second."
  },
  {
   "address": 35561,
   "type": "line",
   "text": "The next interrupt at line 0; then, where the other parts join ($8AEE), acknowledges the VIC and puts back $01, kept in the LDA at $8AF3, and the registers."
  },
  {
   "address": 35572,
   "type": "line",
   "text": "The LDA at $8AF3: $01 as the interrupt found it, put back as it leaves."
  },
  {
   "address": 35581,
   "type": "line",
   "text": "Copies one character row of the helicopter's bitmap, 320 bytes, from row X of $2000 to row Y of the hidden buffer, the addresses written into the four LDA/STA pairs at $8B88 first."
  },
  {
   "address": 35721,
   "type": "line",
   "text": "copy_row's first LDA ($8B88), low byte of its source: the helicopter picture's row, plus 0."
  },
  {
   "address": 35722,
   "type": "line",
   "text": "copy_row's first LDA, high byte of its source."
  },
  {
   "address": 35724,
   "type": "line",
   "text": "copy_row's first STA ($8B8B), low byte of its destination: the buffer's row, plus 0."
  },
  {
   "address": 35725,
   "type": "line",
   "text": "copy_row's first STA, high byte of its destination."
  },
  {
   "address": 35727,
   "type": "line",
   "text": "copy_row's second LDA ($8B8E), low byte of its source: the helicopter picture's row, plus 80."
  },
  {
   "address": 35728,
   "type": "line",
   "text": "copy_row's second LDA, high byte of its source."
  },
  {
   "address": 35730,
   "type": "line",
   "text": "copy_row's second STA ($8B91), low byte of its destination: the buffer's row, plus 80."
  },
  {
   "address": 35731,
   "type": "line",
   "text": "copy_row's second STA, high byte of its destination."
  },
  {
   "address": 35733,
   "type": "line",
   "text": "copy_row's third LDA ($8B94), low byte of its source: the helicopter picture's row, plus 160."
  },
  {
   "address": 35734,
   "type": "line",
   "text": "copy_row's third LDA, high byte of its source."
  },
  {
   "address": 35736,
   "type": "line",
   "text": "copy_row's third STA ($8B97), low byte of its destination: the buffer's row, plus 160."
  },
  {
   "address": 35737,
   "type": "line",
   "text": "copy_row's third STA, high byte of its destination."
  },
  {
   "address": 35739,
   "type": "line",
   "text": "copy_row's fourth LDA ($8B9A), low byte of its source: the helicopter picture's row, plus 240."
  },
  {
   "address": 35740,
   "type": "line",
   "text": "copy_row's fourth LDA, high byte of its source."
  },
  {
   "address": 35742,
   "type": "line",
   "text": "copy_row's fourth STA ($8B9D), low byte of its destination: the buffer's row, plus 240."
  },
  {
   "address": 35743,
   "type": "line",
   "text": "copy_row's fourth STA, high byte of its destination."
  },
  {
   "address": 35752,
   "type": "line",
   "text": "Scrolls the screen colours of the buffer being drawn ($6028-$63E7, or $E028 in bank 3) up two rows, since it was last shown two rows lower, and brings two rows of the helicopter's colours in at the bottom, from $1800 on."
  },
  {
   "address": 35874,
   "type": "line",
   "text": "The LDA at $8C21, low byte: where scroll_colours takes the two new rows of colours for bank 1's screen."
  },
  {
   "address": 35875,
   "type": "line",
   "text": "The LDA at $8C21, high byte."
  },
  {
   "address": 35950,
   "type": "line",
   "text": "The LDA at $8C6D, low byte: where scroll_colours takes the two new rows for bank 3's screen."
  },
  {
   "address": 35951,
   "type": "line",
   "text": "The LDA at $8C6D, high byte."
  },
  {
   "address": 35959,
   "type": "line",
   "text": "Waits for line $30, marks the frame ready ($8F62), and scrolls the colour RAM up one row, 24 rows of 40, bringing the helicopter's next row of third colours in at the bottom from $1C00 on."
  },
  {
   "address": 36030,
   "type": "line",
   "text": "The LDA at $8CBD, low byte: the colour RAM row scroll_cells moves up, starting at row 1 ($D828)."
  },
  {
   "address": 36031,
   "type": "line",
   "text": "The LDA at $8CBD, high byte."
  },
  {
   "address": 36033,
   "type": "line",
   "text": "The STA at $8CC0, low byte: the colour RAM row it goes to, starting at row 0 ($D800)."
  },
  {
   "address": 36034,
   "type": "line",
   "text": "The STA at $8CC0, high byte."
  },
  {
   "address": 36072,
   "type": "line",
   "text": "The LDA at $8CE7, low byte: the helicopter's row of third colours that enters colour RAM's last row."
  },
  {
   "address": 36073,
   "type": "line",
   "text": "The LDA at $8CE7, high byte."
  },
  {
   "address": 36084,
   "type": "line",
   "text": "Loads file A of three, CHOPPER, ROTORS or METAL, from drive 8 to its address in the tables at $8D21-$8D41, through SETLFS, SETNAM and the KERNAL's LOAD."
  },
  {
   "address": 36129,
   "type": "line",
   "text": "The three file names: CHOPPER, ROTORS, METAL."
  },
  {
   "address": 36147,
   "type": "line",
   "text": "Low bytes of the three names' addresses."
  },
  {
   "address": 36150,
   "type": "line",
   "text": "High bytes of the names' addresses."
  },
  {
   "address": 36153,
   "type": "line",
   "text": "The names' lengths: 7, 6, 5."
  },
  {
   "address": 36156,
   "type": "line",
   "text": "Low bytes of the load addresses: $97FB, $97FB, $7000."
  },
  {
   "address": 36159,
   "type": "line",
   "text": "High bytes of the load addresses."
  },
  {
   "address": 36162,
   "type": "line",
   "text": "Low bytes of each character row's offset in a bitmap, row times 320, rows 0 to 24."
  },
  {
   "address": 36187,
   "type": "line",
   "text": "High bytes of the rows' offsets in a bitmap."
  },
  {
   "address": 36212,
   "type": "line",
   "text": "Low bytes of each row's offset in a screen, row times 40, rows 0 to 24."
  },
  {
   "address": 36237,
   "type": "line",
   "text": "High bytes of the rows' offsets in a screen."
  },
  {
   "address": 36262,
   "type": "line",
   "text": "The rotor's sound, once a frame: each voice switches its gate on and off with its own timing; at each switch its pitch goes back to its start, and each frame between a step is added to it. Once the first letter is drawn ($8FB8) it only counts the frame ($96F0)."
  },
  {
   "address": 36304,
   "type": "line",
   "text": "The LDX at $8DCF: the last voice the rotor sound works on, 2, so all three."
  },
  {
   "address": 36401,
   "type": "line",
   "text": "Writes the voice's pitch to the SID, high byte then low; then the next voice down, and the frame is counted ($96F0)."
  },
  {
   "address": 36426,
   "type": "line",
   "text": "0 until the rotor sound has set the SID up from $8E63."
  },
  {
   "address": 36427,
   "type": "line",
   "text": "For each voice, how long its gate stays on: 4, 3 and 2, each a frame less than it lasts."
  },
  {
   "address": 36430,
   "type": "line",
   "text": "For each voice, how long its gate stays off: 0, a single frame."
  },
  {
   "address": 36433,
   "type": "line",
   "text": "For each voice, its control register, the gate bit toggled: noise, noise and pulse."
  },
  {
   "address": 36434,
   "type": "line",
   "text": "The second voice's control register, gate bit toggled: noise."
  },
  {
   "address": 36435,
   "type": "line",
   "text": "The third voice's control register, gate bit toggled: pulse."
  },
  {
   "address": 36436,
   "type": "line",
   "text": "For each voice, the low byte of its pitch at the start of each beat."
  },
  {
   "address": 36439,
   "type": "line",
   "text": "For each voice, the high byte of its pitch at the start of each beat; the third (at $8E59) goes up every fourth frame while the helicopter rises, so the whine climbs."
  },
  {
   "address": 36441,
   "type": "line",
   "text": "The third voice's pitch at each beat, high byte, raised every fourth frame while the helicopter rises."
  },
  {
   "address": 36442,
   "type": "line",
   "text": "For each voice, the step added to its pitch each frame: $7F, -12, $7F."
  },
  {
   "address": 36445,
   "type": "line",
   "text": "Each voice's first register in the SID: 0, 7, 14."
  },
  {
   "address": 36448,
   "type": "line",
   "text": "For each voice, the frames left until its gate changes."
  },
  {
   "address": 36451,
   "type": "line",
   "text": "The SID's first 21 registers for the rotor sound: the three voices' frequencies, pulse widths, waveforms and envelopes."
  },
  {
   "address": 36472,
   "type": "line",
   "text": "Starts the tune: sets the SID's 25 registers from $90FE and marks it playing ($8F52 = 0)."
  },
  {
   "address": 36489,
   "type": "line",
   "text": "Plays the tune, once a frame: for each voice whose note has run out, the gate goes off, the next note is read from its stream and its frequency set from the tables at $9006 and $9082, and the next byte, the length, times the tempo, is how many frames it lasts; a note of $80 is a rest and $81 ends the tune."
  },
  {
   "address": 36623,
   "type": "line",
   "text": "The next voice down, 2 to 0."
  },
  {
   "address": 36632,
   "type": "line",
   "text": "Reads the next byte of the voice's stream, from the address written into its LDA, and moves on."
  },
  {
   "address": 36633,
   "type": "line",
   "text": "The LDA at $8F18, low byte: where the voice's stream is read next."
  },
  {
   "address": 36634,
   "type": "line",
   "text": "The LDA at $8F18, high byte."
  },
  {
   "address": 36646,
   "type": "line",
   "text": "Multiplies A by Y, 8 bits by 8, the product kept in the LDA at $8F48 and returned in A."
  },
  {
   "address": 36681,
   "type": "line",
   "text": "The LDA at $8F48: the product multiply builds and returns."
  },
  {
   "address": 36683,
   "type": "line",
   "text": "The voice the tune player is on, 2 down to 0."
  },
  {
   "address": 36684,
   "type": "line",
   "text": "The note just read: below $80 a note, $80 a rest, $81 the end."
  },
  {
   "address": 36685,
   "type": "line",
   "text": "The multiplier, shifted left each step."
  },
  {
   "address": 36686,
   "type": "line",
   "text": "The multiplicand, shifted right each step."
  },
  {
   "address": 36687,
   "type": "line",
   "text": "For each voice, non-zero if it plays: all three are $09."
  },
  {
   "address": 36690,
   "type": "line",
   "text": "0 while the tune plays; 1 once a voice has read the end ($81)."
  },
  {
   "address": 36691,
   "type": "line",
   "text": "For each voice, the low byte of where its stream is read next; at the start $9117, $91C7 and $95D1."
  },
  {
   "address": 36694,
   "type": "line",
   "text": "For each voice, the high byte of where its stream is read next."
  },
  {
   "address": 36697,
   "type": "line",
   "text": "For each voice, its waveform with the gate bit: $41 pulse for the first, $21 sawtooth for the others (from $9003)."
  },
  {
   "address": 36700,
   "type": "line",
   "text": "Three bytes after the waveforms that nothing reads."
  },
  {
   "address": 36703,
   "type": "line",
   "text": "For each voice, the frames left on its note."
  },
  {
   "address": 36706,
   "type": "line",
   "text": "Set by the main loop when a frame is drawn; the interrupt clears it once it has shown it."
  },
  {
   "address": 36707,
   "type": "line",
   "text": "Each sprite's x for the next frame, below the rotor: 0 the letter's glint, 1 and 2 the shapes over N and S, 3 the turret's glint, 4-7 the turret's quarters."
  },
  {
   "address": 36710,
   "type": "line",
   "text": "Sprite 3's x: the turret's glint, from $8F93 by the turret's view."
  },
  {
   "address": 36715,
   "type": "line",
   "text": "Each sprite's y for the next frame; the turret's quarters move up with the helicopter."
  },
  {
   "address": 36719,
   "type": "line",
   "text": "Sprite 4's y: the turret's top left quarter, from the helicopter's row and fine scroll."
  },
  {
   "address": 36720,
   "type": "line",
   "text": "Sprite 5's y: the turret's top right quarter, from the helicopter's row and fine scroll."
  },
  {
   "address": 36721,
   "type": "line",
   "text": "Sprite 6's y: the turret's bottom left quarter, from the helicopter's row and fine scroll, 21 lines lower."
  },
  {
   "address": 36722,
   "type": "line",
   "text": "Sprite 7's y: the turret's bottom right quarter, from the helicopter's row and fine scroll, 21 lines lower."
  },
  {
   "address": 36723,
   "type": "line",
   "text": "Each sprite's colour: white for the glints (0 and 3), dark grey for the shapes over N and S (1 and 2), light grey for the turret."
  },
  {
   "address": 36731,
   "type": "line",
   "text": "Each sprite's shape for the next frame, $C0-$F1."
  },
  {
   "address": 36732,
   "type": "line",
   "text": "Sprite 1's shape below the rotor: blank until the letter N, then $E3."
  },
  {
   "address": 36733,
   "type": "line",
   "text": "Sprite 2's shape below the rotor: blank until the letter S, then $EB."
  },
  {
   "address": 36734,
   "type": "line",
   "text": "Sprite 3's shape: the turret's glint, from $88AD."
  },
  {
   "address": 36735,
   "type": "line",
   "text": "Sprite 4's shape: the turret's top left quarter, $CC plus the view plus 0."
  },
  {
   "address": 36736,
   "type": "line",
   "text": "Sprite 5's shape: the turret's top right quarter, $CC plus the view plus 8."
  },
  {
   "address": 36737,
   "type": "line",
   "text": "Sprite 6's shape: the turret's bottom left quarter, $CC plus the view plus 16."
  },
  {
   "address": 36738,
   "type": "line",
   "text": "Sprite 7's shape: the turret's bottom right quarter, $CC plus the view plus 24."
  },
  {
   "address": 36739,
   "type": "line",
   "text": "The x high bits for the next frame: bit 0 is set for the last letter's glint, past x 255."
  },
  {
   "address": 36740,
   "type": "line",
   "text": "The y of sprites 0 to 3 once the helicopter is up: the letters' row and the turret."
  },
  {
   "address": 36744,
   "type": "line",
   "text": "The helicopter's top character row: 30 at the start, below the screen, up to 4."
  },
  {
   "address": 36745,
   "type": "line",
   "text": "The rotor frame drawn next, 3 down to 0, then 3 again."
  },
  {
   "address": 36746,
   "type": "line",
   "text": "0 in the interrupt's top part, 1 once line $5D is passed."
  },
  {
   "address": 36747,
   "type": "line",
   "text": "Which buffer the rotor strip goes into, swapped after each rotor frame."
  },
  {
   "address": 36748,
   "type": "line",
   "text": "Which buffer is being drawn: 0 for bank 3, 1 for bank 1."
  },
  {
   "address": 36749,
   "type": "line",
   "text": "The first page of the buffer being drawn: $C0 or $40."
  },
  {
   "address": 36750,
   "type": "line",
   "text": "The value for CIA 2's port A that shows each buffer: 2 for bank 1 ($4000), 0 for bank 3 ($C000)."
  },
  {
   "address": 36752,
   "type": "line",
   "text": "The first page of each buffer: $C0 for bank 3, $40 for bank 1."
  },
  {
   "address": 36754,
   "type": "line",
   "text": "The file load_file is loading, 0 to 2."
  },
  {
   "address": 36755,
   "type": "line",
   "text": "Sprite 3's x for each of the turret's seven views: the glint on the gun's muzzle."
  },
  {
   "address": 36762,
   "type": "line",
   "text": "Sprite 0's x for each of the seven letters: the glint on the letter just drawn."
  },
  {
   "address": 36769,
   "type": "line",
   "text": "The turret's view, 0 to 6: it starts at 3, facing out, turns to 0 and then back one view at each letter."
  },
  {
   "address": 36770,
   "type": "line",
   "text": "At rows 6 and 5 of the rise, the frames left before the next change of pace."
  },
  {
   "address": 36771,
   "type": "line",
   "text": "What slow_count starts from: halved each time at row 6, so frames without a step come more often, and raised by one each time at row 5, so steps come less often."
  },
  {
   "address": 36772,
   "type": "line",
   "text": "Frames until the turret's next view, 5 down to 0."
  },
  {
   "address": 36773,
   "type": "line",
   "text": "0 until frame 130 of the hover, when the turret starts to swivel."
  },
  {
   "address": 36774,
   "type": "line",
   "text": "The shape of the letter's glint, 3 down to 0 in the table at $88B1; below 0, it stays."
  },
  {
   "address": 36776,
   "type": "line",
   "text": "The rotor frame for the rotor's sprites, copied for the interrupt."
  },
  {
   "address": 36777,
   "type": "line",
   "text": "The buffer the interrupt shows below the rotor's band."
  },
  {
   "address": 36778,
   "type": "line",
   "text": "The buffer the interrupt shows above line $5D, the rotor's band."
  },
  {
   "address": 36779,
   "type": "line",
   "text": "The character row the next helicopter row is copied to."
  },
  {
   "address": 36780,
   "type": "line",
   "text": "The character row of the helicopter's picture copied next."
  },
  {
   "address": 36781,
   "type": "line",
   "text": "For each copy step, the first of the 4 rows of the helicopter's picture to copy: 4, 8, 12, 16, 20."
  },
  {
   "address": 36786,
   "type": "line",
   "text": "The rows left in this step's copy, 3 down to 0."
  },
  {
   "address": 36787,
   "type": "line",
   "text": "The cells of the letter left to draw."
  },
  {
   "address": 36788,
   "type": "line",
   "text": "Frames since the helicopter came up, low byte."
  },
  {
   "address": 36789,
   "type": "line",
   "text": "Frames since the helicopter came up, high byte."
  },
  {
   "address": 36790,
   "type": "line",
   "text": "1 when the letter has gone into one buffer and is drawn into the other next frame."
  },
  {
   "address": 36791,
   "type": "line",
   "text": "The letter being drawn, 0 to 6; 7 when GUNSHIP is complete."
  },
  {
   "address": 36792,
   "type": "line",
   "text": "0 until the first letter is drawn; then the rotor's sound stops, for the letters' notes."
  },
  {
   "address": 36793,
   "type": "line",
   "text": "Frames until the next letter, 10 down; the glints and the turret step on it too."
  },
  {
   "address": 36794,
   "type": "line",
   "text": "0 while the turret swivels, 1 when it has finished."
  },
  {
   "address": 36795,
   "type": "line",
   "text": "0 until all seven letters are drawn."
  },
  {
   "address": 36796,
   "type": "line",
   "text": "The fine vertical scroll, 7 down to 0, the helicopter's position inside its character row."
  },
  {
   "address": 36797,
   "type": "line",
   "text": "Bytes TITLE's file brings that the program never reads, a pattern of four $FF and four $00 from $8FC0, as RAM often holds at power-on."
  },
  {
   "address": 36864,
   "type": "line",
   "text": "For each voice, the frames to a length unit: set from tempo_by_tv at the start."
  },
  {
   "address": 36867,
   "type": "line",
   "text": "For each voice, its waveform: $41 pulse, $21 sawtooth, $21 sawtooth."
  },
  {
   "address": 36870,
   "type": "line",
   "text": "The low bytes of the notes' SID frequencies, 16 to an octave (12 notes, then 4 zeros), from C0 as an NTSC machine sounds it ($010C, 16.35 Hz); a PAL machine's clock is 4 % slower, so there every note is about two thirds of a semitone flat."
  },
  {
   "address": 36994,
   "type": "line",
   "text": "The high bytes of the notes' frequencies, in the same order."
  },
  {
   "address": 37118,
   "type": "line",
   "text": "The SID's 25 registers at the start of the tune: the voices' pulse widths and envelopes, the filter and the volume."
  },
  {
   "address": 37143,
   "type": "line",
   "text": "The first voice's stream: a note number and a length for each note, $80 a rest, $81 the end. The tune is the opening of Wagner's Ride of the Valkyries."
  },
  {
   "address": 37319,
   "type": "line",
   "text": "The second voice's stream."
  },
  {
   "address": 38144,
   "type": "line",
   "text": "The second voice's stream, continued."
  },
  {
   "address": 38353,
   "type": "line",
   "text": "The third voice's stream, to $96C3, the end of TITLE's file."
  },
  {
   "address": 38598,
   "type": "line",
   "text": "The row the rotor copy is drawing, kept while it computes."
  },
  {
   "address": 38599,
   "type": "line",
   "text": "The interrupt's copy of the sprites' x, from $8F63."
  },
  {
   "address": 38600,
   "type": "line",
   "text": "The interrupt's copy of sprite 1's x: the third part sets it."
  },
  {
   "address": 38601,
   "type": "line",
   "text": "The interrupt's copy of sprite 2's x: the third part sets it."
  },
  {
   "address": 38602,
   "type": "line",
   "text": "The interrupt's copy of sprite 3's x: the top part sets it."
  },
  {
   "address": 38603,
   "type": "line",
   "text": "The interrupt's copy of sprite 4's x: the top part sets it."
  },
  {
   "address": 38604,
   "type": "line",
   "text": "The interrupt's copy of sprite 5's x: the top part sets it."
  },
  {
   "address": 38605,
   "type": "line",
   "text": "The interrupt's copy of sprite 6's x: the top part sets it."
  },
  {
   "address": 38606,
   "type": "line",
   "text": "The interrupt's copy of sprite 7's x: the top part sets it."
  },
  {
   "address": 38607,
   "type": "line",
   "text": "The interrupt's copy of the sprites' y."
  },
  {
   "address": 38608,
   "type": "line",
   "text": "The interrupt's copy of sprite 1's y: the third part sets it."
  },
  {
   "address": 38609,
   "type": "line",
   "text": "The interrupt's copy of sprite 2's y: the third part sets it."
  },
  {
   "address": 38610,
   "type": "line",
   "text": "The interrupt's copy of sprite 3's y: the top part sets it."
  },
  {
   "address": 38611,
   "type": "line",
   "text": "The interrupt's copy of sprite 4's y: the top part sets it."
  },
  {
   "address": 38612,
   "type": "line",
   "text": "The interrupt's copy of sprite 5's y: the top part sets it."
  },
  {
   "address": 38613,
   "type": "line",
   "text": "The interrupt's copy of sprite 6's y: the top part sets it."
  },
  {
   "address": 38614,
   "type": "line",
   "text": "The interrupt's copy of sprite 7's y: the top part sets it."
  },
  {
   "address": 38615,
   "type": "line",
   "text": "The interrupt's copy of the sprites' colours."
  },
  {
   "address": 38616,
   "type": "line",
   "text": "The interrupt's copy of sprite 1's colour: the third part sets it."
  },
  {
   "address": 38617,
   "type": "line",
   "text": "The interrupt's copy of sprite 2's colour: the third part sets it."
  },
  {
   "address": 38618,
   "type": "line",
   "text": "The interrupt's copy of sprite 3's colour: the top part sets it."
  },
  {
   "address": 38619,
   "type": "line",
   "text": "The interrupt's copy of sprite 4's colour: the top part sets it."
  },
  {
   "address": 38620,
   "type": "line",
   "text": "The interrupt's copy of sprite 5's colour: the top part sets it."
  },
  {
   "address": 38621,
   "type": "line",
   "text": "The interrupt's copy of sprite 6's colour: the top part sets it."
  },
  {
   "address": 38622,
   "type": "line",
   "text": "The interrupt's copy of sprite 7's colour: the top part sets it."
  },
  {
   "address": 38623,
   "type": "line",
   "text": "The interrupt's copy of the sprites' shapes."
  },
  {
   "address": 38626,
   "type": "line",
   "text": "The interrupt's copy of sprites 3 to 7's shapes, which the top part writes into the screen's sprite pointers."
  },
  {
   "address": 38631,
   "type": "line",
   "text": "The interrupt's copy of the x high bits."
  },
  {
   "address": 38632,
   "type": "line",
   "text": "Counts the rise's frames; every fourth raises the rotor's pitch."
  },
  {
   "address": 38633,
   "type": "line",
   "text": "For each voice, the low byte of the rotor sound's pitch now."
  },
  {
   "address": 38636,
   "type": "line",
   "text": "For each voice, the high byte of its pitch now."
  },
  {
   "address": 38639,
   "type": "line",
   "text": "The voice the rotor sound is on."
  },
  {
   "address": 38640,
   "type": "line",
   "text": "Counts the interrupt's frames, for the fade-in."
  },
  {
   "address": 38907,
   "type": "line",
   "text": "The unpacker's header, which each packed file brings with it: the escape byte that starts a run."
  },
  {
   "address": 38908,
   "type": "line",
   "text": "The unpacker's header: where the unpacked picture starts, $9800."
  },
  {
   "address": 38909,
   "type": "line",
   "text": "The unpacker's header: where the unpacked picture starts, high byte."
  },
  {
   "address": 38910,
   "type": "line",
   "text": "The unpacker's header: the address after the packed data's last byte."
  },
  {
   "address": 38911,
   "type": "line",
   "text": "The unpacker's header: the end of the packed data, high byte."
  },
  {
   "address": 38912,
   "type": "line",
   "text": "ROTORS, unpacked: the GUNSHIP picture's screen colours, 1000 bytes. Only its first four rows are used: they go to $1800."
  },
  {
   "address": 39912,
   "type": "line",
   "text": "The 24 bytes after the GUNSHIP picture's screen colours: the paint program's sprite pointers, $28-$2F, at the end."
  },
  {
   "address": 39936,
   "type": "line",
   "text": "The GUNSHIP picture's third colour for each cell, 1000 bytes; only its first four rows are used, at $1C00."
  },
  {
   "address": 40936,
   "type": "line",
   "text": "The 24 bytes after the logo picture's third colours."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "The GUNSHIP picture's bitmap, its first two character rows: the first of four rotor frames, which the title copies over the helicopter's rotor in turn (from $8712 and $8716)."
  },
  {
   "address": 41600,
   "type": "line",
   "text": "Rows 2 and 3 of the GUNSHIP picture: the second rotor frame."
  },
  {
   "address": 41680,
   "type": "line",
   "text": "Rotor frame 2, bytes 80 to 159: where the rotor copy's LDA number 2 ($8690) points, the frame drawn last."
  },
  {
   "address": 41760,
   "type": "line",
   "text": "Rotor frame 2, bytes 160 to 239: where the rotor copy's LDA number 3 ($8696) points, the frame drawn last."
  },
  {
   "address": 41840,
   "type": "line",
   "text": "Rotor frame 2, bytes 240 to 319: where the rotor copy's LDA number 4 ($869C) points, the frame drawn last."
  },
  {
   "address": 41920,
   "type": "line",
   "text": "Rotor frame 2, bytes 320 to 399: where the rotor copy's LDA number 5 ($86A2) points, the frame drawn last."
  },
  {
   "address": 42000,
   "type": "line",
   "text": "Rotor frame 2, bytes 400 to 479: where the rotor copy's LDA number 6 ($86A8) points, the frame drawn last."
  },
  {
   "address": 42080,
   "type": "line",
   "text": "Rotor frame 2, bytes 480 to 559: where the rotor copy's LDA number 7 ($86AE) points, the frame drawn last."
  },
  {
   "address": 42160,
   "type": "line",
   "text": "Rotor frame 2, bytes 560 to 639: where the rotor copy's LDA number 8 ($86B4) points, the frame drawn last."
  },
  {
   "address": 42240,
   "type": "line",
   "text": "Rows 4 and 5 of the GUNSHIP picture: the third rotor frame."
  },
  {
   "address": 42880,
   "type": "line",
   "text": "Rows 6 and 7 of the GUNSHIP picture: the fourth rotor frame."
  },
  {
   "address": 43520,
   "type": "line",
   "text": "Rows 8 to 10 of the GUNSHIP picture: the top of the seven letters of GUNSHIP, five rows tall, which the title draws one at a time into row 19 of the screen."
  },
  {
   "address": 44480,
   "type": "line",
   "text": "Rows 11 and 12 of the GUNSHIP picture: the bottom of the letters."
  },
  {
   "address": 45120,
   "type": "line",
   "text": "Rows 13 to 15 of the GUNSHIP picture, all zeros: nothing is drawn there."
  },
  {
   "address": 46080,
   "type": "line",
   "text": "Rows 16 to 18 of the GUNSHIP picture, all zeros: nothing is drawn there."
  },
  {
   "address": 47040,
   "type": "line",
   "text": "Rows 19 to 21 of the GUNSHIP picture, all zeros: nothing is drawn there."
  },
  {
   "address": 48000,
   "type": "line",
   "text": "Rows 22 to 24 of the GUNSHIP picture, all zeros: nothing is drawn there."
  },
  {
   "address": 48960,
   "type": "line",
   "text": "The 192 bytes after the GUNSHIP picture's 8000-byte bitmap, zeros."
  }
 ]
}