{
 "schema": 1,
 "platform": "c64",
 "game": "gunship",
 "part": "library",
 "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"
   ],
   [
    51200,
    52223,
    "screen RAM"
   ],
   [
    0,
    1023,
    "zero page, the stack and the KERNAL's work area: variables, set as the programs run"
   ],
   [
    1024,
    2047,
    "the text screen at $0400, where the boot program printed the credits"
   ],
   [
    2048,
    28671,
    "left in memory by the boot program and the title sequence, which the title part lists: BASIC's program and variables, the pictures and the bitmap in bank 1"
   ],
   [
    28810,
    29951,
    "left from the title's sprite shapes, METAL, after the roster check"
   ],
   [
    35661,
    35839,
    "left from the title's code, TITLE, after the library's end"
   ],
   [
    36864,
    38906,
    "left from the title's code, TITLE; the front end loads a theatre's data here later"
   ],
   [
    51200,
    53247,
    "the front end's text screen at $C800 and the memory after it, written as it runs"
   ],
   [
    53248,
    57343,
    "the RAM under the I/O area, left from the title sequence, which copied what it holds at $3000 here; the front end keeps a picture's tiles at $CC00-$DFFF later (KE+45)"
   ],
   [
    65344,
    65535,
    "past the end of the boot program's copy of the sprite shapes: the KERNAL's RAM underneath, which the front end does not use"
   ],
   [
    2049,
    26121,
    "2 parts: Base, Front end"
   ],
   [
    36864,
    38527,
    "Front end"
   ],
   [
    40960,
    49151,
    "2 parts: Base, Front end"
   ],
   [
    52224,
    52844,
    "Base"
   ]
  ],
  "extra": [
   [
    49152,
    51199,
    "character set"
   ]
  ],
  "edges": [
   0,
   256,
   512,
   1024,
   2048,
   4096,
   16384,
   32768,
   40960,
   49152,
   53248,
   57344
  ],
  "elsewhere": [
   [
    2049,
    26121,
    "2 parts: Base, Front end"
   ],
   [
    36864,
    38527,
    "Front end"
   ],
   [
    40960,
    49151,
    "2 parts: Base, Front end"
   ],
   [
    52224,
    52844,
    "Base"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 2048,
   "type": "Undefined"
  },
  {
   "start": 26122,
   "end": 28671,
   "type": "Undefined"
  },
  {
   "start": 28672,
   "end": 28758,
   "type": "Code"
  },
  {
   "start": 28759,
   "end": 28808,
   "type": "Byte"
  },
  {
   "start": 28809,
   "end": 29951,
   "type": "Undefined"
  },
  {
   "start": 29952,
   "end": 30071,
   "type": "Code"
  },
  {
   "start": 30072,
   "end": 30551,
   "type": "Byte"
  },
  {
   "start": 30552,
   "end": 30743,
   "type": "Code"
  },
  {
   "start": 30744,
   "end": 31957,
   "type": "Byte"
  },
  {
   "start": 31958,
   "end": 32090,
   "type": "Code"
  },
  {
   "start": 32091,
   "end": 32114,
   "type": "Byte"
  },
  {
   "start": 32115,
   "end": 32349,
   "type": "Code"
  },
  {
   "start": 32350,
   "end": 32351,
   "type": "Byte"
  },
  {
   "start": 32352,
   "end": 32738,
   "type": "Code"
  },
  {
   "start": 32739,
   "end": 32748,
   "type": "Byte"
  },
  {
   "start": 32749,
   "end": 32762,
   "type": "Code"
  },
  {
   "start": 32763,
   "end": 32776,
   "type": "Byte"
  },
  {
   "start": 32777,
   "end": 33324,
   "type": "Code"
  },
  {
   "start": 33325,
   "end": 33344,
   "type": "Byte"
  },
  {
   "start": 33345,
   "end": 33460,
   "type": "Code"
  },
  {
   "start": 33461,
   "end": 33576,
   "type": "Byte"
  },
  {
   "start": 33577,
   "end": 33625,
   "type": "Code"
  },
  {
   "start": 33626,
   "end": 33721,
   "type": "Byte"
  },
  {
   "start": 33722,
   "end": 33729,
   "type": "Code"
  },
  {
   "start": 33730,
   "end": 33814,
   "type": "Byte"
  },
  {
   "start": 33815,
   "end": 33822,
   "type": "Code"
  },
  {
   "start": 33823,
   "end": 33930,
   "type": "Byte"
  },
  {
   "start": 33931,
   "end": 33999,
   "type": "Code"
  },
  {
   "start": 34000,
   "end": 34031,
   "type": "Byte"
  },
  {
   "start": 34032,
   "end": 34194,
   "type": "Code"
  },
  {
   "start": 34195,
   "end": 34195,
   "type": "Byte"
  },
  {
   "start": 34196,
   "end": 34312,
   "type": "Code"
  },
  {
   "start": 34313,
   "end": 34362,
   "type": "Byte"
  },
  {
   "start": 34363,
   "end": 34674,
   "type": "Code"
  },
  {
   "start": 34675,
   "end": 34677,
   "type": "Byte"
  },
  {
   "start": 34678,
   "end": 35068,
   "type": "Code"
  },
  {
   "start": 35069,
   "end": 35214,
   "type": "Byte"
  },
  {
   "start": 35215,
   "end": 35337,
   "type": "Code"
  },
  {
   "start": 35338,
   "end": 35342,
   "type": "Byte"
  },
  {
   "start": 35343,
   "end": 35660,
   "type": "Code"
  },
  {
   "start": 35661,
   "end": 35839,
   "type": "Undefined"
  },
  {
   "start": 35840,
   "end": 36863,
   "type": "Byte"
  },
  {
   "start": 38528,
   "end": 38906,
   "type": "Undefined"
  },
  {
   "start": 38907,
   "end": 40959,
   "type": "Byte"
  },
  {
   "start": 49152,
   "end": 51199,
   "type": "Byte"
  },
  {
   "start": 51200,
   "end": 52223,
   "type": "Undefined"
  },
  {
   "start": 52845,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 57344,
   "end": 65343,
   "type": "Byte"
  },
  {
   "start": 65344,
   "end": 65438,
   "type": "Undefined"
  },
  {
   "start": 65439,
   "end": 65532,
   "type": "Code"
  },
  {
   "start": 65533,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 1,
   "name": "zpa_01",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 47,
   "name": "zpa_2F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 48,
   "name": "zpa_30",
   "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": 189,
   "name": "zpa_BD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 217,
   "name": "zpf_D9",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 247,
   "name": "zpa_F7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 248,
   "name": "zpa_F8",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 249,
   "name": "zpa_F9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 250,
   "name": "zpa_FA",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 251,
   "name": "zpa_FB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 252,
   "name": "zpa_FC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 253,
   "name": "zpa_FD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 254,
   "name": "zpa_FE",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 648,
   "name": "a_0288",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 788,
   "name": "a_0314",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 789,
   "name": "a_0315",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 28672,
   "name": "roster_check",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28678,
   "name": "b_7006",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28687,
   "name": "b_700F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28705,
   "name": "r_7021",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28706,
   "name": "roster_record",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28718,
   "name": "b_702E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28734,
   "name": "b_703E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28739,
   "name": "b_7043",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28748,
   "name": "b_704C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28754,
   "name": "roster_bad",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 28759,
   "name": "roster_rec_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28763,
   "name": "roster_limits_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28771,
   "name": "roster_rec_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28783,
   "name": "roster_limits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29952,
   "name": "ke_click",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29955,
   "name": "ke_start_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29958,
   "name": "ke_icons_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29961,
   "name": "ke_icons_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29964,
   "name": "ke_pointer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29967,
   "name": "ke_window",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29970,
   "name": "ke_icons_list",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29973,
   "name": "ke_buttons",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29976,
   "name": "ke_raster_regs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29979,
   "name": "ke_icons_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29982,
   "name": "ke_icons_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29985,
   "name": "ke_invert_row",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29988,
   "name": "ke_unpack_show",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29991,
   "name": "ke_split",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29994,
   "name": "ke_tile",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29997,
   "name": "ke_save_picture",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30000,
   "name": "ke_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30003,
   "name": "ke_swap",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30006,
   "name": "ke_stop_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30009,
   "name": "ke_map",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30012,
   "name": "ke_script",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30015,
   "name": "ke_roster_out",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30018,
   "name": "ke_roster_in",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30021,
   "name": "ke_read_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30024,
   "name": "ke_write_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30027,
   "name": "ke_big_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30030,
   "name": "ke_copy_all_ram",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30033,
   "name": "ke_unpack",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30036,
   "name": "ke_unused",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30039,
   "name": "j_7557",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30042,
   "name": "j_755A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30045,
   "name": "j_755D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30048,
   "name": "j_7560",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30051,
   "name": "j_7563",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30054,
   "name": "j_7566",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30057,
   "name": "j_7569",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30060,
   "name": "j_756C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30063,
   "name": "j_756F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30066,
   "name": "j_7572",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30069,
   "name": "j_7575",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30072,
   "name": "icon_layout_of_band",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30078,
   "name": "icon_band_line",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30084,
   "name": "icon_band_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30090,
   "name": "icon_band_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30096,
   "name": "button_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30097,
   "name": "button_x1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30121,
   "name": "button_y1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30145,
   "name": "button_x2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30169,
   "name": "button_y2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30193,
   "name": "button_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30217,
   "name": "button_second",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30241,
   "name": "button_group",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30265,
   "name": "button_on",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30289,
   "name": "button_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30313,
   "name": "button2_x1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30337,
   "name": "button2_y1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30361,
   "name": "button2_x2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30385,
   "name": "button2_y2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30409,
   "name": "button2_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30433,
   "name": "regs_line",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30438,
   "name": "regs_reg_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30443,
   "name": "regs_val_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30448,
   "name": "regs_reg_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30453,
   "name": "regs_val_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30458,
   "name": "layout2_dx",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30463,
   "name": "layout2_dy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30468,
   "name": "layout2_line",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30473,
   "name": "layout3_dx",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30478,
   "name": "layout3_dy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30483,
   "name": "layout3_line",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30487,
   "name": "window_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30488,
   "name": "window_width",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30489,
   "name": "split_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30491,
   "name": "split_bank",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30493,
   "name": "split_memory",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30495,
   "name": "split_control",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30497,
   "name": "split_control2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30499,
   "name": "split_background",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30501,
   "name": "split_line",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30503,
   "name": "pointer_shadow",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30504,
   "name": "pointer_x_min",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30505,
   "name": "pointer_x_max",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30506,
   "name": "pointer_y_min",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30507,
   "name": "pointer_y_max",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30508,
   "name": "map_colour_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30509,
   "name": "map_colour_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30510,
   "name": "map_colour_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30511,
   "name": "map_colour_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30512,
   "name": "click_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30513,
   "name": "click_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30514,
   "name": "pointer_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30515,
   "name": "pointer_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30516,
   "name": "big_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30536,
   "name": "icon_layout_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30544,
   "name": "icon_layout_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30552,
   "name": "run_script",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30566,
   "name": "j_7766",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30587,
   "name": "b_777B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30604,
   "name": "b_778C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30622,
   "name": "r_779E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30623,
   "name": "b_779F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30639,
   "name": "b_77AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30654,
   "name": "b_77BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30656,
   "name": "b_77C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30670,
   "name": "script_buttons",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30689,
   "name": "b_77E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30691,
   "name": "script_table",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 30695,
   "name": "script_store_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30696,
   "name": "script_store_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30731,
   "name": "script_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30741,
   "name": "b_7815",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30744,
   "name": "script_tables",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30745,
   "name": "script_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30746,
   "name": "script_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30773,
   "name": "script_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31079,
   "name": "script_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31270,
   "name": "script_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31324,
   "name": "script_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31421,
   "name": "script_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31512,
   "name": "script_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31575,
   "name": "script_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31600,
   "name": "script_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31622,
   "name": "script_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31645,
   "name": "script_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31672,
   "name": "script_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31859,
   "name": "script_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31896,
   "name": "script_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31946,
   "name": "script_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31958,
   "name": "roster_to_strings",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31960,
   "name": "roster_strings",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31971,
   "name": "j_7CE3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31986,
   "name": "b_7CF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32007,
   "name": "b_7D07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32013,
   "name": "b_7D0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32039,
   "name": "roster_way",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32042,
   "name": "b_7D2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32043,
   "name": "roster_from_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32044,
   "name": "roster_from_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32053,
   "name": "b_7D35",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32065,
   "name": "b_7D41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32068,
   "name": "roster_to_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32069,
   "name": "roster_to_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32073,
   "name": "j_7D49",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32085,
   "name": "strings_to_roster",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32091,
   "name": "rec_addr_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32103,
   "name": "rec_addr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32115,
   "name": "read_block",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32124,
   "name": "b_7D7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32136,
   "name": "write_block",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32145,
   "name": "b_7D91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32157,
   "name": "big_text_print",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32179,
   "name": "big_text_char",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32199,
   "name": "b_7DC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32210,
   "name": "b_7DD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32244,
   "name": "b_7DF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32248,
   "name": "glyph_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32249,
   "name": "glyph_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32252,
   "name": "b_7DFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32325,
   "name": "big_text_colour",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32344,
   "name": "b_7E58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32350,
   "name": "big_text_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32351,
   "name": "glyph_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32352,
   "name": "joystick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32371,
   "name": "b_7E73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32398,
   "name": "b_7E8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32402,
   "name": "b_7E92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32406,
   "name": "b_7E96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32410,
   "name": "b_7E9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32419,
   "name": "b_7EA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32425,
   "name": "b_7EA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32433,
   "name": "j_7EB1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32442,
   "name": "b_7EBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32448,
   "name": "b_7EC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32456,
   "name": "j_7EC8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32482,
   "name": "b_7EE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32487,
   "name": "j_7EE7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32501,
   "name": "wait_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32503,
   "name": "b_7EF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32508,
   "name": "draw_buttons",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32514,
   "name": "b_7F02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32525,
   "name": "b_7F0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32531,
   "name": "draw_button",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32584,
   "name": "b_7F48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32649,
   "name": "r_7F89",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32650,
   "name": "colour_box",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32661,
   "name": "box_column",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32683,
   "name": "b_7FAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32686,
   "name": "b_7FAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32739,
   "name": "box_width",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32740,
   "name": "box_height",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32741,
   "name": "button_drawn",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32742,
   "name": "button_found",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32743,
   "name": "pointer_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32744,
   "name": "pointer_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32745,
   "name": "box_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32746,
   "name": "joy_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32747,
   "name": "joy_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32748,
   "name": "repeat_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32749,
   "name": "unpack_only",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32763,
   "name": "library_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "cbm80",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32777,
   "name": "reset_trap",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32785,
   "name": "click",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32814,
   "name": "b_802E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32840,
   "name": "b_8048",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32871,
   "name": "b_8067",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32876,
   "name": "click_hit",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32907,
   "name": "b_808B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32918,
   "name": "b_8096",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32924,
   "name": "b_809C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32932,
   "name": "b_80A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32954,
   "name": "click_hold",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32959,
   "name": "b_80BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32977,
   "name": "b_80D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32984,
   "name": "b_80D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33002,
   "name": "b_80EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33008,
   "name": "click_still",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33053,
   "name": "b_811D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33084,
   "name": "b_813C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33098,
   "name": "start_irq",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33161,
   "name": "b_8189",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33170,
   "name": "pointer_only",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33175,
   "name": "b_8197",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33193,
   "name": "install_irq",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33227,
   "name": "b_81CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33234,
   "name": "pointer_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33239,
   "name": "j_81D7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33280,
   "name": "shadow_x_high",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33284,
   "name": "b_8204",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33310,
   "name": "b_821E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33325,
   "name": "irq_spare",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33326,
   "name": "old_irq_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33327,
   "name": "old_irq_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33328,
   "name": "irq_started",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33329,
   "name": "pointer_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33337,
   "name": "shadow_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33345,
   "name": "icons_0",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33350,
   "name": "j_8246",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33357,
   "name": "icons_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33363,
   "name": "b_8253",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33369,
   "name": "icons_x_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33370,
   "name": "icons_x_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33377,
   "name": "icons_dx_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33378,
   "name": "icons_dx_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33386,
   "name": "icons_y_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33387,
   "name": "icons_y_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33392,
   "name": "icons_dy_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33393,
   "name": "icons_dy_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33401,
   "name": "icons_col_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33402,
   "name": "icons_col_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33410,
   "name": "icons_ptr_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33411,
   "name": "icons_ptr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33420,
   "name": "b_828C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33431,
   "name": "icons_line_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33432,
   "name": "icons_line_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33446,
   "name": "b_82A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33455,
   "name": "b_82AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33461,
   "name": "layout_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33562,
   "name": "layout_0_line",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33567,
   "name": "layout_0_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33572,
   "name": "layout_0_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33577,
   "name": "invert_row",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33604,
   "name": "b_8344",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33618,
   "name": "icons_1",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33626,
   "name": "layout_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33713,
   "name": "layout_1_dx",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33716,
   "name": "layout_1_dy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33719,
   "name": "layout_1_line",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33722,
   "name": "icons_2",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33730,
   "name": "layout_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33815,
   "name": "icons_3",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33823,
   "name": "layout_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33931,
   "name": "load_layout",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34000,
   "name": "layout_list_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34001,
   "name": "layout_list_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34008,
   "name": "layout_dx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34009,
   "name": "layout_dx_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34016,
   "name": "layout_dy_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34017,
   "name": "layout_dy_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34024,
   "name": "layout_line_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34025,
   "name": "layout_line_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34032,
   "name": "window_text",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34055,
   "name": "b_8507",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34082,
   "name": "window_line",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34084,
   "name": "b_8524",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34106,
   "name": "b_853A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34116,
   "name": "b_8544",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34123,
   "name": "b_854B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34183,
   "name": "window_end",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 34185,
   "name": "b_8589",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34195,
   "name": "window_used",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34196,
   "name": "icons_list",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34203,
   "name": "icons_list_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34222,
   "name": "b_85AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34275,
   "name": "b_85E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34298,
   "name": "b_85FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34307,
   "name": "b_8603",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34313,
   "name": "row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34338,
   "name": "row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34363,
   "name": "raster_regs",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34370,
   "name": "raster_regs_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34409,
   "name": "b_8669",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34418,
   "name": "b_8672",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34424,
   "name": "unpack_show",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34448,
   "name": "j_8690",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34466,
   "name": "b_86A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34495,
   "name": "b_86BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34513,
   "name": "unpack_next",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34539,
   "name": "b_86EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34546,
   "name": "j_86F2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34560,
   "name": "b_8700",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34570,
   "name": "b_870A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34576,
   "name": "unpack_read",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34586,
   "name": "r_871A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34587,
   "name": "unpack_write",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34597,
   "name": "b_8725",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34603,
   "name": "r_872B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34604,
   "name": "b_872C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34619,
   "name": "b_873B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34670,
   "name": "b_876E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34675,
   "name": "unpack_value",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34676,
   "name": "unpack_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34677,
   "name": "unpack_keep",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34678,
   "name": "split",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34685,
   "name": "split_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34738,
   "name": "b_87B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34744,
   "name": "save_picture",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34803,
   "name": "zero_low",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34812,
   "name": "put_tile",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34879,
   "name": "b_883F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34881,
   "name": "b_8841",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34979,
   "name": "b_88A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34981,
   "name": "b_88A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34982,
   "name": "tile_from_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34983,
   "name": "tile_from_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34985,
   "name": "tile_to_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34986,
   "name": "tile_to_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34988,
   "name": "tile_cfrom_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34989,
   "name": "tile_cfrom_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34991,
   "name": "tile_cto_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34992,
   "name": "tile_cto_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35069,
   "name": "bitmap_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35070,
   "name": "bitmap_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35119,
   "name": "tile_bitmap_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35120,
   "name": "tile_bitmap_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35167,
   "name": "tile_colour_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35168,
   "name": "tile_colour_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35215,
   "name": "copy",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35217,
   "name": "copy_with",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35221,
   "name": "b_8995",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35236,
   "name": "b_89A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35247,
   "name": "b_89AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35253,
   "name": "b_89B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35261,
   "name": "swap",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35267,
   "name": "b_89C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35288,
   "name": "b_89D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35299,
   "name": "b_89E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35305,
   "name": "b_89E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35313,
   "name": "stop_irq",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35338,
   "name": "map_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35339,
   "name": "map_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35341,
   "name": "map_temp",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35343,
   "name": "map",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35369,
   "name": "b_8A29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35410,
   "name": "b_8A52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35428,
   "name": "b_8A64",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35473,
   "name": "b_8A91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35475,
   "name": "j_8A93",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35485,
   "name": "b_8A9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35511,
   "name": "b_8AB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35516,
   "name": "b_8ABC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35525,
   "name": "b_8AC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35559,
   "name": "b_8AE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35592,
   "name": "b_8B08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35605,
   "name": "b_8B15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35618,
   "name": "b_8B22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35621,
   "name": "j_8B25",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35623,
   "name": "j_8B27",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35631,
   "name": "b_8B2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35636,
   "name": "map_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35638,
   "name": "b_8B36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35653,
   "name": "copy_all_ram",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35840,
   "name": "roster_sector_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35904,
   "name": "pilot_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36096,
   "name": "roster_sector_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36160,
   "name": "pilot_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36352,
   "name": "roster_sector_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36416,
   "name": "pilot_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36544,
   "name": "last_pilot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36608,
   "name": "roster_sector_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36672,
   "name": "pilot_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36800,
   "name": "pilot_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38907,
   "name": "pack_header",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38908,
   "name": "pack_start_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38909,
   "name": "pack_start_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38910,
   "name": "pack_end_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38911,
   "name": "pack_end_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38912,
   "name": "picture_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39168,
   "name": "picture_colours_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39424,
   "name": "picture_colours_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39680,
   "name": "picture_colours_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39936,
   "name": "picture_colour_ram",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40192,
   "name": "picture_colour_ram_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40448,
   "name": "picture_colour_ram_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40704,
   "name": "picture_colour_ram_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49152,
   "name": "font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50176,
   "name": "font_reversed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52216,
   "name": "f_CBF8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52217,
   "name": "f_CBF9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55552,
   "name": "f_D900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55808,
   "name": "f_DA00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56064,
   "name": "f_DB00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "front_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58368,
   "name": "front_sprites_90",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59392,
   "name": "front_sprites_a0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60416,
   "name": "front_sprites_b0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61440,
   "name": "front_sprites_c0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62464,
   "name": "front_sprites_d0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63488,
   "name": "front_sprites_e0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64512,
   "name": "front_sprites_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65439,
   "name": "KERNAL_SCNKEY",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65478,
   "name": "KERNAL_CHKIN",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65481,
   "name": "KERNAL_CHKOUT",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65487,
   "name": "KERNAL_CHRIN",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65490,
   "name": "KERNAL_CHROUT",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65514,
   "name": "KERNAL_UDTIM",
   "type": "Predefined",
   "kind": "system"
  }
 ],
 "comments": [
  {
   "address": 28672,
   "type": "line",
   "text": "The roster check the boot program calls (SYS 28672) after reading the roster from track 1: $A5 = 0 if it is good, 1 if not. Eleven 64-byte records, numbers 0 to 11 less 8, must each have a 20-byte name of capitals, digits and punctuation (bytes below $60) or shifted letters ($C1-$DA), and bytes 20 to 46 each no higher than their limits at $706F; the first byte of record 8, the pilot chosen last, must be below 8 or 11."
  },
  {
   "address": 28706,
   "type": "line",
   "text": "Checks record X: its name, then bytes 46 down to 20 against their limits."
  },
  {
   "address": 28754,
   "type": "line",
   "text": "The roster is corrupted: $A5 = 1."
  },
  {
   "address": 28759,
   "type": "line",
   "text": "The low bytes of the twelve 64-byte records' addresses, $8C40 to $8FC0 (record 8, $8EC0, is not a pilot)."
  },
  {
   "address": 28763,
   "type": "line",
   "text": "The limits' table counted from 20 bytes before it, so that byte Y of a record is checked against $705B+Y; the limits themselves start at $706F."
  },
  {
   "address": 28771,
   "type": "line",
   "text": "The high bytes of the records' addresses, $8C to $8F."
  },
  {
   "address": 28783,
   "type": "line",
   "text": "The highest value each of a record's bytes 20 to 46 may hold: the rank 7; the score and the first decoration 255; the next five 1; the other seven decorations 255; four bytes 3; the three choices of how real the flying is 1, then 2, 4 and 2; and the pilot's fate 2."
  },
  {
   "address": 29952,
   "type": "line",
   "text": "The library's jump table, KE+0 to KE+81 in the BASIC programs (KE = 117*256). KE+0: wait for a click on a button."
  },
  {
   "address": 29955,
   "type": "line",
   "text": "KE+3: start the pointer's interrupt."
  },
  {
   "address": 29958,
   "type": "line",
   "text": "KE+6: show sprite layout 0."
  },
  {
   "address": 29961,
   "type": "line",
   "text": "KE+9: show sprite layout 1."
  },
  {
   "address": 29964,
   "type": "line",
   "text": "KE+12: the pointer alone."
  },
  {
   "address": 29967,
   "type": "line",
   "text": "KE+15: copy text into a window."
  },
  {
   "address": 29970,
   "type": "line",
   "text": "KE+18: show the sprite layouts listed at $7578."
  },
  {
   "address": 29973,
   "type": "line",
   "text": "KE+21: draw every selected button."
  },
  {
   "address": 29976,
   "type": "line",
   "text": "KE+24: change two VIC registers at chosen lines."
  },
  {
   "address": 29979,
   "type": "line",
   "text": "KE+27: show sprite layout 2."
  },
  {
   "address": 29982,
   "type": "line",
   "text": "KE+30: show sprite layout 3."
  },
  {
   "address": 29985,
   "type": "line",
   "text": "KE+33: invert a text row."
  },
  {
   "address": 29988,
   "type": "line",
   "text": "KE+36: unpack a picture and show it."
  },
  {
   "address": 29991,
   "type": "line",
   "text": "KE+39: split the screen between a picture and text."
  },
  {
   "address": 29994,
   "type": "line",
   "text": "KE+42: put a tile of a saved picture on the screen."
  },
  {
   "address": 29997,
   "type": "line",
   "text": "KE+45: save the picture for the tiles."
  },
  {
   "address": 30000,
   "type": "line",
   "text": "KE+48: copy, BASIC's ROM out."
  },
  {
   "address": 30003,
   "type": "line",
   "text": "KE+51: swap two blocks."
  },
  {
   "address": 30006,
   "type": "line",
   "text": "KE+54: stop the interrupt."
  },
  {
   "address": 30009,
   "type": "line",
   "text": "KE+57: draw the theatre map."
  },
  {
   "address": 30012,
   "type": "line",
   "text": "KE+60: run a screen script."
  },
  {
   "address": 30015,
   "type": "line",
   "text": "KE+63: roster to BASIC's RS$()."
  },
  {
   "address": 30018,
   "type": "line",
   "text": "KE+66: RS$() back to the roster."
  },
  {
   "address": 30021,
   "type": "line",
   "text": "KE+69: read 256 bytes from the disk."
  },
  {
   "address": 30024,
   "type": "line",
   "text": "KE+72: write 256 bytes to the disk."
  },
  {
   "address": 30027,
   "type": "line",
   "text": "KE+75: print a line of large letters."
  },
  {
   "address": 30030,
   "type": "line",
   "text": "KE+78: copy with every ROM and the I/O out."
  },
  {
   "address": 30033,
   "type": "line",
   "text": "KE+81: unpack a picture, colours left where they are."
  },
  {
   "address": 30036,
   "type": "line",
   "text": "Twelve more entries, $7554 to $7575, each a JMP to itself: room in the table that nothing calls."
  },
  {
   "address": 30072,
   "type": "line",
   "text": "For the interrupt at $859B: which of the layouts at $7748 each band of the screen shows."
  },
  {
   "address": 30078,
   "type": "line",
   "text": "For the interrupt at $859B: the raster line that starts each band."
  },
  {
   "address": 30084,
   "type": "line",
   "text": "For the interrupt at $859B: what is added to the x of each sprite in a band."
  },
  {
   "address": 30090,
   "type": "line",
   "text": "For the interrupt at $859B: what is added to the y of each sprite in a band."
  },
  {
   "address": 30096,
   "type": "line",
   "text": "The number of the last button on the screen (count less 1)."
  },
  {
   "address": 30097,
   "type": "line",
   "text": "The buttons, up to 24, in 14 tables of 24 that screen scripts fill: each button's left column."
  },
  {
   "address": 30121,
   "type": "line",
   "text": "Each button's top row."
  },
  {
   "address": 30145,
   "type": "line",
   "text": "Each button's right edge, the column after it."
  },
  {
   "address": 30169,
   "type": "line",
   "text": "Each button's bottom edge, the row after it."
  },
  {
   "address": 30193,
   "type": "line",
   "text": "The colour a button's cells turn when it is selected (EORed into the cells' colours)."
  },
  {
   "address": 30217,
   "type": "line",
   "text": "Non-zero when a button has a second rectangle (the tables from $7669), where a press counts too; with bit 7 set, drawing the button also inverts the text row above the first rectangle and the row below the second (8329)."
  },
  {
   "address": 30241,
   "type": "line",
   "text": "Each button's group: selecting one clears the others in its group."
  },
  {
   "address": 30265,
   "type": "line",
   "text": "1 when a button is selected (highlighted)."
  },
  {
   "address": 30289,
   "type": "line",
   "text": "Each button's kind: 0 for a choice, which stays lit and puts out the others in its group; anything else for a plain button, which lights while the fire button is held. Bit 6 makes a held button act again every 20 frames."
  },
  {
   "address": 30313,
   "type": "line",
   "text": "The second rectangle's left column."
  },
  {
   "address": 30337,
   "type": "line",
   "text": "The second rectangle's top row."
  },
  {
   "address": 30361,
   "type": "line",
   "text": "The second rectangle's right edge."
  },
  {
   "address": 30385,
   "type": "line",
   "text": "The second rectangle's bottom edge."
  },
  {
   "address": 30409,
   "type": "line",
   "text": "The second rectangle's highlight colour."
  },
  {
   "address": 30433,
   "type": "line",
   "text": "For the interrupt at $8642: the raster line of each change."
  },
  {
   "address": 30438,
   "type": "line",
   "text": "For the interrupt at $8642: the first VIC register each change writes (an offset from $D000)."
  },
  {
   "address": 30443,
   "type": "line",
   "text": "For the interrupt at $8642: the value for the first register."
  },
  {
   "address": 30448,
   "type": "line",
   "text": "For the interrupt at $8642: the second register."
  },
  {
   "address": 30453,
   "type": "line",
   "text": "For the interrupt at $8642: the value for the second register."
  },
  {
   "address": 30458,
   "type": "line",
   "text": "Sprite layout 2's tables, loaded with the library and never changed: what each band adds to the sprites' x."
  },
  {
   "address": 30463,
   "type": "line",
   "text": "Layout 2: what each band adds to the sprites' y."
  },
  {
   "address": 30468,
   "type": "line",
   "text": "Layout 2: each band's raster line."
  },
  {
   "address": 30473,
   "type": "line",
   "text": "Sprite layout 3's tables: each band's x offset."
  },
  {
   "address": 30478,
   "type": "line",
   "text": "Layout 3: each band's y offset."
  },
  {
   "address": 30483,
   "type": "line",
   "text": "Layout 3: each band's raster line."
  },
  {
   "address": 30487,
   "type": "line",
   "text": "The text window's first column, low byte of its address on the screen, for KE+15."
  },
  {
   "address": 30488,
   "type": "line",
   "text": "The text window's width in columns, for KE+15."
  },
  {
   "address": 30489,
   "type": "line",
   "text": "Two bytes before the split screen's values that nothing in the library reads."
  },
  {
   "address": 30491,
   "type": "line",
   "text": "The split screen's values, set by a screen script, two of each, top part then bottom: CIA 2's port A, the VIC bank."
  },
  {
   "address": 30493,
   "type": "line",
   "text": "The split's $D018 values: where the screen and the bitmap or characters are."
  },
  {
   "address": 30495,
   "type": "line",
   "text": "The split's $D011 values: bitmap or text."
  },
  {
   "address": 30497,
   "type": "line",
   "text": "The split's $D016 values: multicolour or not."
  },
  {
   "address": 30499,
   "type": "line",
   "text": "The split's background colours."
  },
  {
   "address": 30501,
   "type": "line",
   "text": "The split's raster lines: where the bottom part starts, and the top."
  },
  {
   "address": 30503,
   "type": "line",
   "text": "Non-zero when sprite 1 follows the pointer as its shadow, 4 pixels left and 7 up."
  },
  {
   "address": 30504,
   "type": "line",
   "text": "The pointer's box: the lowest x (in 2-pixel steps)."
  },
  {
   "address": 30505,
   "type": "line",
   "text": "The pointer's box: the highest x."
  },
  {
   "address": 30506,
   "type": "line",
   "text": "The pointer's box: the lowest y."
  },
  {
   "address": 30507,
   "type": "line",
   "text": "The pointer's box: the highest y."
  },
  {
   "address": 30508,
   "type": "line",
   "text": "The theatre map's colours for units, by their state bits: bit 7 set."
  },
  {
   "address": 30509,
   "type": "line",
   "text": "The colour of a unit whose state has bit 6 set."
  },
  {
   "address": 30510,
   "type": "line",
   "text": "The colour of a unit whose state has bit 5 set."
  },
  {
   "address": 30511,
   "type": "line",
   "text": "The colour of any other unit."
  },
  {
   "address": 30512,
   "type": "line",
   "text": "Where the pointer was at the last click: x."
  },
  {
   "address": 30513,
   "type": "line",
   "text": "Where the pointer was at the last click: y."
  },
  {
   "address": 30514,
   "type": "line",
   "text": "The pointer's x, in 2-pixel steps; divided by 4 it is the text column."
  },
  {
   "address": 30515,
   "type": "line",
   "text": "The pointer's y; divided by 4 it is the text row."
  },
  {
   "address": 30516,
   "type": "line",
   "text": "The 20 characters KE+75 prints."
  },
  {
   "address": 30536,
   "type": "line",
   "text": "For the interrupt at $859B: the low bytes of eight sprite lists, which point at single bands of layouts 0 and 1."
  },
  {
   "address": 30544,
   "type": "line",
   "text": "The high bytes of the sprite lists."
  },
  {
   "address": 30552,
   "type": "line",
   "text": "KE+60: runs screen script $A5 (of 14, addresses at $7819). Each byte's top two bits say what it does: 00 writes the next byte to VIC register (bits 0-5); 01 writes a sprite pointer at $CBF8; 10 with 0 sets the button count, any other ends the script; 11 with 0 fills 9 button tables, with 1 all 14, with any other copies 12 bytes to the split screen's values ($771B)."
  },
  {
   "address": 30670,
   "type": "line",
   "text": "Fills the button tables: the next byte is the number of buttons less 1, then each table's values in turn, $7818 tables of 24 from $7591."
  },
  {
   "address": 30691,
   "type": "line",
   "text": "One table's values; the STA's address moves 24 on for the next."
  },
  {
   "address": 30695,
   "type": "line",
   "text": "The STA at $77E6, low byte: the button table being filled, 24 bytes on for each table."
  },
  {
   "address": 30696,
   "type": "line",
   "text": "The STA at $77E6, high byte."
  },
  {
   "address": 30731,
   "type": "line",
   "text": "Reads the next byte of the script."
  },
  {
   "address": 30744,
   "type": "line",
   "text": "How many button tables the script fills: 9 (to $7651) or all 14."
  },
  {
   "address": 30745,
   "type": "line",
   "text": "The 14 screen scripts' addresses, low byte then high: $7835, $7967, $7A26, $7A5C, $7ABD, $7B18, $7B57, $7B70, $7B86, $7B9D, $7BB8, $7C73, $7C98, $7CCA."
  },
  {
   "address": 30746,
   "type": "line",
   "text": "The scripts' addresses, high bytes, between the low ones."
  },
  {
   "address": 30773,
   "type": "line",
   "text": "Screen script 0, which BEGIN runs at line 129: the identity check. Each script sets VIC registers and sprite pointers, then fills the button tables."
  },
  {
   "address": 31079,
   "type": "line",
   "text": "Screen script 1, run at line 173: the screen that lists the first, second and third line and the overall risk."
  },
  {
   "address": 31270,
   "type": "line",
   "text": "Screen script 2, run at line 221: the menu of changes, under the current level of risk."
  },
  {
   "address": 31324,
   "type": "line",
   "text": "Screen script 3, run at line 271: the pilot roster and service records."
  },
  {
   "address": 31421,
   "type": "line",
   "text": "Screen script 4, run at line 331: the choice of duty, the theatres."
  },
  {
   "address": 31512,
   "type": "line",
   "text": "Screen script 5, run at line 358: the choices of how real the flying is."
  },
  {
   "address": 31575,
   "type": "line",
   "text": "Screen script 6, run at line 409: the briefing."
  },
  {
   "address": 31600,
   "type": "line",
   "text": "Screen script 7, run at line 421: the map with its numbered grid."
  },
  {
   "address": 31622,
   "type": "line",
   "text": "Screen script 8, run at line 478: the checklist (Yes, continue; No, return to briefing)."
  },
  {
   "address": 31645,
   "type": "line",
   "text": "Screen script 9, run at line 499: sick call (Yes; No)."
  },
  {
   "address": 31672,
   "type": "line",
   "text": "Screen script 10, the longest, run at line 513 and by the base program at line 13030."
  },
  {
   "address": 31859,
   "type": "line",
   "text": "Screen script 11, run at line 581 and by the base program at line 24497."
  },
  {
   "address": 31896,
   "type": "line",
   "text": "Screen script 12, run at line 591: the briefing's options."
  },
  {
   "address": 31946,
   "type": "line",
   "text": "Screen script 13, the last, run at line 671: a Continue button."
  },
  {
   "address": 31958,
   "type": "line",
   "text": "KE+63: copies the twelve 64-byte roster records into the strings of BASIC's array RS$(), which must already be 64 characters long; KE+66 copies the other way."
  },
  {
   "address": 31960,
   "type": "line",
   "text": "Looks for RS$ among BASIC's arrays (from $2F), stepping over the others by their lengths, then copies each record into or out of the string its element points at."
  },
  {
   "address": 32039,
   "type": "line",
   "text": "0 to copy the roster into RS$(), 1 to copy RS$() into the roster (written into the LDA at $7D26)."
  },
  {
   "address": 32043,
   "type": "line",
   "text": "The record's address, low byte, written into the LDA at $7D2A."
  },
  {
   "address": 32044,
   "type": "line",
   "text": "The record's address, high byte."
  },
  {
   "address": 32068,
   "type": "line",
   "text": "The STA at $7D43, low byte: the record the string goes into."
  },
  {
   "address": 32069,
   "type": "line",
   "text": "The STA at $7D43, high byte."
  },
  {
   "address": 32085,
   "type": "line",
   "text": "KE+66: RS$() back into the roster."
  },
  {
   "address": 32091,
   "type": "line",
   "text": "The low bytes of the twelve records' addresses, for KE+63 and KE+66."
  },
  {
   "address": 32103,
   "type": "line",
   "text": "The high bytes of the records' addresses."
  },
  {
   "address": 32115,
   "type": "line",
   "text": "KE+69: reads 256 bytes from file 2 into ($A5): the front end opens file 2 on the drive's buffer and reads the roster's sectors with it."
  },
  {
   "address": 32136,
   "type": "line",
   "text": "KE+72: writes 256 bytes from ($A5) to file 2, for the front end to save the roster's sectors."
  },
  {
   "address": 32157,
   "type": "line",
   "text": "KE+75: prints the 20 characters at $7734 on character row $A5 of the bitmap at $A000, each letter two cells wide: every bit of the glyph becomes a pair of bits, those set taking their bits from the pattern in $A7 and the rest from $A8; then the row's colour RAM is filled with $A6."
  },
  {
   "address": 32179,
   "type": "line",
   "text": "The next character: PETSCII to the font's order ($40-$5F less $40, $C0-$DF less $80), then its glyph at $C000 plus 8 times that."
  },
  {
   "address": 32248,
   "type": "line",
   "text": "The LDA at $7DF7, low byte: the glyph's address in the font."
  },
  {
   "address": 32249,
   "type": "line",
   "text": "The LDA at $7DF7, high byte."
  },
  {
   "address": 32325,
   "type": "line",
   "text": "Fills colour RAM's row $A5 with $A6."
  },
  {
   "address": 32350,
   "type": "line",
   "text": "The character KE+75 is on, 0 to 19."
  },
  {
   "address": 32351,
   "type": "line",
   "text": "The glyph's row, 7 down to 0."
  },
  {
   "address": 32352,
   "type": "line",
   "text": "Reads the joystick in port 2 each frame and moves the pointer one step in each direction pushed. Held, the steps come faster: the wait between them halves each time, from 8 frames down to none. The pointer stays inside its box ($7728-$772B), and sprite 0 is put at it: x plus 12, times 2; y times 2, plus 50."
  },
  {
   "address": 32501,
   "type": "line",
   "text": "Waits for the interrupt to count a frame ($F7)."
  },
  {
   "address": 32508,
   "type": "line",
   "text": "KE+21: draws every button that is selected."
  },
  {
   "address": 32531,
   "type": "line",
   "text": "Lights or puts out button X, the same EOR doing both: its colour into its rectangle's cells (7F8A), and its second rectangle's too, inverting the rows around them when bit 7 of $7609 says so."
  },
  {
   "address": 32650,
   "type": "line",
   "text": "EORs colour A into a box from row Y, column X, $7FE4+1 rows by $7FE3+1 columns: the high nybble into the bytes of the screen at page $A6, the low nybble into colour RAM."
  },
  {
   "address": 32661,
   "type": "line",
   "text": "The ADC at $7F94: the box's column, added to the row's address."
  },
  {
   "address": 32739,
   "type": "line",
   "text": "The box's width less 1."
  },
  {
   "address": 32740,
   "type": "line",
   "text": "The box's height less 1."
  },
  {
   "address": 32741,
   "type": "line",
   "text": "The button being drawn."
  },
  {
   "address": 32742,
   "type": "line",
   "text": "The button found under the pointer."
  },
  {
   "address": 32743,
   "type": "line",
   "text": "The pointer's text column at the click."
  },
  {
   "address": 32744,
   "type": "line",
   "text": "The pointer's text row at the click."
  },
  {
   "address": 32745,
   "type": "line",
   "text": "The colour EORed into the box."
  },
  {
   "address": 32746,
   "type": "line",
   "text": "How many frames the pointer waits between steps, halved while the stick is held."
  },
  {
   "address": 32747,
   "type": "line",
   "text": "The frames left until the pointer's next step."
  },
  {
   "address": 32748,
   "type": "line",
   "text": "Frames until a held button with bit 6 acts again: 20."
  },
  {
   "address": 32749,
   "type": "line",
   "text": "KE+81: unpacks a picture (8678) and leaves its colours at $9800 and $9C00."
  },
  {
   "address": 32763,
   "type": "line",
   "text": "Five bytes before the cartridge signature that nothing in the library reads."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "A cartridge's signature: two vectors, both $8009, and CBM80 with bit 7 set on its letters. With it in memory the KERNAL's reset routine jumps to $8009 instead of starting BASIC. Its RESTORE handler would too, but the boot program points the NMI vector at an RTI in the KERNAL (POKE 792,193)."
  },
  {
   "address": 32777,
   "type": "line",
   "text": "Where a reset lands: blanks the screen and loops for ever."
  },
  {
   "address": 32785,
   "type": "line",
   "text": "KE+0: waits for the fire button with the pointer on a button, and returns the button's number in $A5. A button that is lit already is ignored. A choice puts out the lit one of its group, lights, and returns at once. A plain button lights while the fire button is held and returns when it is let go; moved off while held, it goes out and the wait starts again. One with bit 6 returns every 20 frames while held, put out each time."
  },
  {
   "address": 32876,
   "type": "line",
   "text": "The pointer is on button X."
  },
  {
   "address": 32954,
   "type": "line",
   "text": "A plain button is held: waits for the fire button to be let go, or for the repeat count to run out."
  },
  {
   "address": 33008,
   "type": "line",
   "text": "While the fire button is held: is the pointer still on the button?"
  },
  {
   "address": 33098,
   "type": "line",
   "text": "KE+3: once only, clears the interrupt's counters, saves the interrupt vector ($822E) and starts both of CIA 2's timers counting down from $FFFF; then turns the VIC's raster interrupt on and goes on as KE+12."
  },
  {
   "address": 33170,
   "type": "line",
   "text": "KE+12: clears sprites 1 to 7's positions and installs the pointer's interrupt (81D2)."
  },
  {
   "address": 33193,
   "type": "line",
   "text": "Installs the interrupt routine at A (low byte) and X (high) in the KERNAL's vector at $0314, with the raster interrupt at line 0, the band counter $F8 and list position $FA at 0, and only sprite 0's x high bit kept; waits for line 250."
  },
  {
   "address": 33234,
   "type": "line",
   "text": "The pointer's interrupt: sprite 1 follows sprite 0 as its shadow if $7727 says so, the frame counter $F7 goes up, the pointer's colour cycles through eight every 4 frames, the joystick is read (7E60), and the KERNAL's clock and keyboard scan run."
  },
  {
   "address": 33280,
   "type": "line",
   "text": "The ORA at $81FF: sprite 1's x high bit, from sprite 0's."
  },
  {
   "address": 33325,
   "type": "line",
   "text": "A byte after the interrupt routine that nothing reads."
  },
  {
   "address": 33326,
   "type": "line",
   "text": "The interrupt vector KE+3 found, low byte, put back by KE+54."
  },
  {
   "address": 33327,
   "type": "line",
   "text": "The old interrupt vector, high byte."
  },
  {
   "address": 33328,
   "type": "line",
   "text": "Non-zero once KE+3 has set the timers up."
  },
  {
   "address": 33329,
   "type": "line",
   "text": "The pointer's eight colours, in turn."
  },
  {
   "address": 33337,
   "type": "line",
   "text": "The shadow's eight colours."
  },
  {
   "address": 33345,
   "type": "line",
   "text": "KE+6: loads sprite layout 0 (848B) and installs the sprite interrupt (824D)."
  },
  {
   "address": 33357,
   "type": "line",
   "text": "The sprite interrupt: at each band, puts sprites 1 up to 7 where the layout's list says (x, y, colour and shape, the band's offsets added) until a byte of $80 or more ends the band, then sets the next band's line; after the first band it also runs the pointer's part (81D7)."
  },
  {
   "address": 33369,
   "type": "line",
   "text": "The LDA at $8258, low byte: the layout's sprite list (x)."
  },
  {
   "address": 33370,
   "type": "line",
   "text": "The LDA at $8258, high byte."
  },
  {
   "address": 33377,
   "type": "line",
   "text": "The ADC at $8260, low byte: the layout's x offsets by band."
  },
  {
   "address": 33378,
   "type": "line",
   "text": "The ADC at $8260, high byte."
  },
  {
   "address": 33386,
   "type": "line",
   "text": "The LDA at $8269: the sprite list again (y), low byte."
  },
  {
   "address": 33387,
   "type": "line",
   "text": "The LDA at $8269, high byte."
  },
  {
   "address": 33392,
   "type": "line",
   "text": "The ADC at $826F, low byte: the layout's y offsets."
  },
  {
   "address": 33393,
   "type": "line",
   "text": "The ADC at $826F, high byte."
  },
  {
   "address": 33401,
   "type": "line",
   "text": "The LDA at $8278: the sprite list (colour), low byte."
  },
  {
   "address": 33402,
   "type": "line",
   "text": "The LDA at $8278, high byte."
  },
  {
   "address": 33410,
   "type": "line",
   "text": "The LDA at $8281: the sprite list (shape), low byte."
  },
  {
   "address": 33411,
   "type": "line",
   "text": "The LDA at $8281, high byte."
  },
  {
   "address": 33431,
   "type": "line",
   "text": "The LDA at $8296, low byte: the layout's band lines."
  },
  {
   "address": 33432,
   "type": "line",
   "text": "The LDA at $8296, high byte."
  },
  {
   "address": 33461,
   "type": "line",
   "text": "Sprite layout 0: for each sprite, x, y, colour and shape; $FF ends a band."
  },
  {
   "address": 33562,
   "type": "line",
   "text": "Layout 0's raster lines: where each band after the first begins (the first is at line 0); 0 ends them."
  },
  {
   "address": 33567,
   "type": "line",
   "text": "Layout 0's x offsets by band."
  },
  {
   "address": 33572,
   "type": "line",
   "text": "Layout 0's y offsets by band."
  },
  {
   "address": 33577,
   "type": "line",
   "text": "KE+33: inverts text row X of the screen the KERNAL prints on (page $0288): each byte EOR $4F, and the row's colour RAM set to 12, grey."
  },
  {
   "address": 33618,
   "type": "line",
   "text": "KE+9: sprite layout 1 and the sprite interrupt."
  },
  {
   "address": 33626,
   "type": "line",
   "text": "Sprite layout 1's list."
  },
  {
   "address": 33713,
   "type": "line",
   "text": "Layout 1's x offsets."
  },
  {
   "address": 33716,
   "type": "line",
   "text": "Layout 1's y offsets."
  },
  {
   "address": 33719,
   "type": "line",
   "text": "Layout 1's band lines."
  },
  {
   "address": 33722,
   "type": "line",
   "text": "KE+27: sprite layout 2 and the sprite interrupt."
  },
  {
   "address": 33730,
   "type": "line",
   "text": "Sprite layout 2's list (its offsets and lines at $76FA-$7708)."
  },
  {
   "address": 33815,
   "type": "line",
   "text": "KE+30: sprite layout 3 and the sprite interrupt."
  },
  {
   "address": 33823,
   "type": "line",
   "text": "Sprite layout 3's list (its offsets and lines at $7709-$7716)."
  },
  {
   "address": 33931,
   "type": "line",
   "text": "Writes layout A's four addresses (its list, x offsets, y offsets and lines) into the sprite interrupt's instructions."
  },
  {
   "address": 34000,
   "type": "line",
   "text": "The four layouts' sprite lists: $82B5, $835A, $83C2, $841F."
  },
  {
   "address": 34001,
   "type": "line",
   "text": "The lists' addresses, high bytes, between the low ones."
  },
  {
   "address": 34008,
   "type": "line",
   "text": "The four layouts' x offset tables: $831F, $83B1, $76FA, $7709."
  },
  {
   "address": 34009,
   "type": "line",
   "text": "High bytes of the x offset tables."
  },
  {
   "address": 34016,
   "type": "line",
   "text": "The four layouts' y offset tables: $8324, $83B4, $76FF, $770E."
  },
  {
   "address": 34017,
   "type": "line",
   "text": "High bytes of the y offset tables."
  },
  {
   "address": 34024,
   "type": "line",
   "text": "The four layouts' band lines: $831A, $83B7, $7704, $7713."
  },
  {
   "address": 34025,
   "type": "line",
   "text": "High bytes of the band lines."
  },
  {
   "address": 34032,
   "type": "line",
   "text": "KE+15: copies the text BASIC printed on a hidden screen (its page in $A6, 4 for $0400) into a window on the screen at page $AA, from $7717 on, $7718 columns wide, with the colours the KERNAL gave it, which it first saves from colour RAM to $8C00. Lines break at a space; $1E ends a line early and $1F ends the text."
  },
  {
   "address": 34082,
   "type": "line",
   "text": "One line of the window: characters until $1E or the width; at the width, back to the last space, blanking what follows it."
  },
  {
   "address": 34183,
   "type": "line",
   "text": "The end ($1F): marks every screen line as the start of a line of its own (bit 7 of the KERNAL's line links, $D9-$F2)."
  },
  {
   "address": 34195,
   "type": "line",
   "text": "How many characters the line took."
  },
  {
   "address": 34196,
   "type": "line",
   "text": "KE+18: installs the sprite interrupt that takes its layouts from the tables at $7578 (859B)."
  },
  {
   "address": 34203,
   "type": "line",
   "text": "The sprite interrupt for KE+18: each band's layout from $7578 and $7748, its offsets from $7584 and $758A, its line from $757E; sprites 1-7 as in the other."
  },
  {
   "address": 34313,
   "type": "line",
   "text": "The low bytes of each text row's offset on a screen, row times 40, rows 0 to 24."
  },
  {
   "address": 34338,
   "type": "line",
   "text": "The high bytes of the rows' offsets."
  },
  {
   "address": 34363,
   "type": "line",
   "text": "KE+24: installs the interrupt that changes two VIC registers at each of up to five lines (8642)."
  },
  {
   "address": 34370,
   "type": "line",
   "text": "At each line from $76E1: writes the two registers and values from $76E6-$76F5, sets the next line; at the first it runs the pointer's part."
  },
  {
   "address": 34424,
   "type": "line",
   "text": "KE+36: unpacks the picture whose header is at $97FB, SMALL's format: first moves the packed bytes up to end at $BFFF, then unpacks them from its start address up to $BFFF. Unless $8775 is set it then copies the first 1 KB ($9800) to $8C00, the bitmap's screen colours, and the second ($9C00) into colour RAM."
  },
  {
   "address": 34513,
   "type": "line",
   "text": "The next packed byte: anything but the escape byte is itself; the escape is followed by a value and a count, and the value is written 4 plus count times, a count of 255 adding another count."
  },
  {
   "address": 34576,
   "type": "line",
   "text": "Reads the next packed byte."
  },
  {
   "address": 34587,
   "type": "line",
   "text": "Writes A and moves on; having written $BFFF, ends the unpacking."
  },
  {
   "address": 34675,
   "type": "line",
   "text": "The value of the run."
  },
  {
   "address": 34676,
   "type": "line",
   "text": "The run's count; 255 is followed by another."
  },
  {
   "address": 34677,
   "type": "line",
   "text": "0 for KE+36; KE+81 sets it to 1 so the colours are not copied."
  },
  {
   "address": 34678,
   "type": "line",
   "text": "KE+39: installs the split-screen interrupt (877D)."
  },
  {
   "address": 34685,
   "type": "line",
   "text": "The split screen: at each of two lines, sets the VIC's bank ($DD00), $D018, $D011, $D016 and the background colour from the values at $771B, so a picture and text can share the screen; at the top it also runs the pointer's part."
  },
  {
   "address": 34744,
   "type": "line",
   "text": "KE+45: keeps the picture for the tiles: its screen colours ($8C00) at $9000, its colour RAM values ($9C00) at $9400, and the first 16 character rows of its bitmap ($A000-$B3FF) at $CC00, with every ROM and the I/O switched out."
  },
  {
   "address": 34803,
   "type": "line",
   "text": "Clears the low bytes of the three pointers $A5, $A7 and $A9."
  },
  {
   "address": 34812,
   "type": "line",
   "text": "KE+42: copies tile $A5 of the saved picture, 5 cells wide and 5 rows high, to row $A7 and column $A6 of the bitmap at $A000, then its screen colours from $9000 to $8C00 and its colour RAM values from $9400 to colour RAM."
  },
  {
   "address": 34982,
   "type": "line",
   "text": "The LDA at $88A5: where the tile's screen colours are, low byte."
  },
  {
   "address": 34983,
   "type": "line",
   "text": "The LDA at $88A5, high byte."
  },
  {
   "address": 34985,
   "type": "line",
   "text": "The STA at $88A8: where the screen colours go, low byte."
  },
  {
   "address": 34986,
   "type": "line",
   "text": "The STA at $88A8, high byte."
  },
  {
   "address": 34988,
   "type": "line",
   "text": "The LDA at $88AB: where the tile's colour RAM values are, low byte."
  },
  {
   "address": 34989,
   "type": "line",
   "text": "The LDA at $88AB, high byte."
  },
  {
   "address": 34991,
   "type": "line",
   "text": "The STA at $88AE: where in colour RAM they go, low byte."
  },
  {
   "address": 34992,
   "type": "line",
   "text": "The STA at $88AE, high byte."
  },
  {
   "address": 35069,
   "type": "line",
   "text": "The offsets of the bitmap's character rows, row times 320, two bytes each, low first."
  },
  {
   "address": 35070,
   "type": "line",
   "text": "The rows' offsets, high bytes."
  },
  {
   "address": 35119,
   "type": "line",
   "text": "The tiles' places in the saved bitmap, two bytes each, low first."
  },
  {
   "address": 35120,
   "type": "line",
   "text": "The tiles' places in the saved bitmap, high bytes."
  },
  {
   "address": 35167,
   "type": "line",
   "text": "The tiles' places among the saved colours, two bytes each."
  },
  {
   "address": 35168,
   "type": "line",
   "text": "The tiles' places among the saved colours, high bytes."
  },
  {
   "address": 35215,
   "type": "line",
   "text": "KE+48: copies $AA:$A9 bytes from ($A5) to ($A7), upwards, with BASIC's ROM out."
  },
  {
   "address": 35217,
   "type": "line",
   "text": "Copies with the memory layout in A."
  },
  {
   "address": 35261,
   "type": "line",
   "text": "KE+51: swaps $AA:$A9 bytes between ($A5) and ($A7), BASIC's ROM out."
  },
  {
   "address": 35313,
   "type": "line",
   "text": "KE+54: stops the VIC's interrupt and puts back the interrupt vector KE+3 saved."
  },
  {
   "address": 35338,
   "type": "line",
   "text": "The map routine's column."
  },
  {
   "address": 35339,
   "type": "line",
   "text": "The map routine's row."
  },
  {
   "address": 35341,
   "type": "line",
   "text": "Twice the terrain, then the unit's column, as the map routine works them out."
  },
  {
   "address": 35343,
   "type": "line",
   "text": "KE+57: draws the theatre map on the text screen at $C800. The map is 16 by 16 squares, of which rows and columns 2 to 13 are drawn, each square three characters wide and two high: their codes run from $3A plus six times the square's terrain ($9200), with colours from $9100. Then units $79 down to 6, from $9400 (x), $9480 (y) and $9600 (state): one whose state has bit 7, 6 or 4 set is drawn as character $20 plus the state's low four bits, coloured by its state ($772C-$772F)."
  },
  {
   "address": 35636,
   "type": "line",
   "text": "Writes three characters of the map, numbered from X, and their colours from $9100."
  },
  {
   "address": 35653,
   "type": "line",
   "text": "KE+78: copies with $01 = $20, every ROM and the I/O out."
  },
  {
   "address": 35840,
   "type": "line",
   "text": "The roster as the boot program read it from side 1, track 1, sectors 1 to 4, 256 bytes each. This 1 KB is shared: a picture's screen colours go here, and KE+15 saves colour RAM here, so the front end keeps the roster in RS$() while it runs and puts it back to save it. Each sector starts with 64 bytes that are not a record: two bytes linking to the next sector (track 1 and the sector, which the front end writes before saving) and 62 that nothing reads."
  },
  {
   "address": 35904,
   "type": "line",
   "text": "Records 0 to 2, 64 bytes each, laid out as the front end and the base read them: 0-19 the name; 20 the rank, 0 to 7 for SGT, WO1, 2LT, 1LT, CPT, MAJ, LTC and COL; 21-22 the score, shown times 10; 23-35 how many of each of 13 awards the pilot holds, as the front end abbreviates them: SR, the reprimands, which a sick call adds to as well; NDS, the National Defense Service Medal; SEAC, CAC, MEC and WEC, the four theatres' campaign ribbons; AM, PH, ACM, BSV, SS, DSC and CMOH; 36-39 the successful missions toward each theatre's ribbon, 0 to 2; 40-42 the three choices of how real the flying is (flight, landings, weather); 43 the enemy's quality; 44 the theatre; 45 the style of mission; 46 the pilot's fate: 0, or 1 killed in action, or 2 missing in action; 47 the failed missions in a row; 48-49 the last mission's score."
  },
  {
   "address": 36096,
   "type": "line",
   "text": "The second sector's first 64 bytes: its link and 62 bytes nothing reads."
  },
  {
   "address": 36160,
   "type": "line",
   "text": "Records 3 to 5, laid out as at $8C40."
  },
  {
   "address": 36352,
   "type": "line",
   "text": "The third sector's first 64 bytes: its link and 62 bytes nothing reads."
  },
  {
   "address": 36416,
   "type": "line",
   "text": "Records 6 and 7, the last of the eight pilots the roster screen lists."
  },
  {
   "address": 36544,
   "type": "line",
   "text": "Record 8 is not a pilot: its first byte is the number of the pilot chosen last, 0 to 7, or 11 for none, which the front end puts here before saving. The rest is not read."
  },
  {
   "address": 36608,
   "type": "line",
   "text": "The fourth sector's first 64 bytes: its link and 62 bytes nothing reads."
  },
  {
   "address": 36672,
   "type": "line",
   "text": "Records 9 and 10, laid out as at $8C40: the Greatest Gunship Missions, copies of the records of the pilots who flew the two best missions (bytes 48-49), which the base keeps (E, lines 26040-26058). The roster screen does not list them."
  },
  {
   "address": 36800,
   "type": "line",
   "text": "Record 11, which holds the name Kilroy; the boot program writes it, with 11 in record 8, when it clears a corrupted roster."
  },
  {
   "address": 38907,
   "type": "line",
   "text": "Five bytes in the form of the unpacker's header (8678): the escape byte $23, the start $9800 and the end $A767. The bytes they describe are not a packed picture (2 KB of zeros, then the sprite shapes), and what the header was left from is not known."
  },
  {
   "address": 38908,
   "type": "line",
   "text": "The header's start address, low byte; the unpacker writes from here."
  },
  {
   "address": 38909,
   "type": "line",
   "text": "The start address, high byte."
  },
  {
   "address": 38910,
   "type": "line",
   "text": "The header's end address: the last packed byte, low byte."
  },
  {
   "address": 38911,
   "type": "line",
   "text": "The end address, high byte."
  },
  {
   "address": 38912,
   "type": "line",
   "text": "2 KB of zeros where an unpacked picture's colours go: $9800-$9BFF its screen colours, which KE+36 copies to $8C00 a page at a time."
  },
  {
   "address": 39168,
   "type": "line",
   "text": "The second page of the screen colours."
  },
  {
   "address": 39424,
   "type": "line",
   "text": "The third page."
  },
  {
   "address": 39680,
   "type": "line",
   "text": "The fourth page."
  },
  {
   "address": 39936,
   "type": "line",
   "text": "$9C00-$9FFF: an unpacked picture's colour RAM values, which KE+36 copies into colour RAM a page at a time."
  },
  {
   "address": 40192,
   "type": "line",
   "text": "Their second page."
  },
  {
   "address": 40448,
   "type": "line",
   "text": "Their third page."
  },
  {
   "address": 40704,
   "type": "line",
   "text": "Their fourth page."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "The front end's character set, which the VIC reads from $C000 in bank 3: 128 characters, lower and upper case."
  },
  {
   "address": 50176,
   "type": "line",
   "text": "Characters 128 to 255, which the KERNAL prints for reversed text: most are the first 128 reversed, but 23 ($00, $06, $3C, $3E and $61-$74) are other shapes, not decoded."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "The front end's sprite shapes, 64 bytes each, where the VIC reads them in bank 3 as shapes $80 to $E6. TYPE brings them to $A000, and the boot program copies $A000-$BF3F here (line 480) before the front end's pictures are unpacked over $A000. Shapes $80-$8F: the upper halves of large badges, each built from several shapes."
  },
  {
   "address": 58368,
   "type": "line",
   "text": "Shapes $90-$9F: the lower halves of the badges, and pieces of faces."
  },
  {
   "address": 59392,
   "type": "line",
   "text": "Shapes $A0-$AF: faces, each built from two or three shapes."
  },
  {
   "address": 60416,
   "type": "line",
   "text": "Shapes $B0-$BF: the pointer's arrow ($B1), and more pieces of faces and emblems."
  },
  {
   "address": 61440,
   "type": "line",
   "text": "Shapes $C0-$CF: striped ribbons, slashes, a palm tree and the side views of weapons."
  },
  {
   "address": 62464,
   "type": "line",
   "text": "Shapes $D0-$DF: a helicopter seen from the front, missiles and rockets with their flames, wrenches and a soldier."
  },
  {
   "address": 63488,
   "type": "line",
   "text": "Shapes $E0-$E6: bars, blocks and a cross; zeros follow from $F9C0."
  },
  {
   "address": 64512,
   "type": "line",
   "text": "Zeros to $FF3F, the end of the copy."
  }
 ]
}