{
 "schema": 1,
 "platform": "c64",
 "game": "space-rogue",
 "part": "ending",
 "build": "",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    1024,
    16383,
    "SR, the game's resident code, left in memory: it loaded WON and jumped to it, and the ending never returns to it (story_end loads TITLE over it); colours_to_ram stages colours at $0C00-$0FFF"
   ],
   [
    16384,
    26623,
    "the $4000 display buffer: the bitmap, the screen matrix at $6000 and the colours at $6400, filled by unpack_picture and the text"
   ],
   [
    32256,
    33791,
    "MAIN's bytes past WON, left from the game (MAIN $6400-$A4FF; WON loads over $6800-$7DFF and the pictures over $8400-$ACFF); the ending never reads them"
   ],
   [
    44288,
    49151,
    "left from the game: SEG0 or SEG1 past F3.PAC (the overlay at $A500-$BCFF), SPB at $BD00-$BEFF and the disk text buffer at $BF00; the ending never reads them"
   ],
   [
    49152,
    59391,
    "the $C000 display buffer: the bitmap (under the I/O from $D000), the screen matrix at $E000 and the colours at $E400"
   ],
   [
    59392,
    60159,
    "left from flight: the model heap and INIT ($E900-$EAFF), which the ending never reads"
   ],
   [
    60360,
    60415,
    "EXTERN's bytes between the two halves of the line table, which build_line_table writes over EXTERN at $EB00-$EBC7 and $EC00-$ECC7"
   ],
   [
    60616,
    61951,
    "the rest of EXTERN past the line table, left from the game"
   ],
   [
    62976,
    65529,
    "left from the game: the text cache from side 2 ($F600-$F9FF) and the per-frame work buffers ($FA00 on); the ending never reads them"
   ]
  ],
  "extra": []
 },
 "blocks": [
  {
   "start": 0,
   "end": 26623,
   "type": "Undefined"
  },
  {
   "start": 26624,
   "end": 26632,
   "type": "Code"
  },
  {
   "start": 26633,
   "end": 26639,
   "type": "Byte"
  },
  {
   "start": 26640,
   "end": 26642,
   "type": "Code"
  },
  {
   "start": 26643,
   "end": 26651,
   "type": "Byte"
  },
  {
   "start": 26652,
   "end": 26654,
   "type": "Code"
  },
  {
   "start": 26655,
   "end": 26663,
   "type": "Byte"
  },
  {
   "start": 26664,
   "end": 26666,
   "type": "Code"
  },
  {
   "start": 26667,
   "end": 26675,
   "type": "Byte"
  },
  {
   "start": 26676,
   "end": 27144,
   "type": "Code"
  },
  {
   "start": 27145,
   "end": 27145,
   "type": "Undefined"
  },
  {
   "start": 27146,
   "end": 27443,
   "type": "Code"
  },
  {
   "start": 27444,
   "end": 27585,
   "type": "Undefined"
  },
  {
   "start": 27586,
   "end": 28489,
   "type": "Code"
  },
  {
   "start": 28490,
   "end": 28491,
   "type": "Undefined"
  },
  {
   "start": 28492,
   "end": 28641,
   "type": "Word"
  },
  {
   "start": 28642,
   "end": 28907,
   "type": "Code"
  },
  {
   "start": 28908,
   "end": 28915,
   "type": "Undefined"
  },
  {
   "start": 28916,
   "end": 28979,
   "type": "Code"
  },
  {
   "start": 28980,
   "end": 28983,
   "type": "Undefined"
  },
  {
   "start": 28984,
   "end": 29440,
   "type": "Code"
  },
  {
   "start": 29441,
   "end": 29490,
   "type": "Undefined"
  },
  {
   "start": 29491,
   "end": 29601,
   "type": "Code"
  },
  {
   "start": 29602,
   "end": 29693,
   "type": "Byte"
  },
  {
   "start": 29694,
   "end": 29703,
   "type": "Address"
  },
  {
   "start": 29704,
   "end": 29825,
   "type": "Code"
  },
  {
   "start": 29826,
   "end": 30070,
   "type": "Byte"
  },
  {
   "start": 30071,
   "end": 30097,
   "type": "Code"
  },
  {
   "start": 30098,
   "end": 30308,
   "type": "Byte"
  },
  {
   "start": 30309,
   "end": 30329,
   "type": "Code"
  },
  {
   "start": 30330,
   "end": 30465,
   "type": "Byte"
  },
  {
   "start": 30466,
   "end": 30490,
   "type": "Code"
  },
  {
   "start": 30491,
   "end": 30536,
   "type": "Byte"
  },
  {
   "start": 30537,
   "end": 30550,
   "type": "Code"
  },
  {
   "start": 30551,
   "end": 30705,
   "type": "Byte"
  },
  {
   "start": 30706,
   "end": 30737,
   "type": "Code"
  },
  {
   "start": 30738,
   "end": 30966,
   "type": "Byte"
  },
  {
   "start": 30967,
   "end": 30989,
   "type": "Code"
  },
  {
   "start": 30990,
   "end": 31106,
   "type": "Byte"
  },
  {
   "start": 31107,
   "end": 31123,
   "type": "Code"
  },
  {
   "start": 31124,
   "end": 31314,
   "type": "Byte"
  },
  {
   "start": 31315,
   "end": 31345,
   "type": "Code"
  },
  {
   "start": 31346,
   "end": 31574,
   "type": "Byte"
  },
  {
   "start": 31575,
   "end": 31599,
   "type": "Code"
  },
  {
   "start": 31600,
   "end": 31758,
   "type": "Byte"
  },
  {
   "start": 31759,
   "end": 31787,
   "type": "Code"
  },
  {
   "start": 31788,
   "end": 31998,
   "type": "Byte"
  },
  {
   "start": 31999,
   "end": 32025,
   "type": "Code"
  },
  {
   "start": 32026,
   "end": 32142,
   "type": "Byte"
  },
  {
   "start": 32143,
   "end": 32151,
   "type": "Code"
  },
  {
   "start": 32152,
   "end": 32159,
   "type": "Byte"
  },
  {
   "start": 32160,
   "end": 32162,
   "type": "Code"
  },
  {
   "start": 32163,
   "end": 32255,
   "type": "Byte"
  },
  {
   "start": 32256,
   "end": 33791,
   "type": "Undefined"
  },
  {
   "start": 33792,
   "end": 44287,
   "type": "Byte"
  },
  {
   "start": 44288,
   "end": 60159,
   "type": "Undefined"
  },
  {
   "start": 60160,
   "end": 60359,
   "type": "Byte"
  },
  {
   "start": 60360,
   "end": 60415,
   "type": "Undefined"
  },
  {
   "start": 60416,
   "end": 60615,
   "type": "Byte"
  },
  {
   "start": 60616,
   "end": 61951,
   "type": "Undefined"
  },
  {
   "start": 61952,
   "end": 62975,
   "type": "Byte"
  },
  {
   "start": 62976,
   "end": 65529,
   "type": "Undefined"
  },
  {
   "start": 65530,
   "end": 65535,
   "type": "Byte"
  }
 ],
 "symbols": [
  {
   "address": 1,
   "name": "zp_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16,
   "name": "block_source",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 17,
   "name": "zpa_11",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18,
   "name": "shown_matrix",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20,
   "name": "block_width",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21,
   "name": "block_height",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 25,
   "name": "dissolve_from",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27,
   "name": "dissolve_to",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29,
   "name": "dissolve_lfsr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30,
   "name": "drawing_page",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32,
   "name": "cursor_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33,
   "name": "cursor_column",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34,
   "name": "window_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35,
   "name": "window_right",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48,
   "name": "source",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49,
   "name": "zpa_31",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50,
   "name": "dest",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51,
   "name": "zpa_33",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52,
   "name": "column_offset",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53,
   "name": "zpa_35",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 54,
   "name": "scroll_first",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55,
   "name": "scroll_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 56,
   "name": "scroll_end",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57,
   "name": "scroll_width",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "shown_page",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60,
   "name": "key",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "frame_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 102,
   "name": "block_stride",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 112,
   "name": "freq_mask",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 113,
   "name": "drone_mask",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 114,
   "name": "drone_target",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 115,
   "name": "zpa_73",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 116,
   "name": "drone_freq",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 117,
   "name": "zpa_75",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 118,
   "name": "drone_level",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 128,
   "name": "fx_start",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 129,
   "name": "zpa_81",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 130,
   "name": "fx_step",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 131,
   "name": "zpa_83",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 132,
   "name": "fx_freq",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 133,
   "name": "zpa_85",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 134,
   "name": "fx_attack_decay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 135,
   "name": "fx_sustain_release",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 136,
   "name": "fx_waveform",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 137,
   "name": "fx_length",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 138,
   "name": "fx_release_at",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 139,
   "name": "fx_frames_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 140,
   "name": "fx_repeats",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 232,
   "name": "zpa_E8",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 788,
   "name": "irq_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 789,
   "name": "a_0315",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 790,
   "name": "brk_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 791,
   "name": "a_0317",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 792,
   "name": "nmi_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 793,
   "name": "a_0319",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 4096,
   "name": "f_1000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 7845,
   "name": "a_1EA5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 8192,
   "name": "j_2000",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16553,
   "name": "a_40A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24576,
   "name": "f_6000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26624,
   "name": "ending_start",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26633,
   "name": "name_font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26640,
   "name": "load_f1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26643,
   "name": "name_f1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26652,
   "name": "load_f2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26655,
   "name": "name_f2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26664,
   "name": "load_f3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26667,
   "name": "name_f3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26676,
   "name": "ending_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26691,
   "name": "io_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26702,
   "name": "io_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26713,
   "name": "load_inline",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26735,
   "name": "b_686F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26748,
   "name": "b_687C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26788,
   "name": "b_68A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26798,
   "name": "load_name_length",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26800,
   "name": "load_name_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26802,
   "name": "load_name_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26809,
   "name": "load_to_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26811,
   "name": "load_to_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26821,
   "name": "saved_source_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26825,
   "name": "saved_source_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26829,
   "name": "wait_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26832,
   "name": "b_68D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26844,
   "name": "clear_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26849,
   "name": "pause",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26853,
   "name": "b_68E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26854,
   "name": "b_68E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26874,
   "name": "b_68FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26877,
   "name": "print_char",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26889,
   "name": "saved_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26891,
   "name": "saved_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26895,
   "name": "print_char_body",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26904,
   "name": "b_6918",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26911,
   "name": "b_691F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26918,
   "name": "b_6926",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26930,
   "name": "b_6932",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26987,
   "name": "row_offset_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26994,
   "name": "row_offset_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27000,
   "name": "b_6978",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27001,
   "name": "glyph_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27002,
   "name": "glyph_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27004,
   "name": "cell_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27005,
   "name": "cell_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27012,
   "name": "rub_out",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27026,
   "name": "b_6992",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27036,
   "name": "new_line",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27052,
   "name": "b_69AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27078,
   "name": "b_69C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27079,
   "name": "scroll_from_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27080,
   "name": "scroll_from_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27083,
   "name": "scroll_to_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27092,
   "name": "b_69D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27103,
   "name": "b_69DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27125,
   "name": "b_69F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27126,
   "name": "clear_row_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27127,
   "name": "clear_row_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27136,
   "name": "b_6A00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27144,
   "name": "r_6A08",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27145,
   "name": "scroll_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27146,
   "name": "setup_irq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27237,
   "name": "ignore_interrupt",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27238,
   "name": "irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27243,
   "name": "irq_body",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27266,
   "name": "b_6A82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27280,
   "name": "scan_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27330,
   "name": "b_6AC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27340,
   "name": "b_6ACC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27352,
   "name": "b_6AD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27370,
   "name": "b_6AEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27392,
   "name": "b_6B00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27399,
   "name": "b_6B07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27409,
   "name": "b_6B11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27416,
   "name": "b_6B18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27426,
   "name": "b_6B22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27440,
   "name": "b_6B30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27444,
   "name": "key_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27445,
   "name": "key_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27446,
   "name": "key_repeat",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27447,
   "name": "modifier_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27455,
   "name": "ctrl_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27456,
   "name": "rshift_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27457,
   "name": "lshift_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27458,
   "name": "key_codes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27522,
   "name": "key_codes_shifted",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27586,
   "name": "wipe_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27602,
   "name": "b_6BD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27628,
   "name": "wipe_left_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27632,
   "name": "b_6BF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27654,
   "name": "b_6C06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27662,
   "name": "b_6C0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27664,
   "name": "b_6C10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27688,
   "name": "b_6C28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27694,
   "name": "b_6C2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27708,
   "name": "wipe_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27724,
   "name": "b_6C4C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27750,
   "name": "wipe_right_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27754,
   "name": "b_6C6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27785,
   "name": "b_6C89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27787,
   "name": "b_6C8B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27819,
   "name": "b_6CAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27833,
   "name": "scroll_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27871,
   "name": "b_6CDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27888,
   "name": "scroll_up_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27893,
   "name": "b_6CF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27929,
   "name": "b_6D19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27944,
   "name": "b_6D28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27961,
   "name": "clear_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27982,
   "name": "b_6D4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27995,
   "name": "b_6D5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27999,
   "name": "scroll_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28037,
   "name": "b_6D85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28054,
   "name": "scroll_down_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28058,
   "name": "b_6D9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28095,
   "name": "b_6DBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28110,
   "name": "b_6DCE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28130,
   "name": "colours_and_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28133,
   "name": "copy_matrix",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28147,
   "name": "b_6DF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28149,
   "name": "copy_matrix_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28152,
   "name": "copy_matrix_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28166,
   "name": "copy_4000_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28172,
   "name": "copy_c000_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28178,
   "name": "copy_shown_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28184,
   "name": "copy_4000_to_c000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28190,
   "name": "copy_c000_to_4000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28196,
   "name": "copy_shown",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28202,
   "name": "b_6E2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28212,
   "name": "b_6E34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28214,
   "name": "copy_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28217,
   "name": "copy_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28231,
   "name": "column_offset_of",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28242,
   "name": "row_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28257,
   "name": "row_saved_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28259,
   "name": "white_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28275,
   "name": "b_6E73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28277,
   "name": "white_colours_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28292,
   "name": "put_colour_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28317,
   "name": "b_6E9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28320,
   "name": "b_6EA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28323,
   "name": "colour_block_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28324,
   "name": "colour_block_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28339,
   "name": "b_6EB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28353,
   "name": "b_6EC1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28361,
   "name": "put_matrix_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28373,
   "name": "b_6ED5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28393,
   "name": "b_6EE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28396,
   "name": "b_6EEC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28399,
   "name": "matrix_block_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28400,
   "name": "matrix_block_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28413,
   "name": "b_6EFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28426,
   "name": "b_6F0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28433,
   "name": "build_line_table",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28442,
   "name": "b_6F1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28444,
   "name": "b_6F1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28464,
   "name": "b_6F30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28490,
   "name": "line_offset_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28491,
   "name": "line_offset_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28492,
   "name": "char_row_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28493,
   "name": "f_6F4D",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28542,
   "name": "colour_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28543,
   "name": "f_6F7F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28592,
   "name": "matrix_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28593,
   "name": "f_6FB1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28642,
   "name": "bitmap_mode",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28683,
   "name": "show_c000_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28689,
   "name": "show_4000_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28695,
   "name": "show_drawn_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28701,
   "name": "show_c000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28704,
   "name": "show_4000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28707,
   "name": "show_drawn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28747,
   "name": "b_704B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28771,
   "name": "b_7063",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28784,
   "name": "clear_drawing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28787,
   "name": "clear_4000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28800,
   "name": "b_7080",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28802,
   "name": "clear_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28813,
   "name": "dissolve_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28848,
   "name": "b_70B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28883,
   "name": "dissolve_pixel",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28899,
   "name": "b_70E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28908,
   "name": "pixel_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28912,
   "name": "pixel_keep_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28916,
   "name": "dissolve_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28936,
   "name": "b_7108",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28971,
   "name": "b_712B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28980,
   "name": "pixel_clear_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28984,
   "name": "unpack_picture",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28996,
   "name": "j_7144",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29009,
   "name": "b_7151",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29019,
   "name": "b_715B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29028,
   "name": "b_7164",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29037,
   "name": "b_716D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29061,
   "name": "b_7185",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29078,
   "name": "colours_to_ram",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29104,
   "name": "b_71B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29106,
   "name": "colours_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29109,
   "name": "colours_stage_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29127,
   "name": "b_71C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29129,
   "name": "colours_stage_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29132,
   "name": "colours_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29148,
   "name": "sound_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29189,
   "name": "start_effect",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29251,
   "name": "r_7243",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29252,
   "name": "sound_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29306,
   "name": "b_727A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29342,
   "name": "b_729E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29354,
   "name": "b_72AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29366,
   "name": "b_72B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29377,
   "name": "b_72C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29389,
   "name": "b_72CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29440,
   "name": "r_7300",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29441,
   "name": "effect_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29445,
   "name": "a_7305",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29446,
   "name": "effect_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29450,
   "name": "a_730A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29451,
   "name": "effect_step_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29456,
   "name": "effect_step_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29461,
   "name": "effect_attack_decay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29466,
   "name": "effect_sustain_release",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29471,
   "name": "effect_waveform",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29476,
   "name": "effect_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29480,
   "name": "a_7328",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29481,
   "name": "effect_release_at",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29486,
   "name": "effect_repeats",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29491,
   "name": "airlock_sound",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29496,
   "name": "alarm_sound",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29501,
   "name": "explosion_sound",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29513,
   "name": "noise_burst",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29518,
   "name": "rumble_sound",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29520,
   "name": "play_effect",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29529,
   "name": "b_7359",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29539,
   "name": "r_7363",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29540,
   "name": "distress_call",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29550,
   "name": "b_736E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29551,
   "name": "morse_at_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29552,
   "name": "morse_at_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29559,
   "name": "b_7377",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29569,
   "name": "b_7381",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29582,
   "name": "morse_jsr_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29583,
   "name": "morse_jsr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29592,
   "name": "b_7398",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29601,
   "name": "r_73A1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29602,
   "name": "morse_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29689,
   "name": "morse_symbols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29694,
   "name": "morse_routines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29695,
   "name": "f_73FF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29704,
   "name": "morse_dot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29713,
   "name": "morse_dash",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29722,
   "name": "morse_gap",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29726,
   "name": "silence_18",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29730,
   "name": "silence_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29734,
   "name": "tone",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29740,
   "name": "silence",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 29744,
   "name": "b_7430",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29758,
   "name": "print_inline",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29766,
   "name": "j_7446",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29774,
   "name": "b_744E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29775,
   "name": "inline_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29776,
   "name": "inline_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29785,
   "name": "b_7459",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29794,
   "name": "story_landing",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29826,
   "name": "text_landing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30070,
   "name": "a_7576",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30071,
   "name": "story_patrol",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30098,
   "name": "text_patrol",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30309,
   "name": "story_egg",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30330,
   "name": "text_egg",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30466,
   "name": "story_where",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30491,
   "name": "text_where",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30537,
   "name": "story_interpreter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30551,
   "name": "text_interpreter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30706,
   "name": "story_plot",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30738,
   "name": "text_plot",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30967,
   "name": "story_truce",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30990,
   "name": "text_truce",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31107,
   "name": "story_journey",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31124,
   "name": "text_journey",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31315,
   "name": "story_honored",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31346,
   "name": "text_honored",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31575,
   "name": "story_sunburst",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31600,
   "name": "text_sunburst",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31759,
   "name": "story_amulet",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31788,
   "name": "text_amulet",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31999,
   "name": "story_cheers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32026,
   "name": "text_cheers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32143,
   "name": "story_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32152,
   "name": "name_title",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32160,
   "name": "to_title",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32163,
   "name": "won_padding",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33792,
   "name": "picture_f1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34723,
   "name": "picture_f1_row6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35656,
   "name": "picture_f1_row12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36321,
   "name": "picture_f1_row16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36609,
   "name": "picture_f1_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37047,
   "name": "picture_f1_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37180,
   "name": "picture_f1_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37376,
   "name": "picture_f2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38333,
   "name": "picture_f2_row6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39217,
   "name": "picture_f2_row11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40031,
   "name": "picture_f2_row16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40317,
   "name": "picture_f2_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40750,
   "name": "picture_f2_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40960,
   "name": "picture_f2_colours_rest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41019,
   "name": "picture_f2_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41216,
   "name": "picture_f3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41422,
   "name": "picture_f3_row1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41482,
   "name": "picture_f3_row7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42361,
   "name": "picture_f3_row15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43286,
   "name": "picture_f3_row22",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43734,
   "name": "picture_f3_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44195,
   "name": "picture_f3_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44244,
   "name": "picture_f3_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49321,
   "name": "a_C0A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 59392,
   "name": "f_E800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 60158,
   "name": "line_table_lo_back2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60160,
   "name": "line_table_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60162,
   "name": "line_table_lo_next2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60414,
   "name": "line_table_hi_back2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60416,
   "name": "line_table_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60418,
   "name": "line_table_hi_next2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61952,
   "name": "font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62208,
   "name": "font_space",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 65280,
   "name": "f_FF00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65466,
   "name": "KERNAL_SETLFS",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65469,
   "name": "KERNAL_SETNAM",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65493,
   "name": "KERNAL_LOAD",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65530,
   "name": "cpu_vectors",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 1,
   "type": "line",
   "text": "The processor port: the ending runs with $34 (all RAM, its pictures and font under the ROMs) and banks the I/O and the KERNAL in ($36) for the hardware, the loads and the interrupt"
  },
  {
   "address": 16,
   "type": "line",
   "text": "The block copiers' source pointer (put_colour_block, put_matrix_block); nothing in the ending sets it, since nothing calls them"
  },
  {
   "address": 17,
   "type": "line",
   "text": "The block copiers' source, high byte"
  },
  {
   "address": 18,
   "type": "line",
   "text": "The shown buffer's screen matrix page, $60 or $E0 ($7063)"
  },
  {
   "address": 20,
   "type": "line",
   "text": "The block copiers' width in bytes; never set in the ending"
  },
  {
   "address": 21,
   "type": "line",
   "text": "The block copiers' height in rows; never set in the ending"
  },
  {
   "address": 25,
   "type": "line",
   "text": "dissolve_in's source: the drawing buffer's page"
  },
  {
   "address": 27,
   "type": "line",
   "text": "The dissolves' destination: the shown buffer's page"
  },
  {
   "address": 29,
   "type": "line",
   "text": "The high seven bits of the dissolves' 15-bit shift register, Y holding the low eight: bits 0-4 pick a page of the 8 KB bitmap, bits 5-6 the pixel pair in the byte. It starts at $7FFF, shifts right with taps $60 into this byte, and stops when it comes back, so every nonzero value comes once"
  },
  {
   "address": 30,
   "type": "line",
   "text": "The drawing buffer's page, $40 or $C0: print_char, the scrolls and unpack_picture draw there, and show_drawn shows it"
  },
  {
   "address": 32,
   "type": "line",
   "text": "The cursor's character row, 0-24"
  },
  {
   "address": 33,
   "type": "line",
   "text": "The cursor's column, 0-39"
  },
  {
   "address": 34,
   "type": "line",
   "text": "The text window's left column, where a new line starts"
  },
  {
   "address": 35,
   "type": "line",
   "text": "The text window's right column: a character that would go past it starts a new line first"
  },
  {
   "address": 48,
   "type": "line",
   "text": "The unpacker's and the scrolls' source pointer; load_inline uses it to read its inline name and puts the caller's value back"
  },
  {
   "address": 49,
   "type": "line",
   "text": "The source pointer's high byte"
  },
  {
   "address": 50,
   "type": "line",
   "text": "The unpacker's and the scrolls' destination pointer"
  },
  {
   "address": 51,
   "type": "line",
   "text": "The destination pointer's high byte"
  },
  {
   "address": 52,
   "type": "line",
   "text": "Column \u00d7 8, the column's offset within a bitmap row (column_offset_of), low byte"
  },
  {
   "address": 53,
   "type": "line",
   "text": "The column's offset, high byte (0 or 1)"
  },
  {
   "address": 54,
   "type": "line",
   "text": "The scrolls' first row: a character row for the wipes, a pixel line for scroll_up and scroll_down"
  },
  {
   "address": 55,
   "type": "line",
   "text": "The row the scrolls are moving"
  },
  {
   "address": 56,
   "type": "line",
   "text": "The row after the scrolls' last"
  },
  {
   "address": 57,
   "type": "line",
   "text": "The window's width in cells for the vertical scrolls (one more than right minus left)"
  },
  {
   "address": 58,
   "type": "line",
   "text": "The shown buffer's page, $40 or $C0"
  },
  {
   "address": 60,
   "type": "line",
   "text": "The key the interrupt last saw, its low seven bits; $FF when none is waiting"
  },
  {
   "address": 61,
   "type": "line",
   "text": "Counted up by the interrupt once a frame; nothing in the ending reads it (the intro takes it for its random question)"
  },
  {
   "address": 102,
   "type": "line",
   "text": "put_matrix_block's step through its source from row to row; never set in the ending"
  },
  {
   "address": 112,
   "type": "line",
   "text": "ANDed with every frequency the effect player writes; sound_init sets it to $FF"
  },
  {
   "address": 113,
   "type": "line",
   "text": "The second sound's enable mask, ANDed in before it plays: sound_init sets it to zero, so the second sound never plays"
  },
  {
   "address": 114,
   "type": "line",
   "text": "The second sound's target frequency, low byte; nothing in the ending sets it"
  },
  {
   "address": 115,
   "type": "line",
   "text": "The second sound's target frequency, high byte"
  },
  {
   "address": 116,
   "type": "line",
   "text": "The second sound's frequency, low byte, stepped up by 2 a frame until it reaches the target"
  },
  {
   "address": 117,
   "type": "line",
   "text": "The second sound's frequency, high byte"
  },
  {
   "address": 118,
   "type": "line",
   "text": "The second sound's sustain level, in the high nybble; nothing in the ending sets it"
  },
  {
   "address": 128,
   "type": "line",
   "text": "The effect's starting frequency, low byte (start_effect copies it from effect_freq_lo)"
  },
  {
   "address": 129,
   "type": "line",
   "text": "The effect's starting frequency, high byte"
  },
  {
   "address": 130,
   "type": "line",
   "text": "The effect's frequency step per frame, low byte"
  },
  {
   "address": 131,
   "type": "line",
   "text": "The effect's frequency step, high byte"
  },
  {
   "address": 132,
   "type": "line",
   "text": "The playing note's frequency, low byte"
  },
  {
   "address": 133,
   "type": "line",
   "text": "The playing note's frequency, high byte"
  },
  {
   "address": 134,
   "type": "line",
   "text": "The effect's attack and decay, for voice 1's $D405"
  },
  {
   "address": 135,
   "type": "line",
   "text": "The effect's sustain and release, for $D406"
  },
  {
   "address": 136,
   "type": "line",
   "text": "The effect's control byte for voice 1, waveform and gate ($81 noise, $41 pulse)"
  },
  {
   "address": 137,
   "type": "line",
   "text": "How many frames each repeat of the effect's note lasts"
  },
  {
   "address": 138,
   "type": "line",
   "text": "The frames-left count at which the note's gate is released"
  },
  {
   "address": 139,
   "type": "line",
   "text": "Frames left of the note playing; zero between notes"
  },
  {
   "address": 140,
   "type": "line",
   "text": "Repeats of the note still to start; $FF, negative, once the effect has finished"
  },
  {
   "address": 232,
   "type": "line",
   "text": "Not a variable: the operand of BIT $E8 at $6AE9, a byte scan_keys branches into as an INX ($6AEC)"
  },
  {
   "address": 788,
   "type": "line",
   "text": "The KERNAL's IRQ vector, pointed at irq_body ($6A6B) so the interrupt also works while the KERNAL is banked in for a load"
  },
  {
   "address": 789,
   "type": "line",
   "text": "The IRQ vector's high byte"
  },
  {
   "address": 790,
   "type": "line",
   "text": "The BRK vector, pointed at the RTI at $6A65"
  },
  {
   "address": 791,
   "type": "line",
   "text": "The BRK vector's high byte"
  },
  {
   "address": 792,
   "type": "line",
   "text": "The KERNAL's NMI vector, pointed at the RTI at $6A65, so RESTORE does nothing"
  },
  {
   "address": 793,
   "type": "line",
   "text": "The NMI vector's high byte"
  },
  {
   "address": 4096,
   "type": "line",
   "text": "colours_to_ram's patched STA at $71B3 was left here, the page after its $0C00-$0FFF staging buffer"
  },
  {
   "address": 7845,
   "type": "line",
   "text": "Not data: BIT $1EA5 at $7022 hides LDA $1E (show_drawn, $7023) in its operand"
  },
  {
   "address": 16553,
   "type": "line",
   "text": "Not data: BIT $40A9 at $701F and at $7072 hides LDA #$40, the entries show_4000 ($7020) and clear_4000 ($7073)"
  },
  {
   "address": 24576,
   "type": "line",
   "text": "The $4000 buffer's screen matrix ($6000-$63E7); clear_drawing's patched STA at $7080 was left pointing here after clearing the bitmap below"
  },
  {
   "address": 26624,
   "type": "line",
   "text": "WON's first instruction: SR loads WON over MAIN and jumps here ($154B) when the ship docks in the Manchi system. Sets up the interrupt and the line table, loads FONT and the three pictures F1-F3, clears the $4000 bitmap, turns the multicolour bitmap on, shows the empty $4000 buffer, makes the colour RAM white and goes on to the first page ($7462)"
  },
  {
   "address": 26633,
   "type": "line",
   "text": "load_inline's argument: load to $F200, then the file name \"FONT\" and a zero"
  },
  {
   "address": 26640,
   "type": "line",
   "text": "Loads \"F1.PAC\" to $8400"
  },
  {
   "address": 26643,
   "type": "line",
   "text": "load_inline's argument: load to $8400, then the file name \"F1.PAC\" and a zero"
  },
  {
   "address": 26652,
   "type": "line",
   "text": "Loads \"F2.PAC\" to $9200"
  },
  {
   "address": 26655,
   "type": "line",
   "text": "load_inline's argument: load to $9200, then the file name \"F2.PAC\" and a zero"
  },
  {
   "address": 26664,
   "type": "line",
   "text": "Loads \"F3.PAC\" to $A100"
  },
  {
   "address": 26667,
   "type": "line",
   "text": "load_inline's argument: load to $A100, then the file name \"F3.PAC\" and a zero"
  },
  {
   "address": 26676,
   "type": "line",
   "text": "With the files in: clears the $4000 bitmap, sets the bitmap mode, shows the empty $4000 buffer with its colours, whitens the colour RAM and jumps to the first page"
  },
  {
   "address": 26691,
   "type": "line",
   "text": "Banks the I/O and the KERNAL in ($01 low bits %110, RAM at $A000), keeping A"
  },
  {
   "address": 26702,
   "type": "line",
   "text": "Banks all RAM in ($01 low bits %100), keeping A"
  },
  {
   "address": 26713,
   "type": "line",
   "text": "Loads the file named after the JSR: two bytes of load address (low, high), then the name ending in a zero, and returns past the zero. LOAD runs from device 8 with secondary address 0, so the file goes to that address whatever its header says, and is retried until the KERNAL reports no error; the caller's $30/$31 are kept in the patched loads at $68C4 and $68C8"
  },
  {
   "address": 26798,
   "type": "line",
   "text": "The name's length, patched in by $688F"
  },
  {
   "address": 26800,
   "type": "line",
   "text": "The name's address, low byte, patched in by $6897"
  },
  {
   "address": 26802,
   "type": "line",
   "text": "The name's address, high byte, patched in by $689E"
  },
  {
   "address": 26809,
   "type": "line",
   "text": "The load address's low byte, patched in by $6873"
  },
  {
   "address": 26811,
   "type": "line",
   "text": "The load address's high byte, patched in by $6879"
  },
  {
   "address": 26821,
   "type": "line",
   "text": "The caller's $30, patched in by $685B and put back on the way out"
  },
  {
   "address": 26825,
   "type": "line",
   "text": "The caller's $31, patched in by $6860"
  },
  {
   "address": 26829,
   "type": "line",
   "text": "Clears any key waiting, waits for the interrupt to put one in key ($3C), clears it again and returns it in A"
  },
  {
   "address": 26844,
   "type": "line",
   "text": "Sets key ($3C) to $FF: none waiting"
  },
  {
   "address": 26849,
   "type": "line",
   "text": "A wait of about 0.86 seconds that a key ends early (the key stays in $3C). clear_key leaves A at $FF, so the caller's A makes no difference: the 26-cycle loop always runs 255 + 254 + ... + 1 = 32,640 times (848,640 cycles), and the interrupt adds its share"
  },
  {
   "address": 26877,
   "type": "line",
   "text": "Prints the character in A at the cursor, keeping A, the flags, and X and Y (put back by the patched loads at $6908 and $690A)"
  },
  {
   "address": 26889,
   "type": "line",
   "text": "The caller's X, patched in by $6902"
  },
  {
   "address": 26891,
   "type": "line",
   "text": "The caller's Y, patched in by $68FF"
  },
  {
   "address": 26895,
   "type": "line",
   "text": "Draws character A (bit 7 ignored) into the drawing buffer at the cursor: RETURN ($0D) starts a new line, $08 and $7F rub out the character before the cursor, and a character that would pass the window's right edge starts a new line first. Its 8 bytes are copied from FONT ($F200 + 8 \u00d7 the character) into the bitmap cell, and the cursor moves on a column"
  },
  {
   "address": 26987,
   "type": "line",
   "text": "The cursor row's offset in a bitmap, low byte, patched in from char_row_offsets ($6957); the ADC adds the column's offset to it"
  },
  {
   "address": 26994,
   "type": "line",
   "text": "The cursor row's offset, high byte, ORed with the drawing buffer's page ($695F)"
  },
  {
   "address": 27001,
   "type": "line",
   "text": "The character's address in FONT, low byte, patched in by $6945"
  },
  {
   "address": 27002,
   "type": "line",
   "text": "The character's address in FONT, high byte: built from character \u00d7 8 and then $F2 added ($694D)"
  },
  {
   "address": 27004,
   "type": "line",
   "text": "The bitmap cell's address, low byte, patched in by $696C"
  },
  {
   "address": 27005,
   "type": "line",
   "text": "The bitmap cell's address, high byte, patched in by $6973"
  },
  {
   "address": 27012,
   "type": "line",
   "text": "Rubs out the character before the cursor: prints a space at the cursor, steps back two columns, prints another and steps back one, leaving the cursor a column to the left (the BPL at $6990 lands on the next instruction either way)"
  },
  {
   "address": 27036,
   "type": "line",
   "text": "Moves the cursor to the window's left column on the next row. Past row 24 it scrolls the drawing buffer's rows 1-24 up a character row instead (7,680 bytes) and clears only the first 64 bytes of the bottom row, 8 of its 40 cells: $69F0 loads Y = 1 where the 320-byte row needs 2"
  },
  {
   "address": 27079,
   "type": "line",
   "text": "new_line's scroll source, low byte, set to $40 (row 1 starts 320 bytes in)"
  },
  {
   "address": 27080,
   "type": "line",
   "text": "new_line's scroll source page, the drawing buffer's plus one, stepped on each page"
  },
  {
   "address": 27083,
   "type": "line",
   "text": "new_line's scroll destination page, the drawing buffer's own, stepped on each page"
  },
  {
   "address": 27126,
   "type": "line",
   "text": "The bottom row's address, low byte, set to zero"
  },
  {
   "address": 27127,
   "type": "line",
   "text": "The bottom row's page, the drawing buffer's plus $1E (row 24 starts 7,680 bytes in)"
  },
  {
   "address": 27145,
   "type": "line",
   "text": "The byte counter new_line's two loops count down"
  },
  {
   "address": 27146,
   "type": "line",
   "text": "With interrupts off, points every vector at the ending's own handlers: a raster interrupt at line $50 with CIA1's interrupts off; the NMI and BRK vectors at the RTI at $6A65 (it also writes that address to $FFFC, which a reset never reads from RAM); the KERNAL's IRQ vector ($0314) at irq_body and the hardware one ($FFFE) at irq. Then clears the key, sets up the SID (sound_init) and banks all RAM in. The first call of the ending ($6800)"
  },
  {
   "address": 27237,
   "type": "line",
   "text": "An RTI: the NMI (RESTORE) and BRK do nothing"
  },
  {
   "address": 27238,
   "type": "line",
   "text": "The raster interrupt as the hardware vector enters it, with all RAM banked in: pushes A, X and Y as the KERNAL's entry would and goes on into irq_body"
  },
  {
   "address": 27243,
   "type": "line",
   "text": "The raster interrupt as $0314 enters it, the KERNAL having pushed the registers: saves $01, banks the I/O in, acknowledges the raster, scans the keyboard (a new or repeating key goes to key without bit 7), counts the frame in $3D, runs the effect player and returns"
  },
  {
   "address": 27280,
   "type": "line",
   "text": "Scans the keyboard matrix itself; returns C set with a key's code in A when a key is new or repeating, C clear otherwise. CTRL and the two SHIFTs are read first and masked out of their rows; the first key held, row 7 down to row 0 and bit 7 down to bit 0 within a row, is numbered 8 \u00d7 the row's place + the bit's and looked up in key_codes, or key_codes_shifted with either SHIFT, CTRL keeping only the low five bits. A held key repeats 36 frames after it went down, then every 6. Port A is left an input"
  },
  {
   "address": 27369,
   "type": "line",
   "text": "BIT $E8 hides an INX ($E8) at $6AEA: the first pass skips it and the BCS at $6AEC lands on it, so X counts the row's released keys from bit 7 down to the one held"
  },
  {
   "address": 27444,
   "type": "line",
   "text": "The last key's number, $FF for none"
  },
  {
   "address": 27445,
   "type": "line",
   "text": "Frames left before a held key first repeats: 30 from a new key"
  },
  {
   "address": 27446,
   "type": "line",
   "text": "Frames left before the next repeat: 6"
  },
  {
   "address": 27447,
   "type": "line",
   "text": "For each row in scan order (7 down to 0), the bits of its modifier keys, ORed in so they never count as a key: CTRL in row 7, right SHIFT in row 6, left SHIFT in row 1"
  },
  {
   "address": 27455,
   "type": "line",
   "text": "CTRL's bit from row 7, zero while it is held"
  },
  {
   "address": 27456,
   "type": "line",
   "text": "Right SHIFT's bit from row 6, zero while it is held"
  },
  {
   "address": 27457,
   "type": "line",
   "text": "Left SHIFT's bit from row 1, zero while it is held"
  },
  {
   "address": 27458,
   "type": "line",
   "text": "The 64 keys' codes in scan order (row 7 bit 7 first): ASCII for letters (lower case), digits and punctuation, $0D for RETURN, $7F for DEL, $08 for the left-arrow key, $1B for F1, $09 and $0A for the cursor keys, and $80 for the keys with no code, which arrive as 0 since the interrupt keeps seven bits. The ending only waits for any key"
  },
  {
   "address": 27522,
   "type": "line",
   "text": "The same with a SHIFT held: capitals, the symbols over the digits, $0B for cursor up and $08 for cursor left"
  },
  {
   "address": 27586,
   "type": "line",
   "text": "Wipes the window's character rows X to Y off to the left: the rows slide a cell at a time (wipe_left_step), the two buffers taking turns so that each flip shows one more cell, until the window's width has gone. The ending uses it once, on the Emperor's speech ($7B64)"
  },
  {
   "address": 27628,
   "type": "line",
   "text": "Moves character rows $36 to $38 - 1 of the drawing buffer one cell left within the window, clearing its right-hand cell"
  },
  {
   "address": 27708,
   "type": "line",
   "text": "Wipes the window's character rows X to Y off to the right, as wipe_left does to the left: after the landing ($7584) and after the Golden Sunburst page ($7C1C)"
  },
  {
   "address": 27750,
   "type": "line",
   "text": "Moves character rows $36 to $38 - 1 one cell right within the window, clearing its left-hand cell"
  },
  {
   "address": 27833,
   "type": "line",
   "text": "Scrolls the window's character rows X to Y up and away, two pixel lines a step, showing each step with its colours (show_drawn_colours) and catching the other buffer up; the ending uses it once, after Hiathra's arrival ($7A66)"
  },
  {
   "address": 27888,
   "type": "line",
   "text": "Moves the window's pixel lines up two through the line table, then clears the bottom two (clear_line)"
  },
  {
   "address": 27961,
   "type": "line",
   "text": "Clears pixel line X of the window in the drawing buffer"
  },
  {
   "address": 27999,
   "type": "line",
   "text": "Scrolls the window's character rows X to Y down and away, two pixel lines a step, as scroll_up does upwards: three times in the ending ($7804, $7904, $7D0C)"
  },
  {
   "address": 28054,
   "type": "line",
   "text": "Moves the window's pixel lines down two, working from the bottom up, then clears the top two"
  },
  {
   "address": 28130,
   "type": "line",
   "text": "Copies the colours to the colour RAM, then runs copy_matrix; nothing calls it"
  },
  {
   "address": 28133,
   "type": "line",
   "text": "Copies 8 pages, a buffer's $2000-$27FF (screen matrix and colours), from page A ORed with $12 to the same place in the other buffer. Only dissolve_in calls it, with A = $1E, which makes the source $E000 whichever buffer is shown"
  },
  {
   "address": 28149,
   "type": "line",
   "text": "copy_matrix's source page, patched in and stepped"
  },
  {
   "address": 28152,
   "type": "line",
   "text": "copy_matrix's destination page, the source's with bit 7 flipped"
  },
  {
   "address": 28166,
   "type": "line",
   "text": "Copies the $4000 buffer's picture to the $C000 buffer and the colours to the colour RAM; nothing calls it"
  },
  {
   "address": 28172,
   "type": "line",
   "text": "Copies the $C000 buffer's picture to the $4000 buffer and the colours to the colour RAM; nothing calls it"
  },
  {
   "address": 28178,
   "type": "line",
   "text": "Copies the shown buffer's picture to the drawing buffer (copy_shown) and its colours to the colour RAM, so the next page of text is drawn over the same picture"
  },
  {
   "address": 28184,
   "type": "line",
   "text": "Copies the $4000 buffer's picture, bitmap, screen matrix and colours ($28 pages), to the $C000 buffer"
  },
  {
   "address": 28190,
   "type": "line",
   "text": "Copies the $C000 buffer's picture to the $4000 buffer"
  },
  {
   "address": 28196,
   "type": "line",
   "text": "Copies the shown buffer's picture to the drawing buffer"
  },
  {
   "address": 28214,
   "type": "line",
   "text": "The picture copy's source page, patched in and stepped"
  },
  {
   "address": 28215,
   "type": "line",
   "text": "The snapshot shows this STA's page left at $68, after a copy to the $4000 buffer"
  },
  {
   "address": 28217,
   "type": "line",
   "text": "The picture copy's destination page, patched in and stepped"
  },
  {
   "address": 28231,
   "type": "line",
   "text": "Sets $34/$35 to column A \u00d7 8"
  },
  {
   "address": 28242,
   "type": "line",
   "text": "Returns character row A's offset in the drawing buffer, low byte in A and high in Y (with the buffer's page ORed in), X = 0; the caller's X is put back in the LDX at $6E60"
  },
  {
   "address": 28257,
   "type": "line",
   "text": "row_address's caller's X, patched in by $6E52"
  },
  {
   "address": 28259,
   "type": "line",
   "text": "Fills the colour RAM, $D800-$DBFF, with 1 (white), interrupts off"
  },
  {
   "address": 28277,
   "type": "line",
   "text": "The page of white_colours' STA, stepped from $D8; the snapshot shows it left at $DC"
  },
  {
   "address": 28292,
   "type": "line",
   "text": "Copies a block, $14 bytes wide and $15 rows high, from ($10) into the colour RAM at column X of row Y (colour_rows), the source advancing by the width each row; nothing in the ending calls it"
  },
  {
   "address": 28323,
   "type": "line",
   "text": "put_colour_block's destination, low byte, patched in and stepped by 40"
  },
  {
   "address": 28324,
   "type": "line",
   "text": "put_colour_block's destination, high byte"
  },
  {
   "address": 28361,
   "type": "line",
   "text": "Copies a block, $14 bytes wide and $15 rows high, from ($10) into the drawing buffer's screen matrix at column X of row Y (matrix_rows), the source advancing by block_stride ($66) each row; entered at $6ECD for the $C000 buffer and $6ED1 for the $4000 one. Nothing in the ending calls it"
  },
  {
   "address": 28399,
   "type": "line",
   "text": "put_matrix_block's destination, low byte, patched in and stepped by 40"
  },
  {
   "address": 28400,
   "type": "line",
   "text": "put_matrix_block's destination, high byte"
  },
  {
   "address": 28433,
   "type": "line",
   "text": "Builds the pixel-line table at $EB00 (low bytes) and $EC00 (high): for each of the 200 lines, (line / 8) \u00d7 320 + line mod 8"
  },
  {
   "address": 28490,
   "type": "line",
   "text": "The offset build_line_table is working on, low byte; it leaves $1F40 (8,000) in the pair"
  },
  {
   "address": 28491,
   "type": "line",
   "text": "The offset build_line_table is working on, high byte"
  },
  {
   "address": 28492,
   "type": "line",
   "text": "Each character row's offset in a bitmap, 320 \u00d7 the row, a word each for rows 0-24 (print_char, row_address)"
  },
  {
   "address": 28493,
   "type": "line",
   "text": "char_row_offsets read from one byte on, for the high bytes (X = 2 \u00d7 the row)"
  },
  {
   "address": 28542,
   "type": "line",
   "text": "Each row's address in the colour RAM, $D800 + 40 \u00d7 the row, a word each (put_colour_block)"
  },
  {
   "address": 28543,
   "type": "line",
   "text": "colour_rows read from one byte on, for the high bytes"
  },
  {
   "address": 28592,
   "type": "line",
   "text": "Each row's offset from a buffer's page to its screen matrix, $2000 + 40 \u00d7 the row, a word each (put_matrix_block)"
  },
  {
   "address": 28593,
   "type": "line",
   "text": "matrix_rows read from one byte on, for the high bytes"
  },
  {
   "address": 28642,
   "type": "line",
   "text": "Turns the multicolour bitmap on ($D011 bit 5, $D016 bit 4), with the bitmap at the start of the VIC's bank and the screen matrix $2000 into it ($D018 = $80), and the background black. Its read-modify-write of $D011 also writes back bit 7, which reads as bit 8 of the beam's line and writes bit 8 of the raster compare: run while the beam is on line 256 or later, it moves the interrupt from line $50 to $150 (336), which no frame reaches, and the interrupt stops for good"
  },
  {
   "address": 28683,
   "type": "line",
   "text": "Shows the $C000 buffer and copies its colours to the colour RAM; nothing calls it"
  },
  {
   "address": 28689,
   "type": "line",
   "text": "Shows the $4000 buffer and copies its colours to the colour RAM"
  },
  {
   "address": 28695,
   "type": "line",
   "text": "Shows the drawing buffer (show_drawn) and copies its colours to the colour RAM: the step after each page of the ending is drawn"
  },
  {
   "address": 28701,
   "type": "line",
   "text": "Shows the $C000 buffer (the VIC's bank 3, CIA2 port A bits 0-1 = 0) and makes $4000 the drawing buffer. The BITs that follow hide two more entries in their operands, show_4000 (LDA #$40) and show_drawn (LDA $1E). Sets $3A to the shown buffer's page, $12 to its screen matrix's and $1E to the other buffer's"
  },
  {
   "address": 28703,
   "type": "line",
   "text": "BIT $40A9: its operand is LDA #$40, show_4000's entry"
  },
  {
   "address": 28704,
   "type": "line",
   "text": "Shows the $4000 buffer (the VIC's bank 1, CIA2 port A bits 0-1 = %10) and makes $C000 the drawing buffer; the LDA #$40 here is the operand of the BIT at $701F"
  },
  {
   "address": 28706,
   "type": "line",
   "text": "BIT $1EA5: its operand is LDA $1E, show_drawn's entry"
  },
  {
   "address": 28707,
   "type": "line",
   "text": "Shows the drawing buffer, the shown one becoming the drawing buffer: the flip after each page is drawn; the LDA $1E here is the operand of the BIT at $7022"
  },
  {
   "address": 28784,
   "type": "line",
   "text": "Clears the drawing buffer's bitmap, 32 pages; the BITs that follow hide entries for the $4000 buffer ($7073) and the $C000 one ($7076). Only clear_4000 is called"
  },
  {
   "address": 28786,
   "type": "line",
   "text": "BIT $40A9: its operand is LDA #$40, clear_4000's entry"
  },
  {
   "address": 28787,
   "type": "line",
   "text": "Clears the $4000 buffer's bitmap ($4000-$5FFF), called once at the start ($6834); the LDA #$40 here is the operand of the BIT at $7072"
  },
  {
   "address": 28789,
   "type": "line",
   "text": "BIT $C0A9: its operand is LDA #$C0, an entry at $7076 for the $C000 buffer"
  },
  {
   "address": 28802,
   "type": "line",
   "text": "The page clear_drawing's STA writes, patched in and stepped; the snapshot shows it left at $60"
  },
  {
   "address": 28813,
   "type": "line",
   "text": "Brings the drawing buffer's picture onto the shown one a pixel pair at a time in a scattered order: after copy_matrix, a 15-bit shift register visits every pixel pair of the 8 KB bitmap once (dissolve_lfsr). Called once, as the Manchi bow to the egg ($7708)"
  },
  {
   "address": 28883,
   "type": "line",
   "text": "The pixel pair from the drawing buffer, patched into this ORA by $70CA"
  },
  {
   "address": 28908,
   "type": "line",
   "text": "The four pixel pairs of a multicolour byte, left to right"
  },
  {
   "address": 28912,
   "type": "line",
   "text": "The bits each pixel pair leaves alone, the complements of pixel_masks"
  },
  {
   "address": 28916,
   "type": "line",
   "text": "Fades the shown picture to black a pixel pair at a time, in the shift register's scattered order: before the bowing Manchi dissolve in ($7705) and before the palace is shown ($7A56)"
  },
  {
   "address": 28980,
   "type": "line",
   "text": "The complements of pixel_masks again, for dissolve_out"
  },
  {
   "address": 28984,
   "type": "line",
   "text": "Unpacks the picture packed at page A into the drawing buffer: a byte below $80 is a count and the next byte is repeated that many times; $80 plus a count is followed by that many bytes to copy; a zero is followed by the border colour, which is stored too, written to $D020, and ends it. A whole picture is a buffer's bitmap, its screen matrix at +$2000 and its colours at +$2400"
  },
  {
   "address": 29078,
   "type": "line",
   "text": "Copies the shown buffer's colours (its +$2400) to the colour RAM: first to $0C00 with all RAM banked in, then on to $D800 with the I/O in, since the RAM under the KERNAL and the colour RAM cannot both be seen at once"
  },
  {
   "address": 29106,
   "type": "line",
   "text": "colours_to_ram's source page, the shown buffer's plus $24, stepped"
  },
  {
   "address": 29109,
   "type": "line",
   "text": "colours_to_ram's staging page, from $0C, stepped"
  },
  {
   "address": 29129,
   "type": "line",
   "text": "The staging page read back, from $0C, stepped"
  },
  {
   "address": 29132,
   "type": "line",
   "text": "The colour RAM page written, from $D8, stepped"
  },
  {
   "address": 29148,
   "type": "line",
   "text": "Silences the SID's three voices, turns the filter off and the volume up (15), and sets up the effect player and the masks"
  },
  {
   "address": 29189,
   "type": "line",
   "text": "Starts sound effect A (0-4; others are ignored) on voice 1, copying its settings from the effect tables to $80-$8C with interrupts off"
  },
  {
   "address": 29252,
   "type": "line",
   "text": "The effect player, run by the interrupt every frame: starts each repeat of the effect's note (frequency, envelope, waveform, gate), moves the frequency by the step each frame, releases the gate at the release point and silences the note when its frames run out. Below that, a second sound left in from a shared driver slides $74/$75 up 2 a frame towards $72/$73 and would play it while no effect is, but drone_mask is zero, so it never sounds. The ending starts no effect, so the player has nothing to play"
  },
  {
   "address": 29441,
   "type": "line",
   "text": "Each effect's starting frequency, low byte, for effects 0-4"
  },
  {
   "address": 29445,
   "type": "line",
   "text": "Effect 4's starting frequency, low byte, set by tone ($7433)"
  },
  {
   "address": 29446,
   "type": "line",
   "text": "Each effect's starting frequency, high byte: $10, $18, $01, $80, and effect 4's"
  },
  {
   "address": 29450,
   "type": "line",
   "text": "Effect 4's starting frequency, high byte, set by tone ($7436)"
  },
  {
   "address": 29451,
   "type": "line",
   "text": "Each effect's frequency step per frame, low byte"
  },
  {
   "address": 29456,
   "type": "line",
   "text": "Each effect's step, high byte: effect 0 falls by $80 a frame, effect 1 rises by $80, effect 2 falls by 2, effect 3 rises by $600, effect 4 holds"
  },
  {
   "address": 29461,
   "type": "line",
   "text": "Each effect's attack and decay"
  },
  {
   "address": 29466,
   "type": "line",
   "text": "Each effect's sustain and release"
  },
  {
   "address": 29471,
   "type": "line",
   "text": "Each effect's waveform with the gate: noise ($81) for effects 0, 2 and 3, pulse ($41) for 1 and 4"
  },
  {
   "address": 29476,
   "type": "line",
   "text": "Each effect's note length in frames: 32, 48, 128, 32, and effect 4's"
  },
  {
   "address": 29480,
   "type": "line",
   "text": "Effect 4's note length, set by tone and silence ($7430)"
  },
  {
   "address": 29481,
   "type": "line",
   "text": "The frames-left count at which each effect releases its gate"
  },
  {
   "address": 29486,
   "type": "line",
   "text": "How many notes each effect plays: three for effect 1, one for the rest"
  },
  {
   "address": 29491,
   "type": "line",
   "text": "Plays effect 3, rising noise, and waits for it: the intro's airlock sound, which the ending carries in its copy of the library and never calls"
  },
  {
   "address": 29496,
   "type": "line",
   "text": "Plays effect 1, three rising tones: the intro's alert, never called here"
  },
  {
   "address": 29501,
   "type": "line",
   "text": "Plays effect 0, two 18-frame silences and effect 0 again: the intro's explosion, never called here"
  },
  {
   "address": 29513,
   "type": "line",
   "text": "Plays effect 0, falling noise; only explosion_sound calls it"
  },
  {
   "address": 29518,
   "type": "line",
   "text": "Plays effect 2, noise falling slowly for 128 frames: the intro's rumble, never called here"
  },
  {
   "address": 29520,
   "type": "line",
   "text": "Plays effect A and waits until it has finished or a key is pressed; if a key is already waiting it plays nothing"
  },
  {
   "address": 29540,
   "type": "line",
   "text": "Sends morse_text with tones (the elements' routines in morse_routines) until its closing zero or a key, which is then cleared: the intro's distress beacon. Nothing in the ending calls it, so its patched operands still hold the file's $FF00"
  },
  {
   "address": 29551,
   "type": "line",
   "text": "The Morse character's address, low byte, patched in and stepped"
  },
  {
   "address": 29552,
   "type": "line",
   "text": "The Morse character's address, high byte"
  },
  {
   "address": 29582,
   "type": "line",
   "text": "The element routine's address, low byte, patched into this JSR from morse_routines"
  },
  {
   "address": 29583,
   "type": "line",
   "text": "The element routine's address, high byte"
  },
  {
   "address": 29602,
   "type": "line",
   "text": "The distress call, SOS SOS PLAY ULTIMA SOS SOS: $AE a dot and $AD a dash, $A7 a short gap between the letters of SOS, $A0 a gap between the other letters and $AF a gap between words (the five codes are morse_symbols)"
  },
  {
   "address": 29689,
   "type": "line",
   "text": "The five Morse characters distress_call looks up, in morse_routines' order: dot, dash, gap, word gap, short gap"
  },
  {
   "address": 29694,
   "type": "line",
   "text": "The Morse elements' routines, a word each: morse_dot, morse_dash, morse_gap, silence_18 and silence_4"
  },
  {
   "address": 29695,
   "type": "line",
   "text": "morse_routines read from one byte on, for the high bytes (Y = 2 \u00d7 the element)"
  },
  {
   "address": 29704,
   "type": "line",
   "text": "A dot: a 2-frame tone and 2 frames of silence"
  },
  {
   "address": 29713,
   "type": "line",
   "text": "A dash: a 6-frame tone and 2 frames of silence"
  },
  {
   "address": 29722,
   "type": "line",
   "text": "The gap between letters: 6 frames of silence"
  },
  {
   "address": 29726,
   "type": "line",
   "text": "18 frames of silence (effect 4 at frequency 0): the gap between Morse words and the pause in explosion_sound"
  },
  {
   "address": 29730,
   "type": "line",
   "text": "4 frames of silence, the gap between the letters of SOS"
  },
  {
   "address": 29734,
   "type": "line",
   "text": "A tone at frequency $3864 lasting A frames"
  },
  {
   "address": 29740,
   "type": "line",
   "text": "A frames of silence: effect 4 at frequency 0"
  },
  {
   "address": 29758,
   "type": "line",
   "text": "Prints the text after the JSR, through the patched load at $744E, up to its zero, and returns to the instruction after the zero; the same routine as the intro's, at another address"
  },
  {
   "address": 29775,
   "type": "line",
   "text": "The inline text's address, low byte, taken from the return address and stepped"
  },
  {
   "address": 29776,
   "type": "line",
   "text": "The inline text's address, high byte"
  },
  {
   "address": 29794,
   "type": "line",
   "text": "The ending's first page: unpacks F1, the landing among the Manchi warriors, into the $C000 buffer and prints the landing text full width, columns 1-38, from row 16"
  },
  {
   "address": 29799,
   "type": "line",
   "text": "Puts the cursor on row 3, column 1, and then, after setting the window, on row 16, column 1: the first setting is never used"
  },
  {
   "address": 29826,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero, spaces padding each line to the window's 38 columns: \"With the Manchi queen's egg safely stowed in anti-crash webbing, you soar through the low-oxygen atmosphere of the Manchi homeworld. On a plain of red dust and obsidian mesas, you step out, the first human to reach this distant planet.\""
  },
  {
   "address": 30070,
   "type": "line",
   "text": "text_landing's closing zero, where print_inline's patched load at $744E was left when the snapshot was taken"
  },
  {
   "address": 30071,
   "type": "line",
   "text": "Shows the landing with its colours, copies it to the other buffer, waits for a key, wipes rows 16-22 off to the right and prints the patrol from row 17"
  },
  {
   "address": 30098,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"The Manchi warrior-caste patrol shows little regard for this high achievement. From bandoliers of webbing they pull chitinous projectile weapons. You fear your mission will end all too soon...\""
  },
  {
   "address": 30309,
   "type": "line",
   "text": "Shows the patrol, unpacks F2, the Manchi raising the egg, into the drawing buffer and prints the egg text beside it in a narrow window, columns 24-38 from row 3"
  },
  {
   "address": 30330,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero, nine lines of the 15-column window: \"...Until you bring forth the egg. The Manchi instantly lower their weapons and bow down before their revered Chi-gonger.\""
  },
  {
   "address": 30466,
   "type": "line",
   "text": "Waits for a key, fades the landing to black (dissolve_out), dissolves F2's page in (dissolve_in), copies it to the other buffer and prints the cry from row 16, columns 1-38"
  },
  {
   "address": 30491,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: '\"Where did you get THAT?\" someone cries.'"
  },
  {
   "address": 30537,
   "type": "line",
   "text": "After a pause (the $0F it passes makes it no shorter), shows the cry, copies it and prints the interpreter text after it"
  },
  {
   "address": 30551,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: two RETURNs, then \"Have the Manchi learned the human tongue? Then you notice a Baakili trader shoving his way through the growing throng. An interpreter!\""
  },
  {
   "address": 30706,
   "type": "line",
   "text": "After a pause (it passes $14, which changes nothing), shows the interpreter, copies it, waits for a key, scrolls rows 16-22 down and away (scroll_down) and prints Koth's plot from row 16"
  },
  {
   "address": 30738,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero, six full lines: \"With the trader's help, you expose Koth's plot and state your intention to restore the egg to its rightful owners. The Manchi gratefully accept it and raise it high above their heads for all to see.\""
  },
  {
   "address": 30967,
   "type": "line",
   "text": "Shows the plot, copies it, waits for a key, scrolls rows 16-21 down and away and sets only the row, 16: text_plot's six full lines left the column past the window's edge, so the first character starts a new line and the truce begins on row 17"
  },
  {
   "address": 30990,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"Satisfied that her egg is safe once more, the Manchi queen calls a truce.\" Two RETURNs, then \"Peace is at hand.\""
  },
  {
   "address": 31107,
   "type": "line",
   "text": "Shows the truce, unpacks F3, Emperor Hiathra holding up the Golden Sunburst, into the drawing buffer and prints the journey from row 1, column 1"
  },
  {
   "address": 31124,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"After a journey of many months, you arrive at the palace on the Imperial homeworld, where a hero's welcome awaits you. Standing before his throne, Emperor Hiathra speaks...\""
  },
  {
   "address": 31315,
   "type": "line",
   "text": "Waits for a key, fades the Manchi to black and shows F3's page at once with its colours, copies it, waits for a key, scrolls rows 1-5 up and away (scroll_up) and prints the Emperor's speech from row 1"
  },
  {
   "address": 31346,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: '\"Honored traveler, our mightiest fleets could not accomplish what you achieved alone. Your bravery and cleverness are renowned throughout the Empire. I bestow upon you our highest honor: the Golden Sunburst of Valor.\"'"
  },
  {
   "address": 31575,
   "type": "line",
   "text": "Shows the speech, copies it, waits for a key, wipes rows 1-6 off to the left and prints the medal's history from row 1"
  },
  {
   "address": 31600,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"The Golden Sunburst! In all of history only one other living person has earned this medal -- Admiral Koth. Too bad the slime escaped the Imperial Guard!\""
  },
  {
   "address": 31759,
   "type": "line",
   "text": "Shows the medal's history, copies it, waits for a key, wipes rows 1-5 off to the right and prints the presentation from row 1"
  },
  {
   "address": 31775,
   "type": "line",
   "text": "Loads X = 1 and Y = 5 again, the wipe's rows, which nothing then uses"
  },
  {
   "address": 31788,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: 'Hiathra places the coveted amulet around your neck. \"The gratitude of the Imperium is yours!\" he says, gesturing toward the crowd behind you. \"Turn now, and accept the accolades that are your due!\"'"
  },
  {
   "address": 31999,
   "type": "line",
   "text": "Shows the presentation, copies it, waits for a key, scrolls rows 1-6 down and away and prints the last page from row 2"
  },
  {
   "address": 32026,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"Cheers swell to fill the palace courtyard...\" Two RETURNs, then \"VICTORY IS YOURS!\", centred"
  },
  {
   "address": 32143,
   "type": "line",
   "text": "Shows the last page and waits for a key; then loads TITLE to $2000 and jumps to it, so the game goes back to its title"
  },
  {
   "address": 32152,
   "type": "line",
   "text": "load_inline's argument: load to $2000, then the file name \"TITLE\" and a zero"
  },
  {
   "address": 32160,
   "type": "line",
   "text": "With TITLE in, jumps to $2000"
  },
  {
   "address": 32163,
   "type": "line",
   "text": "Zeros to the end of WON's last disk block; never read"
  },
  {
   "address": 33792,
   "type": "line",
   "text": "F1.PAC, loaded at the start ($6810): the landing picture, packed for unpack_picture (a byte below $80 a run's count with the byte to repeat, $80 plus a count that many bytes to copy, a zero the border colour and the end). Its stream from bitmap row 0"
  },
  {
   "address": 34723,
   "type": "line",
   "text": "F1's stream from bitmap row 6 on (+$0780 in the buffer)"
  },
  {
   "address": 35656,
   "type": "line",
   "text": "F1's stream from bitmap row 12 on"
  },
  {
   "address": 36321,
   "type": "line",
   "text": "F1's stream for bitmap rows 16-24, where the text goes: ten bytes a row"
  },
  {
   "address": 36609,
   "type": "line",
   "text": "F1's stream for the screen matrix (+$2000)"
  },
  {
   "address": 37047,
   "type": "line",
   "text": "F1's stream for the colours (+$2400), then a zero and the border colour, black, at $913B"
  },
  {
   "address": 37180,
   "type": "line",
   "text": "The rest of F1.PAC after its stream, to the end of its last disk block; never read"
  },
  {
   "address": 37376,
   "type": "line",
   "text": "F2.PAC, loaded at the start ($681C): the Manchi raising the egg, a picture in the top left 24 columns of 16 rows, packed as F1 is"
  },
  {
   "address": 38333,
   "type": "line",
   "text": "F2's stream from bitmap row 6 on"
  },
  {
   "address": 39217,
   "type": "line",
   "text": "F2's stream from bitmap row 11 on"
  },
  {
   "address": 40031,
   "type": "line",
   "text": "F2's stream for bitmap rows 16-24, where the text goes"
  },
  {
   "address": 40317,
   "type": "line",
   "text": "F2's stream for the screen matrix (+$2000)"
  },
  {
   "address": 40750,
   "type": "line",
   "text": "F2's stream for the colours (+$2400)"
  },
  {
   "address": 40960,
   "type": "line",
   "text": "F2's colour stream from $A000 on, then a zero at $A039 and the border colour, black"
  },
  {
   "address": 41019,
   "type": "line",
   "text": "The rest of F2.PAC after its stream; never read"
  },
  {
   "address": 41216,
   "type": "line",
   "text": "F3.PAC, loaded at the start ($6828): Emperor Hiathra with the Golden Sunburst, a picture in the bottom 18 rows, packed as F1 is"
  },
  {
   "address": 41422,
   "type": "line",
   "text": "F3's stream for bitmap rows 1-6, where the text goes"
  },
  {
   "address": 41482,
   "type": "line",
   "text": "F3's stream from bitmap row 7 on, the picture's frame"
  },
  {
   "address": 42361,
   "type": "line",
   "text": "F3's stream from bitmap row 15 on"
  },
  {
   "address": 43286,
   "type": "line",
   "text": "F3's stream from bitmap row 22 on"
  },
  {
   "address": 43734,
   "type": "line",
   "text": "F3's stream for the screen matrix (+$2000)"
  },
  {
   "address": 44195,
   "type": "line",
   "text": "F3's stream for the colours (+$2400), then a zero and the border colour at $ACD3"
  },
  {
   "address": 44244,
   "type": "line",
   "text": "The rest of F3.PAC after its stream; never read"
  },
  {
   "address": 49321,
   "type": "line",
   "text": "Not data: BIT $C0A9 at $7075 hides LDA #$C0, clear_drawing's entry for the $C000 buffer ($7076), which nothing calls"
  },
  {
   "address": 59392,
   "type": "line",
   "text": "Past the $C000 buffer's colours ($E400-$E7E7): copy_shown's patched LDA at $6E34 and colours_to_ram's at $71B0 were both left pointing here"
  },
  {
   "address": 60158,
   "type": "line",
   "text": "The low bytes of line_table from two before its start: scroll_down_step reads here with X = a line to get the line two above it"
  },
  {
   "address": 60160,
   "type": "line",
   "text": "The pixel-line table's low bytes, lines 0-199: each line's offset in a bitmap, (line / 8) \u00d7 320 + line mod 8, built at the start (build_line_table)"
  },
  {
   "address": 60162,
   "type": "line",
   "text": "The low bytes from two lines on: scroll_up_step reads here to get the line two below"
  },
  {
   "address": 60414,
   "type": "line",
   "text": "The high bytes of the line two above, for scroll_down_step ($EC00 less two)"
  },
  {
   "address": 60416,
   "type": "line",
   "text": "The pixel-line table's high bytes, ORed with a buffer's page when used"
  },
  {
   "address": 60418,
   "type": "line",
   "text": "The high bytes of the line two below, for scroll_up_step"
  },
  {
   "address": 61952,
   "type": "line",
   "text": "FONT, loaded here at the start ($6806): 128 characters of 8 bytes each, character c at $F200 + 8 \u00d7 c, drawn by print_char"
  },
  {
   "address": 62208,
   "type": "line",
   "text": "FONT's character $20, the space, where print_char's patched load at $6978 was left"
  },
  {
   "address": 65280,
   "type": "line",
   "text": "No table here: $FF00 is the placeholder the WON file carries in the operands patched before use. The snapshot still shows it in those not yet run: new_line's scroll ($69C6, $69C9) and row clear ($69F5), copy_matrix ($6DF3, $6DF6), the block copiers ($6EA2, $6EEE) and distress_call ($736E, $738D)"
  },
  {
   "address": 65466,
   "type": "line",
   "text": "The KERNAL's SETLFS: file number A, device X, secondary address Y"
  },
  {
   "address": 65469,
   "type": "line",
   "text": "The KERNAL's SETNAM: the name's length in A, its address in X (low) and Y (high)"
  },
  {
   "address": 65493,
   "type": "line",
   "text": "The KERNAL's LOAD: A = 0 to load, X and Y the address used when the secondary address is 0; carry set on an error"
  },
  {
   "address": 65530,
   "type": "line",
   "text": "The hardware vectors in the RAM under the KERNAL, written by setup_irq: NMI and reset at the RTI ($6A65; a reset banks the KERNAL in and never reads these), IRQ at irq ($6A66)"
  }
 ]
}