{
 "schema": 1,
 "platform": "c64",
 "game": "space-rogue",
 "part": "intro",
 "build": "",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    1024,
    16383,
    "left by the boot and the title (TITLE at $2000, CREDITS at $3000), which the intro neither loads nor reads; 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"
   ],
   [
    49152,
    59391,
    "the $C000 display buffer: the bitmap (under the I/O from $D000), the screen matrix at $E000 and the colours at $E400"
   ],
   [
    33536,
    33791,
    "SHIP's bytes left from the title, which loads SHIP at $6800-$A8FF; the intro neither loads nor reads them"
   ],
   [
    36608,
    37375,
    "SHIP's bytes left from the title, between I1.PAC and I2.PAC"
   ],
   [
    40192,
    41215,
    "SHIP's bytes left from the title, between I2.PAC and I3.PAC"
   ],
   [
    45056,
    46847,
    "ROGUE's bytes left from the title, which loads ROGUE at $AC00-$B6FF; I3.PAC covers the rest"
   ],
   [
    64816,
    64847,
    "a copy of the KERNAL's default vectors (IRQ $EA31, BRK $FE66, NMI $FE47 and the I/O routines) in the RAM under it, written before the intro runs; the intro never reads it"
   ]
  ],
  "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": 26650,
   "type": "Byte"
  },
  {
   "start": 26651,
   "end": 27133,
   "type": "Code"
  },
  {
   "start": 27134,
   "end": 27134,
   "type": "Undefined"
  },
  {
   "start": 27135,
   "end": 27432,
   "type": "Code"
  },
  {
   "start": 27433,
   "end": 27574,
   "type": "Undefined"
  },
  {
   "start": 27575,
   "end": 28478,
   "type": "Code"
  },
  {
   "start": 28479,
   "end": 28480,
   "type": "Undefined"
  },
  {
   "start": 28481,
   "end": 28630,
   "type": "Word"
  },
  {
   "start": 28631,
   "end": 28896,
   "type": "Code"
  },
  {
   "start": 28897,
   "end": 28904,
   "type": "Undefined"
  },
  {
   "start": 28905,
   "end": 28968,
   "type": "Code"
  },
  {
   "start": 28969,
   "end": 28972,
   "type": "Undefined"
  },
  {
   "start": 28973,
   "end": 29429,
   "type": "Code"
  },
  {
   "start": 29430,
   "end": 29479,
   "type": "Undefined"
  },
  {
   "start": 29480,
   "end": 29590,
   "type": "Code"
  },
  {
   "start": 29591,
   "end": 29682,
   "type": "Undefined"
  },
  {
   "start": 29683,
   "end": 29692,
   "type": "Address"
  },
  {
   "start": 29693,
   "end": 29779,
   "type": "Code"
  },
  {
   "start": 29780,
   "end": 29812,
   "type": "Byte"
  },
  {
   "start": 29813,
   "end": 30083,
   "type": "Code"
  },
  {
   "start": 30084,
   "end": 30087,
   "type": "Undefined"
  },
  {
   "start": 30088,
   "end": 30101,
   "type": "Code"
  },
  {
   "start": 30102,
   "end": 30103,
   "type": "Undefined"
  },
  {
   "start": 30104,
   "end": 30175,
   "type": "Code"
  },
  {
   "start": 30176,
   "end": 30188,
   "type": "Byte"
  },
  {
   "start": 30189,
   "end": 30196,
   "type": "Code"
  },
  {
   "start": 30197,
   "end": 30207,
   "type": "Byte"
  },
  {
   "start": 30208,
   "end": 30218,
   "type": "Code"
  },
  {
   "start": 30219,
   "end": 30227,
   "type": "Byte"
  },
  {
   "start": 30228,
   "end": 30235,
   "type": "Code"
  },
  {
   "start": 30236,
   "end": 30239,
   "type": "Byte"
  },
  {
   "start": 30240,
   "end": 30250,
   "type": "Code"
  },
  {
   "start": 30251,
   "end": 30263,
   "type": "Byte"
  },
  {
   "start": 30264,
   "end": 30271,
   "type": "Code"
  },
  {
   "start": 30272,
   "end": 30277,
   "type": "Byte"
  },
  {
   "start": 30278,
   "end": 30288,
   "type": "Code"
  },
  {
   "start": 30289,
   "end": 30296,
   "type": "Byte"
  },
  {
   "start": 30297,
   "end": 30304,
   "type": "Code"
  },
  {
   "start": 30305,
   "end": 30315,
   "type": "Byte"
  },
  {
   "start": 30316,
   "end": 30342,
   "type": "Code"
  },
  {
   "start": 30343,
   "end": 30772,
   "type": "Undefined"
  },
  {
   "start": 30773,
   "end": 30920,
   "type": "Code"
  },
  {
   "start": 30921,
   "end": 30936,
   "type": "Undefined"
  },
  {
   "start": 30937,
   "end": 30959,
   "type": "Code"
  },
  {
   "start": 30960,
   "end": 30976,
   "type": "Byte"
  },
  {
   "start": 30977,
   "end": 31000,
   "type": "Code"
  },
  {
   "start": 31001,
   "end": 31004,
   "type": "Undefined"
  },
  {
   "start": 31005,
   "end": 31030,
   "type": "Code"
  },
  {
   "start": 31031,
   "end": 31051,
   "type": "Byte"
  },
  {
   "start": 31052,
   "end": 31062,
   "type": "Code"
  },
  {
   "start": 31063,
   "end": 31076,
   "type": "Byte"
  },
  {
   "start": 31077,
   "end": 31088,
   "type": "Code"
  },
  {
   "start": 31089,
   "end": 31097,
   "type": "Byte"
  },
  {
   "start": 31098,
   "end": 31100,
   "type": "Code"
  },
  {
   "start": 31101,
   "end": 31109,
   "type": "Byte"
  },
  {
   "start": 31110,
   "end": 31112,
   "type": "Code"
  },
  {
   "start": 31113,
   "end": 31121,
   "type": "Byte"
  },
  {
   "start": 31122,
   "end": 31145,
   "type": "Code"
  },
  {
   "start": 31146,
   "end": 31306,
   "type": "Byte"
  },
  {
   "start": 31307,
   "end": 31340,
   "type": "Code"
  },
  {
   "start": 31341,
   "end": 31504,
   "type": "Byte"
  },
  {
   "start": 31505,
   "end": 31531,
   "type": "Code"
  },
  {
   "start": 31532,
   "end": 31608,
   "type": "Byte"
  },
  {
   "start": 31609,
   "end": 31622,
   "type": "Code"
  },
  {
   "start": 31623,
   "end": 31641,
   "type": "Byte"
  },
  {
   "start": 31642,
   "end": 31655,
   "type": "Code"
  },
  {
   "start": 31656,
   "end": 31665,
   "type": "Byte"
  },
  {
   "start": 31666,
   "end": 31679,
   "type": "Code"
  },
  {
   "start": 31680,
   "end": 31758,
   "type": "Byte"
  },
  {
   "start": 31759,
   "end": 31782,
   "type": "Code"
  },
  {
   "start": 31783,
   "end": 32011,
   "type": "Byte"
  },
  {
   "start": 32012,
   "end": 32026,
   "type": "Code"
  },
  {
   "start": 32027,
   "end": 32137,
   "type": "Byte"
  },
  {
   "start": 32138,
   "end": 32189,
   "type": "Code"
  },
  {
   "start": 32190,
   "end": 32222,
   "type": "Byte"
  },
  {
   "start": 32223,
   "end": 32234,
   "type": "Code"
  },
  {
   "start": 32235,
   "end": 32290,
   "type": "Byte"
  },
  {
   "start": 32291,
   "end": 32304,
   "type": "Code"
  },
  {
   "start": 32305,
   "end": 32383,
   "type": "Byte"
  },
  {
   "start": 32384,
   "end": 32401,
   "type": "Code"
  },
  {
   "start": 32402,
   "end": 32419,
   "type": "Byte"
  },
  {
   "start": 32420,
   "end": 32445,
   "type": "Code"
  },
  {
   "start": 32446,
   "end": 32503,
   "type": "Byte"
  },
  {
   "start": 32504,
   "end": 32518,
   "type": "Code"
  },
  {
   "start": 32519,
   "end": 32581,
   "type": "Byte"
  },
  {
   "start": 32582,
   "end": 32590,
   "type": "Code"
  },
  {
   "start": 32591,
   "end": 32659,
   "type": "Byte"
  },
  {
   "start": 32660,
   "end": 32673,
   "type": "Code"
  },
  {
   "start": 32674,
   "end": 32727,
   "type": "Byte"
  },
  {
   "start": 32728,
   "end": 32745,
   "type": "Code"
  },
  {
   "start": 32746,
   "end": 32939,
   "type": "Byte"
  },
  {
   "start": 32940,
   "end": 32966,
   "type": "Code"
  },
  {
   "start": 32967,
   "end": 33086,
   "type": "Byte"
  },
  {
   "start": 33087,
   "end": 33108,
   "type": "Code"
  },
  {
   "start": 33109,
   "end": 33185,
   "type": "Byte"
  },
  {
   "start": 33186,
   "end": 33199,
   "type": "Code"
  },
  {
   "start": 33200,
   "end": 33238,
   "type": "Byte"
  },
  {
   "start": 33239,
   "end": 33252,
   "type": "Code"
  },
  {
   "start": 33253,
   "end": 33291,
   "type": "Byte"
  },
  {
   "start": 33292,
   "end": 33305,
   "type": "Code"
  },
  {
   "start": 33306,
   "end": 33344,
   "type": "Byte"
  },
  {
   "start": 33345,
   "end": 33364,
   "type": "Code"
  },
  {
   "start": 33365,
   "end": 33369,
   "type": "Byte"
  },
  {
   "start": 33370,
   "end": 33378,
   "type": "Code"
  },
  {
   "start": 33379,
   "end": 33386,
   "type": "Byte"
  },
  {
   "start": 33387,
   "end": 33389,
   "type": "Code"
  },
  {
   "start": 33390,
   "end": 33791,
   "type": "Undefined"
  },
  {
   "start": 33792,
   "end": 36607,
   "type": "Byte"
  },
  {
   "start": 36608,
   "end": 37375,
   "type": "Undefined"
  },
  {
   "start": 37376,
   "end": 40191,
   "type": "Byte"
  },
  {
   "start": 40192,
   "end": 41215,
   "type": "Undefined"
  },
  {
   "start": 41216,
   "end": 45055,
   "type": "Byte"
  },
  {
   "start": 45056,
   "end": 46847,
   "type": "Undefined"
  },
  {
   "start": 46848,
   "end": 49151,
   "type": "Byte"
  },
  {
   "start": 49152,
   "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": 36,
   "name": "line_length",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39,
   "name": "text_pointer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40,
   "name": "zpa_28",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41,
   "name": "line_limit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42,
   "name": "question_word",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "zpa_2B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 44,
   "name": "question_page",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45,
   "name": "question_paragraph",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46,
   "name": "question_sentence",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47,
   "name": "question_word_number",
   "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": 1024,
   "name": "sr_entry",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "f_1000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 7845,
   "name": "a_1EA5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 8192,
   "name": "title_entry",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 16553,
   "name": "a_40A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24576,
   "name": "f_6000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26624,
   "name": "intro_start",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26633,
   "name": "name_font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26640,
   "name": "load_space",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26643,
   "name": "name_space",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26651,
   "name": "intro_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26680,
   "name": "io_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26691,
   "name": "io_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26702,
   "name": "load_inline",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26724,
   "name": "b_6864",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26737,
   "name": "b_6871",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26777,
   "name": "b_6899",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26787,
   "name": "load_name_length",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26789,
   "name": "load_name_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26791,
   "name": "load_name_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26798,
   "name": "load_to_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26800,
   "name": "load_to_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26810,
   "name": "saved_source_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26814,
   "name": "saved_source_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26818,
   "name": "wait_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26821,
   "name": "b_68C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26833,
   "name": "clear_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26838,
   "name": "pause",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26842,
   "name": "b_68DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26843,
   "name": "b_68DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26863,
   "name": "b_68EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26866,
   "name": "print_char",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26878,
   "name": "saved_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26880,
   "name": "saved_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26884,
   "name": "print_char_body",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26893,
   "name": "b_690D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26900,
   "name": "b_6914",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26907,
   "name": "b_691B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26919,
   "name": "b_6927",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26976,
   "name": "row_offset_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26983,
   "name": "row_offset_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26989,
   "name": "b_696D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26990,
   "name": "glyph_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26991,
   "name": "glyph_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26993,
   "name": "cell_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26994,
   "name": "cell_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27001,
   "name": "rub_out",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27015,
   "name": "b_6987",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27025,
   "name": "new_line",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27041,
   "name": "b_69A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27067,
   "name": "b_69BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27068,
   "name": "scroll_from_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27069,
   "name": "scroll_from_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27072,
   "name": "scroll_to_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27081,
   "name": "b_69C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27092,
   "name": "b_69D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27114,
   "name": "b_69EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27115,
   "name": "clear_row_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27116,
   "name": "clear_row_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27125,
   "name": "b_69F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27133,
   "name": "r_69FD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27134,
   "name": "scroll_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27135,
   "name": "setup_irq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27226,
   "name": "ignore_interrupt",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27227,
   "name": "irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27232,
   "name": "irq_body",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27255,
   "name": "b_6A77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27269,
   "name": "scan_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27319,
   "name": "b_6AB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27329,
   "name": "b_6AC1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27341,
   "name": "b_6ACD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27359,
   "name": "b_6ADF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27381,
   "name": "b_6AF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27388,
   "name": "b_6AFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27398,
   "name": "b_6B06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27405,
   "name": "b_6B0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27415,
   "name": "b_6B17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27429,
   "name": "b_6B25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27433,
   "name": "key_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27434,
   "name": "key_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27435,
   "name": "key_repeat",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27436,
   "name": "modifier_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27444,
   "name": "ctrl_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27445,
   "name": "rshift_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27446,
   "name": "lshift_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27447,
   "name": "key_codes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27511,
   "name": "key_codes_shifted",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27575,
   "name": "wipe_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27591,
   "name": "b_6BC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27617,
   "name": "wipe_left_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27621,
   "name": "b_6BE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27643,
   "name": "b_6BFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27651,
   "name": "b_6C03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27653,
   "name": "b_6C05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27677,
   "name": "b_6C1D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27683,
   "name": "b_6C23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27697,
   "name": "wipe_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27713,
   "name": "b_6C41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27739,
   "name": "wipe_right_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27743,
   "name": "b_6C5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27774,
   "name": "b_6C7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27776,
   "name": "b_6C80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27808,
   "name": "b_6CA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27822,
   "name": "scroll_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27860,
   "name": "b_6CD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27877,
   "name": "scroll_up_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27882,
   "name": "b_6CEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27918,
   "name": "b_6D0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27933,
   "name": "b_6D1D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27950,
   "name": "clear_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27971,
   "name": "b_6D43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27984,
   "name": "b_6D50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27988,
   "name": "scroll_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28026,
   "name": "b_6D7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28043,
   "name": "scroll_down_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28047,
   "name": "b_6D8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28084,
   "name": "b_6DB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28099,
   "name": "b_6DC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28119,
   "name": "colours_and_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28122,
   "name": "copy_matrix",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28136,
   "name": "b_6DE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28138,
   "name": "copy_matrix_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28141,
   "name": "copy_matrix_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28155,
   "name": "copy_4000_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28161,
   "name": "copy_c000_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28167,
   "name": "copy_shown_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28173,
   "name": "copy_4000_to_c000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28179,
   "name": "copy_c000_to_4000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28185,
   "name": "copy_shown",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28191,
   "name": "b_6E1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28201,
   "name": "b_6E29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28203,
   "name": "copy_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28206,
   "name": "copy_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28220,
   "name": "column_offset_of",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28231,
   "name": "row_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28246,
   "name": "row_saved_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28248,
   "name": "white_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28264,
   "name": "b_6E68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28266,
   "name": "white_colours_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28281,
   "name": "put_colour_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28306,
   "name": "b_6E92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28309,
   "name": "b_6E95",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28312,
   "name": "colour_block_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28313,
   "name": "colour_block_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28328,
   "name": "b_6EA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28342,
   "name": "b_6EB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28350,
   "name": "put_matrix_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28362,
   "name": "b_6ECA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28382,
   "name": "b_6EDE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28385,
   "name": "b_6EE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28388,
   "name": "matrix_block_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28389,
   "name": "matrix_block_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28402,
   "name": "b_6EF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28415,
   "name": "b_6EFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28422,
   "name": "build_line_table",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28431,
   "name": "b_6F0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28433,
   "name": "b_6F11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28453,
   "name": "b_6F25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28479,
   "name": "line_offset_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28480,
   "name": "line_offset_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28481,
   "name": "char_row_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28482,
   "name": "f_6F42",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28531,
   "name": "colour_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28532,
   "name": "f_6F74",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28581,
   "name": "matrix_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28582,
   "name": "f_6FA6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28631,
   "name": "bitmap_mode",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28672,
   "name": "show_c000_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28678,
   "name": "show_4000_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28684,
   "name": "show_drawn_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28690,
   "name": "show_c000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28693,
   "name": "show_4000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28696,
   "name": "show_drawn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28736,
   "name": "b_7040",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28760,
   "name": "b_7058",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28773,
   "name": "clear_drawing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28776,
   "name": "clear_4000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28789,
   "name": "b_7075",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28791,
   "name": "clear_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28802,
   "name": "dissolve_in",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28837,
   "name": "b_70A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28872,
   "name": "dissolve_pixel",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28888,
   "name": "b_70D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28897,
   "name": "pixel_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28901,
   "name": "pixel_keep_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28905,
   "name": "dissolve_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28925,
   "name": "b_70FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28960,
   "name": "b_7120",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28969,
   "name": "pixel_clear_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28973,
   "name": "unpack_picture",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28985,
   "name": "j_7139",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28998,
   "name": "b_7146",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29008,
   "name": "b_7150",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29017,
   "name": "b_7159",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29026,
   "name": "b_7162",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29050,
   "name": "b_717A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29067,
   "name": "colours_to_ram",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29093,
   "name": "b_71A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29095,
   "name": "colours_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29098,
   "name": "colours_stage_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29116,
   "name": "b_71BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29118,
   "name": "colours_stage_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29121,
   "name": "colours_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29137,
   "name": "sound_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29178,
   "name": "start_effect",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29240,
   "name": "r_7238",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29241,
   "name": "sound_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29295,
   "name": "b_726F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29331,
   "name": "b_7293",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29343,
   "name": "b_729F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29355,
   "name": "b_72AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29366,
   "name": "b_72B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29378,
   "name": "b_72C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29429,
   "name": "r_72F5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29430,
   "name": "effect_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29434,
   "name": "a_72FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29435,
   "name": "effect_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29439,
   "name": "a_72FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29440,
   "name": "effect_step_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29445,
   "name": "effect_step_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29450,
   "name": "effect_attack_decay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29455,
   "name": "effect_sustain_release",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29460,
   "name": "effect_waveform",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29465,
   "name": "effect_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29469,
   "name": "a_731D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29470,
   "name": "effect_release_at",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29475,
   "name": "effect_repeats",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29480,
   "name": "airlock_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29485,
   "name": "alarm_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29490,
   "name": "explosion_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29502,
   "name": "noise_burst",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29507,
   "name": "rumble_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29509,
   "name": "play_effect",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29518,
   "name": "b_734E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29528,
   "name": "r_7358",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29529,
   "name": "distress_call",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29539,
   "name": "b_7363",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29540,
   "name": "morse_at_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29541,
   "name": "morse_at_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29548,
   "name": "b_736C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29558,
   "name": "b_7376",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29571,
   "name": "morse_jsr_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29572,
   "name": "morse_jsr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29581,
   "name": "b_738D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29590,
   "name": "r_7396",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29591,
   "name": "morse_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29677,
   "name": "a_73ED",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29678,
   "name": "morse_symbols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29683,
   "name": "morse_routines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29684,
   "name": "f_73F4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29693,
   "name": "morse_dot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29702,
   "name": "morse_dash",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29711,
   "name": "morse_gap",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29715,
   "name": "silence_18",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29719,
   "name": "silence_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29723,
   "name": "tone",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29729,
   "name": "silence",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 29733,
   "name": "b_7425",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29747,
   "name": "ask_name",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29757,
   "name": "b_743D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29780,
   "name": "text_name_prompt",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29813,
   "name": "name_entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29832,
   "name": "read_line",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29845,
   "name": "b_7495",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29860,
   "name": "line_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29883,
   "name": "b_74BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29905,
   "name": "r_74D1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29906,
   "name": "password_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29916,
   "name": "b_74DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29939,
   "name": "b_74F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29957,
   "name": "b_7505",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29959,
   "name": "b_7507",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29961,
   "name": "find_question",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29970,
   "name": "b_7512",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29975,
   "name": "b_7517",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29992,
   "name": "b_7528",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30023,
   "name": "r_7547",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30024,
   "name": "print_number",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30046,
   "name": "b_755E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30071,
   "name": "put_digit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30083,
   "name": "r_7583",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30085,
   "name": "number_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30088,
   "name": "divide",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30090,
   "name": "b_758A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30102,
   "name": "decimal_divisors",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30104,
   "name": "print_ordinal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30113,
   "name": "b_75A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30118,
   "name": "b_75A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30135,
   "name": "print_text",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30137,
   "name": "b_75B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30152,
   "name": "r_75C8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30153,
   "name": "ask_question",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30176,
   "name": "text_look_at",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30189,
   "name": "ask_paragraph",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30197,
   "name": "text_paragraph",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30208,
   "name": "ask_page",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30219,
   "name": "text_on_page",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30228,
   "name": "ask_page_number",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30236,
   "name": "text_dots",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30240,
   "name": "ask_word",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30251,
   "name": "text_what_is",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30264,
   "name": "ask_word_ordinal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30272,
   "name": "text_word",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30278,
   "name": "ask_sentence",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30289,
   "name": "text_in_the",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30297,
   "name": "ask_sentence_ordinal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30305,
   "name": "text_sentence",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30316,
   "name": "ask_answer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30343,
   "name": "ordinals",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30408,
   "name": "manual_questions",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30773,
   "name": "copy_space",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30785,
   "name": "b_7841",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30787,
   "name": "copy_space_from",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30790,
   "name": "copy_space_to",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30804,
   "name": "get_key_cursor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30807,
   "name": "b_7857",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30833,
   "name": "b_7871",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30851,
   "name": "r_7883",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30852,
   "name": "print_inline",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30860,
   "name": "j_788C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30868,
   "name": "b_7894",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30869,
   "name": "inline_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30870,
   "name": "inline_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30879,
   "name": "b_789F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30888,
   "name": "random",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30896,
   "name": "b_78B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30907,
   "name": "b_78BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30915,
   "name": "b_78C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30921,
   "name": "random_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30936,
   "name": "a_78D8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30937,
   "name": "old_or_new",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30960,
   "name": "text_old_or_new",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30977,
   "name": "old_or_new_key",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 30984,
   "name": "b_7908",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30994,
   "name": "b_7912",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31001,
   "name": "old_or_new_keys",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31005,
   "name": "old_game",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 31015,
   "name": "access_denied",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 31031,
   "name": "text_jolly_roger",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31052,
   "name": "access_denied_line",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31063,
   "name": "text_access_denied",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31077,
   "name": "access_denied_key",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31083,
   "name": "new_game",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31089,
   "name": "name_i1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31098,
   "name": "load_i2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31101,
   "name": "name_i2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31110,
   "name": "load_i3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31113,
   "name": "name_i3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31122,
   "name": "story_beacon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31146,
   "name": "text_beacon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31307,
   "name": "story_morse",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31341,
   "name": "text_orders",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31504,
   "name": "a_7B10",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31505,
   "name": "story_vacc_suit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31532,
   "name": "text_vacc_suit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31609,
   "name": "story_thruster",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31623,
   "name": "text_thruster",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31642,
   "name": "story_pirates",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31656,
   "name": "text_pirates",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31666,
   "name": "story_manchi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31680,
   "name": "text_manchi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31759,
   "name": "story_derelict",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31783,
   "name": "text_derelict",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32012,
   "name": "story_relax",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32027,
   "name": "text_relax",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32138,
   "name": "story_airlock",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32190,
   "name": "text_airlock",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32223,
   "name": "story_cycles",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32235,
   "name": "text_cycles",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32291,
   "name": "story_garnet",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32305,
   "name": "text_garnet",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32384,
   "name": "story_wrong",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32402,
   "name": "text_wrong",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32420,
   "name": "story_alert",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32446,
   "name": "text_alert",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32504,
   "name": "story_cockpit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32519,
   "name": "text_cockpit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32582,
   "name": "story_attack",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32591,
   "name": "text_attack",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32660,
   "name": "story_evac",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32674,
   "name": "text_evac",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32728,
   "name": "story_battle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32746,
   "name": "text_battle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "text_battle_rest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32940,
   "name": "story_explosion",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32967,
   "name": "text_ignore",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33087,
   "name": "story_alone",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33109,
   "name": "text_far_from",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33186,
   "name": "story_alone_word",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33200,
   "name": "text_alone",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33239,
   "name": "story_no_goal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33253,
   "name": "text_no_goal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33292,
   "name": "story_survival",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33306,
   "name": "text_survival",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33345,
   "name": "story_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33361,
   "name": "run_sr",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33365,
   "name": "name_sr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33370,
   "name": "run_sr_jump",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33376,
   "name": "back_to_title",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33379,
   "name": "name_title",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33387,
   "name": "back_to_title_jump",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33390,
   "name": "intro_padding",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33792,
   "name": "picture_i1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34789,
   "name": "picture_i1_row8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35808,
   "name": "picture_i1_row16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36096,
   "name": "picture_i1_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36408,
   "name": "picture_i1_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36486,
   "name": "picture_i1_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37376,
   "name": "picture_i2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38093,
   "name": "picture_i2_row12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38981,
   "name": "picture_i2_row20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39751,
   "name": "picture_i2_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40032,
   "name": "picture_i2_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40077,
   "name": "picture_i2_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41216,
   "name": "picture_i3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41914,
   "name": "picture_i3_row4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42562,
   "name": "picture_i3_row8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43138,
   "name": "picture_i3_row12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44122,
   "name": "picture_i3_row20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44370,
   "name": "picture_i3_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44778,
   "name": "picture_i3_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44859,
   "name": "picture_i3_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46848,
   "name": "picture_space",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47783,
   "name": "picture_space_row12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48760,
   "name": "picture_space_row24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48768,
   "name": "picture_space_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48896,
   "name": "line_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49321,
   "name": "a_C0A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55960,
   "name": "f_DA98",
   "type": "Field",
   "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 intro 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 intro 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 ($7058)"
  },
  {
   "address": 20,
   "type": "line",
   "text": "The block copiers' width in bytes; never set in the intro"
  },
  {
   "address": 21,
   "type": "line",
   "text": "The block copiers' height in rows; never set in the intro"
  },
  {
   "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": 36,
   "type": "line",
   "text": "read_line's count of the characters typed so far"
  },
  {
   "address": 39,
   "type": "line",
   "text": "print_text's pointer (into the digits or the ordinals), low byte"
  },
  {
   "address": 40,
   "type": "line",
   "text": "print_text's pointer, high byte"
  },
  {
   "address": 41,
   "type": "line",
   "text": "The most characters read_line takes: 11 for a name, 16 for an answer"
  },
  {
   "address": 42,
   "type": "line",
   "text": "The chosen question's answer in manual_questions, a pointer (find_question)"
  },
  {
   "address": 43,
   "type": "line",
   "text": "The answer's address, high byte"
  },
  {
   "address": 44,
   "type": "line",
   "text": "The question's page in the Sunracer Owner's Guide"
  },
  {
   "address": 45,
   "type": "line",
   "text": "The question's paragraph on that page"
  },
  {
   "address": 46,
   "type": "line",
   "text": "The question's sentence in that paragraph"
  },
  {
   "address": 47,
   "type": "line",
   "text": "Which word of the sentence is the answer"
  },
  {
   "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; password_check takes its low five bits as the random choice of question"
  },
  {
   "address": 102,
   "type": "line",
   "text": "put_matrix_block's step through its source from row to row; never set in the intro"
  },
  {
   "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 in the intro"
  },
  {
   "address": 114,
   "type": "line",
   "text": "The second sound's target frequency, low byte; nothing in the intro 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 intro 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 $6ADE, a byte scan_keys branches into as an INX ($6AE1)"
  },
  {
   "address": 788,
   "type": "line",
   "text": "The KERNAL's IRQ vector, pointed at irq_body ($6A60) 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 $6A5A"
  },
  {
   "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 $6A5A, 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 $71A8 was left here, the page after its $0C00-$0FFF staging buffer"
  },
  {
   "address": 7845,
   "type": "line",
   "text": "Not data: BIT $1EA5 at $7017 hides LDA $1E (show_drawn, $7018) in its operand"
  },
  {
   "address": 16553,
   "type": "line",
   "text": "Not data: BIT $40A9 at $7014 and at $7067 hides LDA #$40, the entries show_4000 ($7015) and clear_4000 ($7068)"
  },
  {
   "address": 24576,
   "type": "line",
   "text": "The $4000 buffer's screen matrix ($6000-$63E7); clear_drawing's patched STA at $7075 was left pointing here after clearing the bitmap below"
  },
  {
   "address": 26624,
   "type": "line",
   "text": "The intro's first instruction, at the start of INTRO: sets up the interrupt and the line table, loads FONT and SPACE, clears the $4000 bitmap, turns on the multicolour bitmap with white colours, unpacks the star field into the $C000 buffer and shows it, copies it to the $4000 buffer, shows that and goes to the Old or New prompt"
  },
  {
   "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 \"SPACE\" to $B700"
  },
  {
   "address": 26643,
   "type": "line",
   "text": "load_inline's argument: load to $B700, then the file name \"SPACE\" and a zero"
  },
  {
   "address": 26651,
   "type": "line",
   "text": "With the files in: clears the $4000 bitmap, sets the bitmap mode, shows the $4000 buffer, whitens the colour RAM and puts up the star field in both buffers"
  },
  {
   "address": 26680,
   "type": "line",
   "text": "Banks the I/O and the KERNAL in ($01 low bits %110, RAM at $A000), keeping A"
  },
  {
   "address": 26691,
   "type": "line",
   "text": "Banks all RAM in ($01 low bits %100), keeping A"
  },
  {
   "address": 26702,
   "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 $68B9 and $68BD"
  },
  {
   "address": 26787,
   "type": "line",
   "text": "The name's length, patched in by $6884"
  },
  {
   "address": 26789,
   "type": "line",
   "text": "The name's address, low byte, patched in by $688C"
  },
  {
   "address": 26791,
   "type": "line",
   "text": "The name's address, high byte, patched in by $6893"
  },
  {
   "address": 26798,
   "type": "line",
   "text": "The load address's low byte, patched in by $6868"
  },
  {
   "address": 26800,
   "type": "line",
   "text": "The load address's high byte, patched in by $686E"
  },
  {
   "address": 26810,
   "type": "line",
   "text": "The caller's $30, patched in by $6850 and put back on the way out"
  },
  {
   "address": 26814,
   "type": "line",
   "text": "The caller's $31, patched in by $6855"
  },
  {
   "address": 26818,
   "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": 26833,
   "type": "line",
   "text": "Sets key ($3C) to $FF: none waiting"
  },
  {
   "address": 26838,
   "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": 26866,
   "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 $68FD and $68FF)"
  },
  {
   "address": 26878,
   "type": "line",
   "text": "The caller's X, patched in by $68F7"
  },
  {
   "address": 26880,
   "type": "line",
   "text": "The caller's Y, patched in by $68F4"
  },
  {
   "address": 26884,
   "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": 26976,
   "type": "line",
   "text": "The cursor row's offset in a bitmap, low byte, patched in from char_row_offsets ($694C); the ADC adds the column's offset to it"
  },
  {
   "address": 26983,
   "type": "line",
   "text": "The cursor row's offset, high byte, ORed with the drawing buffer's page ($6954)"
  },
  {
   "address": 26990,
   "type": "line",
   "text": "The character's address in FONT, low byte, patched in by $693A"
  },
  {
   "address": 26991,
   "type": "line",
   "text": "The character's address in FONT, high byte: built from character \u00d7 8 and then $F2 added ($6942)"
  },
  {
   "address": 26993,
   "type": "line",
   "text": "The bitmap cell's address, low byte, patched in by $6961"
  },
  {
   "address": 26994,
   "type": "line",
   "text": "The bitmap cell's address, high byte, patched in by $6968"
  },
  {
   "address": 27001,
   "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 $6985 lands on the next instruction either way)"
  },
  {
   "address": 27025,
   "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: $69E5 loads Y = 1 where the 320-byte row needs 2"
  },
  {
   "address": 27068,
   "type": "line",
   "text": "new_line's scroll source, low byte, set to $40 (row 1 starts 320 bytes in)"
  },
  {
   "address": 27069,
   "type": "line",
   "text": "new_line's scroll source page, the drawing buffer's plus one, stepped on each page"
  },
  {
   "address": 27072,
   "type": "line",
   "text": "new_line's scroll destination page, the drawing buffer's own, stepped on each page"
  },
  {
   "address": 27115,
   "type": "line",
   "text": "The bottom row's address, low byte, set to zero"
  },
  {
   "address": 27116,
   "type": "line",
   "text": "The bottom row's page, the drawing buffer's plus $1E (row 24 starts 7,680 bytes in)"
  },
  {
   "address": 27134,
   "type": "line",
   "text": "The byte counter new_line's two loops count down"
  },
  {
   "address": 27135,
   "type": "line",
   "text": "With interrupts off, points every vector at the intro's own handlers: a raster interrupt at line $50 with CIA1's interrupts off; the NMI and BRK vectors at the RTI at $6A5A (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 and banks all RAM in"
  },
  {
   "address": 27226,
   "type": "line",
   "text": "An RTI: the NMI (RESTORE) and BRK do nothing"
  },
  {
   "address": 27227,
   "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": 27232,
   "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": 27269,
   "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": 27358,
   "type": "line",
   "text": "BIT $E8 hides an INX ($E8) at $6ADF: the first pass skips it and the BCS at $6AE1 lands on it, so X counts the row's released keys from bit 7 down to the one held"
  },
  {
   "address": 27433,
   "type": "line",
   "text": "The last key's number, $FF for none"
  },
  {
   "address": 27434,
   "type": "line",
   "text": "Frames left before a held key first repeats: 30 from a new key"
  },
  {
   "address": 27435,
   "type": "line",
   "text": "Frames left before the next repeat: 6"
  },
  {
   "address": 27436,
   "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": 27444,
   "type": "line",
   "text": "CTRL's bit from row 7, zero while it is held"
  },
  {
   "address": 27445,
   "type": "line",
   "text": "Right SHIFT's bit from row 6, zero while it is held"
  },
  {
   "address": 27446,
   "type": "line",
   "text": "Left SHIFT's bit from row 1, zero while it is held"
  },
  {
   "address": 27447,
   "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 the intro ignores, which arrive as 0 since the interrupt keeps seven bits"
  },
  {
   "address": 27511,
   "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": 27575,
   "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"
  },
  {
   "address": 27617,
   "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": 27697,
   "type": "line",
   "text": "Wipes the window's character rows X to Y off to the right, as wipe_left does to the left"
  },
  {
   "address": 27739,
   "type": "line",
   "text": "Moves character rows $36 to $38 - 1 one cell right within the window, clearing its left-hand cell"
  },
  {
   "address": 27822,
   "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"
  },
  {
   "address": 27877,
   "type": "line",
   "text": "Moves the window's pixel lines up two through the line table, then clears the bottom two (clear_line)"
  },
  {
   "address": 27950,
   "type": "line",
   "text": "Clears pixel line X of the window in the drawing buffer"
  },
  {
   "address": 27988,
   "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; nothing in the intro calls it"
  },
  {
   "address": 28043,
   "type": "line",
   "text": "Moves the window's pixel lines down two, working from the bottom up, then clears the top two"
  },
  {
   "address": 28119,
   "type": "line",
   "text": "Copies the colours to the colour RAM, then runs copy_matrix; nothing calls it"
  },
  {
   "address": 28122,
   "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": 28138,
   "type": "line",
   "text": "copy_matrix's source page, patched in and stepped"
  },
  {
   "address": 28141,
   "type": "line",
   "text": "copy_matrix's destination page, the source's with bit 7 flipped"
  },
  {
   "address": 28155,
   "type": "line",
   "text": "Copies the $4000 buffer's picture to the $C000 buffer and the colours to the colour RAM; nothing calls it"
  },
  {
   "address": 28161,
   "type": "line",
   "text": "Copies the $C000 buffer's picture to the $4000 buffer and the colours to the colour RAM; nothing calls it"
  },
  {
   "address": 28167,
   "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": 28173,
   "type": "line",
   "text": "Copies the $4000 buffer's picture, bitmap, screen matrix and colours ($28 pages), to the $C000 buffer"
  },
  {
   "address": 28179,
   "type": "line",
   "text": "Copies the $C000 buffer's picture to the $4000 buffer"
  },
  {
   "address": 28185,
   "type": "line",
   "text": "Copies the shown buffer's picture to the drawing buffer"
  },
  {
   "address": 28203,
   "type": "line",
   "text": "The picture copy's source page, patched in and stepped"
  },
  {
   "address": 28204,
   "type": "line",
   "text": "The snapshot shows this STA's page left at $68, after a copy to the $4000 buffer"
  },
  {
   "address": 28206,
   "type": "line",
   "text": "The picture copy's destination page, patched in and stepped"
  },
  {
   "address": 28220,
   "type": "line",
   "text": "Sets $34/$35 to column A \u00d7 8"
  },
  {
   "address": 28231,
   "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 $6E55"
  },
  {
   "address": 28246,
   "type": "line",
   "text": "row_address's caller's X, patched in by $6E47"
  },
  {
   "address": 28248,
   "type": "line",
   "text": "Fills the colour RAM, $D800-$DBFF, with 1 (white), interrupts off"
  },
  {
   "address": 28266,
   "type": "line",
   "text": "The page of white_colours' STA, stepped from $D8; the snapshot shows it left at $DC"
  },
  {
   "address": 28281,
   "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 intro calls it"
  },
  {
   "address": 28312,
   "type": "line",
   "text": "put_colour_block's destination, low byte, patched in and stepped by 40"
  },
  {
   "address": 28313,
   "type": "line",
   "text": "put_colour_block's destination, high byte"
  },
  {
   "address": 28350,
   "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 $6EC2 for the $C000 buffer and $6EC6 for the $4000 one. Nothing in the intro calls it"
  },
  {
   "address": 28388,
   "type": "line",
   "text": "put_matrix_block's destination, low byte, patched in and stepped by 40"
  },
  {
   "address": 28389,
   "type": "line",
   "text": "put_matrix_block's destination, high byte"
  },
  {
   "address": 28422,
   "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": 28479,
   "type": "line",
   "text": "The offset build_line_table is working on, low byte; it leaves $1F40 (8,000) in the pair"
  },
  {
   "address": 28480,
   "type": "line",
   "text": "The offset build_line_table is working on, high byte"
  },
  {
   "address": 28481,
   "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": 28482,
   "type": "line",
   "text": "char_row_offsets read from one byte on, for the high bytes (X = 2 \u00d7 the row)"
  },
  {
   "address": 28531,
   "type": "line",
   "text": "Each row's address in the colour RAM, $D800 + 40 \u00d7 the row, a word each (put_colour_block)"
  },
  {
   "address": 28532,
   "type": "line",
   "text": "colour_rows read from one byte on, for the high bytes"
  },
  {
   "address": 28581,
   "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": 28582,
   "type": "line",
   "text": "matrix_rows read from one byte on, for the high bytes"
  },
  {
   "address": 28631,
   "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": 28672,
   "type": "line",
   "text": "Shows the $C000 buffer and copies its colours to the colour RAM; nothing calls it"
  },
  {
   "address": 28678,
   "type": "line",
   "text": "Shows the $4000 buffer and copies its colours to the colour RAM"
  },
  {
   "address": 28684,
   "type": "line",
   "text": "Shows the drawing buffer (show_drawn) and copies its colours to the colour RAM: the step after each page of the story is drawn"
  },
  {
   "address": 28690,
   "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": 28692,
   "type": "line",
   "text": "BIT $40A9: its operand is LDA #$40, show_4000's entry"
  },
  {
   "address": 28693,
   "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 $7014"
  },
  {
   "address": 28695,
   "type": "line",
   "text": "BIT $1EA5: its operand is LDA $1E, show_drawn's entry"
  },
  {
   "address": 28696,
   "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 $7017"
  },
  {
   "address": 28773,
   "type": "line",
   "text": "Clears the drawing buffer's bitmap, 32 pages; the BITs that follow hide entries for the $4000 buffer ($7068) and the $C000 one ($706B). Only clear_4000 is called"
  },
  {
   "address": 28775,
   "type": "line",
   "text": "BIT $40A9: its operand is LDA #$40, clear_4000's entry"
  },
  {
   "address": 28776,
   "type": "line",
   "text": "Clears the $4000 buffer's bitmap ($4000-$5FFF), called once at the start; the LDA #$40 here is the operand of the BIT at $7067"
  },
  {
   "address": 28778,
   "type": "line",
   "text": "BIT $C0A9: its operand is LDA #$C0, an entry at $706B for the $C000 buffer"
  },
  {
   "address": 28791,
   "type": "line",
   "text": "The page clear_drawing's STA writes, patched in and stepped; the snapshot shows it left at $60"
  },
  {
   "address": 28802,
   "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). Nothing in the intro calls it"
  },
  {
   "address": 28872,
   "type": "line",
   "text": "The pixel pair from the drawing buffer, patched into this ORA by $70BF"
  },
  {
   "address": 28897,
   "type": "line",
   "text": "The four pixel pairs of a multicolour byte, left to right"
  },
  {
   "address": 28901,
   "type": "line",
   "text": "The bits each pixel pair leaves alone, the complements of pixel_masks"
  },
  {
   "address": 28905,
   "type": "line",
   "text": "Fades the shown picture to black a pixel pair at a time, in the shift register's scattered order: before the second picture is shown ($7D8D) and at the end of the story ($824C)"
  },
  {
   "address": 28969,
   "type": "line",
   "text": "The complements of pixel_masks again, for dissolve_out"
  },
  {
   "address": 28973,
   "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": 29067,
   "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": 29095,
   "type": "line",
   "text": "colours_to_ram's source page, the shown buffer's plus $24, stepped"
  },
  {
   "address": 29098,
   "type": "line",
   "text": "colours_to_ram's staging page, from $0C, stepped"
  },
  {
   "address": 29118,
   "type": "line",
   "text": "The staging page read back, from $0C, stepped"
  },
  {
   "address": 29121,
   "type": "line",
   "text": "The colour RAM page written, from $D8, stepped"
  },
  {
   "address": 29137,
   "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": 29178,
   "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": 29241,
   "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 in the intro it never sounds"
  },
  {
   "address": 29430,
   "type": "line",
   "text": "Each effect's starting frequency, low byte, for effects 0-4"
  },
  {
   "address": 29434,
   "type": "line",
   "text": "Effect 4's starting frequency, low byte, set by tone ($7428)"
  },
  {
   "address": 29435,
   "type": "line",
   "text": "Each effect's starting frequency, high byte: $10, $18, $01, $80, and effect 4's"
  },
  {
   "address": 29439,
   "type": "line",
   "text": "Effect 4's starting frequency, high byte, set by tone ($742B)"
  },
  {
   "address": 29440,
   "type": "line",
   "text": "Each effect's frequency step per frame, low byte"
  },
  {
   "address": 29445,
   "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": 29450,
   "type": "line",
   "text": "Each effect's attack and decay"
  },
  {
   "address": 29455,
   "type": "line",
   "text": "Each effect's sustain and release"
  },
  {
   "address": 29460,
   "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": 29465,
   "type": "line",
   "text": "Each effect's note length in frames: 32, 48, 128, 32, and effect 4's"
  },
  {
   "address": 29469,
   "type": "line",
   "text": "Effect 4's note length, set by tone and silence ($7425)"
  },
  {
   "address": 29470,
   "type": "line",
   "text": "The frames-left count at which each effect releases its gate"
  },
  {
   "address": 29475,
   "type": "line",
   "text": "How many notes each effect plays: three for effect 1, one for the rest"
  },
  {
   "address": 29480,
   "type": "line",
   "text": "Plays effect 3, rising noise, as the airlock cycles, and waits for it"
  },
  {
   "address": 29485,
   "type": "line",
   "text": "Plays effect 1, three rising tones, for the alert"
  },
  {
   "address": 29490,
   "type": "line",
   "text": "Plays effect 0, two 18-frame silences and effect 0 again, as the PRINCESS BLUE explodes"
  },
  {
   "address": 29502,
   "type": "line",
   "text": "Plays effect 0, falling noise"
  },
  {
   "address": 29507,
   "type": "line",
   "text": "Plays effect 2, noise falling slowly for 128 frames, after the explosion"
  },
  {
   "address": 29509,
   "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": 29529,
   "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 distress beacon of the first story page"
  },
  {
   "address": 29540,
   "type": "line",
   "text": "The Morse character's address, low byte, patched in and stepped"
  },
  {
   "address": 29541,
   "type": "line",
   "text": "The Morse character's address, high byte"
  },
  {
   "address": 29571,
   "type": "line",
   "text": "The element routine's address, low byte, patched into this JSR from morse_routines"
  },
  {
   "address": 29572,
   "type": "line",
   "text": "The element routine's address, high byte"
  },
  {
   "address": 29591,
   "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": 29677,
   "type": "line",
   "text": "morse_text's closing zero, where distress_call's patched load at $7363 was left"
  },
  {
   "address": 29678,
   "type": "line",
   "text": "The five Morse characters distress_call looks up, in morse_routines' order: dot, dash, gap, word gap, short gap"
  },
  {
   "address": 29683,
   "type": "line",
   "text": "The Morse elements' routines, a word each: morse_dot, morse_dash, morse_gap, silence_18 and silence_4"
  },
  {
   "address": 29684,
   "type": "line",
   "text": "morse_routines read from one byte on, for the high bytes (Y = 2 \u00d7 the element)"
  },
  {
   "address": 29693,
   "type": "line",
   "text": "A dot: a 2-frame tone and 2 frames of silence"
  },
  {
   "address": 29702,
   "type": "line",
   "text": "A dash: a 6-frame tone and 2 frames of silence"
  },
  {
   "address": 29711,
   "type": "line",
   "text": "The gap between letters: 6 frames of silence"
  },
  {
   "address": 29715,
   "type": "line",
   "text": "18 frames of silence (effect 4 at frequency 0): the gap between Morse words and the pause in explosion_sound"
  },
  {
   "address": 29719,
   "type": "line",
   "text": "4 frames of silence, the gap between the letters of SOS"
  },
  {
   "address": 29723,
   "type": "line",
   "text": "A tone at frequency $3864 lasting A frames"
  },
  {
   "address": 29729,
   "type": "line",
   "text": "A frames of silence: effect 4 at frequency 0"
  },
  {
   "address": 29747,
   "type": "line",
   "text": "Asks \"What is your name?\" on row 21 of the shown buffer and reads up to 11 characters into line_buffer. The BVS at $7435 always skips the copy and show below it: bit 6 of $3A is set for either buffer ($40, $C0)"
  },
  {
   "address": 29780,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"What is your name? _\""
  },
  {
   "address": 29813,
   "type": "line",
   "text": "The name goes at column 24 of row 21, empty to start with, 11 characters at most"
  },
  {
   "address": 29832,
   "type": "line",
   "text": "Reads a line into line_buffer at the cursor: printable keys are kept and echoed up to line_limit, DEL and the left-arrow key rub out the last, and RETURN ends it once something has been typed, rubbing out the cursor and closing the line with a zero"
  },
  {
   "address": 29860,
   "type": "line",
   "text": "Handles a key for read_line: rubs out on $08 or $7F, otherwise stores and prints it if the line has room"
  },
  {
   "address": 29906,
   "type": "line",
   "text": "The check for an old game: unpacks the star field into the drawing buffer and shows it, picks one of the 32 manual questions from the frame counter ((frame_count AND 31) + 1), asks it and compares the answer, folded to capitals, with the word. Returns C clear when the first four letters match (the rest is not read), C set when not"
  },
  {
   "address": 29961,
   "type": "line",
   "text": "Steps through manual_questions to entry A (1-32), each record ending in a zero, copies its four numbers to $2C-$2F and leaves $2A/$2B at its word"
  },
  {
   "address": 30024,
   "type": "line",
   "text": "Prints A in decimal, one or two digits, at the cursor, building the text in number_text"
  },
  {
   "address": 30071,
   "type": "line",
   "text": "Stores digit A at ($27) in ASCII and moves on a byte"
  },
  {
   "address": 30085,
   "type": "line",
   "text": "print_number's digits, up to two and a closing zero (the byte before is never used)"
  },
  {
   "address": 30088,
   "type": "line",
   "text": "Divides A by the divisor at decimal_divisors + X by repeated subtraction: the quotient in Y and the remainder in A"
  },
  {
   "address": 30102,
   "type": "line",
   "text": "The divisors, 10 and 1"
  },
  {
   "address": 30104,
   "type": "line",
   "text": "Prints word A of ordinals (\"first\" to \"tenth\")"
  },
  {
   "address": 30135,
   "type": "line",
   "text": "Prints the text at ($27) up to its zero"
  },
  {
   "address": 30153,
   "type": "line",
   "text": "Prints the manual question on rows 8-12 of the shown buffer, \"Look at the second paragraph on page 1... What is the third word in the first sentence?\", and reads the answer, up to 16 characters, on row 14"
  },
  {
   "address": 30176,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"Look at the\""
  },
  {
   "address": 30189,
   "type": "line",
   "text": "The paragraph's ordinal, then \" paragraph\""
  },
  {
   "address": 30197,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"paragraph\""
  },
  {
   "address": 30208,
   "type": "line",
   "text": "\"on page \" on row 9"
  },
  {
   "address": 30219,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"on page\""
  },
  {
   "address": 30228,
   "type": "line",
   "text": "The page's number, then \"...\""
  },
  {
   "address": 30236,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"...\""
  },
  {
   "address": 30240,
   "type": "line",
   "text": "\"What is the \" on row 11"
  },
  {
   "address": 30251,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"What is the\""
  },
  {
   "address": 30264,
   "type": "line",
   "text": "The word's ordinal, then \" word\""
  },
  {
   "address": 30272,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"word\""
  },
  {
   "address": 30278,
   "type": "line",
   "text": "\"in the \" on row 12"
  },
  {
   "address": 30289,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"in the\""
  },
  {
   "address": 30297,
   "type": "line",
   "text": "The sentence's ordinal, then \" sentence?\""
  },
  {
   "address": 30305,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"sentence?\""
  },
  {
   "address": 30316,
   "type": "line",
   "text": "The answer at column 0 of row 14, up to 16 characters, the window from column 12"
  },
  {
   "address": 30343,
   "type": "line",
   "text": "\"first\" to \"tenth\", each ending in a zero, for print_ordinal"
  },
  {
   "address": 30408,
   "type": "line",
   "text": "The 32 questions for an old game, each the page, paragraph, sentence and word in the Sunracer Owner's Guide, then the word in capitals and a zero. The first, page 1, paragraph 2, sentence 1, word 3, is SCOUT (\"Your Sunracer scout ship embodies...\"); the pages run from 1 to 46"
  },
  {
   "address": 30773,
   "type": "line",
   "text": "Copies 36 pages from $B700, SPACE and what follows, to page X; nothing in the intro calls it"
  },
  {
   "address": 30787,
   "type": "line",
   "text": "copy_space's source page, patched to $B7 and stepped"
  },
  {
   "address": 30790,
   "type": "line",
   "text": "copy_space's destination page, patched in from X and stepped"
  },
  {
   "address": 30804,
   "type": "line",
   "text": "Waits for a key while drawing the cursor at the cursor's column as a space and an underscore in turn; returns DEL, the left-arrow key's $08, RETURN or a printable character, and waits on through the others"
  },
  {
   "address": 30852,
   "type": "line",
   "text": "Prints the text after the JSR, through the patched load at $7894, up to its zero, and returns to the instruction after the zero"
  },
  {
   "address": 30869,
   "type": "line",
   "text": "The inline text's address, low byte, taken from the return address and stepped"
  },
  {
   "address": 30870,
   "type": "line",
   "text": "The inline text's address, high byte"
  },
  {
   "address": 30888,
   "type": "line",
   "text": "A random byte in A, keeping X: adds random_state's first 15 bytes into each other, last to first with $78D8 starting the sum, then counts the 16 bytes up as one number; nothing in the intro calls it"
  },
  {
   "address": 30921,
   "type": "line",
   "text": "random's 16 bytes of state"
  },
  {
   "address": 30936,
   "type": "line",
   "text": "random_state's 16th byte, the start of each sum and the low byte of the count"
  },
  {
   "address": 30937,
   "type": "line",
   "text": "The intro's main line: prints \"Old or New Game?\" on row 4 of the shown star field and waits for N or O, in either case; O goes to the manual question, N to the new game's story"
  },
  {
   "address": 30960,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"Old or New Game?\""
  },
  {
   "address": 30977,
   "type": "line",
   "text": "Waits for a key until it is N, n, O or o"
  },
  {
   "address": 31001,
   "type": "line",
   "text": "The keys accepted, N, n, O and o; the first two choose a new game"
  },
  {
   "address": 31005,
   "type": "line",
   "text": "An old game: asks the manual question; a right answer goes on to SR with A = 'O' ($4F)"
  },
  {
   "address": 31015,
   "type": "line",
   "text": "A wrong answer: unpacks the star field again into the shown buffer, over the question, and prints \"Starship Jolly Roger\" on row 10"
  },
  {
   "address": 31031,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"Starship Jolly Roger\""
  },
  {
   "address": 31052,
   "type": "line",
   "text": "\"ACCESS DENIED\" on row 12"
  },
  {
   "address": 31063,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"ACCESS DENIED\""
  },
  {
   "address": 31077,
   "type": "line",
   "text": "Waits for a key, then loads the title back"
  },
  {
   "address": 31083,
   "type": "line",
   "text": "A new game: asks the name, then loads the story's three pictures, I1.PAC to $8400 first"
  },
  {
   "address": 31089,
   "type": "line",
   "text": "load_inline's argument: load to $8400, then the file name \"I1.PAC\" and a zero"
  },
  {
   "address": 31098,
   "type": "line",
   "text": "Loads \"I2.PAC\" to $9200"
  },
  {
   "address": 31101,
   "type": "line",
   "text": "load_inline's argument: load to $9200, then the file name \"I2.PAC\" and a zero"
  },
  {
   "address": 31110,
   "type": "line",
   "text": "Loads \"I3.PAC\" to $A100"
  },
  {
   "address": 31113,
   "type": "line",
   "text": "load_inline's argument: load to $A100, then the file name \"I3.PAC\" and a zero"
  },
  {
   "address": 31122,
   "type": "line",
   "text": "The story's first page: unpacks I1 into the drawing buffer and prints the beacon text in a narrow window, columns 1-16 from row 3"
  },
  {
   "address": 31146,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"On a routine trading mission in the backwater Karonus system, your merchant ship, the PRINCESS BLUE, picks up a Small Craft Distress Beacon.\""
  },
  {
   "address": 31307,
   "type": "line",
   "text": "Shows the page with its colours, copies it to the other buffer, sends the distress call between two short pauses, then prints the captain's orders from row 17, columns 1-38"
  },
  {
   "address": 31341,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: '\"No life readings,\" says Captain Dalfree. \"Looks like a derelict. You're on EVA duty, Private, so scope it out. Make it quick! We're behind schedule.\"'"
  },
  {
   "address": 31504,
   "type": "line",
   "text": "The orders' closing zero, where print_inline's patched load at $7894 was left when the snapshot was taken"
  },
  {
   "address": 31505,
   "type": "line",
   "text": "Shows the orders, waits for a key, scrolls rows 17-21 away (scroll_up) and prints on row 16"
  },
  {
   "address": 31532,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"As you pull on your vacc suit, you wonder what blew the derelict.\""
  },
  {
   "address": 31609,
   "type": "line",
   "text": "After a pause, shows that and prints \"Thruster fritz?\" two lines down"
  },
  {
   "address": 31623,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: two RETURNs, then \"Thruster fritz?\""
  },
  {
   "address": 31642,
   "type": "line",
   "text": "After a pause, shows that and prints \"Pirates? \" after it"
  },
  {
   "address": 31656,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"Pirates?\""
  },
  {
   "address": 31666,
   "type": "line",
   "text": "After a pause, shows that and prints the Manchi line two lines down"
  },
  {
   "address": 31680,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: two RETURNs, then \"Surely not a Manchi attack, not this deep into the Far Arm!\""
  },
  {
   "address": 31759,
   "type": "line",
   "text": "After a pause, shows that, unpacks I2 into the drawing buffer and prints the approach from row 1"
  },
  {
   "address": 31783,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"With reactionless thrusters you maneuver smoothly toward the derelict. The airlock plaque identifies it as the JOLLY ROGER, a Sunracer-class scoutship registered in the Deneb system.\""
  },
  {
   "address": 32012,
   "type": "line",
   "text": "Prints the next lines on row 12 in a window of columns 1-18"
  },
  {
   "address": 32027,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"You allow yourself to relax a little.\" Two RETURNs, then \"After all, what self-respecting pirate would pick a name like that?\""
  },
  {
   "address": 32138,
   "type": "line",
   "text": "Waits for a key, fades the old page to black (dissolve_out) and shows I2 with its text; waits again, wipes rows 1-6 off to the right and rows 12-18 off to the left, and prints on row 1"
  },
  {
   "address": 32190,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"The airlock opens at a touch...\""
  },
  {
   "address": 32223,
   "type": "line",
   "text": "Shows that with the airlock sound, copies it and prints on"
  },
  {
   "address": 32235,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"and cycles you smoothly in. Not blown after all!\""
  },
  {
   "address": 32291,
   "type": "line",
   "text": "After a pause, shows that and prints two lines down"
  },
  {
   "address": 32305,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: two RETURNs, then \"Garnet laser, memory banks intact -- she seems A-OK, if a bit spartan.\""
  },
  {
   "address": 32384,
   "type": "line",
   "text": "After a pause, shows that and prints on row 15"
  },
  {
   "address": 32402,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"What went wrong?\""
  },
  {
   "address": 32420,
   "type": "line",
   "text": "After a pause, shows that, unpacks I3 into the drawing buffer and prints the alert at the top right, columns 22-38"
  },
  {
   "address": 32446,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: '\"ALERT! ALERT!\" screams a voice in your helmet mike.'"
  },
  {
   "address": 32504,
   "type": "line",
   "text": "Waits for a key, shows the alert with the alarm sound and prints on"
  },
  {
   "address": 32519,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"You rush to the cockpit to see the PRINCESS BLUE.\""
  },
  {
   "address": 32582,
   "type": "line",
   "text": "Shows that and prints on"
  },
  {
   "address": 32591,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"She's under attack... by Manchi Vulture-class hiveships!\""
  },
  {
   "address": 32660,
   "type": "line",
   "text": "After a pause, shows the attack and prints the helmsman two lines down"
  },
  {
   "address": 32674,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: two RETURNs, then '\"Evac, evac!\" the helmsman shouts. \"Scramble, scra-\"'"
  },
  {
   "address": 32728,
   "type": "line",
   "text": "After a pause, shows that and prints three lines down, the window from column 1"
  },
  {
   "address": 32746,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: three RETURNs, then \"And the battle is over. Before you can blink, the Manchi plasma torps strike the PRINCESS's unshielded thrusters. The helpless merchant explodes in a flare of radiation.\""
  },
  {
   "address": 32768,
   "type": "line",
   "text": "The rest of text_battle, from the middle of \"over\": a data span stops at $8000"
  },
  {
   "address": 32940,
   "type": "line",
   "text": "Plays the explosion, shows the page, plays the rumble, unpacks I3 again and prints on row 5, columns 22-38"
  },
  {
   "address": 32967,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"The Manchi ignore your derelict ship. As suddenly as they appeared, they vanish into the depths of space.\""
  },
  {
   "address": 33087,
   "type": "line",
   "text": "Waits for a key, shows that and prints on row 18, the window from column 1"
  },
  {
   "address": 33109,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"You sit in a battered scoutship far from the nearest Imperial Starbase.\""
  },
  {
   "address": 33186,
   "type": "line",
   "text": "After a pause, shows that and prints \"Alone.\""
  },
  {
   "address": 33200,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"Alone.\""
  },
  {
   "address": 33239,
   "type": "line",
   "text": "After a pause, shows that and prints \"With no clear goal.\""
  },
  {
   "address": 33253,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"With no clear goal.\""
  },
  {
   "address": 33292,
   "type": "line",
   "text": "After a pause, shows that and prints \"Save survival.\""
  },
  {
   "address": 33306,
   "type": "line",
   "text": "Text for print_inline, high-bit ASCII ending in a zero: \"Save survival.\""
  },
  {
   "address": 33345,
   "type": "line",
   "text": "After a pause, shows the last line, waits for a key, fades to black and goes to SR with A = 'N' ($4E)"
  },
  {
   "address": 33361,
   "type": "line",
   "text": "Loads SR to $0400 and jumps there with A = 'N' for a new game or 'O' for an old one, and the flags from comparing it with 'O'"
  },
  {
   "address": 33365,
   "type": "line",
   "text": "load_inline's argument: load to $0400, then the file name \"SR\" and a zero"
  },
  {
   "address": 33370,
   "type": "line",
   "text": "With SR in: gets A back, compares it with 'O' and jumps to $0400"
  },
  {
   "address": 33376,
   "type": "line",
   "text": "Loads TITLE to $2000 and jumps to it, back to the title"
  },
  {
   "address": 33379,
   "type": "line",
   "text": "load_inline's argument: load to $2000, then the file name \"TITLE\" and a zero"
  },
  {
   "address": 33387,
   "type": "line",
   "text": "With TITLE in, jumps to $2000"
  },
  {
   "address": 33390,
   "type": "line",
   "text": "Zeros that fill INTRO out to $82FF; no code reads them"
  },
  {
   "address": 33792,
   "type": "line",
   "text": "I1.PAC, loaded here by new_game: the first story picture packed for unpack_picture, a buffer's worth (bitmap, screen matrix at +$2000, colours at +$2400, then the border colour) in a stream that ends at $8E85; the file's last bytes after it are never read"
  },
  {
   "address": 34789,
   "type": "line",
   "text": "I1's stream from bitmap row 8 on (+$0A00 in the buffer)"
  },
  {
   "address": 35808,
   "type": "line",
   "text": "I1's stream from bitmap row 16 on, where the text goes: rows 16-24 take only 288 bytes"
  },
  {
   "address": 36096,
   "type": "line",
   "text": "I1's stream for the screen matrix (+$2000)"
  },
  {
   "address": 36408,
   "type": "line",
   "text": "I1's stream for the colours (+$2400), then a zero and the border colour at $8E85"
  },
  {
   "address": 36486,
   "type": "line",
   "text": "The rest of I1.PAC after its stream, to the end of its last disk block; never read"
  },
  {
   "address": 37376,
   "type": "line",
   "text": "I2.PAC, the second story picture, packed the same way; its stream ends at $9C8C"
  },
  {
   "address": 38093,
   "type": "line",
   "text": "I2's stream from bitmap row 12 on (+$0F00 in the buffer)"
  },
  {
   "address": 38981,
   "type": "line",
   "text": "I2's stream from bitmap row 20 on"
  },
  {
   "address": 39751,
   "type": "line",
   "text": "I2's stream for the screen matrix (+$2000)"
  },
  {
   "address": 40032,
   "type": "line",
   "text": "I2's stream for the colours (+$2400), then a zero and the border colour at $9C8C"
  },
  {
   "address": 40077,
   "type": "line",
   "text": "The rest of I2.PAC after its stream; never read"
  },
  {
   "address": 41216,
   "type": "line",
   "text": "I3.PAC, the third story picture, shown twice (the alert and the Manchi leaving); its stream ends at $AF3A"
  },
  {
   "address": 41914,
   "type": "line",
   "text": "I3's stream from bitmap row 4 on (+$0500 in the buffer)"
  },
  {
   "address": 42562,
   "type": "line",
   "text": "I3's stream from bitmap row 8 on"
  },
  {
   "address": 43138,
   "type": "line",
   "text": "I3's stream from bitmap row 12 on"
  },
  {
   "address": 44122,
   "type": "line",
   "text": "I3's stream from bitmap row 20 on"
  },
  {
   "address": 44370,
   "type": "line",
   "text": "I3's stream for the screen matrix (+$2000)"
  },
  {
   "address": 44778,
   "type": "line",
   "text": "I3's stream for the colours (+$2400), then a zero and the border colour at $AF3A"
  },
  {
   "address": 44859,
   "type": "line",
   "text": "The rest of I3.PAC after its stream; never read"
  },
  {
   "address": 46848,
   "type": "line",
   "text": "SPACE, loaded here at the start ($6810): the star field behind the prompts and the manual question, packed for unpack_picture. It holds a bitmap and a screen matrix but no colours, so the colour RAM stays as white_colours left it; the stream ends at $BF53 with a black border, inside line_buffer"
  },
  {
   "address": 47783,
   "type": "line",
   "text": "SPACE's stream from +$0F08 in the buffer, the second cell of bitmap row 12"
  },
  {
   "address": 48760,
   "type": "line",
   "text": "SPACE's stream from +$1E7E, part-way through bitmap row 24, and the unused bytes after the bitmap"
  },
  {
   "address": 48768,
   "type": "line",
   "text": "SPACE's stream for the screen matrix (+$2000), the stars' colours, ending at $BF53 with a zero and the border colour"
  },
  {
   "address": 48896,
   "type": "line",
   "text": "The line read_line fills: the name for a new game (up to 11 characters) or the answer to the manual question (up to 16), closed with a zero. It is also the last page of SPACE ($B700-$BFFF), and SPACE's packed stream runs on to $BF53, so whatever is typed replaces part of the star field's packed data: the star field access_denied unpacks after a wrong answer comes out different from the one before it"
  },
  {
   "address": 49321,
   "type": "line",
   "text": "Not data: BIT $C0A9 at $706A hides LDA #$C0, clear_drawing's entry for the $C000 buffer ($706B), which nothing calls"
  },
  {
   "address": 59392,
   "type": "line",
   "text": "Past the $C000 buffer's colours ($E400-$E7E7): copy_shown's patched LDA at $6E29 and colours_to_ram's at $71A5 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 $696D was left"
  },
  {
   "address": 65280,
   "type": "line",
   "text": "No table here: $FF00 is the placeholder the INTRO file carries in the operands patched before use. The snapshot still shows it in those not yet run: new_line's scroll ($69BB), copy_matrix ($6DE8) and the block copiers ($6E97, $6EE3)"
  },
  {
   "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 ($6A5A; a reset banks the KERNAL in and never reads these), IRQ at irq ($6A5B)"
  }
 ]
}