{
 "schema": 1,
 "platform": "c64",
 "game": "mayhem-in-monsterland",
 "part": "intro",
 "build": "Apex disk release, the contributor's own G64 images of both sides; sha256 of each in orientation.md",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    17408,
    18431,
    "screen RAM"
   ]
  ],
  "extra": [
   [
    30720,
    32767,
    "character set"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 514,
   "type": "Undefined"
  },
  {
   "start": 515,
   "end": 592,
   "type": "Code"
  },
  {
   "start": 593,
   "end": 19199,
   "type": "Undefined"
  },
  {
   "start": 19200,
   "end": 19200,
   "type": "Byte"
  },
  {
   "start": 19201,
   "end": 20571,
   "type": "Code"
  },
  {
   "start": 20572,
   "end": 20758,
   "type": "Byte"
  },
  {
   "start": 20759,
   "end": 20762,
   "type": "Code"
  },
  {
   "start": 20763,
   "end": 21036,
   "type": "Byte"
  },
  {
   "start": 21037,
   "end": 21228,
   "type": "Word"
  },
  {
   "start": 21229,
   "end": 21469,
   "type": "Code"
  },
  {
   "start": 21470,
   "end": 21473,
   "type": "Byte"
  },
  {
   "start": 21474,
   "end": 21502,
   "type": "Code"
  },
  {
   "start": 21503,
   "end": 21503,
   "type": "Byte"
  },
  {
   "start": 21504,
   "end": 21811,
   "type": "Code"
  },
  {
   "start": 21812,
   "end": 21843,
   "type": "Byte"
  },
  {
   "start": 21844,
   "end": 21863,
   "type": "Code"
  },
  {
   "start": 21864,
   "end": 22271,
   "type": "Byte"
  },
  {
   "start": 22272,
   "end": 22305,
   "type": "Code"
  },
  {
   "start": 22306,
   "end": 32767,
   "type": "Byte"
  },
  {
   "start": 32768,
   "end": 32780,
   "type": "Code"
  },
  {
   "start": 32781,
   "end": 32829,
   "type": "Undefined"
  },
  {
   "start": 32830,
   "end": 33958,
   "type": "Code"
  },
  {
   "start": 33959,
   "end": 33975,
   "type": "Undefined"
  },
  {
   "start": 33976,
   "end": 35021,
   "type": "Code"
  },
  {
   "start": 35022,
   "end": 35031,
   "type": "Byte"
  },
  {
   "start": 35032,
   "end": 35238,
   "type": "Code"
  },
  {
   "start": 35239,
   "end": 35240,
   "type": "Byte"
  },
  {
   "start": 35241,
   "end": 35389,
   "type": "Code"
  },
  {
   "start": 35390,
   "end": 35413,
   "type": "Undefined"
  },
  {
   "start": 35414,
   "end": 35512,
   "type": "Code"
  },
  {
   "start": 35513,
   "end": 35520,
   "type": "Undefined"
  },
  {
   "start": 35521,
   "end": 35707,
   "type": "Code"
  },
  {
   "start": 35708,
   "end": 35708,
   "type": "Byte"
  },
  {
   "start": 35709,
   "end": 35887,
   "type": "Code"
  },
  {
   "start": 35888,
   "end": 35916,
   "type": "Byte"
  },
  {
   "start": 35917,
   "end": 36354,
   "type": "Code"
  },
  {
   "start": 36355,
   "end": 36396,
   "type": "Byte"
  },
  {
   "start": 36397,
   "end": 36398,
   "type": "Undefined"
  },
  {
   "start": 36399,
   "end": 36399,
   "type": "Byte"
  },
  {
   "start": 36400,
   "end": 36468,
   "type": "Undefined"
  },
  {
   "start": 36469,
   "end": 36532,
   "type": "Byte"
  },
  {
   "start": 36533,
   "end": 36534,
   "type": "Undefined"
  },
  {
   "start": 36535,
   "end": 36545,
   "type": "Byte"
  },
  {
   "start": 36546,
   "end": 36546,
   "type": "Undefined"
  },
  {
   "start": 36547,
   "end": 36563,
   "type": "Byte"
  },
  {
   "start": 36564,
   "end": 36564,
   "type": "Undefined"
  },
  {
   "start": 36565,
   "end": 36613,
   "type": "Byte"
  },
  {
   "start": 36614,
   "end": 36993,
   "type": "Screencode Text"
  },
  {
   "start": 36994,
   "end": 37004,
   "type": "Byte"
  },
  {
   "start": 37005,
   "end": 37005,
   "type": "Undefined"
  },
  {
   "start": 37006,
   "end": 37065,
   "type": "Byte"
  },
  {
   "start": 37066,
   "end": 38051,
   "type": "Screencode Text"
  },
  {
   "start": 38052,
   "end": 38071,
   "type": "Byte"
  },
  {
   "start": 38072,
   "end": 38072,
   "type": "Undefined"
  },
  {
   "start": 38073,
   "end": 38160,
   "type": "Byte"
  },
  {
   "start": 38161,
   "end": 38161,
   "type": "Undefined"
  },
  {
   "start": 38162,
   "end": 38424,
   "type": "Byte"
  },
  {
   "start": 38425,
   "end": 38429,
   "type": "Undefined"
  },
  {
   "start": 38430,
   "end": 39081,
   "type": "Byte"
  },
  {
   "start": 39082,
   "end": 39082,
   "type": "Undefined"
  },
  {
   "start": 39083,
   "end": 39108,
   "type": "Byte"
  },
  {
   "start": 39109,
   "end": 39109,
   "type": "Undefined"
  },
  {
   "start": 39110,
   "end": 39139,
   "type": "Byte"
  },
  {
   "start": 39140,
   "end": 39140,
   "type": "Undefined"
  },
  {
   "start": 39141,
   "end": 45055,
   "type": "Byte"
  },
  {
   "start": 45056,
   "end": 49151,
   "type": "Undefined"
  },
  {
   "start": 49152,
   "end": 49727,
   "type": "Byte"
  },
  {
   "start": 49728,
   "end": 50017,
   "type": "Code"
  },
  {
   "start": 50018,
   "end": 50049,
   "type": "Byte"
  },
  {
   "start": 50050,
   "end": 50069,
   "type": "Code"
  },
  {
   "start": 50070,
   "end": 50431,
   "type": "Byte"
  },
  {
   "start": 50432,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57,
   "name": "logo_set_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "zpa_3A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 73,
   "name": "bars_mask",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 126,
   "name": "data_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 127,
   "name": "zpa_7F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 128,
   "name": "gl_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 157,
   "name": "zpa_9D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 164,
   "name": "ldr_hs_on",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 165,
   "name": "ldr_hs_off",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 169,
   "name": "zpa_A9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 184,
   "name": "zpa_B8",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 185,
   "name": "zpa_B9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 186,
   "name": "zpa_BA",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 252,
   "name": "mus_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 253,
   "name": "zpa_FD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 254,
   "name": "mus_voice_reg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 255,
   "name": "mus_temp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 256,
   "name": "a_0100",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 384,
   "name": "copier_rt",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 395,
   "name": "a_018B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 398,
   "name": "a_018E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 511,
   "name": "a_01FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 512,
   "name": "a_0200",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 515,
   "name": "boot_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 788,
   "name": "irq_vector_ram",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 789,
   "name": "a_0315",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 792,
   "name": "nmi_vector_ram",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 793,
   "name": "a_0319",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 828,
   "name": "rt_mus_playing",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 829,
   "name": "rt_mus_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 876,
   "name": "rt_mus_voice_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 951,
   "name": "rt_mus_cmd_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 982,
   "name": "a_03D6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 983,
   "name": "a_03D7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1068,
   "name": "rt_mus_wave_pick",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1122,
   "name": "rt_mus_count_note",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1318,
   "name": "rt_mus_bit_patch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1320,
   "name": "a_0528",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1325,
   "name": "rt_mus_init_tune",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1423,
   "name": "rt_mus_stop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1428,
   "name": "rt_mus_silence",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1536,
   "name": "two_decode_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1544,
   "name": "f_0608",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1552,
   "name": "f_0610",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1560,
   "name": "f_0618",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1569,
   "name": "rt_mus_pulse_sweep",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1655,
   "name": "rt_mus_arpeggio",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1695,
   "name": "rt_mus_arp_store",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1702,
   "name": "rt_mus_vibrato",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1731,
   "name": "rt_mus_vib_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1825,
   "name": "rt_mus_freq_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1846,
   "name": "rt_mus_freq_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1864,
   "name": "rt_mus_freq_store_hi",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 1871,
   "name": "rt_mus_note_freq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1899,
   "name": "rt_mus_slide",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 1991,
   "name": "rt_mus_slide_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2010,
   "name": "rt_mus_slide_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2026,
   "name": "rt_mus_slide_store",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 2029,
   "name": "rt_mus_write_freq",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 2046,
   "name": "rt_mus_next_event",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2058,
   "name": "rt_mus_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2098,
   "name": "rt_mus_slide_target",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2174,
   "name": "rt_mus_tick_write",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2390,
   "name": "f_0956",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2391,
   "name": "rt_mus_filter_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2392,
   "name": "rt_mus_tempo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2393,
   "name": "rt_mus_divider",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2394,
   "name": "rt_mus_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2397,
   "name": "rt_mus_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2400,
   "name": "rt_mus_note",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2403,
   "name": "rt_mus_wave_now",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2406,
   "name": "rt_mus_release",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2409,
   "name": "rt_mus_arp_mode",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2412,
   "name": "rt_mus_wave_prog",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2415,
   "name": "rt_mus_wave_len",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2418,
   "name": "rt_mus_arp_speed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2421,
   "name": "rt_mus_filt_fine",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2422,
   "name": "rt_mus_filt_coarse",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2423,
   "name": "rt_mus_filt_start",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2424,
   "name": "rt_mus_slide_mode",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2425,
   "name": "f_0979",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2427,
   "name": "rt_mus_target_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2428,
   "name": "f_097C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2430,
   "name": "rt_mus_target_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2433,
   "name": "rt_mus_slide_delay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2436,
   "name": "rt_mus_note_age",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2439,
   "name": "rt_mus_vib_depth",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2442,
   "name": "rt_mus_vib_wait",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2445,
   "name": "rt_mus_vib_delay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2448,
   "name": "rt_mus_arp_step",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2451,
   "name": "rt_mus_arp_int1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2454,
   "name": "rt_mus_arp_int2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2457,
   "name": "rt_mus_arp3_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2460,
   "name": "rt_mus_arp3_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2463,
   "name": "rt_mus_arp_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2466,
   "name": "rt_mus_arp_ticks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2469,
   "name": "rt_mus_detune",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2472,
   "name": "rt_mus_len_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2475,
   "name": "rt_mus_vib_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2478,
   "name": "rt_mus_vib_phase",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2481,
   "name": "rt_mus_pulse_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2484,
   "name": "rt_mus_pulse_top",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2487,
   "name": "rt_mus_pulse_bottom",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2490,
   "name": "rt_mus_transpose",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2493,
   "name": "rt_mus_slide_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2496,
   "name": "rt_mus_slide_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2499,
   "name": "rt_mus_sr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2502,
   "name": "rt_mus_waveform",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2505,
   "name": "rt_mus_pw_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2508,
   "name": "rt_mus_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2511,
   "name": "rt_mus_pulse_rate",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2514,
   "name": "rt_mus_loop_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2520,
   "name": "rt_mus_loop_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2526,
   "name": "rt_mus_loop_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2532,
   "name": "rt_mus_ret_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2535,
   "name": "rt_mus_ret2_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2538,
   "name": "rt_mus_ret_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2541,
   "name": "rt_mus_ret2_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2544,
   "name": "rt_mus_vib_speed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2547,
   "name": "rt_mus_len_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2550,
   "name": "rt_mus_ptr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2553,
   "name": "rt_mus_ptr_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2556,
   "name": "rt_mus_voice_regs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2559,
   "name": "rt_mus_tune_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2560,
   "name": "rt_mus_tune_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2566,
   "name": "rt_sid_shadow",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2567,
   "name": "f_0A07",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2568,
   "name": "f_0A08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2569,
   "name": "f_0A09",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2570,
   "name": "f_0A0A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2571,
   "name": "f_0A0B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2572,
   "name": "f_0A0C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2587,
   "name": "rt_sid_cutoff_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2588,
   "name": "rt_sid_cutoff_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2589,
   "name": "rt_sid_res_route",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2590,
   "name": "rt_sid_mode_vol",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2591,
   "name": "rt_mus_cmd_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2628,
   "name": "rt_mus_cmd_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2665,
   "name": "rt_mus_notes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2666,
   "name": "f_0A6A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 6144,
   "name": "j_1800",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12850,
   "name": "boot_name_byte",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17407,
   "name": "f_43FF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17568,
   "name": "title_row1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17569,
   "name": "f_44A1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17607,
   "name": "a_44C7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17608,
   "name": "title_row2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17609,
   "name": "f_44C9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17647,
   "name": "a_44EF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17657,
   "name": "f_44F9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17694,
   "name": "land_row7",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17734,
   "name": "land_row8",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17774,
   "name": "land_row9",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17814,
   "name": "land_row10",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17848,
   "name": "a_45B8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17854,
   "name": "land_row11",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17868,
   "name": "a_45CC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17888,
   "name": "apex_row1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17894,
   "name": "land_row12",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17907,
   "name": "f_45F3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17928,
   "name": "apex_row2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17934,
   "name": "land_row13",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17968,
   "name": "a_4630",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17974,
   "name": "land_row14",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17988,
   "name": "a_4644",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18014,
   "name": "land_row15",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18054,
   "name": "land_row16",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18094,
   "name": "land_row17",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18134,
   "name": "land_row18",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18157,
   "name": "f_46ED",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18208,
   "name": "latin_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18209,
   "name": "f_4721",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18424,
   "name": "sprite_pointers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18428,
   "name": "a_47FC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18429,
   "name": "a_47FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18430,
   "name": "a_47FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 19200,
   "name": "mus_playing",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19201,
   "name": "mus_tick",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19217,
   "name": "b_4B11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19237,
   "name": "b_4B25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19279,
   "name": "b_4B4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19284,
   "name": "b_4B54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19323,
   "name": "b_4B7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19361,
   "name": "b_4BA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19387,
   "name": "b_4BBB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19395,
   "name": "b_4BC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19420,
   "name": "b_4BDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19437,
   "name": "b_4BED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19446,
   "name": "b_4BF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19449,
   "name": "b_4BF9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19454,
   "name": "b_4BFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19462,
   "name": "b_4C06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19470,
   "name": "b_4C0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19478,
   "name": "b_4C16",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19494,
   "name": "mus_count_note",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19508,
   "name": "b_4C34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19531,
   "name": "r_4C4B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19532,
   "name": "mus_next_note",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 19570,
   "name": "b_4C72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19620,
   "name": "b_4CA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19631,
   "name": "b_4CAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19636,
   "name": "b_4CB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19691,
   "name": "b_4CEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19697,
   "name": "mus_init_tune",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19701,
   "name": "b_4CF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19709,
   "name": "b_4CFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19758,
   "name": "b_4D2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19795,
   "name": "mus_stop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19800,
   "name": "mus_silence",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19802,
   "name": "b_4D5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19814,
   "name": "mus_cmd_repeat",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19817,
   "name": "b_4D69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19841,
   "name": "r_4D81",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19842,
   "name": "mus_cmd_loop_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19843,
   "name": "b_4D83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19860,
   "name": "mus_cmd_repeat2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19868,
   "name": "mus_cmd_loop_start2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19874,
   "name": "mus_cmd_transpose",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19878,
   "name": "mus_cmd_release_or_wave_len",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19888,
   "name": "b_4DB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19892,
   "name": "mus_cmd_wave_prog",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19902,
   "name": "b_4DBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19906,
   "name": "mus_cmd_pulse_limits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19921,
   "name": "mus_cmd_vib_speed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19925,
   "name": "mus_cmd_filter_route",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19929,
   "name": "mus_cmd_filter_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19933,
   "name": "mus_cmd_volume_add",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19941,
   "name": "mus_pulse_sweep",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19985,
   "name": "b_4E11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20000,
   "name": "b_4E20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20003,
   "name": "r_4E23",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20004,
   "name": "b_4E24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20022,
   "name": "r_4E36",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20023,
   "name": "mus_cmd_waveform",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20027,
   "name": "mus_arpeggio",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20037,
   "name": "b_4E45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20049,
   "name": "b_4E51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20071,
   "name": "b_4E67",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20074,
   "name": "mus_vibrato",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20083,
   "name": "b_4E73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20100,
   "name": "b_4E84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20126,
   "name": "b_4E9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20130,
   "name": "mus_cmd_arp_note2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20134,
   "name": "mus_cmd_filter_sweep",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20148,
   "name": "mus_cmd_tempo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20152,
   "name": "mus_cmd_arp_note1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20156,
   "name": "mus_cmd_transpose_add",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20164,
   "name": "mus_cmd_vib_delay",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20168,
   "name": "mus_cmd_return",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20193,
   "name": "mus_cmd_detune",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20197,
   "name": "mus_freq_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20218,
   "name": "mus_freq_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20242,
   "name": "r_4F12",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20243,
   "name": "mus_note_freq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20267,
   "name": "mus_cmd_slide_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20271,
   "name": "mus_slide",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20283,
   "name": "r_4F3B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20284,
   "name": "b_4F3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20304,
   "name": "b_4F50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20325,
   "name": "b_4F65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20340,
   "name": "b_4F74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20363,
   "name": "mus_slide_up_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 20382,
   "name": "mus_slide_down_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 20401,
   "name": "mus_write_freq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20414,
   "name": "mus_cmd_pulse_rate",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20418,
   "name": "mus_next_event",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20429,
   "name": "r_4FCD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20430,
   "name": "mus_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20442,
   "name": "mus_cmd_slide_delay",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20446,
   "name": "mus_cmd_vib_depth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20450,
   "name": "mus_cmd_slide_mode",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20454,
   "name": "mus_cmd_arp_mode",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20458,
   "name": "mus_cmd_arp_speed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20462,
   "name": "mus_cmd_attack_decay",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20466,
   "name": "mus_cmd_volume",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20470,
   "name": "mus_cmd_slide_target",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20481,
   "name": "mus_cmd_call",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20529,
   "name": "mus_cmd_sustain_release",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20533,
   "name": "mus_cmd_stop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20541,
   "name": "mus_update",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20546,
   "name": "mus_tick_and_write",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20551,
   "name": "b_5047",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20567,
   "name": "r_5057",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20568,
   "name": "mus_cmd_slide_lo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20572,
   "name": "mus_unused_events",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20759,
   "name": "mus_cmd_pulse_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20763,
   "name": "mus_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20963,
   "name": "mus_cmd_lo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21000,
   "name": "mus_cmd_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21037,
   "name": "mus_note_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21229,
   "name": "intro_entry",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 21253,
   "name": "b_5305",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21281,
   "name": "b_5321",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21312,
   "name": "b_5340",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21314,
   "name": "a_5342",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21317,
   "name": "a_5345",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21322,
   "name": "a_534A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21393,
   "name": "rollcall_intro",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21419,
   "name": "b_53AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21429,
   "name": "b_53B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21445,
   "name": "leave_intro",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21450,
   "name": "b_53CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21458,
   "name": "b_53D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21470,
   "name": "name_game",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21474,
   "name": "drive_initialize",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21503,
   "name": "drive_cmd_i",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21504,
   "name": "gl_load_game",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21579,
   "name": "b_544B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21611,
   "name": "b_546B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21666,
   "name": "b_54A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21673,
   "name": "b_54A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21696,
   "name": "b_54C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21702,
   "name": "b_54C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21723,
   "name": "b_54DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21732,
   "name": "b_54E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21756,
   "name": "b_54FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21759,
   "name": "gl_get_byte",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21760,
   "name": "f_5500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21764,
   "name": "b_5504",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21812,
   "name": "gl_decode_seed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21844,
   "name": "gl_send_mw_prefix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21864,
   "name": "gl_drive_code",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22016,
   "name": "f_5600",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 22080,
   "name": "gl_drive_code_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22120,
   "name": "gl_block_leftover1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22272,
   "name": "copier_to_1800",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22281,
   "name": "b_5709",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22306,
   "name": "gl_block_leftover2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22528,
   "name": "spr_common",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22720,
   "name": "spr_megasaurus",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23104,
   "name": "spr_spikeysaurus",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23680,
   "name": "spr_dragosaurus",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24064,
   "name": "spr_stegosaurus",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24576,
   "name": "spr_burrowsaurus",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24832,
   "name": "spr_diplodocus",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25600,
   "name": "spr_ballodactyl",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25984,
   "name": "spr_flapodactyl",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26368,
   "name": "spr_bobodactyl",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26752,
   "name": "spr_dust",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26944,
   "name": "spr_mayhem",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27328,
   "name": "spr_apex_letters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28352,
   "name": "spr_apex_letters_ex",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29376,
   "name": "spr_apex_bits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29568,
   "name": "spr_mtv_logo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29952,
   "name": "big_font_map",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29953,
   "name": "f_7501",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29954,
   "name": "f_7502",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29955,
   "name": "f_7503",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30016,
   "name": "big_font_map_q_z",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30056,
   "name": "big_font_map_digits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30096,
   "name": "big_font_map_punct",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30128,
   "name": "landscape_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30156,
   "name": "f_75CC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30184,
   "name": "f_75E8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30212,
   "name": "f_7604",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30240,
   "name": "f_7620",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30268,
   "name": "f_763C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30296,
   "name": "f_7658",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30324,
   "name": "f_7674",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30352,
   "name": "f_7690",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30380,
   "name": "f_76AC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30408,
   "name": "f_76C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30436,
   "name": "apex_text_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30476,
   "name": "f_770C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30516,
   "name": "latin_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30556,
   "name": "name_buffer_top",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30596,
   "name": "name_buffer_bottom",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30720,
   "name": "chars_big_font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31560,
   "name": "chars_apex_font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31872,
   "name": "chars_small_font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32096,
   "name": "chars_landscape",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32104,
   "name": "f_7D68",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32112,
   "name": "f_7D70",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32120,
   "name": "f_7D78",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32128,
   "name": "f_7D80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32136,
   "name": "f_7D88",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32144,
   "name": "f_7D90",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32152,
   "name": "f_7D98",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32160,
   "name": "f_7DA0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32168,
   "name": "f_7DA8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32176,
   "name": "f_7DB0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32184,
   "name": "f_7DB8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32192,
   "name": "f_7DC0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32200,
   "name": "f_7DC8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32208,
   "name": "f_7DD0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32216,
   "name": "f_7DD8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32224,
   "name": "f_7DE0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32232,
   "name": "f_7DE8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32240,
   "name": "f_7DF0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32248,
   "name": "f_7DF8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32256,
   "name": "f_7E00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32264,
   "name": "f_7E08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32272,
   "name": "f_7E10",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32280,
   "name": "f_7E18",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32288,
   "name": "f_7E20",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32296,
   "name": "f_7E28",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32304,
   "name": "f_7E30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32312,
   "name": "f_7E38",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32320,
   "name": "f_7E40",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32328,
   "name": "f_7E48",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32336,
   "name": "f_7E50",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32344,
   "name": "f_7E58",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32352,
   "name": "f_7E60",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32360,
   "name": "f_7E68",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32368,
   "name": "f_7E70",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32376,
   "name": "f_7E78",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32384,
   "name": "f_7E80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32392,
   "name": "f_7E88",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32400,
   "name": "f_7E90",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32408,
   "name": "f_7E98",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32416,
   "name": "f_7EA0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32424,
   "name": "f_7EA8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32432,
   "name": "f_7EB0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32440,
   "name": "f_7EB8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32448,
   "name": "f_7EC0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32456,
   "name": "f_7EC8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32464,
   "name": "f_7ED0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32472,
   "name": "f_7ED8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32480,
   "name": "f_7EE0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32488,
   "name": "f_7EE8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32494,
   "name": "f_7EEE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32496,
   "name": "f_7EF0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32502,
   "name": "f_7EF6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32504,
   "name": "f_7EF8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32510,
   "name": "f_7EFE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32512,
   "name": "f_7F00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32516,
   "name": "f_7F04",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32520,
   "name": "f_7F08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32524,
   "name": "f_7F0C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32528,
   "name": "f_7F10",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32532,
   "name": "f_7F14",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32536,
   "name": "f_7F18",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32544,
   "name": "f_7F20",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32552,
   "name": "f_7F28",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32560,
   "name": "chars_rest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "intro_main",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32771,
   "name": "music_hook",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32772,
   "name": "a_8004",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32773,
   "name": "a_8005",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32774,
   "name": "r_8006",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32775,
   "name": "exit_hook",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32776,
   "name": "a_8008",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32777,
   "name": "a_8009",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32778,
   "name": "phase2_hook",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32779,
   "name": "a_800B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32780,
   "name": "a_800C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32781,
   "name": "anim_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32782,
   "name": "show_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32783,
   "name": "walk_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32784,
   "name": "latin_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32785,
   "name": "page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32786,
   "name": "text_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32787,
   "name": "legs_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32788,
   "name": "scroll_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32789,
   "name": "walk_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32791,
   "name": "walk_left0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32792,
   "name": "walk_left1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32793,
   "name": "walk_left2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32794,
   "name": "next_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32795,
   "name": "mayhem_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32796,
   "name": "mayhem_running",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32797,
   "name": "mayhem_stop",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32798,
   "name": "skid_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32799,
   "name": "legs_frozen",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32800,
   "name": "mayhem_armed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32801,
   "name": "skid_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32802,
   "name": "dust_frame",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32803,
   "name": "fade_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32804,
   "name": "sprite_fade_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32806,
   "name": "title_bars_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32807,
   "name": "credits_mode",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32808,
   "name": "draw_credits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32809,
   "name": "fade_in_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32810,
   "name": "fade_out_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32811,
   "name": "fade_in_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32812,
   "name": "hold_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32813,
   "name": "next_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32814,
   "name": "show_timer_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32815,
   "name": "frame_slot0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32816,
   "name": "frame_slot1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32817,
   "name": "frame_slot2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32818,
   "name": "frames_slot0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32819,
   "name": "frames_slot1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32820,
   "name": "frames_slot2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32821,
   "name": "slots",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32822,
   "name": "skid_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32823,
   "name": "slot_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32824,
   "name": "walk_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32825,
   "name": "name_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32826,
   "name": "bar_dummy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32827,
   "name": "frame_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32828,
   "name": "frame_parity",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32829,
   "name": "half_parity",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32830,
   "name": "bars_delayed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32837,
   "name": "colour_bars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32843,
   "name": "b_804B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32844,
   "name": "a_804C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32845,
   "name": "a_804D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32850,
   "name": "a_8052",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32851,
   "name": "a_8053",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32859,
   "name": "b_805B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32862,
   "name": "b_805E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32864,
   "name": "a_8060",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32868,
   "name": "dino_arrived",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32920,
   "name": "r_8098",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32921,
   "name": "phase1_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32982,
   "name": "rollcall_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33004,
   "name": "dino_page_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33061,
   "name": "b_8125",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33160,
   "name": "b_8188",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33203,
   "name": "b_81B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33244,
   "name": "credits_page_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33268,
   "name": "b_81F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33329,
   "name": "rollcall_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33342,
   "name": "b_823E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33363,
   "name": "b_8253",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33379,
   "name": "b_8263",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33403,
   "name": "b_827B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33413,
   "name": "b_8285",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33416,
   "name": "irq_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33452,
   "name": "b_82AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33463,
   "name": "b_82B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33483,
   "name": "b_82CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33495,
   "name": "b_82D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33502,
   "name": "irq_sky",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33503,
   "name": "a_82DF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33515,
   "name": "b_82EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33523,
   "name": "b_82F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33533,
   "name": "irq_ground",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33534,
   "name": "a_82FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33556,
   "name": "b_8314",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33568,
   "name": "irq_latin_bars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33583,
   "name": "irq_title_bars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33598,
   "name": "irq_credits_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33599,
   "name": "a_833F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33610,
   "name": "irq_credits_line1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33619,
   "name": "a_8353",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33630,
   "name": "irq_credits_name",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33639,
   "name": "a_8367",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33650,
   "name": "irq_credits_line2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33680,
   "name": "raster_install",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33712,
   "name": "b_83B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33716,
   "name": "j_83B4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33729,
   "name": "a_83C1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33734,
   "name": "a_83C6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33769,
   "name": "irq_entry_hw",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33775,
   "name": "irq_entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33789,
   "name": "a_83FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33790,
   "name": "a_83FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33800,
   "name": "b_8408",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33801,
   "name": "a_8409",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33802,
   "name": "a_840A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33803,
   "name": "fill_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33811,
   "name": "b_8413",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33812,
   "name": "a_8414",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33826,
   "name": "a_8422",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33843,
   "name": "clear_text_areas",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33847,
   "name": "b_8437",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33861,
   "name": "b_8445",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33901,
   "name": "clear_text_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33905,
   "name": "b_8471",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33919,
   "name": "b_847F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33959,
   "name": "irq_exit_rti",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33970,
   "name": "irq_exit_own",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33976,
   "name": "irq_exit_kernal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33987,
   "name": "set_bar_set",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34017,
   "name": "b_84E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34021,
   "name": "j_84E5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34028,
   "name": "scroll_clouds",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34040,
   "name": "b_84F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34089,
   "name": "r_8529",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34090,
   "name": "scroll_mountains",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34102,
   "name": "b_8536",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34104,
   "name": "b_8538",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34187,
   "name": "b_858B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34189,
   "name": "b_858D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34246,
   "name": "scroll_ground_near",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34253,
   "name": "b_85CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34255,
   "name": "b_85CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34273,
   "name": "b_85E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34292,
   "name": "r_85F4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34293,
   "name": "scroll_ground_mid",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34300,
   "name": "b_85FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34302,
   "name": "b_85FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34323,
   "name": "b_8613",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34325,
   "name": "b_8615",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34343,
   "name": "b_8627",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34362,
   "name": "r_863A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34363,
   "name": "anim_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34466,
   "name": "r_86A2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34467,
   "name": "anim_frames",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34482,
   "name": "b_86B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34486,
   "name": "a_86B6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34487,
   "name": "a_86B7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34497,
   "name": "b_86C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34515,
   "name": "a_86D3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34516,
   "name": "a_86D4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34526,
   "name": "b_86DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34538,
   "name": "a_86EA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34539,
   "name": "a_86EB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34549,
   "name": "b_86F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34552,
   "name": "r_86F8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34553,
   "name": "dino_walk_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34567,
   "name": "b_8707",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34619,
   "name": "r_873B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34620,
   "name": "b_873C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34624,
   "name": "mayhem_run_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34638,
   "name": "b_874E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34668,
   "name": "r_876C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34669,
   "name": "b_876D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34685,
   "name": "mayhem_halt",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34722,
   "name": "r_87A2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34723,
   "name": "mayhem_skid",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34757,
   "name": "r_87C5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34758,
   "name": "b_87C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34762,
   "name": "mayhem_dust",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34790,
   "name": "r_87E6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34791,
   "name": "credits_wait_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34812,
   "name": "r_87FC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34813,
   "name": "credits_fade_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34846,
   "name": "r_881E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34847,
   "name": "b_881F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34854,
   "name": "credits_hold",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34882,
   "name": "r_8842",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34883,
   "name": "credits_fade_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34916,
   "name": "r_8864",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34917,
   "name": "b_8865",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34924,
   "name": "credits_wait_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34944,
   "name": "r_8880",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34945,
   "name": "credits_bars_dark",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34959,
   "name": "print_small",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34979,
   "name": "j_88A3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34980,
   "name": "a_88A4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34981,
   "name": "a_88A5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34987,
   "name": "b_88AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34995,
   "name": "b_88B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35004,
   "name": "b_88BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35013,
   "name": "b_88C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35015,
   "name": "j_88C7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35016,
   "name": "a_88C8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35017,
   "name": "a_88C9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35022,
   "name": "big_font_punct",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35027,
   "name": "big_font_punct_wide",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35032,
   "name": "print_big",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35052,
   "name": "j_88EC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35064,
   "name": "a_88F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35065,
   "name": "a_88F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35073,
   "name": "b_8901",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35085,
   "name": "b_890D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35087,
   "name": "b_890F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35097,
   "name": "b_8919",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35108,
   "name": "b_8924",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35117,
   "name": "b_892D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35125,
   "name": "b_8935",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35131,
   "name": "b_893B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35136,
   "name": "b_8940",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35150,
   "name": "b_894E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35155,
   "name": "b_8953",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35159,
   "name": "b_8957",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35161,
   "name": "b_8959",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35198,
   "name": "j_897E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35203,
   "name": "a_8983",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35212,
   "name": "b_898C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35223,
   "name": "b_8997",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35227,
   "name": "b_899B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35228,
   "name": "a_899C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35233,
   "name": "r_89A1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35234,
   "name": "big_put",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35235,
   "name": "a_89A3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35236,
   "name": "a_89A4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35239,
   "name": "big_font_extra",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35240,
   "name": "a_89A8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35241,
   "name": "page_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35251,
   "name": "j_89B3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35277,
   "name": "page_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35291,
   "name": "b_89DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35302,
   "name": "b_89E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35313,
   "name": "b_89F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35370,
   "name": "ground_whiten",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35374,
   "name": "b_8A2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35390,
   "name": "bars_nop_slide",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35414,
   "name": "bars_delay_entry",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35426,
   "name": "rollcall_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35430,
   "name": "b_8A66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35436,
   "name": "show_timer_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35456,
   "name": "b_8A80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35459,
   "name": "r_8A83",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35460,
   "name": "b_8A84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35475,
   "name": "mayhem_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35487,
   "name": "r_8A9F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35488,
   "name": "b_8AA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35504,
   "name": "multicolour_on",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35513,
   "name": "multicolour_off",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35521,
   "name": "shared_rts",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 35522,
   "name": "grey_fade",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35550,
   "name": "sprite_fade",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35577,
   "name": "b_8AF9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35587,
   "name": "j_8B03",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35629,
   "name": "r_8B2D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35630,
   "name": "name_scroll",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35640,
   "name": "b_8B38",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35675,
   "name": "r_8B5B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35676,
   "name": "latin_scroll",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35686,
   "name": "b_8B66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35707,
   "name": "r_8B7B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35708,
   "name": "tv_frame_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35709,
   "name": "phase1_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35718,
   "name": "b_8B86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35774,
   "name": "b_8BBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35791,
   "name": "a_8BCF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35797,
   "name": "b_8BD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35800,
   "name": "irq_tv_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35821,
   "name": "b_8BED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35826,
   "name": "j_8BF2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35833,
   "name": "irq_tv_middle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35843,
   "name": "b_8C03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35850,
   "name": "irq_tv_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35870,
   "name": "b_8C1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35873,
   "name": "j_8C21",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35888,
   "name": "tv_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35889,
   "name": "a_8C31",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35890,
   "name": "a_8C32",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35891,
   "name": "a_8C33",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35892,
   "name": "a_8C34",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35893,
   "name": "a_8C35",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35894,
   "name": "a_8C36",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35895,
   "name": "a_8C37",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35896,
   "name": "a_8C38",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35897,
   "name": "a_8C39",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35898,
   "name": "a_8C3A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35899,
   "name": "curtain_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35914,
   "name": "curtain_msb_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35917,
   "name": "curtain_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35931,
   "name": "b_8C5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35933,
   "name": "b_8C5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35953,
   "name": "b_8C71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35985,
   "name": "b_8C91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35991,
   "name": "r_8C97",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35992,
   "name": "apex_text_white",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35994,
   "name": "apex_text_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35996,
   "name": "b_8C9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36012,
   "name": "tv_load_set",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36026,
   "name": "b_8CBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36037,
   "name": "b_8CC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36048,
   "name": "b_8CD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36081,
   "name": "apex_letters",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36100,
   "name": "b_8D04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36116,
   "name": "b_8D14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36125,
   "name": "b_8D1D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36141,
   "name": "b_8D2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36150,
   "name": "b_8D36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36166,
   "name": "b_8D46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36175,
   "name": "b_8D4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36191,
   "name": "r_8D5F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36192,
   "name": "b_8D60",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36203,
   "name": "curtain_fade",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36218,
   "name": "b_8D7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36232,
   "name": "r_8D88",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36233,
   "name": "b_8D89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36239,
   "name": "apex_fade_out",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36257,
   "name": "r_8DA1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36258,
   "name": "b_8DA2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36269,
   "name": "b_8DAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36280,
   "name": "r_8DB8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36281,
   "name": "b_8DB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36287,
   "name": "tv_logo_fade",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36300,
   "name": "r_8DCC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36301,
   "name": "b_8DCD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36335,
   "name": "b_8DEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36344,
   "name": "b_8DF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36355,
   "name": "tv_set_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36358,
   "name": "f_8E06",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36361,
   "name": "tv_set0_apex",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36365,
   "name": "f_8E0D",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36389,
   "name": "a_8E25",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36390,
   "name": "a_8E26",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36391,
   "name": "a_8E27",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36392,
   "name": "a_8E28",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36397,
   "name": "tv_set1_bar",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36398,
   "name": "a_8E2E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36400,
   "name": "a_8E30",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36401,
   "name": "f_8E31",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36409,
   "name": "f_8E39",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36433,
   "name": "tv_set2_logo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36437,
   "name": "a_8E55",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36438,
   "name": "a_8E56",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36439,
   "name": "a_8E57",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36440,
   "name": "a_8E58",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36441,
   "name": "a_8E59",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36442,
   "name": "a_8E5A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36469,
   "name": "apex_frame_idx",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36470,
   "name": "a_8E76",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36471,
   "name": "a_8E77",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36472,
   "name": "a_8E78",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36473,
   "name": "apex_frames_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36488,
   "name": "apex_frames_p",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36503,
   "name": "apex_frames_e",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36518,
   "name": "apex_frames_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36533,
   "name": "bar_fade_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36534,
   "name": "bar_fade_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36535,
   "name": "bar_fade_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36546,
   "name": "logo_fade_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36547,
   "name": "logo_fade_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36564,
   "name": "apex_fade_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36565,
   "name": "apex_fade_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36574,
   "name": "big_string_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36594,
   "name": "f_8EF2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36614,
   "name": "big_00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36631,
   "name": "big_01",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36647,
   "name": "big_02",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36664,
   "name": "big_03",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36682,
   "name": "big_04",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36700,
   "name": "big_05",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36717,
   "name": "big_06",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36734,
   "name": "big_07",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36750,
   "name": "big_08",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36766,
   "name": "big_09",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36778,
   "name": "big_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36800,
   "name": "big_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36821,
   "name": "big_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36842,
   "name": "big_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36866,
   "name": "big_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36886,
   "name": "big_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36907,
   "name": "big_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36928,
   "name": "big_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36950,
   "name": "big_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36972,
   "name": "big_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36994,
   "name": "credits_name_str",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37005,
   "name": "name_buf_end",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37006,
   "name": "small_string_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37036,
   "name": "f_90AC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 37066,
   "name": "small_00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37102,
   "name": "small_01",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37138,
   "name": "small_02",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37174,
   "name": "small_03",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37210,
   "name": "small_04",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37246,
   "name": "small_05",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37282,
   "name": "small_06",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37318,
   "name": "small_07",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37354,
   "name": "small_08",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37390,
   "name": "small_09",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37426,
   "name": "small_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37458,
   "name": "small_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37489,
   "name": "small_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37528,
   "name": "small_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37558,
   "name": "small_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37597,
   "name": "small_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37625,
   "name": "small_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37661,
   "name": "small_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37693,
   "name": "small_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37721,
   "name": "small_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37755,
   "name": "small_20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37788,
   "name": "small_21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37816,
   "name": "small_22",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37847,
   "name": "small_23",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37875,
   "name": "small_24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37909,
   "name": "small_25",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37938,
   "name": "small_26",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37972,
   "name": "small_27",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38001,
   "name": "small_28",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38025,
   "name": "small_29",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38052,
   "name": "credits_upper_str",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38062,
   "name": "credits_lower_str",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38072,
   "name": "latin_buf_first",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38073,
   "name": "page_colour_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38083,
   "name": "f_94C3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38093,
   "name": "page_colour_recs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38097,
   "name": "colour_rec_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38101,
   "name": "colour_rec_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38105,
   "name": "colour_rec_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38109,
   "name": "colour_rec_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38113,
   "name": "colour_rec_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38117,
   "name": "colour_rec_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38121,
   "name": "colour_rec_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38125,
   "name": "colour_rec_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38129,
   "name": "colour_rec_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38133,
   "name": "page_ground_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38143,
   "name": "grey_fade_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38152,
   "name": "f_9508",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38161,
   "name": "grey_fade_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38162,
   "name": "grey_fade_recs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38165,
   "name": "grey_step_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38169,
   "name": "grey_step_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38173,
   "name": "grey_step_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38177,
   "name": "grey_step_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38181,
   "name": "grey_step_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38185,
   "name": "grey_step_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38189,
   "name": "grey_step_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38193,
   "name": "grey_step_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38197,
   "name": "bar_set_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38209,
   "name": "f_9541",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38221,
   "name": "bar_set_lines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38233,
   "name": "bar_set_border",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38245,
   "name": "bar_colours",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38261,
   "name": "bar_set_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38269,
   "name": "bar_set_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38285,
   "name": "bar_set_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38301,
   "name": "bar_set_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38317,
   "name": "bar_set_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38333,
   "name": "bar_set_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38349,
   "name": "bar_set_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38357,
   "name": "bar_set_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38365,
   "name": "bar_set_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38373,
   "name": "bar_set_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38381,
   "name": "bar_set_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38389,
   "name": "credits_in_name",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38398,
   "name": "credits_out_name",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38407,
   "name": "credits_in_lines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38416,
   "name": "credits_out_lines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38425,
   "name": "credits_in_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38426,
   "name": "credits_out_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38427,
   "name": "credits_wait_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38428,
   "name": "credits_hold_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38429,
   "name": "credits_next_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38430,
   "name": "page_sprite_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38440,
   "name": "f_9628",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38450,
   "name": "page_sprite_recs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38490,
   "name": "sprite_rec_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38530,
   "name": "sprite_rec_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38570,
   "name": "sprite_rec_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38610,
   "name": "sprite_rec_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38650,
   "name": "sprite_rec_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38690,
   "name": "sprite_rec_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38730,
   "name": "sprite_rec_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38770,
   "name": "sprite_rec_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38810,
   "name": "sprite_rec_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38850,
   "name": "anim_list_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38872,
   "name": "f_97D8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38894,
   "name": "anim_list_lens",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38916,
   "name": "page_anim_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38926,
   "name": "anim_frame_lists",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38934,
   "name": "frame_list_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38942,
   "name": "frame_list_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38950,
   "name": "frame_list_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38958,
   "name": "frame_list_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38966,
   "name": "frame_list_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38974,
   "name": "frame_list_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38978,
   "name": "frame_list_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38982,
   "name": "frame_list_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38990,
   "name": "frame_list_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38998,
   "name": "frame_list_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39006,
   "name": "frame_list_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39014,
   "name": "frame_list_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39022,
   "name": "frame_list_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39030,
   "name": "frame_list_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39038,
   "name": "frame_list_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39046,
   "name": "frame_list_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39054,
   "name": "frame_list_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39062,
   "name": "frame_list_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39070,
   "name": "frame_list_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39078,
   "name": "frame_list_20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39081,
   "name": "frame_list_21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39082,
   "name": "skid_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39084,
   "name": "skid_steps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39109,
   "name": "dust_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39110,
   "name": "dust_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39122,
   "name": "sprite_fade_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39131,
   "name": "f_98DB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 39140,
   "name": "sprite_fade_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39141,
   "name": "sprite_fade_recs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39146,
   "name": "dino_fade_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39151,
   "name": "dino_fade_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39156,
   "name": "dino_fade_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39161,
   "name": "dino_fade_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39166,
   "name": "dino_fade_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39171,
   "name": "dino_fade_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39176,
   "name": "dino_fade_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39181,
   "name": "dino_fade_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39186,
   "name": "mayhem_fade_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39195,
   "name": "f_991B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 39204,
   "name": "mayhem_fade_recs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39209,
   "name": "mayhem_fade_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39214,
   "name": "mayhem_fade_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39219,
   "name": "mayhem_fade_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39224,
   "name": "mayhem_fade_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39229,
   "name": "mayhem_fade_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39234,
   "name": "mayhem_fade_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39239,
   "name": "mayhem_fade_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39244,
   "name": "mayhem_fade_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39249,
   "name": "tune_leftover",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39424,
   "name": "tune_rollcall",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40413,
   "name": "tune_rollcall_calls",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40630,
   "name": "tune_mtv_ident",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40838,
   "name": "menu_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40960,
   "name": "menu_tail_a000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41984,
   "name": "menu_tail_a400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43008,
   "name": "f_A800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 43072,
   "name": "menu_tail_a840",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44032,
   "name": "menu_tail_ac00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45056,
   "name": "a_B000",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49152,
   "name": "two_leftover_sprites",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49342,
   "name": "j_C0BE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 49354,
   "name": "a_C0CA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49355,
   "name": "a_C0CB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49407,
   "name": "s_C0FF",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 49408,
   "name": "f_C100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49426,
   "name": "a_C112",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49460,
   "name": "f_C134",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49492,
   "name": "s_C154",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 49512,
   "name": "f_C168",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49576,
   "name": "two_leftover_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49664,
   "name": "f_C200",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49728,
   "name": "two_load_menu",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49795,
   "name": "b_C283",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49827,
   "name": "b_C2A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49882,
   "name": "b_C2DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49889,
   "name": "b_C2E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49910,
   "name": "j_C2F6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 49912,
   "name": "b_C2F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49918,
   "name": "b_C2FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49920,
   "name": "f_C300",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49922,
   "name": "a_C302",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49923,
   "name": "a_C303",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 49939,
   "name": "b_C313",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49948,
   "name": "b_C31C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49950,
   "name": "b_C31E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49965,
   "name": "two_get_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49970,
   "name": "b_C332",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49984,
   "name": "a_C340",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50018,
   "name": "two_decode_seed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50050,
   "name": "two_send_mw_prefix",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50070,
   "name": "two_name_menu",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50074,
   "name": "two_unused_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50088,
   "name": "two_drive_code",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50176,
   "name": "f_C400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50184,
   "name": "f_C408",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50192,
   "name": "f_C410",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50200,
   "name": "f_C418",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50264,
   "name": "two_drive_code_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50344,
   "name": "two_file_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55295,
   "name": "f_D7FF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55456,
   "name": "f_D8A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55496,
   "name": "f_D8C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55545,
   "name": "f_D8F9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55582,
   "name": "f_D91E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55622,
   "name": "f_D946",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55662,
   "name": "f_D96E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55702,
   "name": "f_D996",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55736,
   "name": "f_D9B8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55742,
   "name": "f_D9BE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55776,
   "name": "f_D9E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55782,
   "name": "f_D9E6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55795,
   "name": "f_D9F3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55816,
   "name": "f_DA08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55822,
   "name": "f_DA0E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55856,
   "name": "f_DA30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55862,
   "name": "f_DA36",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55902,
   "name": "f_DA5E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55942,
   "name": "f_DA86",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55982,
   "name": "f_DAAE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56022,
   "name": "f_DAD6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56045,
   "name": "f_DAED",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56096,
   "name": "f_DB20",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 60030,
   "name": "kernal_irq_exit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 60681,
   "name": "kernal_talk",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60684,
   "name": "kernal_listen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60857,
   "name": "kernal_second",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60871,
   "name": "kernal_tksa",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60893,
   "name": "kernal_ciout",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60926,
   "name": "kernal_unlsn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 60947,
   "name": "kernal_acptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 62421,
   "name": "kernal_open_serial",
   "type": "Subroutine",
   "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": 65472,
   "name": "kernal_open",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65475,
   "name": "kernal_close",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 65484,
   "name": "kernal_clrchn",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 65493,
   "name": "kernal_load",
   "type": "Subroutine",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 1,
   "type": "line",
   "text": "The 6510's memory configuration port: boot runs with the value it finds (it never writes $01); $36 (KERNAL in, BASIC out) from `2` ($C241) and the intro's set-up ($52EE); $35 briefly at $8099, then $36 again from the raster set-up $8390 (A = $36 at $8238 and $8BB8); $36 in the game loader ($5401), $34 for the copier, $35 handed to the engine."
  },
  {
   "address": 57,
   "type": "line",
   "text": "Zero-page pointer to the Mayhem TV logo's sprite set, from $8E03/$8E06 (logo_load_set, $8CAC)."
  },
  {
   "address": 58,
   "type": "line",
   "text": "High byte of logo_set_ptr ($0039)."
  },
  {
   "address": 73,
   "type": "line",
   "text": "Temporary of the colour-bar routine $8045: $07, ANDed with the line counter to find every eighth line, which skips the delay (a bad line)."
  },
  {
   "address": 126,
   "type": "line",
   "text": "Zero-page pointer the intro uses for its colour and sprite-set records ($89A9, $89CD, $8AC2, $8ADE)."
  },
  {
   "address": 127,
   "type": "line",
   "text": "High byte of data_ptr ($007E)."
  },
  {
   "address": 128,
   "type": "line",
   "text": "The game loader's counter while it builds its decode table ($54A4-$54AD, run $C0A4)."
  },
  {
   "address": 157,
   "type": "line",
   "text": "KERNAL flag for direct-mode messages; boot clears it ($020B) so LOAD prints nothing."
  },
  {
   "address": 164,
   "type": "line",
   "text": "Loader temporary: first the drive-command byte counter (M-W in 32-byte pieces, $C27F-$C2B3 and $5447-$547B), then the CIA 2 port A value with the handshake line raised (bit 3 set), written to $DD00 before each byte."
  },
  {
   "address": 165,
   "type": "line",
   "text": "Loader temporary: CIA 2 port A's low three bits as found (VIC bank and serial lines idle), written back to $DD00 to drop the handshake."
  },
  {
   "address": 169,
   "type": "line",
   "text": "False symbol: $A9 is the operand of the BIT zero page that the music driver's file copy has at $4CEA (run $0526). The intro patches it into BIT absolute ($2C at $535A), so BIT $00A9 does read $A9, but only for flags that the LDA at $4C16 overwrites after the return; the patch's point is that the bytes $A9 $00 after the $2C are LDA #$00 (run $0527), the target of the BNE at $4CE0. No other instruction reads $A9."
  },
  {
   "address": 184,
   "type": "line",
   "text": "KERNAL's current logical file number; the game loader sets it to the device number ($542F-$5431)."
  },
  {
   "address": 185,
   "type": "line",
   "text": "KERNAL's current secondary address; the game loader sets $60 (open channel 0 for reading) before $F3D5 opens the file."
  },
  {
   "address": 186,
   "type": "line",
   "text": "KERNAL's current device number (8), read by both loaders for TALK and LISTEN."
  },
  {
   "address": 252,
   "type": "line",
   "text": "Music driver's event pointer for the voice being played (low byte), loaded from $09F9/$09F6 and saved back each frame; also the tune address passed to the init."
  },
  {
   "address": 253,
   "type": "line",
   "text": "High byte of mus_ptr ($00FC)."
  },
  {
   "address": 254,
   "type": "line",
   "text": "Music driver: the SID register offset (0, 7 or 14) of the voice being played."
  },
  {
   "address": 255,
   "type": "line",
   "text": "Music driver temporary: the note being started ($04CF), the repeat count ($05A2), the high byte of a call offset ($0858)."
  },
  {
   "address": 256,
   "type": "line",
   "text": "Bottom of the stack page. boot fills $0100-$01FF with $02 so that LOAD's RTS returns to $0203, and at $0249-$024B writes $C2 here: the high byte JMP ($01FF) picks up, the page-wrap of the indirect jump."
  },
  {
   "address": 384,
   "type": "line",
   "text": "Run-time address of the copier (loaded at $5700, put here by $53D0-$53D9, 49 bytes). The game loader jumps here when `game` is in."
  },
  {
   "address": 395,
   "type": "line",
   "text": "Run-time address of the copier's source high byte (operand of LDA $A800,Y), decremented page by page from $A8 to $5A."
  },
  {
   "address": 398,
   "type": "line",
   "text": "Run-time address of the copier's destination high byte (operand of STA $FF00,Y), decremented from $FF to $B1."
  },
  {
   "address": 511,
   "type": "line",
   "text": "Top byte of the stack page: boot stores $40 here, the low byte of JMP ($01FF) ($C240 once the page wraps to $0100)."
  },
  {
   "address": 512,
   "type": "line",
   "text": "First byte of `game` at run time: the game loader's load pointer starts here (STA $0200 at $54C9)."
  },
  {
   "address": 515,
   "type": "line",
   "text": "Side 1's autostart, `boot`, loaded over the stack page by the KERNAL's LOAD: $0100-$01FF are all $02, so the RTS that ends LOAD pops $0202 and resumes here. Blacks the border and background, clears $9D (no KERNAL messages), points the NMI vector $0318/$0319 at $0227 (an RTI) and starts CIA 2's timer A with its NMI enabled, so the NMI line stays held and RESTORE does nothing. Then resets the stack, SETLFS 1,8,1, writes the file name \"2\" ($32) at $3232 and names it there (SETNAM, length 1, X/Y = $32/$32), LOADs `2` to $C000 and jumps to $C240 through JMP ($01FF): $01FF holds $40 and the 6502 takes the high byte from $0100 (= $C2), not $0200."
  },
  {
   "address": 550,
   "type": "side",
   "text": "$80 $40 is the undocumented two-byte NOP #$40 here; its second byte, $0227, is the RTI the NMI vector points at"
  },
  {
   "address": 563,
   "type": "side",
   "text": "the file name is the one byte A = $32 (\"2\"), stored at $3232 so that X = Y = $32 name it"
  },
  {
   "address": 590,
   "type": "side",
   "text": "indirect jump across a page edge: low byte from $01FF ($40), high byte from $0100 ($C2), so it lands on $C240"
  },
  {
   "address": 788,
   "type": "line",
   "text": "KERNAL IRQ vector; $8390 writes the intro's IRQ entry here ($83EF, or $83E9) as well as into $FFFE/$FFFF."
  },
  {
   "address": 789,
   "type": "line",
   "text": "High byte of the KERNAL IRQ vector, written by $83BA."
  },
  {
   "address": 792,
   "type": "line",
   "text": "KERNAL NMI vector; boot points it at $0227 (an RTI) so RESTORE is ignored; the intro's $8099 sets its low byte to $C1."
  },
  {
   "address": 793,
   "type": "line",
   "text": "High byte of the NMI vector, set to $02 by boot ($0212-$0214)."
  },
  {
   "address": 828,
   "type": "line",
   "text": "Run-time address of the music driver's on switch (loaded at $4B00); the hand-over holds no intro data here (the copy is made at $533C)."
  },
  {
   "address": 829,
   "type": "line",
   "text": "Run-time address of mus_tick ($4B01 in the file)."
  },
  {
   "address": 876,
   "type": "line",
   "text": "Run-time address of mus_tick's voice loop ($4B30 in the file), the JMP target at $045F."
  },
  {
   "address": 951,
   "type": "line",
   "text": "Run-time address of mus_tick's command loop ($4B7B in the file), re-entered by the call command at $086A."
  },
  {
   "address": 982,
   "type": "line",
   "text": "Run-time address of the music driver's patched JSR operand (low byte), written from the handler table at $03C6."
  },
  {
   "address": 983,
   "type": "line",
   "text": "Run-time address of the patched JSR operand's high byte, written at $03CC."
  },
  {
   "address": 1068,
   "type": "line",
   "text": "Run-time address of the waveform programme's table lookup in mus_tick ($4BF0 in the file)."
  },
  {
   "address": 1122,
   "type": "line",
   "text": "Run-time address of mus_count_note ($4C26 in the file)."
  },
  {
   "address": 1318,
   "type": "line",
   "text": "Run-time address of the BIT the intro patches to $2C ($535A-$535C); $4CEA in the file."
  },
  {
   "address": 1320,
   "type": "line",
   "text": "Run-time address of the patched BIT's high operand byte, set to $00 by $535F-$5361 (it already is)."
  },
  {
   "address": 1325,
   "type": "line",
   "text": "Run-time address of mus_init_tune ($4CF1 in the file)."
  },
  {
   "address": 1423,
   "type": "line",
   "text": "Run-time address of mus_stop ($4D53 in the file)."
  },
  {
   "address": 1428,
   "type": "line",
   "text": "Run-time address of mus_silence ($4D58 in the file)."
  },
  {
   "address": 1536,
   "type": "line",
   "text": "Run-time 2-bit decode table of `2`, $0600-$06FF, built by $C2D6-$C2EA and read by $C34C (bit-pair 1). In the hand-over these bytes are part of the music driver's run-time range and hold no intro data."
  },
  {
   "address": 1544,
   "type": "line",
   "text": "Second group of `2`'s decode table (bit-pair 2), read at $C352."
  },
  {
   "address": 1552,
   "type": "line",
   "text": "Third group of `2`'s decode table (bit-pair 3), read at $C358."
  },
  {
   "address": 1560,
   "type": "line",
   "text": "Fourth group of `2`'s decode table (bit-pair 4), read at $C35E."
  },
  {
   "address": 1569,
   "type": "line",
   "text": "Run-time address of mus_pulse_sweep ($4DE5 in the file)."
  },
  {
   "address": 1655,
   "type": "line",
   "text": "Run-time address of mus_arpeggio ($4E3B in the file)."
  },
  {
   "address": 1695,
   "type": "line",
   "text": "Run-time address of the arpeggio's store of a frequency low byte ($4E63 in the file)."
  },
  {
   "address": 1702,
   "type": "line",
   "text": "Run-time address of mus_vibrato ($4E6A in the file)."
  },
  {
   "address": 1731,
   "type": "line",
   "text": "Run-time address of the vibrato's quarter counter ($4E87 in the file)."
  },
  {
   "address": 1825,
   "type": "line",
   "text": "Run-time address of mus_freq_up ($4EE5 in the file)."
  },
  {
   "address": 1846,
   "type": "line",
   "text": "Run-time address of mus_freq_down ($4EFA in the file)."
  },
  {
   "address": 1864,
   "type": "line",
   "text": "Run-time address of the frequency high-byte store shared by mus_freq_up and mus_freq_down ($4F0C in the file)."
  },
  {
   "address": 1871,
   "type": "line",
   "text": "Run-time address of mus_note_freq ($4F13 in the file)."
  },
  {
   "address": 1899,
   "type": "line",
   "text": "Run-time address of mus_slide ($4F2F in the file)."
  },
  {
   "address": 1991,
   "type": "line",
   "text": "Run-time address of mus_slide_up_step ($4F8B in the file)."
  },
  {
   "address": 2010,
   "type": "line",
   "text": "Run-time address of mus_slide_down_step ($4F9E in the file)."
  },
  {
   "address": 2026,
   "type": "line",
   "text": "Run-time address of the slide's frequency high-byte store ($4FAE in the file)."
  },
  {
   "address": 2029,
   "type": "line",
   "text": "Run-time address of mus_write_freq ($4FB1 in the file)."
  },
  {
   "address": 2046,
   "type": "line",
   "text": "Run-time address of mus_next_event ($4FC2 in the file)."
  },
  {
   "address": 2058,
   "type": "line",
   "text": "Run-time address of mus_start ($4FCE in the file), the intro's entry for a new tune: JSR $080A with A/X = tune address."
  },
  {
   "address": 2098,
   "type": "line",
   "text": "Run-time address of mus_cmd_slide_target ($4FF6 in the file), also used by mus_next_note for the arpeggio's second note."
  },
  {
   "address": 2174,
   "type": "line",
   "text": "Run-time address of mus_tick_and_write ($5042 in the file)."
  },
  {
   "address": 2390,
   "type": "line",
   "text": "Base of the music init's clear loop (STA $0956,Y for Y = $9B..1, clearing $0957-$09F1); not a variable itself."
  },
  {
   "address": 2391,
   "type": "line",
   "text": "Music driver (run time, loaded at $511B): the voice whose notes restart the filter sweep, set by command $06 with an argument of 99 or more."
  },
  {
   "address": 2392,
   "type": "line",
   "text": "Music driver (run time): tempo, frames per tick, set by command $24; 1 after init."
  },
  {
   "address": 2393,
   "type": "line",
   "text": "Music driver (run time): frame divider, counts 0 up to the tempo; a tick happens when it is 0."
  },
  {
   "address": 2394,
   "type": "line",
   "text": "Music driver (run time), one byte per voice: the current frequency, low byte, as slid and vibrated."
  },
  {
   "address": 2397,
   "type": "line",
   "text": "Music driver (run time), per voice: the current frequency, high byte."
  },
  {
   "address": 2400,
   "type": "line",
   "text": "Music driver (run time), per voice: the note being played, 0 for a rest; effects are skipped while it is 0."
  },
  {
   "address": 2403,
   "type": "line",
   "text": "Music driver (run time), per voice: the waveform byte of the current note, restored after the waveform programme."
  },
  {
   "address": 2406,
   "type": "line",
   "text": "Music driver (run time), per voice: release point, ticks before a note's end at which the gate is dropped (command $04 with 100 or more)."
  },
  {
   "address": 2409,
   "type": "line",
   "text": "Music driver (run time), per voice: arpeggio mode, 0 off, 1 trill, other values three-note chord (command $07)."
  },
  {
   "address": 2412,
   "type": "line",
   "text": "Music driver (run time), per voice: waveform programme number (command $06)."
  },
  {
   "address": 2415,
   "type": "line",
   "text": "Music driver (run time), per voice: ticks the waveform programme runs after a note starts (0 = the whole note)."
  },
  {
   "address": 2418,
   "type": "line",
   "text": "Music driver (run time), per voice: frames per arpeggio step (command $05)."
  },
  {
   "address": 2421,
   "type": "line",
   "text": "Music driver (run time): fine filter sweep step added to $0A1B each frame (command $1C, low three bits)."
  },
  {
   "address": 2422,
   "type": "line",
   "text": "Music driver (run time): coarse filter sweep step added to $0A1C each frame (command $1C, upper bits)."
  },
  {
   "address": 2423,
   "type": "line",
   "text": "Music driver (run time): cutoff the filter voice's notes restart from (command $17)."
  },
  {
   "address": 2424,
   "type": "line",
   "text": "Music driver (run time), per voice: slide mode, 0 none, 1 to target, 2 up, 3 down (command $0E)."
  },
  {
   "address": 2425,
   "type": "line",
   "text": "Base of an indexed store in the music init ($057B, STA $0979,X with X = $7E/$7F), which writes voices 1 and 2's event pointer high bytes at $09F7/$09F8; not a variable itself."
  },
  {
   "address": 2427,
   "type": "line",
   "text": "Music driver (run time), per voice: high byte of the slide target, also the arpeggio's second-note frequency."
  },
  {
   "address": 2428,
   "type": "line",
   "text": "Base of an indexed store in the music init ($0570, STA $097C,X with X = $7E/$7F), writing voices 1 and 2's event pointer low bytes at $09FA/$09FB."
  },
  {
   "address": 2430,
   "type": "line",
   "text": "Music driver (run time), per voice: low byte of the slide target / second-note frequency."
  },
  {
   "address": 2433,
   "type": "line",
   "text": "Music driver (run time), per voice: ticks after a note starts before the slide begins (command $08)."
  },
  {
   "address": 2436,
   "type": "line",
   "text": "Music driver (run time), per voice: ticks since the note started, compared with the slide delay and the waveform programme length."
  },
  {
   "address": 2439,
   "type": "line",
   "text": "Music driver (run time), per voice: vibrato depth added to or taken from the frequency (command $0A)."
  },
  {
   "address": 2442,
   "type": "line",
   "text": "Music driver (run time), per voice: vibrato delay countdown, loaded from $098D at each note."
  },
  {
   "address": 2445,
   "type": "line",
   "text": "Music driver (run time), per voice: vibrato delay in frames (command $20)."
  },
  {
   "address": 2448,
   "type": "line",
   "text": "Music driver (run time), per voice: which of the arpeggio's three notes is sounding (0-2)."
  },
  {
   "address": 2451,
   "type": "line",
   "text": "Music driver (run time), per voice: interval of the arpeggio's second note (command $1E)."
  },
  {
   "address": 2454,
   "type": "line",
   "text": "Music driver (run time), per voice: interval of the arpeggio's third note (command $1B)."
  },
  {
   "address": 2457,
   "type": "line",
   "text": "Music driver (run time), per voice: meant as the low byte of the arpeggio's third note frequency, read at $4E60, but nothing writes it except the init's clear ($4CF5): the note code at $4C9D-$4CA1 keeps only the high byte (TYA discards the low byte in A), so it is always 0."
  },
  {
   "address": 2460,
   "type": "line",
   "text": "Music driver (run time), per voice: frequency high byte of the arpeggio's third note."
  },
  {
   "address": 2463,
   "type": "line",
   "text": "Music driver (run time), per voice: frame counter toward the next arpeggio step."
  },
  {
   "address": 2466,
   "type": "line",
   "text": "Music driver (run time), per voice: arpeggio steps taken; its low bit drives the trill and the alternating waveform programmes."
  },
  {
   "address": 2469,
   "type": "line",
   "text": "Music driver (run time), per voice: detune added to each note frequency's low byte (command $1F)."
  },
  {
   "address": 2472,
   "type": "line",
   "text": "Music driver (run time), per voice: high byte of the note length."
  },
  {
   "address": 2475,
   "type": "line",
   "text": "Music driver (run time), per voice: frame counter within a vibrato quarter."
  },
  {
   "address": 2478,
   "type": "line",
   "text": "Music driver (run time), per voice: vibrato quarter, 0-3 (1 and 2 go down, 0 and 3 up)."
  },
  {
   "address": 2481,
   "type": "line",
   "text": "Music driver (run time), per voice: pulse sweep direction, 0 up, 1 down."
  },
  {
   "address": 2484,
   "type": "line",
   "text": "Music driver (run time), per voice: pulse sweep limit compared with the pulse width high byte, from command $14's high nibble."
  },
  {
   "address": 2487,
   "type": "line",
   "text": "Music driver (run time), per voice: the other pulse sweep limit, from command $14's low nibble."
  },
  {
   "address": 2490,
   "type": "line",
   "text": "Music driver (run time), per voice: transpose in semitones (commands $13 and $19)."
  },
  {
   "address": 2493,
   "type": "line",
   "text": "Music driver (run time), per voice: slide speed low byte (command $0C)."
  },
  {
   "address": 2496,
   "type": "line",
   "text": "Music driver (run time), per voice: slide speed high byte (command $0B)."
  },
  {
   "address": 2499,
   "type": "line",
   "text": "Music driver (run time), per voice: sustain/release byte for each note (command $09)."
  },
  {
   "address": 2502,
   "type": "line",
   "text": "Music driver (run time), per voice: waveform/control byte for each note (command $02)."
  },
  {
   "address": 2505,
   "type": "line",
   "text": "Music driver (run time), per voice: pulse width high byte at each note (command $03)."
  },
  {
   "address": 2508,
   "type": "line",
   "text": "Music driver (run time), per voice: attack/decay byte for each note (command $01)."
  },
  {
   "address": 2511,
   "type": "line",
   "text": "Music driver (run time), per voice: pulse sweep rate (command $0D), 0 for none."
  },
  {
   "address": 2514,
   "type": "line",
   "text": "Music driver (run time): loop counters, six bytes (two loop levels for each voice)."
  },
  {
   "address": 2520,
   "type": "line",
   "text": "Music driver (run time): loop start addresses, low bytes, six (two levels per voice)."
  },
  {
   "address": 2526,
   "type": "line",
   "text": "Music driver (run time): loop start addresses, high bytes, six."
  },
  {
   "address": 2532,
   "type": "line",
   "text": "Music driver (run time), per voice: return address of the innermost call (low byte)."
  },
  {
   "address": 2535,
   "type": "line",
   "text": "Music driver (run time), per voice: return address of the outer call (low byte)."
  },
  {
   "address": 2538,
   "type": "line",
   "text": "Music driver (run time), per voice: return address of the innermost call (high byte)."
  },
  {
   "address": 2541,
   "type": "line",
   "text": "Music driver (run time), per voice: return address of the outer call (high byte)."
  },
  {
   "address": 2544,
   "type": "line",
   "text": "Music driver (run time), per voice: frames per vibrato quarter (command $15), 1 after init."
  },
  {
   "address": 2547,
   "type": "line",
   "text": "Music driver (run time), per voice: ticks left of the current note, low byte."
  },
  {
   "address": 2550,
   "type": "line",
   "text": "Music driver (run time), per voice: event pointer high byte."
  },
  {
   "address": 2553,
   "type": "line",
   "text": "Music driver (run time), per voice: event pointer low byte."
  },
  {
   "address": 2556,
   "type": "line",
   "text": "Music driver (run time): SID register offset of each voice, 0, 7, 14 (the only bytes set in the file's variable block besides the waveforms)."
  },
  {
   "address": 2559,
   "type": "line",
   "text": "Music driver (run time): low byte of the playing tune's address, the base for call offsets."
  },
  {
   "address": 2560,
   "type": "line",
   "text": "Music driver (run time): high byte of the tune's address; the next five bytes ($0A01-$0A05) are the waveform programme's waveforms $41, $21, $11, $81, $51, read as $0A00 + programme number."
  },
  {
   "address": 2566,
   "type": "line",
   "text": "Music driver (run time): SID shadow, $0A06-$0A1E for $D400-$D418, copied out every frame by mus_update. This byte: voice frequency low (+0/+7/+14)."
  },
  {
   "address": 2567,
   "type": "line",
   "text": "SID shadow (run time): voice frequency high."
  },
  {
   "address": 2568,
   "type": "line",
   "text": "SID shadow (run time): voice pulse width low."
  },
  {
   "address": 2569,
   "type": "line",
   "text": "SID shadow (run time): voice pulse width high."
  },
  {
   "address": 2570,
   "type": "line",
   "text": "SID shadow (run time): voice control (waveform and gate)."
  },
  {
   "address": 2571,
   "type": "line",
   "text": "SID shadow (run time): voice attack/decay."
  },
  {
   "address": 2572,
   "type": "line",
   "text": "SID shadow (run time): voice sustain/release."
  },
  {
   "address": 2587,
   "type": "line",
   "text": "SID shadow (run time): filter cutoff low bits ($D415), stepped by the sweep and kept to 0-7."
  },
  {
   "address": 2588,
   "type": "line",
   "text": "SID shadow (run time): filter cutoff high byte ($D416)."
  },
  {
   "address": 2589,
   "type": "line",
   "text": "SID shadow (run time): resonance and filter routing ($D417), set by command $16."
  },
  {
   "address": 2590,
   "type": "line",
   "text": "SID shadow (run time): filter mode and volume ($D418), set by commands $00 and $1A."
  },
  {
   "address": 2591,
   "type": "line",
   "text": "Run-time address of the command handlers' low-byte table ($51E3 in the file)."
  },
  {
   "address": 2628,
   "type": "line",
   "text": "Run-time address of the command handlers' high-byte table ($5208 in the file)."
  },
  {
   "address": 2665,
   "type": "line",
   "text": "Run-time address of the note frequency table, low bytes ($522D in the file)."
  },
  {
   "address": 2666,
   "type": "line",
   "text": "Run-time address of the note table's high bytes (each one after its low byte)."
  },
  {
   "address": 6144,
   "type": "line",
   "text": "The engine's entry: the copier jumps here when `game` is in place (run address $019F). Belongs to the engine part."
  },
  {
   "address": 12850,
   "type": "line",
   "text": "boot's one-byte file name: $0235 stores $32 (\"2\") here and SETNAM names it with X = Y = $32. Not otherwise the intro's."
  },
  {
   "address": 17407,
   "type": "line",
   "text": "Base of fill_screen's first indexed store (STA $43FF,X for X = $FB..1, so $4400-$44FA); not a variable."
  },
  {
   "address": 17568,
   "type": "line",
   "text": "Screen row 4 (40 bytes): top half of the big-font name on a dinosaur page, scrolled in from the right by name_scroll; cleared by clear_text_areas."
  },
  {
   "address": 17569,
   "type": "line",
   "text": "Source of name_scroll's shift of row 4 (LDA $44A1,X), one column right of the destination."
  },
  {
   "address": 17607,
   "type": "line",
   "text": "Rightmost cell of row 4, where name_scroll puts the next column of the name's top half."
  },
  {
   "address": 17608,
   "type": "line",
   "text": "Screen row 5: bottom half of the big-font name."
  },
  {
   "address": 17609,
   "type": "line",
   "text": "Source of name_scroll's shift of row 5."
  },
  {
   "address": 17647,
   "type": "line",
   "text": "Rightmost cell of row 5, fed from the buffer at $7784."
  },
  {
   "address": 17657,
   "type": "line",
   "text": "Base of fill_screen's second indexed store ($44FA-$45F4); not a variable."
  },
  {
   "address": 17694,
   "type": "line",
   "text": "Screen row 7, columns 6-33: the top row of the landscape window (clouds, from $75CC)."
  },
  {
   "address": 17734,
   "type": "line",
   "text": "Screen row 8, columns 6-33 (sky, from $75B0)."
  },
  {
   "address": 17774,
   "type": "line",
   "text": "Screen row 9, columns 6-33 (clouds, from $75E8)."
  },
  {
   "address": 17814,
   "type": "line",
   "text": "Screen row 10, columns 6-33 (sky, from $75B0)."
  },
  {
   "address": 17848,
   "type": "line",
   "text": "Screen row 11, column 0: on a credits page the big-font name is printed from here (rows 11-12); in the Mayhem TV and Apex part $8B97 puts char $8A here."
  },
  {
   "address": 17854,
   "type": "line",
   "text": "Screen row 11, columns 6-33 (mountain tops, from $7604)."
  },
  {
   "address": 17868,
   "type": "line",
   "text": "Screen row 11, column 20: $8B9C puts char $8E here in the Apex part."
  },
  {
   "address": 17888,
   "type": "line",
   "text": "Screen row 12: the top half of \"COMPUTER \u00b7 PRODUCTIONS\" in the Apex part (from $76E4)."
  },
  {
   "address": 17894,
   "type": "line",
   "text": "Screen row 12, columns 6-33 (mountains, from $7620)."
  },
  {
   "address": 17907,
   "type": "line",
   "text": "Base of fill_screen's third indexed store ($45F4-$46EE); not a variable."
  },
  {
   "address": 17928,
   "type": "line",
   "text": "Screen row 13: the bottom half of \"COMPUTER \u00b7 PRODUCTIONS\" (from $770C)."
  },
  {
   "address": 17934,
   "type": "line",
   "text": "Screen row 13, columns 6-33 (mountains, from $763C)."
  },
  {
   "address": 17968,
   "type": "line",
   "text": "Screen row 14, column 0: on a credits page the lower small-font line is printed from here; in the Apex part $8BA1 puts char $8B here."
  },
  {
   "address": 17974,
   "type": "line",
   "text": "Screen row 14, columns 6-33 (mountain foot, from $7658)."
  },
  {
   "address": 17988,
   "type": "line",
   "text": "Screen row 14, column 20: $8BA6 puts char $E6 here in the Apex part."
  },
  {
   "address": 18014,
   "type": "line",
   "text": "Screen row 15, columns 6-33 (from $7674)."
  },
  {
   "address": 18054,
   "type": "line",
   "text": "Screen row 16, columns 6-33: first of the three ground rows (from $7690)."
  },
  {
   "address": 18094,
   "type": "line",
   "text": "Screen row 17, columns 6-33 (ground, from $76AC)."
  },
  {
   "address": 18134,
   "type": "line",
   "text": "Screen row 18, columns 6-33: the bottom row of the landscape window (from $76C8)."
  },
  {
   "address": 18157,
   "type": "line",
   "text": "Base of fill_screen's fourth indexed store ($46EE-$47E8); not a variable."
  },
  {
   "address": 18208,
   "type": "line",
   "text": "Screen row 20: the small-font Latin name, slid in from the left by latin_scroll."
  },
  {
   "address": 18209,
   "type": "line",
   "text": "Destination of latin_scroll's shift of row 20 (STA $4721,X), one column right of the source."
  },
  {
   "address": 18424,
   "type": "line",
   "text": "The sprite pointers of screen $4400 ($47F8-$47FF), written from the page and logo sprite records ($89CD, $8CAC)."
  },
  {
   "address": 18428,
   "type": "line",
   "text": "Sprite 4's pointer: the first animated sprite of a dinosaur, or Mayhem's front half."
  },
  {
   "address": 18429,
   "type": "line",
   "text": "Sprite 5's pointer: the second animated sprite."
  },
  {
   "address": 18430,
   "type": "line",
   "text": "Sprite 6's pointer: the third animated sprite on three-sprite pages, or Mayhem's dust cloud."
  },
  {
   "address": 19200,
   "type": "line",
   "text": "Music driver, loaded at $4B00-$52FF and copied by $533C-$5358 to $033C-$0B3B, where it runs (subtract $47C4 from an address here for its run address; jumps and tables inside name run addresses). This byte (run $033C) is the driver's on switch: cleared by the init ($0810) and the stop ($0591), incremented to 1 when init has primed the tune ($058B); the per-frame entry $0879 does nothing while it is 0."
  },
  {
   "address": 19201,
   "type": "line",
   "text": "Run at $033D, called by mus_update every frame. One step of the three-voice player: counts the frame divider $0959 up to the tempo $0958 (a tick when it wraps to 0); adds the filter sweep step ($0975 fine, $0976 coarse) to the cutoff in $0A1B/$0A1C; then for each voice X = 2..0 (Y = its SID register offset, 0/7/14, from $09FC): steps the arpeggio counter, and on a tick, only when the voice's note is on its last tick ($09F3 = 1 with $09A8 = 0) or $09A8 = $FF ($4B66-$4B79), reads the voice's command events (two bytes each: command + 1, argument) and dispatches each through the 37-entry handler table at $0A1F/$0A44 by patching the JSR at $03D5; then, unless the note is a rest ($0960 = 0), runs the per-frame effects (slide $076B, vibrato $06A6, waveform programme $096C, arpeggio $0677, pulse sweep $0621); and on a tick counts the note down ($0462). It reaches the SID only through the shadow at $0A06-$0A1E."
  },
  {
   "address": 19248,
   "type": "side",
   "text": "run $036C: top of the voice loop, X = voice 2, 1, 0"
  },
  {
   "address": 19323,
   "type": "side",
   "text": "run $03B7: command loop; an event byte below $26 is a command (byte - 1 indexes the handler table), anything else ends the run of commands"
  },
  {
   "address": 19353,
   "type": "side",
   "text": "run $03D5: JSR whose operand ($03D6/$03D7) is written from the handler table just before; A = the event's second byte, Y = the voice's register offset"
  },
  {
   "address": 19494,
   "type": "line",
   "text": "Run at $0462. Counts the voice's note length down by one tick (16 bits: $09F3 low, $09A8 high); releases the gate (clears bit 0 of the control shadow) once the remainder drops below the release point $0966; at zero falls into mus_next_note."
  },
  {
   "address": 19532,
   "type": "line",
   "text": "Run at $0488 (entered from $0462 when a note runs out). Clears the voice's effect counters, resets the filter sweep if this is the filter voice ($0957), loads attack/decay ($09CC), sustain/release ($09C3) and pulse width high ($09C9) into the shadow, then reads the next note event: byte 1 is the note (0 = rest, bit 7 ignored), turned into a frequency through mus_note_freq with the arpeggio partners ($0996, $0993) worked out too; byte 2 is the length in ticks; the waveform $09C6 goes to the control register with the gate on. A following event $19 gives the length a high byte ($09A8)."
  },
  {
   "address": 19690,
   "type": "side",
   "text": "run $0526: BIT. In the file this byte is $24 (BIT zero page), which would leave the $00 at $0528 to run as BRK on this path; $535A-$5363 patch it to $2C (BIT absolute) so it skips the LDA #$00 and stores the pulled length byte"
  },
  {
   "address": 19697,
   "type": "line",
   "text": "Run at $052D (the init $080A ends here). Clears the driver's variables $0957-$09F1, sets each voice's release point to 2, length to 1 tick and vibrato speed to 1, the tempo $0958 to 1; keeps the tune's address in $09FF/$0A00 and sets the voices' event pointers: voice 0 at tune + 4, voices 1 and 2 at tune + 4 plus the 16-bit offsets in the tune's first four bytes. Silences the shadow (mus_silence), runs two ticks to prime it, and switches the driver on ($033C)."
  },
  {
   "address": 19795,
   "type": "line",
   "text": "Run at $058F. Switches the driver off ($033C = 0) and falls into mus_silence."
  },
  {
   "address": 19800,
   "type": "line",
   "text": "Run at $0594. Clears the SID shadow $0A06-$0A1D and writes 0 to the SID volume register $D418."
  },
  {
   "address": 19814,
   "type": "line",
   "text": "Run at $05A2, command $0F. A = repeat count: counts the voice's loop counter $09D2 up and, while below A, moves the event pointer back to the loop start saved by command $10 ($09D8/$09DE)."
  },
  {
   "address": 19842,
   "type": "line",
   "text": "Run at $05BE, command $10. Saves the voice's event pointer as the loop start ($09D8/$09DE) and clears the loop counter $09D2."
  },
  {
   "address": 19860,
   "type": "line",
   "text": "Run at $05D0, command $11. As command $0F but with the voice's second loop slot (index X + 3), so loops can nest two deep."
  },
  {
   "address": 19868,
   "type": "line",
   "text": "Run at $05D8, command $12. As command $10 with the second loop slot (X + 3)."
  },
  {
   "address": 19874,
   "type": "line",
   "text": "Run at $05DE, command $13. Sets the voice's transpose $09BA (semitones added to every note)."
  },
  {
   "address": 19878,
   "type": "line",
   "text": "Run at $05E2, command $04. A of 100 or more sets the release point $0966 (A - 100 ticks before the end of a note); below 100 sets how many ticks the waveform programme runs ($096F)."
  },
  {
   "address": 19892,
   "type": "line",
   "text": "Run at $05F0, command $06. A of 99 or more chooses the filter voice $0957 (A - 100), whose notes restart the filter sweep; below 99 selects the voice's waveform programme $096C: 1-5 put a waveform from $0A01-$0A05 on the voice from the note's second tick until $096F ticks (the whole note when $096F = 0); 6 and up alternate waveform (programme - 5) with the note's own on every other arpeggio step (bit 0 of $09A2)."
  },
  {
   "address": 19906,
   "type": "line",
   "text": "Run at $05FE, command $14. Splits A into the voice's pulse-sweep limits: high nibble to $09B4, low nibble to $09B7."
  },
  {
   "address": 19921,
   "type": "line",
   "text": "Run at $060D, command $15. Sets the voice's vibrato period $09F0 (frames per quarter swing)."
  },
  {
   "address": 19925,
   "type": "line",
   "text": "Run at $0611, command $16. Sets the shadow of $D417 ($0A1D): filter resonance and which voices go through the filter."
  },
  {
   "address": 19929,
   "type": "line",
   "text": "Run at $0615, command $17. Sets $0977, the cutoff the filter voice's notes restart the sweep from."
  },
  {
   "address": 19933,
   "type": "line",
   "text": "Run at $0619, command $1A. Adds A to the shadow of $D418 ($0A1E): volume and filter mode."
  },
  {
   "address": 19941,
   "type": "line",
   "text": "Run at $0621, called every frame for a voice whose sweep rate $09CF is non-zero; acts only on frames where the arpeggio counter $099F is 0. Moves the voice's 16-bit pulse width ($0A08/$0A09 in the shadow) up or down by the rate, reversing against the limits $09B4 and $09B7 ($09B1 holds the direction)."
  },
  {
   "address": 20023,
   "type": "line",
   "text": "Run at $0673, command $02. Sets the voice's waveform/control byte $09C6, written to the SID with the gate on at each note."
  },
  {
   "address": 20027,
   "type": "line",
   "text": "Run at $0677, every frame for a voice with arpeggio mode $0969 set. Mode 1 alternates the frequency between the note and the second note ($097B/$097E) on odd ticks of $09A2; other modes cycle three frequencies (note, $097B/$097E, $0999/$099C) by the step $0990."
  },
  {
   "address": 20074,
   "type": "line",
   "text": "Run at $06A6, every frame for a voice with vibrato depth $0987. After the delay $098A runs out, adds or subtracts the depth to the frequency ($095A/$095D) by quarter of the cycle $09AE, each quarter $09F0 frames long."
  },
  {
   "address": 20130,
   "type": "line",
   "text": "Run at $06DE, command $1B. Sets $0996, the interval of the arpeggio's third note above the played note."
  },
  {
   "address": 20134,
   "type": "line",
   "text": "Run at $06E2, command $1C. Sets the filter sweep step: A / 8 to $0976 (coarse), A AND 7 to $0975 (fine)."
  },
  {
   "address": 20148,
   "type": "line",
   "text": "Run at $06F0, command $24. Sets the tempo $0958: frames per tick."
  },
  {
   "address": 20152,
   "type": "line",
   "text": "Run at $06F4, command $1E. Sets $0993, the interval of the arpeggio's second note. Its RTS at $06F7 is also command $18, which does nothing: the byte $19 that selects it is read by the note code as a length high byte ($0516)."
  },
  {
   "address": 20156,
   "type": "line",
   "text": "Run at $06F8, command $19. Adds A to the voice's transpose $09BA."
  },
  {
   "address": 20164,
   "type": "line",
   "text": "Run at $0700, command $20. Sets the vibrato delay $098D (frames after each note start)."
  },
  {
   "address": 20168,
   "type": "line",
   "text": "Run at $0704, command $23. Returns from a call (command $22): takes the saved event pointer from $09E4/$09EA, moves the older one down from $09E7/$09ED, and steps past the call."
  },
  {
   "address": 20193,
   "type": "line",
   "text": "Run at $071D, command $1F. Sets the voice's detune $09A5, added to the low byte of every note frequency."
  },
  {
   "address": 20197,
   "type": "line",
   "text": "Run at $0721. Adds the vibrato depth $0987 to the voice's frequency $095A/$095D and to the shadow."
  },
  {
   "address": 20218,
   "type": "line",
   "text": "Run at $0736. Subtracts the vibrato depth $0987 from the voice's frequency and writes the shadow."
  },
  {
   "address": 20243,
   "type": "line",
   "text": "Run at $074F. A = note (bit 7 dropped) plus the voice's transpose: looks up the frequency in the note table at $0A69 and adds the detune $09A5; returns low byte in A, high byte in Y."
  },
  {
   "address": 20267,
   "type": "line",
   "text": "Run at $0767, command $0B. Sets $09C0, the high byte of the slide speed."
  },
  {
   "address": 20271,
   "type": "line",
   "text": "Run at $076B, every frame once the slide delay $0981 has passed. Mode $0978: 1 slides toward the target frequency $097B/$097E and stops there, 2 slides up, 3 slides down, by the 16-bit speed $09BD/$09C0."
  },
  {
   "address": 20363,
   "type": "line",
   "text": "Run at $07C7. Adds the slide speed $09BD/$09C0 to the frequency $095A/$095D and writes the shadow."
  },
  {
   "address": 20382,
   "type": "line",
   "text": "Run at $07DA. Subtracts the slide speed from the frequency and writes the shadow."
  },
  {
   "address": 20401,
   "type": "line",
   "text": "Run at $07ED. Copies the voice's frequency $095A/$095D into the SID shadow ($0A06/$0A07 + Y)."
  },
  {
   "address": 20414,
   "type": "line",
   "text": "Run at $07FA, command $0D. Sets the pulse-sweep rate $09CF (0 = no sweep)."
  },
  {
   "address": 20418,
   "type": "line",
   "text": "Run at $07FE. Advances the event pointer $FC/$FD by two bytes; returns Z clear (the command loop's BNE uses it)."
  },
  {
   "address": 20430,
   "type": "line",
   "text": "Run at $080A: the driver's entry for a new tune, A/X = the tune's address (low/high). Switches the driver off and continues at $052D (mus_init_tune). Called with $9EB6 for the Mayhem TV and Apex part ($5386) and $9A00 for the roll call ($53BF)."
  },
  {
   "address": 20442,
   "type": "line",
   "text": "Run at $0816, command $08. Sets $0981, the ticks after a note's start before the slide begins."
  },
  {
   "address": 20446,
   "type": "line",
   "text": "Run at $081A, command $0A. Sets the vibrato depth $0987 (0 = none)."
  },
  {
   "address": 20450,
   "type": "line",
   "text": "Run at $081E, command $0E. Sets the slide mode $0978 (0 off, 1 to target, 2 up, 3 down)."
  },
  {
   "address": 20454,
   "type": "line",
   "text": "Run at $0822, command $07. Sets the arpeggio mode $0969."
  },
  {
   "address": 20458,
   "type": "line",
   "text": "Run at $0826, command $05. Sets $0972, frames per arpeggio step."
  },
  {
   "address": 20462,
   "type": "line",
   "text": "Run at $082A, command $01. Sets $09CC, the attack/decay byte written at each note."
  },
  {
   "address": 20466,
   "type": "line",
   "text": "Run at $082E, command $00. Sets the shadow of $D418 ($0A1E): filter mode and master volume."
  },
  {
   "address": 20470,
   "type": "line",
   "text": "Run at $0832, command $21. Turns note A into a frequency (mus_note_freq) and keeps it as the slide target $097B/$097E."
  },
  {
   "address": 20481,
   "type": "line",
   "text": "Run at $083D, command $22. Calls a stretch of the tune: saves the event pointer ($09E4/$09EA, the previous one moved to $09E7/$09ED: two levels), then points the voice at the tune's start ($09FF/$0A00) plus the 16-bit offset in the argument and the event's third byte, and goes straight back to the command loop ($03B7). A call event is four bytes."
  },
  {
   "address": 20529,
   "type": "line",
   "text": "Run at $086D, command $09. Sets $09C3, the sustain/release byte written at each note."
  },
  {
   "address": 20533,
   "type": "line",
   "text": "Run at $0871, command $1D. Stops the music (mus_stop) and drops the rest of this frame's work by discarding two return addresses."
  },
  {
   "address": 20541,
   "type": "line",
   "text": "Run at $0879: the per-frame entry, reached through JMP $8003 (its operand patched to $0879 at $5364). Does nothing while the driver is off; otherwise runs one tick ($033D) and copies the shadow $0A06-$0A1E to the SID, $D400-$D418, highest register first, and writes $0A1E to $D418 once more at the end."
  },
  {
   "address": 20546,
   "type": "line",
   "text": "Run at $087E: the body of mus_update without the on/off test; also called twice by the init to prime the shadow."
  },
  {
   "address": 20568,
   "type": "line",
   "text": "Run at $0894, command $0C. Sets $09BD, the low byte of the slide speed."
  },
  {
   "address": 20572,
   "type": "line",
   "text": "Run address $0898-$0952. 187 bytes between the driver's code that no code reaches and no table or tune points at (the two tunes the intro plays start at $9A00 and $9EB6). They are laid out like the driver's own events (pairs of command + 1 and argument, with four-byte $23 calls), so presumably a tune fragment left in the driver; what it was for is unknown."
  },
  {
   "address": 20759,
   "type": "line",
   "text": "Run at $0953, command $03. Sets $09C9, the pulse width high byte written at each note."
  },
  {
   "address": 20763,
   "type": "line",
   "text": "Run address $0957-$0A1E: the driver's variables, zero in the file except the register offsets and the waveforms (the init clears $0957-$09F1). Three bytes per voice from $095A on (one for each voice), named at their run addresses: frequency, note, waveform, release point, arpeggio, slide, vibrato, loop and call state, the event pointers $09F6/$09F9, the register offsets $09FC-$09FE (0, 7, 14), the tune address $09FF/$0A00, the waveforms $0A01-$0A05 for the waveform programme ($41 pulse, $21 sawtooth, $11 triangle, $81 noise, $51 pulse + triangle), and the SID shadow $0A06-$0A1E."
  },
  {
   "address": 20963,
   "type": "line",
   "text": "Run address $0A1F: low bytes of the 37 command handlers, $00-$24 (high bytes at $0A44)."
  },
  {
   "address": 21000,
   "type": "line",
   "text": "Run address $0A44: high bytes of the 37 command handlers."
  },
  {
   "address": 21037,
   "type": "line",
   "text": "Run address $0A69: 96 SID frequencies, low byte first, one per semitone: note 0 = $0106 (about B below C-0 on a PAL machine), note 1 = $0116 (C-0) up to note 95 = $F810 (A#7)."
  },
  {
   "address": 21229,
   "type": "line",
   "text": "The intro's entry, jumped to by `2` when `menu` is in. Sets $01 = $36 and lets the KERNAL's interrupt run, turns off the sprites, blacks border and background, clears colour RAM to black and blanks the screen; sends the drive an Initialize ($53E2); copies the game loader $5400-$57FF to $C000-$C3FF; copies the music driver $4B00-$52FF to $033C-$0B3B, filling the original with $FF as it goes; patches the driver's BIT at $0526 to $2C, the music hook $8003 to $0879, the exit $8007 to $53C5 and the phase change $800A to $5391; starts tune $9EB6 (the Mayhem TV ident), turns the screen on ($D011 = $1B) and jumps to $8000."
  },
  {
   "address": 21314,
   "type": "line",
   "text": "High byte of the LDA $4B00,X operand in the music driver's copy loop, stepped $4B to $52 by $534E."
  },
  {
   "address": 21317,
   "type": "line",
   "text": "High byte of the STA $033C,X operand in the copy loop, stepped $03 to $0A by $5351."
  },
  {
   "address": 21322,
   "type": "line",
   "text": "High byte of the STA $4B00,X operand that fills the copied page with $FF, stepped by $5354."
  },
  {
   "address": 21393,
   "type": "line",
   "text": "Reached from the Mayhem TV and Apex part through JMP $800A when its last fade ends ($8BD2). Blacks the background and turns on extended colour and multicolour together ($D011 bit 6, $D016 bit 4), a combination the VIC shows as black, so the screen stays dark; waits about half a second in two delay loops (256 x 256 and 150 x 256 rounds), starts tune $9A00 (the roll-call music) and jumps to $80D6."
  },
  {
   "address": 21445,
   "type": "line",
   "text": "The intro's exit, reached through JMP $8007 when fire is pressed during the roll call ($827B-$8282). Masks interrupts and writes 0 to the SID's volume register $D418 25 times (the loop's store is not indexed, so it never reaches the other 24 registers; the volume alone silences the music), copies the copier $5700-$5730 to $0180-$01B0 and jumps to the game loader at $C000 (the copy of $5400). The game is loaded only now, with the screen blanked by the loader."
  },
  {
   "address": 21470,
   "type": "line",
   "text": "The file name \"GAME\" in PETSCII, 4 bytes, named by SETNAM at $5426-$542C (run at $C026-$C02C)."
  },
  {
   "address": 21474,
   "type": "line",
   "text": "OPEN 15,8,15 with the one-character name at $53FF (\"I\"), then CLOSE 15 and CLRCHN: sends the drive the Initialize command after `2`'s drive program, so the drive is back in its normal state before the next load."
  },
  {
   "address": 21503,
   "type": "line",
   "text": "The drive command \"I\" (Initialize), one byte, named by $53EB-$53EF."
  },
  {
   "address": 21504,
   "type": "line",
   "text": "The loader for `game`, at its load address: $5321-$533A copies $5400-$57FF to $C000-$C3FF and $53DB jumps to $C000 once fire is pressed, so every address inside it is a $C0xx/$C1xx run address. Sets $01 = $36, masks the VIC interrupts, silences the SID, blanks the screen and turns the sprites off; opens \"GAME\" ($53DE) on device 8 with the KERNAL's serial routines, writes the drive program at $C168 (= $5568 here) into drive RAM $0700 with M-W in 32-byte pieces, starts it with M-E $07AB, builds its 2-bit decode table at $C400-$C4FF from the 32 seeds at $C134 (= $5534), then receives `game` through $C0FF into $0200 upwards until the page counter reaches $A9 ($0200-$A8FF), changing the border colour every block. Then calls UNLSN ($EDFE, at $54E4; not UNTALK), closes the file (LISTEN, secondary $E0, UNLISTEN) and jumps to the copier at $0180."
  },
  {
   "address": 21705,
   "type": "side",
   "text": "the store's operand ($C0CA/$C0CB at run time) is the load pointer, $0200 to start, stepped by $54CC-$54D4"
  },
  {
   "address": 21759,
   "type": "line",
   "text": "Run at $C0FF. Receives one byte from the drive program over CIA 2 port A ($DD00): raises the handshake, waits for bit 7, reads four bit-pairs at fixed cycle spacing and combines them through the decode table at $C400/$C408/$C410/$C418. Returns it in A and changes the border colour (EOR with the operand at $C112, stepped once per block)."
  },
  {
   "address": 21760,
   "type": "line",
   "text": "The game loader's receive routine continues here (run address $C100): the handshake's second half and the four bit-pair reads."
  },
  {
   "address": 21812,
   "type": "line",
   "text": "Run at $C134: the same 32 seed bytes as `2`'s at $C362, from which $54A6 builds the receive decode table at $C400-$C4FF."
  },
  {
   "address": 21844,
   "type": "line",
   "text": "Run at $C154. Sends LISTEN to the current device ($BA), secondary $6F (the command channel), then \"M-\"; the caller adds \"W\" or \"E\" and the rest of the drive command."
  },
  {
   "address": 21864,
   "type": "line",
   "text": "Run-time copy at $C168: the 1541 drive program, 256 bytes, identical to `2`'s at $C3A8 (described there); sent to drive RAM $0700 by the M-W loop at $544B and started at $07AB."
  },
  {
   "address": 22016,
   "type": "line",
   "text": "Inside the game loader's copy of the drive program (run address $C200; drive address $0798)."
  },
  {
   "address": 22080,
   "type": "line",
   "text": "The last 40 bytes of the game loader's copy of the drive program (drive addresses $07D8-$07FF, run address $C240-$C267)."
  },
  {
   "address": 22120,
   "type": "line",
   "text": "Run address $C268-$C2FF: 152 bytes after the drive program that the game loader never reads. Mostly zero, then from $56AD the rows of a large letter E drawn three bytes to a row like a sprite: a leftover of sprite shapes that sat here (VIC bank 1 blocks $59-$5B); the intro's sprite pointers start at $60."
  },
  {
   "address": 22272,
   "type": "line",
   "text": "Copied to $0180-$01B0 on the stack page by $53D0-$53D9 and run there when `game` has loaded (JMP $0180 from the game loader). With $01 = $34 (all RAM), copies the 79 pages $5A00-$A8FF to $B100-$FFFF, top page first ($A800 to $FF00; the DECs at $0192 and $0195, run time, step the source and destination high bytes at $018B and $018E), sets $01 = $35 and jumps to the engine at $1800."
  },
  {
   "address": 22306,
   "type": "line",
   "text": "After the copier (run $0180-$01A1; $5722-$5730 are copied to the stack page with it but not run): 222 bytes no code reads, three more sprite-style drawings of the letter E at shrinking sizes (around $573A, $5780 and $57C3), leftovers of the zoom frames whose live copies are blocks $BB-$C2."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "Sprite blocks $60-$62 (64 bytes each): $60 a solid block (the masks at the edges of the landscape window and the blocks of the Apex wipe bar), $61 empty (the dinosaur's sprites before their animation starts, the APEX letters before they appear), $62 the smiling sun (sprite 7 on every dinosaur page)."
  },
  {
   "address": 22720,
   "type": "line",
   "text": "Sprite blocks $63-$68: megasaurus, three animation frames for each of its two sprites (frame lists $981E and $9826; multicolour)."
  },
  {
   "address": 23104,
   "type": "line",
   "text": "Sprite blocks $69-$71: spikeysaurus, three animation frames for each of its three sprites (frame lists $9846, $984E, $9856)."
  },
  {
   "address": 23680,
   "type": "line",
   "text": "Sprite blocks $72-$77: dragosaurus, three animation frames for each of two sprites ($986E, $9876)."
  },
  {
   "address": 24064,
   "type": "line",
   "text": "Sprite blocks $78-$7F: stegosaurus, four frames for each of two sprites ($980E, $9816)."
  },
  {
   "address": 24576,
   "type": "line",
   "text": "Sprite blocks $80-$83: burrowsaurus, two frames for each of two sprites ($983E, $9842)."
  },
  {
   "address": 24832,
   "type": "line",
   "text": "Sprite blocks $84-$8F: diplodocus, four frames for each of three sprites ($987E, $9886, $988E)."
  },
  {
   "address": 25600,
   "type": "line",
   "text": "Sprite blocks $90-$95: ballodactyl, three animation frames for each of two sprites ($982E, $9836)."
  },
  {
   "address": 25984,
   "type": "line",
   "text": "Sprite blocks $96-$9B: flapodactyl, three animation frames for each of two sprites ($985E, $9866)."
  },
  {
   "address": 26368,
   "type": "line",
   "text": "Sprite blocks $9C-$A1: bobodactyl, three animation frames for each of two sprites ($9896, $989E)."
  },
  {
   "address": 26752,
   "type": "line",
   "text": "Sprite blocks $A2-$A4: the dust cloud Mayhem raises as he stops, a ring of puffs growing (sprite 6, frames from $98C7)."
  },
  {
   "address": 26944,
   "type": "line",
   "text": "Sprite blocks $A5-$AA: Mayhem. $A5-$A7 his running frames for sprite 4 and $A8 for sprite 5 (frame lists $98A6, $98A9), $A9 and $AA the standing halves shown when he stops ($877D)."
  },
  {
   "address": 27328,
   "type": "line",
   "text": "Sprite blocks $AB-$CA: the APEX letters zooming in, eight frames each from the smallest to the full letter (read backwards): A $AB-$B2, P $B3-$BA, E $BB-$C2, X $C3-$CA (full-size letter first in each group)."
  },
  {
   "address": 28352,
   "type": "line",
   "text": "Sprite blocks $BB-$CA: the zoom frames of the letters E ($BB-$C2) and X ($C3-$CA), eight each, the full-size letter first (continuing spr_apex_letters at $6AC0)."
  },
  {
   "address": 29376,
   "type": "line",
   "text": "Sprite blocks $CB-$CD: $CB and $CC the dots each APEX letter starts from; $CD the round edge that leads the wipe bar."
  },
  {
   "address": 29568,
   "type": "line",
   "text": "Sprite blocks $CE-$D3: the Mayhem TV logo in six sprites, two rows of three: the big M with \"TV\" written over it, and below the rest of the M and the words \"MAYHEM TV\" (set 2 at $8E51)."
  },
  {
   "address": 29952,
   "type": "line",
   "text": "The big font's glyph map, 43 glyphs of four character codes (top left, top right, bottom left, bottom right): 0-25 the letters a-z, 26-35 the digits 0-9, 36-40 \"!\", \".\", \",\", \"?\", \":\", 41 and 42 the third columns of m and w. A digit is reached only through an 8-bit wrap (print_big computes code + $2A, times four): its chars, $69-$8E (and $18, $1A for the 1), now mostly hold the Apex screen's letters, so a digit would print as fragments; no string contains one. $FF in a glyph is a solid (blank) cell."
  },
  {
   "address": 29953,
   "type": "line",
   "text": "Second byte of each glyph in the big-font map (top right), read as $7501,X by print_big."
  },
  {
   "address": 29954,
   "type": "line",
   "text": "Third byte of each glyph (bottom left), written 40 bytes below the first."
  },
  {
   "address": 29955,
   "type": "line",
   "text": "Fourth byte of each glyph (bottom right)."
  },
  {
   "address": 30016,
   "type": "line",
   "text": "Big-font glyph map, glyphs 16-25: the letters q to z (four character codes each)."
  },
  {
   "address": 30056,
   "type": "line",
   "text": "Big-font glyph map, glyphs 26-35, the digits 0-9: they point at chars $69-$8E (glyph 27 also at $18 and $1A), most of which now hold the Apex screen's letters, and are reached only through print_big's 8-bit index wrap; no string uses a digit."
  },
  {
   "address": 30096,
   "type": "line",
   "text": "Big-font glyph map, glyphs 36-42: \"!\", \".\", \",\", \"?\", \":\", and the third columns of m ($32, $35) and w ($5C, $59)."
  },
  {
   "address": 30124,
   "type": "line",
   "text": "Four $FF bytes after the glyph map; nothing reads them."
  },
  {
   "address": 30128,
   "type": "line",
   "text": "The landscape window's rows, 11 of 28 characters, copied to rows 7-18, columns 6-33 by dino_page_setup: $75B0 empty sky ($FD, rows 8 and 10), $75CC and $75E8 clouds (rows 7 and 9, the 14-character strip $AC-$B9 at two offsets), $7604-$7674 the mountains (rows 11-15, 7-character strips $BA-$DC), $7690-$76C8 the ground (rows 16-18, 3-character strips $DD-$E5). The scrolling is done in the characters themselves ($84EC-$863A), not by moving these rows."
  },
  {
   "address": 30156,
   "type": "line",
   "text": "Landscape row 7: clouds, chars $AC-$B9 twice."
  },
  {
   "address": 30184,
   "type": "line",
   "text": "Landscape row 9: clouds, the same strip starting at $B2."
  },
  {
   "address": 30212,
   "type": "line",
   "text": "Landscape row 11: the tops of the mountains, chars $BA-$C0 four times."
  },
  {
   "address": 30240,
   "type": "line",
   "text": "Landscape row 12: mountains, chars $C1-$C7 four times."
  },
  {
   "address": 30268,
   "type": "line",
   "text": "Landscape row 13: mountains, chars $C8-$CE."
  },
  {
   "address": 30296,
   "type": "line",
   "text": "Landscape row 14: mountains, chars $CF-$D5."
  },
  {
   "address": 30324,
   "type": "line",
   "text": "Landscape row 15: the foot of the mountains, chars $D6-$DC."
  },
  {
   "address": 30352,
   "type": "line",
   "text": "Landscape row 16: ground, chars $DD-$DF repeated."
  },
  {
   "address": 30380,
   "type": "line",
   "text": "Landscape row 17: ground, chars $E0-$E2 repeated."
  },
  {
   "address": 30408,
   "type": "line",
   "text": "Landscape row 18: the nearest ground, chars $E3-$E5, the fastest-scrolling strip."
  },
  {
   "address": 30436,
   "type": "line",
   "text": "The two screen rows of \"COMPUTER \u00b7 PRODUCTIONS\" (40 characters each, top halves then bottom halves; chars $6B-$8D of the set at $7800, $E7 for spaces), copied to rows 12 and 13 by phase1_loop."
  },
  {
   "address": 30476,
   "type": "line",
   "text": "Bottom row of \"COMPUTER \u00b7 PRODUCTIONS\" (row 13)."
  },
  {
   "address": 30516,
   "type": "line",
   "text": "Buffer for the page's Latin name, 40 bytes: $FF in the file and refilled with $FF by dino_page_setup, which prints the small-font name into it and puts a 0 at $7734; latin_scroll slides it onto row 20 from the end."
  },
  {
   "address": 30556,
   "type": "line",
   "text": "Buffer for the top half of the page's big-font name, 40 bytes ($FF, end marker 0 at $7783); name_scroll feeds it onto row 4."
  },
  {
   "address": 30596,
   "type": "line",
   "text": "Buffer for the bottom half of the big-font name, 40 bytes; fed onto row 5."
  },
  {
   "address": 30636,
   "type": "line",
   "text": "84 zero bytes before the character set; nothing reads them."
  },
  {
   "address": 30720,
   "type": "line",
   "text": "Character set at $7800, chars $00-$68: the quarters of the big font's glyphs (drawn as holes: the letter is the clear bits, so the background colour, and the colour bars on it, shows through and the set bits are drawn black from colour RAM)."
  },
  {
   "address": 31560,
   "type": "line",
   "text": "Chars $69-$8F: the letters of \"COMPUTER \u00b7 PRODUCTIONS\" ($6B-$89, $8C, $8D), two characters high, drawn as set bits; $8A and $8E (a line on their bottom pixel row) and $8B (a line on its top row) are the single characters phase1_loop puts at rows 11 and 14; $8F is part of the big-font f."
  },
  {
   "address": 31872,
   "type": "line",
   "text": "Chars $90-$AB: the small font, a-z ($90-$A9) and the brackets ( and ) ($AA, $AB), drawn as holes like the big font; written by print_small."
  },
  {
   "address": 32096,
   "type": "line",
   "text": "Chars $AC-$E5: the landscape. $AC-$B9 the clouds (one 14-character strip), $BA-$DC the mountains (five 7-character strips), $DD-$E5 the ground (three 3-character strips); their pixels are rolled left in place while the landscape scrolls ($84EC-$863A), the clouds slowest and the bottom ground fastest. Multicolour."
  },
  {
   "address": 32104,
   "type": "line",
   "text": "Cloud strip, char $AD: the second of the 14 characters scroll_clouds rolls together."
  },
  {
   "address": 32112,
   "type": "line",
   "text": "Cloud strip, char $AE."
  },
  {
   "address": 32120,
   "type": "line",
   "text": "Cloud strip, char $AF."
  },
  {
   "address": 32128,
   "type": "line",
   "text": "Cloud strip, char $B0."
  },
  {
   "address": 32136,
   "type": "line",
   "text": "Cloud strip, char $B1."
  },
  {
   "address": 32144,
   "type": "line",
   "text": "Cloud strip, char $B2."
  },
  {
   "address": 32152,
   "type": "line",
   "text": "Cloud strip, char $B3."
  },
  {
   "address": 32160,
   "type": "line",
   "text": "Cloud strip, char $B4."
  },
  {
   "address": 32168,
   "type": "line",
   "text": "Cloud strip, char $B5."
  },
  {
   "address": 32176,
   "type": "line",
   "text": "Cloud strip, char $B6."
  },
  {
   "address": 32184,
   "type": "line",
   "text": "Cloud strip, char $B7."
  },
  {
   "address": 32192,
   "type": "line",
   "text": "Cloud strip, char $B8."
  },
  {
   "address": 32200,
   "type": "line",
   "text": "Cloud strip, char $B9, the right end; it receives the pixels leaving the left end."
  },
  {
   "address": 32208,
   "type": "line",
   "text": "Mountain strip 1 (row 11), char $BA (chars $BA-$C0 rolled together by scroll_mountains)."
  },
  {
   "address": 32216,
   "type": "line",
   "text": "Mountain strip 1 (row 11), char $BB."
  },
  {
   "address": 32224,
   "type": "line",
   "text": "Mountain strip 1 (row 11), char $BC."
  },
  {
   "address": 32232,
   "type": "line",
   "text": "Mountain strip 1 (row 11), char $BD."
  },
  {
   "address": 32240,
   "type": "line",
   "text": "Mountain strip 1 (row 11), char $BE."
  },
  {
   "address": 32248,
   "type": "line",
   "text": "Mountain strip 1 (row 11), char $BF."
  },
  {
   "address": 32256,
   "type": "line",
   "text": "Mountain strip 1 (row 11), char $C0, its right end."
  },
  {
   "address": 32264,
   "type": "line",
   "text": "Mountain strip 2 (row 12), char $C1 ($C1-$C7)."
  },
  {
   "address": 32272,
   "type": "line",
   "text": "Mountain strip 2 (row 12), char $C2."
  },
  {
   "address": 32280,
   "type": "line",
   "text": "Mountain strip 2 (row 12), char $C3."
  },
  {
   "address": 32288,
   "type": "line",
   "text": "Mountain strip 2 (row 12), char $C4."
  },
  {
   "address": 32296,
   "type": "line",
   "text": "Mountain strip 2 (row 12), char $C5."
  },
  {
   "address": 32304,
   "type": "line",
   "text": "Mountain strip 2 (row 12), char $C6."
  },
  {
   "address": 32312,
   "type": "line",
   "text": "Mountain strip 2 (row 12), char $C7, its right end."
  },
  {
   "address": 32320,
   "type": "line",
   "text": "Mountain strip 3 (row 13), char $C8 ($C8-$CE)."
  },
  {
   "address": 32328,
   "type": "line",
   "text": "Mountain strip 3 (row 13), char $C9."
  },
  {
   "address": 32336,
   "type": "line",
   "text": "Mountain strip 3 (row 13), char $CA."
  },
  {
   "address": 32344,
   "type": "line",
   "text": "Mountain strip 3 (row 13), char $CB."
  },
  {
   "address": 32352,
   "type": "line",
   "text": "Mountain strip 3 (row 13), char $CC."
  },
  {
   "address": 32360,
   "type": "line",
   "text": "Mountain strip 3 (row 13), char $CD."
  },
  {
   "address": 32368,
   "type": "line",
   "text": "Mountain strip 3 (row 13), char $CE, its right end."
  },
  {
   "address": 32376,
   "type": "line",
   "text": "Mountain strip 4 (row 14), char $CF ($CF-$D5)."
  },
  {
   "address": 32384,
   "type": "line",
   "text": "Mountain strip 4 (row 14), char $D0."
  },
  {
   "address": 32392,
   "type": "line",
   "text": "Mountain strip 4 (row 14), char $D1."
  },
  {
   "address": 32400,
   "type": "line",
   "text": "Mountain strip 4 (row 14), char $D2."
  },
  {
   "address": 32408,
   "type": "line",
   "text": "Mountain strip 4 (row 14), char $D3."
  },
  {
   "address": 32416,
   "type": "line",
   "text": "Mountain strip 4 (row 14), char $D4."
  },
  {
   "address": 32424,
   "type": "line",
   "text": "Mountain strip 4 (row 14), char $D5, its right end."
  },
  {
   "address": 32432,
   "type": "line",
   "text": "Mountain strip 5 (row 15), char $D6 ($D6-$DC)."
  },
  {
   "address": 32440,
   "type": "line",
   "text": "Mountain strip 5 (row 15), char $D7."
  },
  {
   "address": 32448,
   "type": "line",
   "text": "Mountain strip 5 (row 15), char $D8."
  },
  {
   "address": 32456,
   "type": "line",
   "text": "Mountain strip 5 (row 15), char $D9."
  },
  {
   "address": 32464,
   "type": "line",
   "text": "Mountain strip 5 (row 15), char $DA."
  },
  {
   "address": 32472,
   "type": "line",
   "text": "Mountain strip 5 (row 15), char $DB."
  },
  {
   "address": 32480,
   "type": "line",
   "text": "Mountain strip 5 (row 15), char $DC, its right end."
  },
  {
   "address": 32488,
   "type": "line",
   "text": "Near ground, char $DD: its top six pixel rows roll two pixels a frame (scroll_ground_mid), its bottom two four pixels (scroll_ground_near, from $7EEE)."
  },
  {
   "address": 32494,
   "type": "line",
   "text": "Near ground, char $DD's bottom two pixel rows, the start of scroll_ground_near's first strip ($DD-$DF)."
  },
  {
   "address": 32496,
   "type": "line",
   "text": "Near ground, char $DE (top six rows rolled with $DD and $DF)."
  },
  {
   "address": 32502,
   "type": "line",
   "text": "Near ground, char $DE's bottom two pixel rows."
  },
  {
   "address": 32504,
   "type": "line",
   "text": "Near ground, char $DF, the right end of the strip."
  },
  {
   "address": 32510,
   "type": "line",
   "text": "Near ground, char $DF's bottom two pixel rows."
  },
  {
   "address": 32512,
   "type": "line",
   "text": "Nearest ground, char $E0: its top four rows roll four pixels a frame, its bottom four six pixels (from $7F04)."
  },
  {
   "address": 32516,
   "type": "line",
   "text": "Char $E0's bottom four pixel rows, rolled six pixels a frame with $E1 and $E2."
  },
  {
   "address": 32520,
   "type": "line",
   "text": "Nearest ground, char $E1."
  },
  {
   "address": 32524,
   "type": "line",
   "text": "Char $E1's bottom four pixel rows."
  },
  {
   "address": 32528,
   "type": "line",
   "text": "Nearest ground, char $E2, the right end."
  },
  {
   "address": 32532,
   "type": "line",
   "text": "Char $E2's bottom four pixel rows."
  },
  {
   "address": 32536,
   "type": "line",
   "text": "Bottom strip, char $E3 ($E3-$E5, top five pixel rows rolled six pixels a frame)."
  },
  {
   "address": 32544,
   "type": "line",
   "text": "Bottom strip, char $E4."
  },
  {
   "address": 32552,
   "type": "line",
   "text": "Bottom strip, char $E5, its right end."
  },
  {
   "address": 32560,
   "type": "line",
   "text": "Chars $E6-$FF: $E6 (a line on its top pixel row, put at row 14 by phase1_loop), $E7-$F3 and $F5-$FE empty ($E7 fills the Apex screen, $FD the sky rows), $F4 a small shape nothing in the intro places, and $FF solid (all set bits: the black cells around the text)."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "JMP $8099, the intro's main entry ($538E jumps here)."
  },
  {
   "address": 32771,
   "type": "line",
   "text": "JMP $8006 in the file (an RTS); $5364-$5369 patch the target to $0879, the music driver's per-frame update, which the raster handlers call through JSR $8003."
  },
  {
   "address": 32772,
   "type": "line",
   "text": "Low byte of music_hook's target, patched to $79 at $5364."
  },
  {
   "address": 32773,
   "type": "line",
   "text": "High byte of music_hook's target, patched to $08 at $5369."
  },
  {
   "address": 32774,
   "type": "line",
   "text": "RTS: music_hook's target in the file, before the patch."
  },
  {
   "address": 32775,
   "type": "line",
   "text": "JMP $FFFF in the file; patched to $53C5 (leave_intro) at $536E-$5375. The roll-call loop jumps here when fire is pressed."
  },
  {
   "address": 32776,
   "type": "line",
   "text": "Low byte of exit_hook's target, patched to $C5."
  },
  {
   "address": 32777,
   "type": "line",
   "text": "High byte of exit_hook's target, patched to $53."
  },
  {
   "address": 32778,
   "type": "line",
   "text": "JMP $FFFF in the file; patched to $5391 (rollcall_intro) at $5378-$537F. The Mayhem TV and Apex loop jumps here when its last fade ends."
  },
  {
   "address": 32779,
   "type": "line",
   "text": "Low byte of phase2_hook's target, patched to $91."
  },
  {
   "address": 32780,
   "type": "line",
   "text": "High byte of phase2_hook's target, patched to $53."
  },
  {
   "address": 32781,
   "type": "line",
   "text": "Roll call: running index into the 22-entry sprite animation table ($97C2/$97D8/$97EE); each page takes two or three entries ($863B), so it walks through the table once over the ten pages. 0 in the file."
  },
  {
   "address": 32782,
   "type": "line",
   "text": "Roll call: frames the grey scene with its names stays up, $FF from $8112, counted down by $8A6C once the dinosaur has arrived; at 0 the credits page follows."
  },
  {
   "address": 32783,
   "type": "line",
   "text": "Roll call: frames before the dinosaur starts walking in, $96 (150) from $810D, counted down by $86F9 (and $8740 on Mayhem's page)."
  },
  {
   "address": 32784,
   "type": "line",
   "text": "Roll call: column of the next small-font character to slide in from the left, $27 down ($8B5C)."
  },
  {
   "address": 32785,
   "type": "line",
   "text": "Roll call: page number 0-9, one dinosaur and one credits page each (9 is Mayhem and \"press fire to continue\"); incremented when each credits page is drawn ($8222-$8228), so 10 after the last."
  },
  {
   "address": 32786,
   "type": "line",
   "text": "Roll call: 1 while the dinosaur walks in; cleared by dino_arrived ($8064), which lets the name and the Latin name scroll in ($82AC)."
  },
  {
   "address": 32787,
   "type": "line",
   "text": "Roll call: 1 while the dinosaur's sprite frames animate ($86A3); cleared when it arrives."
  },
  {
   "address": 32788,
   "type": "line",
   "text": "Roll call: 1 while the landscape scrolls ($84EC clouds, $852A mountains, $85C6 and $85F5 ground); cleared when the dinosaur arrives."
  },
  {
   "address": 32789,
   "type": "line",
   "text": "Roll call: 1 while the dinosaur's sprites move right ($86F9) or Mayhem runs in ($8740)."
  },
  {
   "address": 32791,
   "type": "line",
   "text": "Roll call: steps left for sprite 4 to walk in, $95 (149) from $80FD; at 1 the walk ends (dino_arrived)."
  },
  {
   "address": 32792,
   "type": "line",
   "text": "Roll call: steps left for sprite 5's walk-in."
  },
  {
   "address": 32793,
   "type": "line",
   "text": "Roll call: steps left for sprite 6's walk-in (three-sprite dinosaurs)."
  },
  {
   "address": 32794,
   "type": "line",
   "text": "Roll call: request for the next dinosaur page, set by $887B when a credits page has faded out; the main loop runs dino_page_setup and clears it."
  },
  {
   "address": 32795,
   "type": "line",
   "text": "Roll call: 1 on Mayhem's page (set by $8AA0 when page 9 starts), which switches to his run-in, skid and dust ($8740-$87E6) and to his sprite colour fades ($9912)."
  },
  {
   "address": 32796,
   "type": "line",
   "text": "Mayhem's page: 1 while sprites 4 and 5 run right 2 pixels a frame ($8740), until sprite 4 reaches X = $F8."
  },
  {
   "address": 32797,
   "type": "line",
   "text": "Mayhem's page: set when he reaches X = $F8; $877D then shows the standing frames $A9/$AA and starts the skid."
  },
  {
   "address": 32798,
   "type": "line",
   "text": "Mayhem's page: 1 while he slides to a halt ($87A3). Each frame of the slide $87B3-$87BA moves sprites 4 and 5 left by the step from $98AC plus one, because the subtraction runs with the carry clear (CLC before SBC)."
  },
  {
   "address": 32799,
   "type": "line",
   "text": "Mayhem's page: set when he stops, so his running frames are no longer animated ($82EB)."
  },
  {
   "address": 32800,
   "type": "line",
   "text": "1 in the file: lets $8A93 switch to Mayhem's sequence once, when page 9 is reached; cleared there."
  },
  {
   "address": 32801,
   "type": "line",
   "text": "Mayhem's page: index into the skid table $98AC, from 24 ($98AA) down; dino_arrived runs when it goes below 0."
  },
  {
   "address": 32802,
   "type": "line",
   "text": "Mayhem's page: index into the dust-cloud frames $98C7 for sprite 6, from 11 ($98C5) down to 1."
  },
  {
   "address": 32803,
   "type": "line",
   "text": "Roll call: step of the landscape colour fade to grey, from 8 ($9511) down, one step every other frame ($8AC2)."
  },
  {
   "address": 32804,
   "type": "line",
   "text": "Roll call: step of the sprites' multicolour fade to grey, from 8 ($98E4) down ($8ADE)."
  },
  {
   "address": 32806,
   "type": "line",
   "text": "Roll call: non-zero once the dinosaur has arrived (8 from $98E4, $808B), which adds the colour-bar handlers for the name and the Latin name to the raster chain ($82BF, $8308)."
  },
  {
   "address": 32807,
   "type": "line",
   "text": "Roll call: 1 while a credits page is up, which switches the raster chain to the three credit lines ($82BA); set by $8A84, cleared by $8A62 for the next dinosaur."
  },
  {
   "address": 32808,
   "type": "line",
   "text": "Roll call: request to draw the credits page (credits_page_draw), set by $8A84 and cleared by the main loop."
  },
  {
   "address": 32809,
   "type": "line",
   "text": "Credits page: step of the fade-in, 8 ($9619) down to 0, every other frame ($87FD)."
  },
  {
   "address": 32810,
   "type": "line",
   "text": "Credits page: step of the fade-out, 8 ($961A) down ($8843)."
  },
  {
   "address": 32811,
   "type": "line",
   "text": "Credits page: frames (counted every other frame) before the fade-in starts, 30 ($961B)."
  },
  {
   "address": 32812,
   "type": "line",
   "text": "Credits page: time the page is held at full brightness, 140 ($961C) counted every other frame (about 5.6 seconds on a PAL machine); on page 10 (the \"press fire\" page) the fade-out is never started."
  },
  {
   "address": 32813,
   "type": "line",
   "text": "Credits page: wait after the fade-out before the next dinosaur, 40 ($961D) counted every other frame."
  },
  {
   "address": 32814,
   "type": "line",
   "text": "Roll call: lets show_timer count, set when the dinosaur arrives."
  },
  {
   "address": 32815,
   "type": "line",
   "text": "Roll call: current frame of sprite 4's animation (index into its frame list, counted down and wrapped)."
  },
  {
   "address": 32816,
   "type": "line",
   "text": "Current frame of sprite 5's animation."
  },
  {
   "address": 32817,
   "type": "line",
   "text": "Current frame of sprite 6's animation."
  },
  {
   "address": 32818,
   "type": "line",
   "text": "Length - 1 of sprite 4's frame list, the value its frame index wraps to."
  },
  {
   "address": 32819,
   "type": "line",
   "text": "Length - 1 of sprite 5's frame list."
  },
  {
   "address": 32820,
   "type": "line",
   "text": "Length - 1 of sprite 6's frame list."
  },
  {
   "address": 32821,
   "type": "line",
   "text": "Number of animated sprites on the page minus one (1 or 2, from $9804)."
  },
  {
   "address": 32822,
   "type": "line",
   "text": "Mayhem's skid: the step from $98AC this frame."
  },
  {
   "address": 32823,
   "type": "line",
   "text": "Loop counter over the animated sprite slots ($863B, $86A3)."
  },
  {
   "address": 32824,
   "type": "line",
   "text": "Loop counter over the walking sprites ($86F9)."
  },
  {
   "address": 32825,
   "type": "line",
   "text": "Column of the next big-font character to scroll in from the right ($8B2E)."
  },
  {
   "address": 32826,
   "type": "line",
   "text": "Dummy store target of the colour bars: $84C3 points the bars' second store here (instead of $D020) for every bar set, as $9559 is all zero."
  },
  {
   "address": 32827,
   "type": "line",
   "text": "Roll call: set to 1 by the bottom raster handler ($8288) each frame; the main loop waits for it and clears it."
  },
  {
   "address": 32828,
   "type": "line",
   "text": "Toggled every frame by both main loops; work is split between odd and even frames by it."
  },
  {
   "address": 32829,
   "type": "line",
   "text": "Roll call: toggled every second frame; the credits timeline runs when it is 0."
  },
  {
   "address": 32830,
   "type": "line",
   "text": "Runs the 11-NOP tail of the NOP slide at $8A56 (a short delay that lines the bars up with the raster) and then the colour bars ($8045)."
  },
  {
   "address": 32837,
   "type": "line",
   "text": "Raster bars on the background: for each line Y = 0 up to the count in $8060, writes the colour table's byte ($804C/$804D) to $D021 and to the second target ($8052/$8053, always $803A here), with a short delay loop on every line except each eighth (the VIC's bad lines). The fonts are drawn in background colour, so the bars colour the letters."
  },
  {
   "address": 32844,
   "type": "line",
   "text": "Low byte of the colour table the bars read (LDA $FFFF,Y operand), set by $84C3 from $9535."
  },
  {
   "address": 32845,
   "type": "line",
   "text": "High byte of the bars' colour table, set from $9541."
  },
  {
   "address": 32850,
   "type": "line",
   "text": "Low byte of the bars' second store target, set by $84C3 ($3A, or $20 for the border)."
  },
  {
   "address": 32851,
   "type": "line",
   "text": "High byte of the bars' second store target ($80, or $D0 for the border)."
  },
  {
   "address": 32864,
   "type": "line",
   "text": "Number of lines the bars draw (operand of CPY), set by $84C3 from $954D."
  },
  {
   "address": 32868,
   "type": "line",
   "text": "Runs when the dinosaur's walk-in ends ($873C) or Mayhem's skid ends ($87C6), once (it acts only while text_wait $8012 is set). Stops the scrolling, walking and leg animation, clears the dust frame, turns rows 14, 15, 17 and 18 white ($8A2A), starts the landscape fade to grey ($8023 = 8) and the sprites' fade ($8024 = 8), puts the title bars in the raster chain ($8026), starts the show timer ($802E) and lets the name and Latin name scroll in ($8012 = 0)."
  },
  {
   "address": 32921,
   "type": "line",
   "text": "Mayhem TV and Apex part, entered through $8000. Sets $01 = $35, the NMI vector's low byte to $C1 (purpose unknown), selects VIC bank 1 ($4000-$7FFF) through CIA 2, screen $4400 and character set $7800 ($D018 = $1F), sets up CIA 1's ports (port A output, $7F; port B input), blacks border and background, and goes to $8B7D."
  },
  {
   "address": 32982,
   "type": "line",
   "text": "Roll call's first page, entered from rollcall_intro. Turns multicolour text on ($8AB0), draws page 0 ($80EC), clears next_page and turns extended colour off again (the screen appears), then enters the roll-call loop at $8231."
  },
  {
   "address": 33004,
   "type": "line",
   "text": "Draws a dinosaur page for page $8011. Clears the roll-call variables ($8A62); sets the scroll, walk, animation and text-wait flags, the walk-in counters ($95), the text columns, the walk delay (150) and the show timer ($FF); clears the screen to char $FF and colour RAM to black ($840B); builds the landscape window, rows 7-18, columns 6-33, from the row tables at $75B0-$76E3 with its colour RAM: 1 (hires white) for the cloud rows 7 and 9, 8 (multicolour, black) for rows 11-13, the page's value from $94F5 for rows 14-18; sets the page's colours ($89A9), sprite animation ($863B) and sprite set ($89CD); fills the text buffers $7734-$77AB with $FF, puts end markers in them, and renders the page's big-font name into $775C/$7784 ($88D8) and its Latin name into $7734 ($888F), ready to scroll in."
  },
  {
   "address": 33054,
   "type": "side",
   "text": "Y = 11: an index past the ten colour records ($94B9 has ten entries), so this call reads a pointer made of $94C4 and $94CE ($0394) and sets colours from the music driver's code; $819D-$81A0 overwrite all four values at once with the page's own record"
  },
  {
   "address": 33244,
   "type": "line",
   "text": "Draws a credits page for page $8011: turns the sprites off, blacks both background zones ($82DF, $82FE), clears the text and landscape areas to char $FF ($8433) and their colour to black ($846D), resets the three bar sets to dark ($8881), waits until the background reads black (the raster is in a black zone), then prints the upper small-font line ($94A4) at $4568, the big-font name ($9082) at $45B8 and the lower small-font line ($94AE) at $4630, and moves to the next page."
  },
  {
   "address": 33329,
   "type": "line",
   "text": "Roll call's main loop. Restores the KERNAL exit of the raster interrupt ($84B8), starts the raster chain at $8288 ($01 = $36; raster_install sets the first interrupt at line $F9) and then once a frame: waits for frame_flag; on next_page draws the next dinosaur page; counts the show timer ($8A6C); on draw_credits draws the credits page; checks for Mayhem's page ($8A93); toggles the frame parities; and when fire is pressed on joystick port 2 ($DC00 bit 4 low) leaves through exit_hook ($8007)."
  },
  {
   "address": 33416,
   "type": "line",
   "text": "Raster handler at the bottom of the picture (line $CA, $DA or $DF; line $F9 the first time, from raster_install). Blacks the background, sets frame_flag, scrolls the mountains ($852A), steps the landscape and sprite colour fades ($8AC2, $8ADE), on Mayhem's page runs his run-in, stop, skid and dust ($8740-$87CA), once the dinosaur has arrived scrolls the name and Latin name in ($8B2E, $8B5C), plays the music ($8003); returns the next link: the credits chain at line 0 ($833E), the title bars at line $51 ($832F, bar set 0), or the sky at line $6A ($82DE)."
  },
  {
   "address": 33502,
   "type": "line",
   "text": "Raster handler at line $6A, the top of the landscape window: sets the sky colour (the LDA's operand at $82DF, per page), moves the dinosaur in ($86F9) unless it is Mayhem's page, animates its frames ($86A3) unless Mayhem has stopped, scrolls part of the ground ($85F5); next link line $A2 ($82FD)."
  },
  {
   "address": 33503,
   "type": "line",
   "text": "Operand of LDA #: the sky colour for $D021 in the landscape window's top, written by $89C9 from the page's colour record and by the grey fade; 0 on a credits page."
  },
  {
   "address": 33533,
   "type": "line",
   "text": "Raster handler at line $A2: sets the lower zone's background colour (operand at $82FE), scrolls the nearest ground strips ($85C6) and the clouds ($84EC); next link the Latin name's bars at line $D1 ($8320, bar set 1) once the title bars are on, else the bottom handler at line $CA."
  },
  {
   "address": 33534,
   "type": "line",
   "text": "Operand of LDA #: the background colour from line $A2 down, written by $89C3 from the page's colour record and by the grey fade; 0 on a credits page."
  },
  {
   "address": 33568,
   "type": "line",
   "text": "Raster handler at line $D1: draws the colour bars behind the Latin name (row 20), then black; next link line $DF ($8288)."
  },
  {
   "address": 33583,
   "type": "line",
   "text": "Raster handler at line $51: draws the colour bars behind the big-font name (rows 4-5, bar set 0, rainbow), then black; next link line $6A ($82DE)."
  },
  {
   "address": 33598,
   "type": "line",
   "text": "Credits chain, line 0: selects the bar set for the upper small-font line (operand at $833F); next link line $79 ($834A)."
  },
  {
   "address": 33599,
   "type": "line",
   "text": "Operand of LDX #: the bar set of the credits page's two small-font lines, 11 (black) to 7 (full), written by the fades from $9607/$9610 and by $8881."
  },
  {
   "address": 33610,
   "type": "line",
   "text": "Credits chain, line $79: bars behind the upper small-font line, then black; selects the big name's bar set (operand at $8353); next link line $89."
  },
  {
   "address": 33619,
   "type": "line",
   "text": "Operand of LDX #: the bar set behind the credits page's big-font name, 6 (black) to 2 (full), written by the fades from $95F5/$95FE and by $8881."
  },
  {
   "address": 33630,
   "type": "line",
   "text": "Credits chain, line $89: bars behind the big-font name, black, then selects the lower line's bar set (operand at $8367); next link line $A1."
  },
  {
   "address": 33639,
   "type": "line",
   "text": "Operand of LDX #: the bar set of the credits page's lower small-font line, written together with $833F."
  },
  {
   "address": 33650,
   "type": "line",
   "text": "Credits chain, line $A1: bars behind the lower small-font line, black, then runs the credits timeline: wait ($87E7), fade in ($87FD), hold ($8826), fade out ($8843), wait and ask for the next page ($886C); next link line $DA ($8288)."
  },
  {
   "address": 33680,
   "type": "line",
   "text": "Starts a raster-interrupt chain: A = value for $01, X/Y = the first handler (kept in the JSR operand $83FD/$83FE). Turns off the CIA interrupts and acknowledges them; with carry set on entry uses $83E9 as the interrupt entry, with carry clear $83EF (both callers clear it); writes the entry to both $0314/$0315 (KERNAL vector) and $FFFE/$FFFF (the RAM vector used when the KERNAL is switched out); sets the exit to $EA7E; enables the raster interrupt at line $F9 and stops CIA 1's timer A, then CLI."
  },
  {
   "address": 33716,
   "type": "side",
   "text": "X/Y = the interrupt entry chosen by the carry"
  },
  {
   "address": 33729,
   "type": "line",
   "text": "Low byte of the value $83C0 writes into the exit jump's operand ($8409), $7E; $84A7 would change it to $B2 and $84B8 sets it back."
  },
  {
   "address": 33734,
   "type": "line",
   "text": "The value $83C5 writes into the exit jump's high byte ($840A), $EA; $84A7 would change it to $84."
  },
  {
   "address": 33769,
   "type": "line",
   "text": "Interrupt entry for the hardware vector $FFFE (KERNAL switched out): clears carry and pushes A, X and Y as the KERNAL would, then continues at $83EF. Chosen by raster_install when called with carry set, which no caller does."
  },
  {
   "address": 33775,
   "type": "line",
   "text": "Interrupt entry (through $0314): acknowledges a raster interrupt, calls the current handler through the patched JSR ($83FD/$83FE), and takes the handler's answer as the next link: A = raster line ($D012), X/Y = the next handler. Leaves through the patched JMP at $8408 ($EA7E, the KERNAL's register restore and RTI)."
  },
  {
   "address": 33789,
   "type": "line",
   "text": "Low byte of the current raster handler (operand of the JSR at $83FC), set by raster_install and after each handler from X."
  },
  {
   "address": 33790,
   "type": "line",
   "text": "High byte of the current raster handler, from Y."
  },
  {
   "address": 33801,
   "type": "line",
   "text": "Low byte of the interrupt's exit jump, $7E ($EA7E), or $B2 after $84A7."
  },
  {
   "address": 33802,
   "type": "line",
   "text": "High byte of the interrupt's exit jump, $EA, or $84 after $84A7."
  },
  {
   "address": 33803,
   "type": "line",
   "text": "Fills the screen $4400-$47E8 with the character in X and colour RAM $D800-$DBE8 with the colour in A (both held as operands, $8422 and $8414), in four interleaved 251-byte runs. $8B7D uses char $E7 and black, $80EC char $FF and black."
  },
  {
   "address": 33812,
   "type": "line",
   "text": "Operand of the LDA # in fill_screen: the colour stored in colour RAM, written from A at $840E."
  },
  {
   "address": 33826,
   "type": "line",
   "text": "Operand of the LDA # in fill_screen: the character stored on the screen, written from X at $840B."
  },
  {
   "address": 33843,
   "type": "line",
   "text": "Fills with char $FF the title rows 4 and 5 and the Latin row 20 (40 columns each) and the landscape window, rows 7-18, columns 6-33."
  },
  {
   "address": 33901,
   "type": "line",
   "text": "Sets colour RAM to 0 (black) over the same areas as clear_text_areas."
  },
  {
   "address": 33959,
   "type": "line",
   "text": "Unreached: nothing calls it. Would point the interrupt's exit at $84B2 (pull Y, X, A and RTI) instead of the KERNAL's $EA7E, as needed with the KERNAL switched out."
  },
  {
   "address": 33970,
   "type": "line",
   "text": "Unreached exit (see $84A7): pulls Y, X and A and returns from the interrupt."
  },
  {
   "address": 33976,
   "type": "line",
   "text": "Points the interrupt's exit at $EA7E, the KERNAL's restore and RTI. Run before each raster chain is started."
  },
  {
   "address": 33987,
   "type": "line",
   "text": "X = bar set 0-11: points the colour bars at its colour table ($9535/$9541 into $804C/$804D), sets its line count ($954D into $8060) and chooses the second store: $D020 (border too) if $9559 is non-zero, else the dummy $803A. All twelve sets use the dummy."
  },
  {
   "address": 34021,
   "type": "side",
   "text": "A/Y = high/low byte of the bars' second store target"
  },
  {
   "address": 34028,
   "type": "line",
   "text": "While the landscape scrolls, every other frame: rolls the eight pixel rows of the 14-character strip $7D60-$7DCF (characters $AC-$B9, the clouds of rows 7 and 9) one pixel left, the bit leaving the left edge coming back at the right, so the cloud row repeats every 14 characters and drifts half a pixel a frame."
  },
  {
   "address": 34090,
   "type": "line",
   "text": "While the landscape scrolls, on the other frames: rolls two pixels left the 7-character strips of the mountains, $7DD0-$7E07, $7E08-$7E3F, $7E40-$7E77, $7E78-$7EAF and $7EB0-$7EE7 (characters $BA-$DC, rows 11-15): one pixel a frame on average, twice the clouds' speed."
  },
  {
   "address": 34246,
   "type": "line",
   "text": "While the landscape scrolls, every frame: rolls four pixels left the bottom two pixel rows of the 3-character ground strip at $7EEE ($DD-$DF, row 16) and the top four rows of the strip at $7F00 ($E0-$E2, row 17)."
  },
  {
   "address": 34293,
   "type": "line",
   "text": "While the landscape scrolls, every frame: rolls two pixels left the top six rows of the ground strip at $7EE8 ($DD-$DF, row 16), and six pixels left the lower four rows of $7F04 ($E0-$E2) and the top five rows of $7F18 ($E3-$E5, row 18): with $85C6 the ground moves faster the nearer the bottom of the window it is."
  },
  {
   "address": 34363,
   "type": "line",
   "text": "Y = page. Takes the page's number of animated sprites from $9804 and, for each of sprites 4, 5 and (on three-sprite pages) 6, the next entry of the animation table at anim_index: its frame list's address ($97C2/$97D8) into the LDA operand at $86B6, $86D3 or $86EA, and its length - 1 ($97EE) into the slot's frame index and wrap value."
  },
  {
   "address": 34467,
   "type": "line",
   "text": "While the legs animate: writes each animated sprite's next frame from its frame list into its pointer ($47FC-$47FE), stepping its index down and wrapping. On a non-Mayhem page only on even frames; on Mayhem's page every frame."
  },
  {
   "address": 34486,
   "type": "line",
   "text": "Low byte of sprite 4's frame-list address (operand of LDA $FFFF,Y), set by anim_setup."
  },
  {
   "address": 34487,
   "type": "line",
   "text": "High byte of sprite 4's frame-list address."
  },
  {
   "address": 34515,
   "type": "line",
   "text": "Low byte of sprite 5's frame-list address."
  },
  {
   "address": 34516,
   "type": "line",
   "text": "High byte of sprite 5's frame-list address."
  },
  {
   "address": 34538,
   "type": "line",
   "text": "Low byte of sprite 6's frame-list address."
  },
  {
   "address": 34539,
   "type": "line",
   "text": "High byte of sprite 6's frame-list address."
  },
  {
   "address": 34553,
   "type": "line",
   "text": "After the walk delay ($800F): moves sprites 4, 5 and 6 (as many as the page animates) one pixel right a frame ($D008, $D00A, $D00C) and counts each one's steps; when a counter runs out the dinosaur has arrived ($8064)."
  },
  {
   "address": 34624,
   "type": "line",
   "text": "Mayhem's page: after the walk delay, moves sprites 4 and 5 right two pixels a frame until sprite 4's X is $F8, then sets mayhem_stop and legs_frozen."
  },
  {
   "address": 34685,
   "type": "line",
   "text": "Mayhem's page, once: shows the standing frames $A9 and $AA in sprites 4 and 5, starts the skid (24 steps from $98AA) and the dust cloud (11 frames from $98C5)."
  },
  {
   "address": 34723,
   "type": "line",
   "text": "Mayhem's page: moves sprites 4 and 5 left each frame by the next value of $98AC plus one (2 pixels at first, rising to 4; 70 pixels over 25 steps); after the last step he has arrived ($8064)."
  },
  {
   "address": 34762,
   "type": "line",
   "text": "Mayhem's page, on even frames: shows the next dust-cloud frame ($98C7-$98D1) in sprite 6, placed $25 pixels left of sprite 4."
  },
  {
   "address": 34791,
   "type": "line",
   "text": "Credits timeline, on half the frames (half_parity 0): counts fade_in_wait down; at 0 starts the fade-in (8 steps, $9619)."
  },
  {
   "address": 34813,
   "type": "line",
   "text": "Credits timeline: each step sets the bar sets of the big name ($8353, from $95F5) and of the two small lines ($8367 and $833F, from $9607); after the last starts the hold (140, $961C)."
  },
  {
   "address": 34854,
   "type": "line",
   "text": "Credits timeline: counts the hold down; at 0 starts the fade-out (8 steps, $961A), except on page 10, the \"press fire to continue\" page, which stays up."
  },
  {
   "address": 34883,
   "type": "line",
   "text": "Credits timeline: steps the bar sets back to black from $95FE and $9610; after the last starts the wait before the next page (40, $961D)."
  },
  {
   "address": 34924,
   "type": "line",
   "text": "Credits timeline: counts the last wait down; at 0 asks for the next dinosaur page (next_page)."
  },
  {
   "address": 34945,
   "type": "line",
   "text": "Sets the credits page's bar sets to the black ones: 6 for the big name ($8353), 11 for the small lines ($8367, $833F)."
  },
  {
   "address": 34959,
   "type": "line",
   "text": "Prints a small-font string to the screen or a buffer: A/X = destination (high/low, kept in the STA operand $88C8/$88C9), Y = string number, looked up in $908E/$90AC. Strings are screen codes ending in $FF; a space leaves the cell as it is, \"1\" and \"2\" print the brackets ($AA, $AB), every other code c prints character c + $8F (letters a-z are characters $90-$A9)."
  },
  {
   "address": 34980,
   "type": "line",
   "text": "Low byte of the string address (operand of LDA $FFFF,Y), from $908E."
  },
  {
   "address": 34981,
   "type": "line",
   "text": "High byte of the string address, from $90AC."
  },
  {
   "address": 35016,
   "type": "line",
   "text": "Low byte of the destination (operand of STA $FFFF,Y), from X."
  },
  {
   "address": 35017,
   "type": "line",
   "text": "High byte of the destination, from A."
  },
  {
   "address": 35022,
   "type": "line",
   "text": "The five punctuation marks the big font has, as screen codes: \"!\", \".\", \",\", \"?\", \":\"; a match at index i draws glyph $24 + i."
  },
  {
   "address": 35027,
   "type": "line",
   "text": "Width flag for each punctuation mark: 0 = one column, non-zero = two (\"?\" only)."
  },
  {
   "address": 35032,
   "type": "line",
   "text": "Prints a big-font string, two rows high: A/X = destination (high/low, kept in $89A3/$89A4), Y = string number from $8EDE/$8EF2. Each character is a glyph of four characters from the map at $7500 (top left, top right, bottom left, bottom right) written to the destination and 40 bytes below; a space advances one column; letters advance two columns except i, j, l (one column), and m and w, which get a third column (glyphs $29 and $2A); punctuation from $88CE; digits would index past the map (code + $2A). Strings end in $FF."
  },
  {
   "address": 35064,
   "type": "line",
   "text": "Low byte of the big-font string address (operand of LDA $FFFF,Y), from $8EDE."
  },
  {
   "address": 35065,
   "type": "line",
   "text": "High byte of the big-font string address, from $8EF2."
  },
  {
   "address": 35198,
   "type": "side",
   "text": "advance the destination by the column step held in $8983"
  },
  {
   "address": 35203,
   "type": "line",
   "text": "Operand of the ADC # at $8982: how many columns the big-font character just drawn advances (1 or 2), written at $8907 and $8959."
  },
  {
   "address": 35228,
   "type": "line",
   "text": "Operand of the LDY # at $899B ($FF in the file): print_big saves its string index here at $88EC before Y is reused for the glyph stores, and reloads it at $899B."
  },
  {
   "address": 35234,
   "type": "line",
   "text": "Stores A at the big-font destination + Y (operand $89A3/$89A4) and advances Y."
  },
  {
   "address": 35235,
   "type": "line",
   "text": "Low byte of print_big's destination (operand of STA $FFFF,Y), advanced as characters are drawn."
  },
  {
   "address": 35236,
   "type": "line",
   "text": "High byte of print_big's destination."
  },
  {
   "address": 35239,
   "type": "line",
   "text": "print_big's state: $89A7 = 1 after an m (a third column follows, glyph $29), $FF after a w (glyph $2A), 0 otherwise; $89A8 is cleared with it and not read."
  },
  {
   "address": 35240,
   "type": "line",
   "text": "Cleared with $89A7 at the start of each big-font string ($88F4); nothing reads it."
  },
  {
   "address": 35241,
   "type": "line",
   "text": "Y = page: reads its four-byte colour record (pointer from $94B9/$94C3) and sets $D023, $D022 (the character multicolours) and the sky and ground background colours ($82FE, $82DF). The grey fade ($8AC2) enters at $89B3 with its own record in $7E/$7F."
  },
  {
   "address": 35251,
   "type": "side",
   "text": "entry of the fade: $7E/$7F = a four-byte colour record"
  },
  {
   "address": 35277,
   "type": "line",
   "text": "Y = page: reads its 40-byte sprite record (pointer from $961E/$9628) from the end: the eight sprite pointers to $47F8-$47FF, the 16 position bytes to $D000-$D00F, the eight colours to $D027-$D02E, then $D026, $D025, $D015, $D017, $D01D, $D01C, $D010 and $D01B."
  },
  {
   "address": 35370,
   "type": "line",
   "text": "When the dinosaur arrives: sets colour RAM of rows 14, 15, 17 and 18 (columns 6-33) to 9, multicolour with white as the character's own colour, replacing the page's yellow or cyan in the grey scene."
  },
  {
   "address": 35390,
   "type": "line",
   "text": "A slide of 35 NOPs ending in RTS at $8A61; the colour bars call it at $8A56, eleven NOPs from the end, as a fixed delay. The first 24 NOPs are never run."
  },
  {
   "address": 35414,
   "type": "line",
   "text": "Entry into the NOP slide used by the colour bars: eleven NOPs and the RTS at $8A61, a fixed delay before the first bar line."
  },
  {
   "address": 35426,
   "type": "line",
   "text": "Clears the roll-call variables $8021-$803D and falls into show_timer_step."
  },
  {
   "address": 35436,
   "type": "line",
   "text": "Once the show timer is on: counts it down (on Mayhem's page only on even frames); at 0 switches to the credits page (credits_mode and draw_credits) and starts its timeline with the 30-step wait ($961B)."
  },
  {
   "address": 35475,
   "type": "line",
   "text": "Once, when page 9 is reached: sets mayhem_page and mayhem_running and disarms itself ($8020)."
  },
  {
   "address": 35504,
   "type": "line",
   "text": "Turns on multicolour text mode ($D016 bit 4)."
  },
  {
   "address": 35513,
   "type": "line",
   "text": "Turns off multicolour text mode; nothing calls it."
  },
  {
   "address": 35521,
   "type": "line",
   "text": "RTS ending multicolour_off, also the exit grey_fade branches to ($8AC5, $8AD6) when it has nothing to do."
  },
  {
   "address": 35522,
   "type": "line",
   "text": "On odd frames while fade_step runs: takes the next four-byte colour record from $94FF/$9508 and applies it through $89B3 (sky, ground, $D022, $D023), records 8 down to 1, white first and ending with $9515 (light grey sky and ground, $D022 = $0C, $D023 = $0B); record 0 ($9512) is never applied."
  },
  {
   "address": 35550,
   "type": "line",
   "text": "On odd frames while sprite_fade_step runs: takes the next five-byte sprite colour record ($98D2/$98DB, or $9912/$991B on Mayhem's page) and sets the sprite multicolours $D025/$D026 and the colours of sprites 4, 5 and 6, with sprite 7 (the sun) white."
  },
  {
   "address": 35630,
   "type": "line",
   "text": "Once the dinosaur has arrived: scrolls title rows 4 and 5 one character left and puts the next column of the big-font name from the buffers $775C/$7784 at the right edge, until it meets the 0 end marker."
  },
  {
   "address": 35676,
   "type": "line",
   "text": "Once the dinosaur has arrived: scrolls row 20 one character right and puts the next character of the Latin name from the buffer $7734 (read from the end) at the left edge, until it meets the 0 marker at $7734."
  },
  {
   "address": 35708,
   "type": "line",
   "text": "Mayhem TV and Apex part: set to 1 by the raster handler $8C0A each frame; the loop at $8BBE waits for it and decrements it."
  },
  {
   "address": 35709,
   "type": "line",
   "text": "Mayhem TV and Apex part. Fills the screen with char $E7 in black ($840B), copies the two rows of \"COMPUTER \u00b7 PRODUCTIONS\" from $76E4 and $770C to rows 12 and 13, puts four single characters at rows 11 and 14, columns 0 and 20 ($8A, $8E, $8B, $E6; their purpose is unknown), turns extended colour off, and starts its raster chain at $8BD8 ($01 = $36; first interrupt at line $F9). Then waits for each frame and toggles frame_parity until $8BCF has been changed to 1 ($8DBB), when it jumps to the roll call through $800A."
  },
  {
   "address": 35791,
   "type": "line",
   "text": "Operand of the LDA # at $8BCE: 0 in the file, so the BEQ after it loops; $8DBB writes 1 when the Apex screen has faded out, and the loop then falls through to JMP $800A."
  },
  {
   "address": 35800,
   "type": "line",
   "text": "Mayhem TV and Apex raster handler at line $59 (line $F9 the first time, from raster_install): blacks border and background and loads sprite set 0 (the APEX letters) once the logo has gone, else set 2 (the Mayhem TV logo); next link line $83."
  },
  {
   "address": 35826,
   "type": "side",
   "text": "next link: line $83, handler $8BF9"
  },
  {
   "address": 35833,
   "type": "line",
   "text": "Raster handler at line $83: once the logo has gone loads sprite set 1 (the white bar that wipes across \"COMPUTER \u00b7 PRODUCTIONS\") for the lower half; next link line $B9."
  },
  {
   "address": 35850,
   "type": "line",
   "text": "Raster handler at line $B9: runs the APEX sequence (letters $8CF1, curtain $8C4D, curtain fade $8D6B, final fade $8D8F) or, before it, the Mayhem TV logo's fade ($8DBF); plays the music, sets tv_frame_flag; next link line $59."
  },
  {
   "address": 35873,
   "type": "side",
   "text": "music, frame flag and the next link"
  },
  {
   "address": 35888,
   "type": "line",
   "text": "Mayhem TV and Apex state: $8C30 APEX letters animating (1 in the file), $8C31 curtain moving, $8C32 logo gone (0 = Mayhem TV logo still up), $8C33-$8C36 delays before letters A, P, E and X start ($1E, $05, $05, $0D frames, counted on odd frames), $8C37 delay before the curtain moves (40), $8C38 delay before the logo fades in and between its fade-in and fade-out (100, counted on even frames), $8C39 delay before the final fade (150), $8C3A curtain steps left (14)."
  },
  {
   "address": 35889,
   "type": "line",
   "text": "APEX sequence: 1 while the wipe bar moves (curtain_move), set when the X has finished."
  },
  {
   "address": 35890,
   "type": "line",
   "text": "0 while the Mayhem TV logo is up; 1 once it has faded out, which switches the raster handlers to the APEX sequence."
  },
  {
   "address": 35891,
   "type": "line",
   "text": "Delay before the letter A starts zooming in, $1E (30) odd frames."
  },
  {
   "address": 35892,
   "type": "line",
   "text": "Delay before the letter P starts, 5 odd frames after A's."
  },
  {
   "address": 35893,
   "type": "line",
   "text": "Delay before the letter E starts, 5 more."
  },
  {
   "address": 35894,
   "type": "line",
   "text": "Delay before the letter X starts, $0D (13) more."
  },
  {
   "address": 35895,
   "type": "line",
   "text": "Delay before the wipe bar moves, 40 frames."
  },
  {
   "address": 35896,
   "type": "line",
   "text": "Delay before the Mayhem TV logo fades in and its hold at full white, 100 even frames each (reloaded at the $FF in $8EC3)."
  },
  {
   "address": 35897,
   "type": "line",
   "text": "Delay before APEX and its text fade out, 150 odd frames."
  },
  {
   "address": 35898,
   "type": "line",
   "text": "Steps of the wipe bar's movement left, 14."
  },
  {
   "address": 35899,
   "type": "line",
   "text": "Sprite enable masks for the curtain set, applied from the end as the bar moves ($8C91, Y = $8C3A before its decrement, 14 down to 2): $03, $03, $07, $07 ... $FF, one more sprite every two steps, so the bar's blocks appear one by one behind its moving edge; 13 masks are applied, and the first two bytes ($8C3B, $8C3C) are never read."
  },
  {
   "address": 35914,
   "type": "line",
   "text": "$D010 bits flipped when the bar's sprites 0 ($8C4A = $01) and 1 ($8C4C = $02) cross X = 255; $8C4B ($FF) is not read."
  },
  {
   "address": 35917,
   "type": "line",
   "text": "APEX sequence, after the letters: after a 40-frame delay moves the bar's sprites 0 and 1 right 24 pixels a frame (flipping their $D010 bits on overflow) and steps the enable mask from $8C3B; after 14 steps colours rows 11-14 white ($8C98), puts the bar behind the text ($8E2D = $FF) and starts its colour fade ($8EB6)."
  },
  {
   "address": 35992,
   "type": "line",
   "text": "Colours rows 11-14 of colour RAM white; entered at $8C9A with any colour in A (the final fade)."
  },
  {
   "address": 35994,
   "type": "line",
   "text": "Colours rows 11-14 of colour RAM (the \"COMPUTER \u00b7 PRODUCTIONS\" text and the single characters) with A."
  },
  {
   "address": 36012,
   "type": "line",
   "text": "Y = sprite set 0-2: copies its 36-byte record (pointer $8E03/$8E06 into $39/$3A) to the VIC from the end: pointers to $47F8-$47FF, positions to $D000-$D00F, colours to $D027-$D02E, then $D015, $D01D, $D010 and $D01B."
  },
  {
   "address": 36081,
   "type": "line",
   "text": "APEX sequence, on odd frames: for each of the four letters in turn, after its delay ($8C33-$8C36), steps its sprite pointer ($8E25-$8E28) back through its frame list ($8E79, $8E88, $8E97, $8EA6), from a dot growing to the full letter; when the X is complete stops and starts the curtain ($8C31)."
  },
  {
   "address": 36203,
   "type": "line",
   "text": "APEX sequence, on even frames: sets all eight curtain sprite colours to the next value of $8EB7 (white, then greys to black, read from the end); after the last starts the final fade ($8ED4 = 8)."
  },
  {
   "address": 36239,
   "type": "line",
   "text": "APEX sequence, after a delay of 150 odd frames, on odd frames: sets the text rows' colour and the four letters' colours ($8E0D-$8E10) to the next value of $8ED5 (white to black); after the last writes 1 to $8BCF, which ends the part."
  },
  {
   "address": 36287,
   "type": "line",
   "text": "Mayhem TV logo, on even frames: after the delay at $8C38 steps the colours of the logo's six sprites ($8E55-$8E5A) through $8EC3 from the end: grey to white, a 100-frame hold at the $FF, white to black; then hands over to the APEX sequence ($8C32, $8C30)."
  },
  {
   "address": 36355,
   "type": "line",
   "text": "Addresses of the three 36-byte sprite sets of the Mayhem TV and Apex part, low bytes then high bytes: set 0 $8E09 (APEX letters), set 1 $8E2D (wipe bar), set 2 $8E51 (Mayhem TV logo); read by tv_load_set ($8CAC)."
  },
  {
   "address": 36358,
   "type": "line",
   "text": "High bytes of the three Mayhem TV and Apex sprite-set addresses ($8E at $8E06-$8E08)."
  },
  {
   "address": 36361,
   "type": "line",
   "text": "Sprite set 0, the APEX letters (36 bytes, read by tv_load_set from the end): $D01B 0, $D010 0, $D01D 0, $D015 $0F (sprites 0-3); colours (8) white for sprites 0-3; positions (16) X $7C, $9C, $BC, $DC at Y $6C; pointers (8) $61 (blank) for sprites 0-3, stepped by apex_letters through the zoom frames to the letters A ($AB), P ($B3), E ($BB) and X ($C3)."
  },
  {
   "address": 36365,
   "type": "line",
   "text": "Colours of the APEX letters (sprites 0-3, $8E0D-$8E10), written by apex_fade_out as the letters fade to black."
  },
  {
   "address": 36389,
   "type": "line",
   "text": "Sprite 0's pointer in set 0: the letter A's current zoom frame, written by apex_letters from $8E7A-$8E87."
  },
  {
   "address": 36390,
   "type": "line",
   "text": "Sprite 1's pointer in set 0: the letter P's frame, from $8E89-$8E96."
  },
  {
   "address": 36391,
   "type": "line",
   "text": "Sprite 2's pointer in set 0: the letter E's frame, from $8E98-$8EA5."
  },
  {
   "address": 36392,
   "type": "line",
   "text": "Sprite 3's pointer in set 0: the letter X's frame, from $8EA7-$8EB4."
  },
  {
   "address": 36397,
   "type": "line",
   "text": "Sprite set 1, the white bar that wipes across under the APEX letters (36 bytes). This byte is its $D01B: 0 (in front of the text) until curtain_move sets $FF (behind it)."
  },
  {
   "address": 36398,
   "type": "line",
   "text": "Set 1's $D010 ($82: sprites 1 and 7 past X = 255), with bits flipped by curtain_move as sprites 0 and 1 move right."
  },
  {
   "address": 36399,
   "type": "line",
   "text": "Set 1's $D01D: $FC, sprites 2-7 double width."
  },
  {
   "address": 36400,
   "type": "line",
   "text": "Set 1's $D015, the enable mask: $03 to start, then $8C3B's masks as the bar moves."
  },
  {
   "address": 36401,
   "type": "line",
   "text": "Set 1's eight sprite colours ($8E31-$8E38), white; curtain_fade steps them to black."
  },
  {
   "address": 36409,
   "type": "line",
   "text": "Set 1's positions ($8E39-$8E48): sprite 0 (the round edge) at X 0, sprite 1 at $E8 with its $D010 bit set (off the right edge), sprites 2-7 from $18 to $108 in steps of $30, all at Y $91; curtain_move adds 24 a frame to the X of sprites 0 and 1. Pointers follow at $8E49: $CD (the round edge) and $60 (a solid block) for the other seven."
  },
  {
   "address": 36433,
   "type": "line",
   "text": "Sprite set 2, the Mayhem TV logo (36 bytes): $D01B 0, $D010 0, $D01D 0, $D015 $3F (sprites 0-5)."
  },
  {
   "address": 36437,
   "type": "line",
   "text": "Colour of logo sprite 0 ($8E55-$8E5A: sprites 0-5), all set together by tv_logo_fade."
  },
  {
   "address": 36438,
   "type": "line",
   "text": "Colour of logo sprite 1, set by tv_logo_fade."
  },
  {
   "address": 36439,
   "type": "line",
   "text": "Colour of logo sprite 2, set by tv_logo_fade."
  },
  {
   "address": 36440,
   "type": "line",
   "text": "Colour of logo sprite 3, set by tv_logo_fade."
  },
  {
   "address": 36441,
   "type": "line",
   "text": "Colour of logo sprite 4, set by tv_logo_fade."
  },
  {
   "address": 36442,
   "type": "line",
   "text": "Colour of logo sprite 5, set by tv_logo_fade. Then two unused colours, the positions ($8E5D: X $9A, $B2, $CA at Y $6C and $81) and the pointers $CE-$D3 at $8E6D."
  },
  {
   "address": 36469,
   "type": "line",
   "text": "Index into each APEX letter's frame list, $0E (14) to start, counted down by apex_letters."
  },
  {
   "address": 36470,
   "type": "line",
   "text": "Index into the letter P's frame list, from $0E."
  },
  {
   "address": 36471,
   "type": "line",
   "text": "Index into the letter E's frame list, from $0E."
  },
  {
   "address": 36472,
   "type": "line",
   "text": "Index into the letter X's frame list, from $0E."
  },
  {
   "address": 36473,
   "type": "line",
   "text": "Zoom frames of the letter A, read from the end: $CC, $CC, $CC, $CB, $CB (a dot), $B2 down to $AB (the A, growing), $FF at the start ends the list."
  },
  {
   "address": 36488,
   "type": "line",
   "text": "Zoom frames of the letter P, from the end: the dots $CC/$CB, then $BA down to $B3; $FF ends it."
  },
  {
   "address": 36503,
   "type": "line",
   "text": "Zoom frames of the letter E, from the end: dots, then $C2 down to $BB; $FF ends it."
  },
  {
   "address": 36518,
   "type": "line",
   "text": "Zoom frames of the letter X, from the end: dots, then $CA down to $C3; $FF ends it."
  },
  {
   "address": 36533,
   "type": "line",
   "text": "Length of the wipe bar's colour fade, $0A (10), copied to $8EB6 when the bar stops."
  },
  {
   "address": 36534,
   "type": "line",
   "text": "Step of the wipe bar's colour fade, 10 down to 0 (curtain_fade)."
  },
  {
   "address": 36535,
   "type": "line",
   "text": "Colours of the wipe bar's fade, read from the end (index 10 to 1): white five times, light grey, light grey, grey, dark grey, black; the first byte is not read."
  },
  {
   "address": 36546,
   "type": "line",
   "text": "Step of the Mayhem TV logo's fade, $10 (16) down to 0 (tv_logo_fade)."
  },
  {
   "address": 36547,
   "type": "line",
   "text": "Colours of the Mayhem TV logo, read from the end (index 16 to 1): black, dark grey, grey, light grey, white, then $FF (hold for 100 frames), light grey, grey, dark grey, black; the first byte is not read."
  },
  {
   "address": 36564,
   "type": "line",
   "text": "Step of the final fade of APEX and \"COMPUTER \u00b7 PRODUCTIONS\", 0 until curtain_fade sets 8."
  },
  {
   "address": 36565,
   "type": "line",
   "text": "Colours of the final fade, read from the end (index 8 to 1): white, light grey, light grey, grey, grey, dark grey, dark grey, black; the first byte is not read."
  },
  {
   "address": 36574,
   "type": "line",
   "text": "Addresses of the 20 big-font strings ($8F06-$9081), low bytes then high bytes: 0-9 the dinosaur names, 10-19 the credits names."
  },
  {
   "address": 36594,
   "type": "line",
   "text": "High bytes of the 20 big-font string addresses ($8EF2-$8F05)."
  },
  {
   "address": 36614,
   "type": "line",
   "text": "Big-font string 0: \"stegosaurus\" (5 leading spaces, $FF at the end), the name on dinosaur page 0; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36631,
   "type": "line",
   "text": "Big-font string 1: \"megasaurus\" (5 leading spaces, $FF at the end), the name on dinosaur page 1; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36647,
   "type": "line",
   "text": "Big-font string 2: \"ballodactyl\" (5 leading spaces, $FF at the end), the name on dinosaur page 2; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36664,
   "type": "line",
   "text": "Big-font string 3: \"burrowsaurus\" (5 leading spaces, $FF at the end), the name on dinosaur page 3; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36682,
   "type": "line",
   "text": "Big-font string 4: \"spikeysaurus\" (5 leading spaces, $FF at the end), the name on dinosaur page 4; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36700,
   "type": "line",
   "text": "Big-font string 5: \"flapodactyl\" (5 leading spaces, $FF at the end), the name on dinosaur page 5; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36717,
   "type": "line",
   "text": "Big-font string 6: \"dragosaurus\" (5 leading spaces, $FF at the end), the name on dinosaur page 6; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36734,
   "type": "line",
   "text": "Big-font string 7: \"diplodocus\" (5 leading spaces, $FF at the end), the name on dinosaur page 7; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36750,
   "type": "line",
   "text": "Big-font string 8: \"bobodactyl\" (5 leading spaces, $FF at the end), the name on dinosaur page 8; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36766,
   "type": "line",
   "text": "Big-font string 9: \"mayhem\" (5 leading spaces, $FF at the end), the name on dinosaur page 9; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36778,
   "type": "line",
   "text": "Big-font string 10: \"john rowlands\" (8 leading spaces, $FF at the end), the big-font name on credits page 0; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36800,
   "type": "line",
   "text": "Big-font string 11: \"steve rowlands\" (6 leading spaces, $FF at the end), the big-font name on credits page 1; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36821,
   "type": "line",
   "text": "Big-font string 12: \"andy roberts\" (8 leading spaces, $FF at the end), the big-font name on credits page 2; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36842,
   "type": "line",
   "text": "Big-font string 13: \"ollie  alderton\" (8 leading spaces, $FF at the end), the big-font name on credits page 3; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36866,
   "type": "line",
   "text": "Big-font string 14: \"commodore format\" (3 leading spaces, $FF at the end), the big-font name on credits page 4; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36886,
   "type": "line",
   "text": "Big-font string 15: \"tracy matheussen\" (4 leading spaces, $FF at the end), the big-font name on credits page 5; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36907,
   "type": "line",
   "text": "Big-font string 16: \"andy smith\" (10 leading spaces, $FF at the end), the big-font name on credits page 6; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36928,
   "type": "line",
   "text": "Big-font string 17: \"john twiddy\" (10 leading spaces, $FF at the end), the big-font name on credits page 7; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36950,
   "type": "line",
   "text": "Big-font string 18: \"mr and mrs rowlands\" (2 leading spaces, $FF at the end), the big-font name on credits page 8; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36972,
   "type": "line",
   "text": "Big-font string 19: \"fire\" (17 leading spaces, $FF at the end), the big-font name on credits page 9; screen codes, drawn by print_big through the glyph map at $7500."
  },
  {
   "address": 36994,
   "type": "line",
   "text": "For credits pages 0-9: the big-font string of the name ($0A-$13)."
  },
  {
   "address": 37004,
   "type": "line",
   "text": "$14, one entry past the ten credits names; nothing indexes it (page 10 is never drawn)."
  },
  {
   "address": 37005,
   "type": "line",
   "text": "$27 (39): where dino_page_setup puts the 0 end marker in the big-font buffer ($775C + 39), the column after the last one name_scroll copies."
  },
  {
   "address": 37006,
   "type": "line",
   "text": "Addresses of the 30 small-font strings ($90CA-$94A3), low bytes then high bytes: 0-9 the Latin names, 10-29 the credits lines."
  },
  {
   "address": 37036,
   "type": "line",
   "text": "High bytes of the 30 small-font string addresses ($90AC-$90C9)."
  },
  {
   "address": 37066,
   "type": "line",
   "text": "Small-font string 0: \"(spikius chargicus)\" (16 leading spaces, $FF at the end), the Latin name under stegosaurus (dinosaur page 0), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37102,
   "type": "line",
   "text": "Small-font string 1: \"(bigus bellius)\" (20 leading spaces, $FF at the end), the Latin name under megasaurus (dinosaur page 1), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37138,
   "type": "line",
   "text": "Small-font string 2: \"(balloonus floaticus)\" (14 leading spaces, $FF at the end), the Latin name under ballodactyl (dinosaur page 2), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37174,
   "type": "line",
   "text": "Small-font string 3: \"(digus bigus)\" (22 leading spaces, $FF at the end), the Latin name under burrowsaurus (dinosaur page 3), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37210,
   "type": "line",
   "text": "Small-font string 4: \"(lickus frequenticus)\" (14 leading spaces, $FF at the end), the Latin name under spikeysaurus (dinosaur page 4), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37246,
   "type": "line",
   "text": "Small-font string 5: \"(wingus flapicus)\" (18 leading spaces, $FF at the end), the Latin name under flapodactyl (dinosaur page 5), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37282,
   "type": "line",
   "text": "Small-font string 6: \"(dino giganticus)\" (18 leading spaces, $FF at the end), the Latin name under dragosaurus (dinosaur page 6), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37318,
   "type": "line",
   "text": "Small-font string 7: \"(neckus extendicus)\" (16 leading spaces, $FF at the end), the Latin name under diplodocus (dinosaur page 7), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37354,
   "type": "line",
   "text": "Small-font string 8: \"(bobalongicus)\" (21 leading spaces, $FF at the end), the Latin name under bobodactyl (dinosaur page 8), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37390,
   "type": "line",
   "text": "Small-font string 9: \"(speedicus maximus)\" (16 leading spaces, $FF at the end), the Latin name under mayhem (dinosaur page 9), slid in from the left on row 20. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37426,
   "type": "line",
   "text": "Small-font string 10: \"perfect programming by\" (9 leading spaces, $FF at the end), the upper small-font line of credits page 0. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37458,
   "type": "line",
   "text": "Small-font string 11: \"(drinkus  plenticus)\" (10 leading spaces, $FF at the end), the lower small-font line of credits page 0. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37489,
   "type": "line",
   "text": "Small-font string 12: \"gorgeous grafix and superb sounds by\" (2 leading spaces, $FF at the end), the upper small-font line of credits page 1. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37528,
   "type": "line",
   "text": "Small-font string 13: \"(tarticus maximus)\" (11 leading spaces, $FF at the end), the lower small-font line of credits page 1. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37558,
   "type": "line",
   "text": "Small-font string 14: \"additional programming and design by\" (2 leading spaces, $FF at the end), the upper small-font line of credits page 2. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37597,
   "type": "line",
   "text": "Small-font string 15: \"(intro codicus)\" (12 leading spaces, $FF at the end), the lower small-font line of credits page 2. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37625,
   "type": "line",
   "text": "Small-font string 16: \"artwork and package production\" (5 leading spaces, $FF at the end), the upper small-font line of credits page 3. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37661,
   "type": "line",
   "text": "Small-font string 17: \"(haircutticus spikius)\" (9 leading spaces, $FF at the end), the lower small-font line of credits page 3. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37693,
   "type": "line",
   "text": "Small-font string 18: \"many thanks to\" (13 leading spaces, $FF at the end), the upper small-font line of credits page 4. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37721,
   "type": "line",
   "text": "Small-font string 19: \"(commodorius formatticus)\" (8 leading spaces, $FF at the end), the lower small-font line of credits page 4. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37755,
   "type": "line",
   "text": "Small-font string 20: \"additional support from\" (9 leading spaces, $FF at the end), the upper small-font line of credits page 5. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37788,
   "type": "line",
   "text": "Small-font string 21: \"(bigus pursus)\" (13 leading spaces, $FF at the end), the lower small-font line of credits page 5. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37816,
   "type": "line",
   "text": "Small-font string 22: \"additional assistance\" (9 leading spaces, $FF at the end), the upper small-font line of credits page 6. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37847,
   "type": "line",
   "text": "Small-font string 23: \"(slamus dunkus)\" (12 leading spaces, $FF at the end), the lower small-font line of credits page 6. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37875,
   "type": "line",
   "text": "Small-font string 24: \"more additional assistance\" (7 leading spaces, $FF at the end), the upper small-font line of credits page 7. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37909,
   "type": "line",
   "text": "Small-font string 25: \"(cyber loadicus)\" (12 leading spaces, $FF at the end), the lower small-font line of credits page 7. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37938,
   "type": "line",
   "text": "Small-font string 26: \"this game is dedicated to\" (8 leading spaces, $FF at the end), the upper small-font line of credits page 8. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 37972,
   "type": "line",
   "text": "Small-font string 27: \"(gone to cyprus)\" (12 leading spaces, $FF at the end), the lower small-font line of credits page 8. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 38001,
   "type": "line",
   "text": "Small-font string 28: \"press\" (18 leading spaces, $FF at the end), the upper line of credits page 9. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 38025,
   "type": "line",
   "text": "Small-font string 29: \"to continue\" (15 leading spaces, $FF at the end), the lower line of credits page 9. Screen codes; the digits 1 and 2 stand for the brackets, printed as characters $AA and $AB by print_small."
  },
  {
   "address": 38052,
   "type": "line",
   "text": "For credits pages 0-9: the small-font string above the name (10, 12, ... 28)."
  },
  {
   "address": 38062,
   "type": "line",
   "text": "For credits pages 0-9: the small-font string below the name (11, 13, ... 29)."
  },
  {
   "address": 38072,
   "type": "line",
   "text": "0: where dino_page_setup puts the 0 end marker in the Latin-name buffer ($7734 + 0), where latin_scroll stops."
  },
  {
   "address": 38073,
   "type": "line",
   "text": "Addresses of the ten pages' colour records ($94CD-$94F4, four bytes apart), low bytes then high bytes; read by page_colours."
  },
  {
   "address": 38083,
   "type": "line",
   "text": "High bytes of the ten pages' colour-record addresses ($94C3-$94CC, all $94)."
  },
  {
   "address": 38093,
   "type": "line",
   "text": "Ten four-byte colour records, one per dinosaur page: sky colour ($82DF), ground-zone colour ($82FE), $D022, $D023. Pages 0, 5: cyan sky, light red and purple; 1, 6: light red sky, orange and brown; 2, 7: cyan, light blue and blue; 3, 8: light blue sky, orange and brown; 4, 9: cyan, green and dark grey. These are the colours a page opens with, before the fade to grey. First: Colour record of dinosaur page 0 (stegosaurus): sky cyan, lower zone cyan, $D022 light red, $D023 purple."
  },
  {
   "address": 38097,
   "type": "line",
   "text": "Colour record of dinosaur page 1 (megasaurus): sky light red, lower zone light red, $D022 orange, $D023 brown."
  },
  {
   "address": 38101,
   "type": "line",
   "text": "Colour record of dinosaur page 2 (ballodactyl): sky cyan, lower zone cyan, $D022 light blue, $D023 blue."
  },
  {
   "address": 38105,
   "type": "line",
   "text": "Colour record of dinosaur page 3 (burrowsaurus): sky light blue, lower zone light blue, $D022 orange, $D023 brown."
  },
  {
   "address": 38109,
   "type": "line",
   "text": "Colour record of dinosaur page 4 (spikeysaurus): sky cyan, lower zone cyan, $D022 green, $D023 dark grey."
  },
  {
   "address": 38113,
   "type": "line",
   "text": "Colour record of dinosaur page 5 (flapodactyl): sky cyan, lower zone cyan, $D022 light red, $D023 purple."
  },
  {
   "address": 38117,
   "type": "line",
   "text": "Colour record of dinosaur page 6 (dragosaurus): sky light red, lower zone light red, $D022 orange, $D023 brown."
  },
  {
   "address": 38121,
   "type": "line",
   "text": "Colour record of dinosaur page 7 (diplodocus): sky cyan, lower zone cyan, $D022 light blue, $D023 blue."
  },
  {
   "address": 38125,
   "type": "line",
   "text": "Colour record of dinosaur page 8 (bobodactyl): sky light blue, lower zone light blue, $D022 orange, $D023 brown."
  },
  {
   "address": 38129,
   "type": "line",
   "text": "Colour record of dinosaur page 9 (Mayhem): sky cyan, lower zone cyan, $D022 green, $D023 dark grey."
  },
  {
   "address": 38133,
   "type": "line",
   "text": "Colour RAM value for ground rows 14-18 of each dinosaur page, in multicolour text mode: $0F (multicolour, yellow as the character's own colour), except pages 3 and 8 ($0B, multicolour with cyan)."
  },
  {
   "address": 38143,
   "type": "line",
   "text": "Addresses of the nine steps of the landscape's fade (records at $9512-$9531), low bytes then high bytes; grey_fade applies steps 8 down to 1."
  },
  {
   "address": 38152,
   "type": "line",
   "text": "High bytes of the nine landscape fade-step addresses ($9508-$9510, all $95)."
  },
  {
   "address": 38161,
   "type": "line",
   "text": "8: the first step of the landscape's fade (dino_arrived copies it to $8023)."
  },
  {
   "address": 38162,
   "type": "line",
   "text": "The fade's colour records (sky, ground zone, $D022, $D023), overlapping: step 8 at $9531 (all white) ... step 1 at $9515 (light grey, light grey, grey, dark grey), where the fade ends. Step 0 at $9512 is never applied. First: Step 0 of the landscape's fade to grey (never applied): sky light grey, lower zone grey, $D022 dark grey, $D023 light grey."
  },
  {
   "address": 38165,
   "type": "line",
   "text": "Step 1 of the landscape's fade to grey (the last applied: where the fade ends): sky light grey, lower zone light grey, $D022 grey, $D023 dark grey."
  },
  {
   "address": 38169,
   "type": "line",
   "text": "Step 2 of the landscape's fade to grey: sky light grey, lower zone light grey, $D022 grey, $D023 dark grey."
  },
  {
   "address": 38173,
   "type": "line",
   "text": "Step 3 of the landscape's fade to grey: sky light grey, lower zone light grey, $D022 grey, $D023 grey."
  },
  {
   "address": 38177,
   "type": "line",
   "text": "Step 4 of the landscape's fade to grey: sky light grey, lower zone light grey, $D022 light grey, $D023 light grey."
  },
  {
   "address": 38181,
   "type": "line",
   "text": "Step 5 of the landscape's fade to grey: sky light grey, lower zone light grey, $D022 light grey, $D023 light grey."
  },
  {
   "address": 38185,
   "type": "line",
   "text": "Step 6 of the landscape's fade to grey: sky white, lower zone white, $D022 white, $D023 white."
  },
  {
   "address": 38189,
   "type": "line",
   "text": "Step 7 of the landscape's fade to grey: sky white, lower zone white, $D022 white, $D023 white."
  },
  {
   "address": 38193,
   "type": "line",
   "text": "Step 8 of the landscape's fade to grey (the first applied): sky white, lower zone white, $D022 white, $D023 white."
  },
  {
   "address": 38197,
   "type": "line",
   "text": "Addresses of the twelve colour-bar tables ($9565-$95F4), low bytes then high bytes; read by set_bar_set."
  },
  {
   "address": 38209,
   "type": "line",
   "text": "High bytes of the twelve colour-bar table addresses ($9541-$954C, all $95)."
  },
  {
   "address": 38221,
   "type": "line",
   "text": "Number of raster lines of each bar set: 16 for sets 0 and 2-6, 8 for set 1 and 7-11."
  },
  {
   "address": 38233,
   "type": "line",
   "text": "For each bar set, non-zero to colour the border too; all zero."
  },
  {
   "address": 38245,
   "type": "line",
   "text": "The twelve colour-bar tables, one colour per raster line: set 0 (16) a rainbow for the dinosaur names; set 1 (8) red, orange and yellow to white for the Latin names; sets 2-6 (16 each) the credits name from full (greys to white) to black; sets 7-11 (8 each) the credits lines from full to black. First: Colour-bar set 0, 16 lines, the dinosaur names (rainbow): brown, red, orange, light red, light grey, yellow, yellow, white, light green, cyan, green, light blue, light blue, purple, dark grey, blue."
  },
  {
   "address": 38261,
   "type": "line",
   "text": "Colour-bar set 1, 8 lines, the Latin names: red, orange, light red, yellow, yellow, white, white, white."
  },
  {
   "address": 38269,
   "type": "line",
   "text": "Colour-bar set 2, 16 lines, the credits name at full brightness: dark grey, dark grey, grey, light grey, white, white, white, white, white, white, white, white, light grey, grey, dark grey, dark grey."
  },
  {
   "address": 38285,
   "type": "line",
   "text": "Colour-bar set 3, 16 lines, the credits name, a step of its fade: black, black, dark grey, grey, light grey, light grey, light grey, light grey, light grey, light grey, light grey, light grey, grey, dark grey, black, black."
  },
  {
   "address": 38301,
   "type": "line",
   "text": "Colour-bar set 4, 16 lines, the credits name, a step of its fade: black, black, black, dark grey, grey, grey, grey, grey, grey, grey, grey, grey, dark grey, black, black, black."
  },
  {
   "address": 38317,
   "type": "line",
   "text": "Colour-bar set 5, 16 lines, the credits name, a step of its fade: black, black, black, black, dark grey, dark grey, dark grey, dark grey, dark grey, dark grey, dark grey, dark grey, black, black, black, black."
  },
  {
   "address": 38333,
   "type": "line",
   "text": "Colour-bar set 6, 16 lines, the credits name, black: black, black, black, black, black, black, black, black, black, black, black, black, black, black, black, black."
  },
  {
   "address": 38349,
   "type": "line",
   "text": "Colour-bar set 7, 8 lines, the credits lines at full brightness: dark grey, grey, light grey, white, white, light grey, grey, dark grey."
  },
  {
   "address": 38357,
   "type": "line",
   "text": "Colour-bar set 8, 8 lines, the credits lines, a step of their fade: black, dark grey, grey, light grey, light grey, grey, dark grey, black."
  },
  {
   "address": 38365,
   "type": "line",
   "text": "Colour-bar set 9, 8 lines, the credits lines, a step of their fade: black, black, dark grey, grey, grey, dark grey, black, black."
  },
  {
   "address": 38373,
   "type": "line",
   "text": "Colour-bar set 10, 8 lines, the credits lines, a step of their fade: black, black, black, dark grey, dark grey, black, black, black."
  },
  {
   "address": 38381,
   "type": "line",
   "text": "Colour-bar set 11, 8 lines, the credits lines, black: black, black, black, black, black, black, black, black."
  },
  {
   "address": 38389,
   "type": "line",
   "text": "Bar set of the credits name for each step of the fade-in, read from index 8 to 1: 6 (black) down to 2 (full); index 0 is $FF and not read."
  },
  {
   "address": 38398,
   "type": "line",
   "text": "Bar set of the credits name for each step of the fade-out, index 8 to 1: 2 up to 6."
  },
  {
   "address": 38407,
   "type": "line",
   "text": "Bar set of the two credits lines for each fade-in step: 11 (black) down to 7."
  },
  {
   "address": 38416,
   "type": "line",
   "text": "Bar set of the credits lines for each fade-out step: 7 up to 11."
  },
  {
   "address": 38425,
   "type": "line",
   "text": "8: steps of the credits fade-in."
  },
  {
   "address": 38426,
   "type": "line",
   "text": "8: steps of the credits fade-out."
  },
  {
   "address": 38427,
   "type": "line",
   "text": "$1E (30): wait before a credits page fades in, counted on half the frames."
  },
  {
   "address": 38428,
   "type": "line",
   "text": "$8C (140): how long a credits page stays at full brightness, counted on half the frames."
  },
  {
   "address": 38429,
   "type": "line",
   "text": "$28 (40): wait after the fade-out before the next dinosaur page."
  },
  {
   "address": 38430,
   "type": "line",
   "text": "Addresses of the ten pages' 40-byte sprite records ($9632-$97C1), low bytes then high bytes; read by page_sprites."
  },
  {
   "address": 38440,
   "type": "line",
   "text": "High bytes of the ten pages' sprite-record addresses ($9628-$9631)."
  },
  {
   "address": 38450,
   "type": "line",
   "text": "Ten 40-byte sprite records, one per dinosaur page: $D01B ($80: the sun behind the clouds), $D010 ($0C), $D01C ($70, sprites 4-6 multicolour; $20 on Mayhem's page), $D01D ($0F, sprites 0-3 double width; $7F on Mayhem's page), $D017 ($7F, sprites 0-6 double height), $D015 ($FF), $D025 (yellow), $D026 (black), the eight colours, the eight X/Y positions and the eight pointers. Sprites 0-3 are $60, solid black blocks doubled in both directions at the two edges of the window (X 24, and X 40 + 256 through $D010; Y 118 and 160), which hide the dinosaur where it enters; sprites 4-6 are the dinosaur (pointer $61, blank, until the animation starts), sprite 7 is the sun ($62, yellow, X 89, Y 111). First: Sprite record of dinosaur page 0 (stegosaurus), 40 bytes: dinosaur colours light blue, light blue, light blue, sprites 4-6 at X/Y 35/139, 11/139, 0/139."
  },
  {
   "address": 38490,
   "type": "line",
   "text": "Sprite record of dinosaur page 1 (megasaurus), 40 bytes: dinosaur colours green, green, green, sprites 4-6 at X/Y 35/139, 11/139, 0/139."
  },
  {
   "address": 38530,
   "type": "line",
   "text": "Sprite record of dinosaur page 2 (ballodactyl), 40 bytes: dinosaur colours light red, light red, light red, sprites 4-6 at X/Y 35/132, 11/132, 0/139."
  },
  {
   "address": 38570,
   "type": "line",
   "text": "Sprite record of dinosaur page 3 (burrowsaurus), 40 bytes: dinosaur colours light red, light red, light red, sprites 4-6 at X/Y 35/139, 11/139, 0/139."
  },
  {
   "address": 38610,
   "type": "line",
   "text": "Sprite record of dinosaur page 4 (spikeysaurus), 40 bytes: dinosaur colours light red, light red, light red, sprites 4-6 at X/Y 48/139, 24/139, 0/139."
  },
  {
   "address": 38650,
   "type": "line",
   "text": "Sprite record of dinosaur page 5 (flapodactyl), 40 bytes: dinosaur colours orange, orange, orange, sprites 4-6 at X/Y 35/129, 11/129, 0/139."
  },
  {
   "address": 38690,
   "type": "line",
   "text": "Sprite record of dinosaur page 6 (dragosaurus), 40 bytes: dinosaur colours green, green, green, sprites 4-6 at X/Y 35/139, 11/139, 0/139."
  },
  {
   "address": 38730,
   "type": "line",
   "text": "Sprite record of dinosaur page 7 (diplodocus), 40 bytes: dinosaur colours orange, orange, orange, sprites 4-6 at X/Y 48/139, 24/139, 0/139."
  },
  {
   "address": 38770,
   "type": "line",
   "text": "Sprite record of dinosaur page 8 (bobodactyl), 40 bytes: dinosaur colours light red, light red, light red, sprites 4-6 at X/Y 35/134, 11/134, 0/139."
  },
  {
   "address": 38810,
   "type": "line",
   "text": "Sprite record of dinosaur page 9 (Mayhem), 40 bytes: dinosaur colours black, light red, white, sprites 4-6 at X/Y 24/146, 24/146, 0/152."
  },
  {
   "address": 38850,
   "type": "line",
   "text": "Addresses of the 22 sprite animation frame lists ($980E-$98A9), low bytes then high bytes, taken in order by anim_setup: two or three per page."
  },
  {
   "address": 38872,
   "type": "line",
   "text": "High bytes of the 22 frame-list addresses ($97D8-$97ED, all $98)."
  },
  {
   "address": 38894,
   "type": "line",
   "text": "Length - 1 of each of the 22 frame lists: 7 for most, 3 for burrowsaurus, 2 and 0 for Mayhem."
  },
  {
   "address": 38916,
   "type": "line",
   "text": "For each page, the number of animated sprites - 1: 1 (sprites 4 and 5), or 2 for spikeysaurus and diplodocus (sprites 4-6)."
  },
  {
   "address": 38926,
   "type": "line",
   "text": "The frame lists, sprite pointers played from the end (most pointers appear twice in a row): stegosaurus $78-$7F, megasaurus $63-$68, ballodactyl $90-$95, burrowsaurus $80-$83, spikeysaurus $69-$71, flapodactyl $96-$9B, dragosaurus $72-$77, diplodocus $84-$8F, bobodactyl $9C-$A1, Mayhem running $A5-$A8. First: Frame list 0: sprite 4 of stegosaurus (page 0), 8 pointers played from the end: $7B $7B $79 $79 $7F $7F $7D $7D."
  },
  {
   "address": 38934,
   "type": "line",
   "text": "Frame list 1: sprite 5 of stegosaurus (page 0), 8 pointers played from the end: $7A $7A $78 $78 $7E $7E $7C $7C."
  },
  {
   "address": 38942,
   "type": "line",
   "text": "Frame list 2: sprite 4 of megasaurus (page 1), 8 pointers played from the end: $64 $64 $66 $66 $68 $68 $66 $66."
  },
  {
   "address": 38950,
   "type": "line",
   "text": "Frame list 3: sprite 5 of megasaurus (page 1), 8 pointers played from the end: $63 $63 $65 $65 $67 $67 $65 $65."
  },
  {
   "address": 38958,
   "type": "line",
   "text": "Frame list 4: sprite 4 of ballodactyl (page 2), 8 pointers played from the end: $92 $92 $94 $94 $92 $92 $90 $90."
  },
  {
   "address": 38966,
   "type": "line",
   "text": "Frame list 5: sprite 5 of ballodactyl (page 2), 8 pointers played from the end: $93 $93 $95 $95 $93 $93 $91 $91."
  },
  {
   "address": 38974,
   "type": "line",
   "text": "Frame list 6: sprite 4 of burrowsaurus (page 3), 4 pointers played from the end: $81 $81 $83 $83."
  },
  {
   "address": 38978,
   "type": "line",
   "text": "Frame list 7: sprite 5 of burrowsaurus (page 3), 4 pointers played from the end: $80 $80 $82 $82."
  },
  {
   "address": 38982,
   "type": "line",
   "text": "Frame list 8: sprite 4 of spikeysaurus (page 4), 8 pointers played from the end: $6E $6E $6B $6B $6E $6E $71 $71."
  },
  {
   "address": 38990,
   "type": "line",
   "text": "Frame list 9: sprite 5 of spikeysaurus (page 4), 8 pointers played from the end: $6D $6D $6A $6A $6D $6D $70 $70."
  },
  {
   "address": 38998,
   "type": "line",
   "text": "Frame list 10: sprite 6 of spikeysaurus (page 4), 8 pointers played from the end: $6C $6C $69 $69 $6C $6C $6F $6F."
  },
  {
   "address": 39006,
   "type": "line",
   "text": "Frame list 11: sprite 4 of flapodactyl (page 5), 8 pointers played from the end: $99 $99 $97 $97 $99 $99 $9B $9B."
  },
  {
   "address": 39014,
   "type": "line",
   "text": "Frame list 12: sprite 5 of flapodactyl (page 5), 8 pointers played from the end: $98 $98 $96 $96 $98 $98 $9A $9A."
  },
  {
   "address": 39022,
   "type": "line",
   "text": "Frame list 13: sprite 4 of dragosaurus (page 6), 8 pointers played from the end: $73 $73 $75 $75 $77 $77 $75 $75."
  },
  {
   "address": 39030,
   "type": "line",
   "text": "Frame list 14: sprite 5 of dragosaurus (page 6), 8 pointers played from the end: $72 $72 $74 $74 $76 $76 $74 $74."
  },
  {
   "address": 39038,
   "type": "line",
   "text": "Frame list 15: sprite 4 of diplodocus (page 7), 8 pointers played from the end: $8D $8D $8A $8A $87 $87 $84 $84."
  },
  {
   "address": 39046,
   "type": "line",
   "text": "Frame list 16: sprite 5 of diplodocus (page 7), 8 pointers played from the end: $8E $8E $8B $8B $88 $88 $85 $85."
  },
  {
   "address": 39054,
   "type": "line",
   "text": "Frame list 17: sprite 6 of diplodocus (page 7), 8 pointers played from the end: $8F $8F $8C $8C $89 $89 $86 $86."
  },
  {
   "address": 39062,
   "type": "line",
   "text": "Frame list 18: sprite 4 of bobodactyl (page 8), 8 pointers played from the end: $9D $9D $9F $9F $A1 $A1 $9F $9F."
  },
  {
   "address": 39070,
   "type": "line",
   "text": "Frame list 19: sprite 5 of bobodactyl (page 8), 8 pointers played from the end: $9C $9C $9E $9E $A0 $A0 $9E $9E."
  },
  {
   "address": 39078,
   "type": "line",
   "text": "Frame list 20: sprite 4 of Mayhem (page 9), 3 pointers played from the end: $A7 $A6 $A5."
  },
  {
   "address": 39081,
   "type": "line",
   "text": "Frame list 21: sprite 5 of Mayhem (page 9), 1 pointers played from the end: $A8."
  },
  {
   "address": 39082,
   "type": "line",
   "text": "$18 (24): steps of Mayhem's skid."
  },
  {
   "address": 39083,
   "type": "line",
   "text": "0; nothing reads it."
  },
  {
   "address": 39084,
   "type": "line",
   "text": "Mayhem's skid, read from index 24 down: pixels - 1 to move left each frame: 1 and 0 at first, rising to 3 (2 to 4 pixels, 70 in all over 25 steps)."
  },
  {
   "address": 39109,
   "type": "line",
   "text": "$0B (11): frames of the dust cloud."
  },
  {
   "address": 39110,
   "type": "line",
   "text": "Sprite 6's dust-cloud frames, read from index 11 down to 1: $A2, $A3, $A4 (a puff growing), twice over; the first byte is not read."
  },
  {
   "address": 39122,
   "type": "line",
   "text": "Addresses of the nine sprite colour records of the dinosaurs' fade ($98E5-$9911), low bytes then high bytes."
  },
  {
   "address": 39131,
   "type": "line",
   "text": "High bytes of the nine dinosaur sprite-fade record addresses ($98DB-$98E3)."
  },
  {
   "address": 39140,
   "type": "line",
   "text": "8: first step of the sprites' fade; also sets title_bars_on."
  },
  {
   "address": 39141,
   "type": "line",
   "text": "Nine five-byte records for the dinosaurs' fade, applied 8 down to 1: $D025, $D026 and the colours of sprites 4, 5 and 6: white, then light grey, ending at step 1 with light grey, black and grey. Step 0 is never applied. First: Step 0 of the dinosaurs' sprite fade: $D025 light grey, $D026 black, sprites 4-6 grey, grey, grey."
  },
  {
   "address": 39146,
   "type": "line",
   "text": "Step 1 of the dinosaurs' sprite fade: $D025 light grey, $D026 black, sprites 4-6 grey, grey, grey."
  },
  {
   "address": 39151,
   "type": "line",
   "text": "Step 2 of the dinosaurs' sprite fade: $D025 light grey, $D026 dark grey, sprites 4-6 grey, grey, grey."
  },
  {
   "address": 39156,
   "type": "line",
   "text": "Step 3 of the dinosaurs' sprite fade: $D025 light grey, $D026 grey, sprites 4-6 grey, grey, grey."
  },
  {
   "address": 39161,
   "type": "line",
   "text": "Step 4 of the dinosaurs' sprite fade: $D025 light grey, $D026 light grey, sprites 4-6 light grey, light grey, light grey."
  },
  {
   "address": 39166,
   "type": "line",
   "text": "Step 5 of the dinosaurs' sprite fade: $D025 light grey, $D026 light grey, sprites 4-6 light grey, light grey, light grey."
  },
  {
   "address": 39171,
   "type": "line",
   "text": "Step 6 of the dinosaurs' sprite fade: $D025 white, $D026 white, sprites 4-6 white, white, white."
  },
  {
   "address": 39176,
   "type": "line",
   "text": "Step 7 of the dinosaurs' sprite fade: $D025 white, $D026 white, sprites 4-6 white, white, white."
  },
  {
   "address": 39181,
   "type": "line",
   "text": "Step 8 of the dinosaurs' sprite fade: $D025 white, $D026 white, sprites 4-6 white, white, white."
  },
  {
   "address": 39186,
   "type": "line",
   "text": "Addresses of Mayhem's nine sprite colour records ($9924-$9950), low bytes then high bytes."
  },
  {
   "address": 39195,
   "type": "line",
   "text": "High bytes of Mayhem's nine sprite-fade record addresses ($991B-$9923)."
  },
  {
   "address": 39204,
   "type": "line",
   "text": "Mayhem's five-byte sprite colour records, applied 8 down to 1: white, then greys, ending at step 1 with light grey, black, black, grey and white (sprite 6, the dust). First: Step 0 of Mayhem's sprite fade: $D025 light grey, $D026 black, sprites 4-6 grey, grey, grey."
  },
  {
   "address": 39209,
   "type": "line",
   "text": "Step 1 of Mayhem's sprite fade: $D025 light grey, $D026 black, sprites 4-6 black, grey, white."
  },
  {
   "address": 39214,
   "type": "line",
   "text": "Step 2 of Mayhem's sprite fade: $D025 light grey, $D026 dark grey, sprites 4-6 dark grey, grey, white."
  },
  {
   "address": 39219,
   "type": "line",
   "text": "Step 3 of Mayhem's sprite fade: $D025 light grey, $D026 grey, sprites 4-6 grey, grey, white."
  },
  {
   "address": 39224,
   "type": "line",
   "text": "Step 4 of Mayhem's sprite fade: $D025 light grey, $D026 light grey, sprites 4-6 light grey, light grey, white."
  },
  {
   "address": 39229,
   "type": "line",
   "text": "Step 5 of Mayhem's sprite fade: $D025 light grey, $D026 light grey, sprites 4-6 light grey, light grey, white."
  },
  {
   "address": 39234,
   "type": "line",
   "text": "Step 6 of Mayhem's sprite fade: $D025 white, $D026 white, sprites 4-6 white, white, white."
  },
  {
   "address": 39239,
   "type": "line",
   "text": "Step 7 of Mayhem's sprite fade: $D025 white, $D026 white, sprites 4-6 white, white, white."
  },
  {
   "address": 39244,
   "type": "line",
   "text": "Step 8 of Mayhem's sprite fade: $D025 white, $D026 white, sprites 4-6 white, white, white."
  },
  {
   "address": 39249,
   "type": "line",
   "text": "175 bytes identical to $9A01-$9AAF, the roll-call tune from its second byte on: an older copy of the start of the tune, which nothing plays or reads."
  },
  {
   "address": 39424,
   "type": "line",
   "text": "The roll-call tune, started by rollcall_intro ($53BF) and played until fire: four header bytes (voice 1 at +$00C7, voice 2 at +$016E from the voice 0 data at $9A04), then the three voices' events ($9A04, $9ACB, $9B72) and the stretches they call ($9DDD-$9EB5). Each voice ends with event byte $12, argument $FF ($9AC6, $9B6D, $9DD8): the driver's command $11 (byte - 1), the second-slot repeat at $05D0, which jumps back 254 times to the event byte $13 mark (command $12, $05D8) near the voice's start ($9A12, $9AE7, $9B96), so the body plays 255 times; then a rest and event byte $1E (command $1D, stop)."
  },
  {
   "address": 40413,
   "type": "line",
   "text": "The stretches the roll-call tune's voices call (command $22) and return from (command $23): $9DDD, $9DF2, $9E71, $9E82, $9E8B, $9E94 and $9EA3, short phrases repeated many times by the three voices."
  },
  {
   "address": 40630,
   "type": "line",
   "text": "The Mayhem TV ident, started by intro_entry ($5386): header (voice 1 at +$41, voice 2 at +$8A from $9EBA), then three voices of mostly noise and pulse notes with slides to target notes, each ending with command $1D (stop): it plays once."
  },
  {
   "address": 40838,
   "type": "line",
   "text": "The last 4,218 bytes of `menu`, after the ident: no code, table or tune refers to them, and they look like uninitialised memory saved with the file (repeating bit patterns, with the drive command text \"S0:MENU\" at $9FF9)."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "Part of the unused tail of `menu` (see $9F86): bytes no code, table or tune reads, in repeating bit patterns typical of uninitialised memory."
  },
  {
   "address": 41984,
   "type": "line",
   "text": "More of `menu`'s unused tail, $A400-$A7FF: the same kind of repeating patterns; nothing reads them."
  },
  {
   "address": 43008,
   "type": "line",
   "text": "Source of the copier's first page (operand of LDA $A800,Y at run address $0189), stepped down to $5A00."
  },
  {
   "address": 43072,
   "type": "line",
   "text": "More of `menu`'s unused tail, $A840-$ABFF; nothing in the intro reads it. (`game` loads over $0200-$A8FF later, so this tail survives the load from $A900 up.)"
  },
  {
   "address": 44032,
   "type": "line",
   "text": "The last kilobyte of `menu`, $AC00-$AFFF: unused, repeating patterns; nothing in the intro reads it."
  },
  {
   "address": 45056,
   "type": "line",
   "text": "`2`'s load pointer as the snapshot holds it ($C302/$C303): $B000, one past the end of `menu`, where the load stopped. In the file it is $4B00."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "In the hand-over: the first 576 bytes of `2` ($C000-$C23F) hold three routines ($C00D, $C05F, $C0AC) that place and colour sprites 3-7 from tables in this block and write their pointers to $47FB and $4BFB, with a few bytes of state before them; nothing in boot, `2` or `menu` calls them, they read tables that overlap `2`'s own loader code ($C246) and engine addresses ($1215, $1283), and $5321 overwrites $C000-$C3FF with the game loader before anything could run them: a leftover saved with the file. At run time $C000 is the game loader's entry (= $5400)."
  },
  {
   "address": 49342,
   "type": "line",
   "text": "Run-time address of the game loader's block loop (= $54BE): X = 254 bytes for every block after the first. In the hand-over this byte is inside `2`'s leftover sprite routine at $C0AC."
  },
  {
   "address": 49354,
   "type": "line",
   "text": "Run-time address of the game loader's load pointer, the low byte of the STA operand at $54C9 (= $C0C9 run time), from $00. In the hand-over it is inside `2`'s leftover code."
  },
  {
   "address": 49355,
   "type": "line",
   "text": "Run-time address of the high byte of the game loader's load pointer, $02 to $A8; the load ends when it reaches $A9 ($54D4-$54D9). In the hand-over it is inside `2`'s leftover code."
  },
  {
   "address": 49407,
   "type": "line",
   "text": "Run-time entry of the game loader's receive routine (= $54FF). In the hand-over: a zero byte after `2`'s leftover routines."
  },
  {
   "address": 49408,
   "type": "line",
   "text": "Run-time address of $5500 (the game loader's receive routine continues here). In the hand-over: part of `2`'s leftover block; the leftover routines at $C00D-$C0F8 read colours from $C117-$C125, positions from $C144-$C161 and pointers from $C164-$C172 (sprites 3-7)."
  },
  {
   "address": 49426,
   "type": "line",
   "text": "Run-time address of the EOR operand in the game loader's receive routine (= $5512), stepped once per block by $54DE to change the border colour. In the hand-over: part of `2`'s leftover sprite tables."
  },
  {
   "address": 49460,
   "type": "line",
   "text": "Run-time address of the game loader's 32 decode seeds (= $5534). In the hand-over: part of `2`'s leftover sprite tables."
  },
  {
   "address": 49492,
   "type": "line",
   "text": "Run-time entry of the game loader's \"M-\" command prefix routine (= $5554). In the hand-over: part of `2`'s leftover sprite tables."
  },
  {
   "address": 49512,
   "type": "line",
   "text": "Run-time address of the game loader's copy of the drive program (= $5568). In the hand-over: part of `2`'s leftover block; the leftover routines' pointer table runs $C164-$C172, and the bytes after it to $C1FF are not read by them."
  },
  {
   "address": 49576,
   "type": "line",
   "text": "In the hand-over: the last 88 bytes of `2`'s leftover block ($C1A8-$C1FF), mostly zero; the leftover sprite routines do not read them (their tables end at $C172), and no other use is established. At run time: inside the game loader's copy of the drive program ($55A8)."
  },
  {
   "address": 49664,
   "type": "line",
   "text": "Run-time address of $5600 (inside the game loader's copy of the drive program). In the hand-over: the last 64 bytes of `2`'s leftover block, $C200-$C23F, ahead of `2`'s loader at $C240."
  },
  {
   "address": 49728,
   "type": "line",
   "text": "`2`, side 1's fast loader, entered from boot. Sets $01 = $36, acknowledges and masks the VIC interrupts, silences the SID, blanks the screen and turns off the sprites. Opens \"MENU\" (name at $C396) through the KERNAL's serial routines, writes the 256-byte drive program at $C3A8 into drive memory $0700 in eight 32-byte M-W commands, starts it with M-E $07AB, builds the 256-byte 2-bit decode table at $0600 from the 32 bytes at $C362, then receives `menu` byte by byte through $C32D into $4B00 upwards until the page counter reaches $B0 ($4B00-$AFFF), flashing the border on every block, drains three more pages and jumps to the intro at $52ED."
  },
  {
   "address": 49920,
   "type": "line",
   "text": "Run-time address of $5700 in the game loader's copy (the copier's source). In the hand-over: the high byte of the JSR $C32D at $C2FE in `2`'s loader."
  },
  {
   "address": 49921,
   "type": "side",
   "text": "the store's operand is the load pointer, $4B00 in the file, stepped by $C304-$C30C; the snapshot shows the value it was left at"
  },
  {
   "address": 49922,
   "type": "line",
   "text": "Low byte of `2`'s load pointer (operand of the STA at $C301), stepped by $C304."
  },
  {
   "address": 49923,
   "type": "line",
   "text": "High byte of `2`'s load pointer, $4B to $AF; the load ends when it reaches $B0 ($C30C-$C311)."
  },
  {
   "address": 49965,
   "type": "line",
   "text": "Receives one byte from the drive program over CIA 2 port A ($DD00): raises the handshake line, waits for the drive to answer on bit 7, then reads four bit-pairs at fixed cycle spacing, each read looked up in the decode table at $0600/$0608/$0610/$0618 and ORed together. Returns the byte in A. Also changes the border colour (EOR with the operand at $C340)."
  },
  {
   "address": 49983,
   "type": "side",
   "text": "the EOR's operand ($C340) is stepped once per block by $C316, so the border colour changes on every block received"
  },
  {
   "address": 49984,
   "type": "line",
   "text": "Operand of the EOR at $C33F: the value `2` flips the border colour with on every byte; stepped once per block by $C316, so the border flicker changes with every block loaded."
  },
  {
   "address": 50018,
   "type": "line",
   "text": "32 seed bytes from which $C2D6-$C2EA builds the receive decode table at $0600-$06FF (each byte repeated eight times); four groups of eight, one for each bit-pair position the receiver reads."
  },
  {
   "address": 50050,
   "type": "line",
   "text": "Sends LISTEN to the current device ($BA) with secondary address $6F (the command channel) and then the characters \"M-\"; the caller adds \"W\" or \"E\" and the rest of the drive command."
  },
  {
   "address": 50070,
   "type": "line",
   "text": "The file name \"MENU\" in PETSCII, 4 bytes, named by SETNAM at $C266-$C26C."
  },
  {
   "address": 50074,
   "type": "line",
   "text": "14 bytes after the file name that no code in `2` reads: as words they are $FFD2 followed by the KERNAL's default STOP, GETIN, CLALL, user-command, LOAD and SAVE vectors ($F6ED, $F13E, $F32F, $FE66, $F4A5, $F5ED), presumably whatever followed the name in memory when the file was saved."
  },
  {
   "address": 50088,
   "type": "line",
   "text": "1541 drive program, 256 bytes, sent to drive RAM $0700-$07FF by the M-W loop at $C283 and started at $07AB by M-E. It sets up the drive's timer, takes the file's first track and sector from $18/$19, and runs itself as a job (code $E0); it calls the drive ROM ($F50A, $F8E0) to read and decode each sector and sends every data byte to the C64 as four 2-bit pairs on the serial bus's CLOCK and DATA lines ($1800). The same 256 bytes are in the intro's game loader at $5568."
  },
  {
   "address": 50176,
   "type": "line",
   "text": "Run-time address of the game loader's 2-bit decode table, $C400-$C4FF, built by $54A6-$54B2 from the seeds at $5534 and read by its receive routine at $C11E-$C133. In the hand-over these bytes are the tail of `2`'s drive program (described at $C3A8)."
  },
  {
   "address": 50184,
   "type": "line",
   "text": "Run-time address of the second eight-entry group of the game loader's decode table (bit-pair 2), read at $C124. Hand-over bytes: `2`'s drive program."
  },
  {
   "address": 50192,
   "type": "line",
   "text": "Run-time address of the third group of the game loader's decode table (bit-pair 3), read at $C12A. Hand-over bytes: `2`'s drive program."
  },
  {
   "address": 50200,
   "type": "line",
   "text": "Run-time address of the fourth group of the game loader's decode table (bit-pair 4), read at $C130. Hand-over bytes: `2`'s drive program."
  },
  {
   "address": 50264,
   "type": "line",
   "text": "In the hand-over: the last 80 bytes of `2`'s drive program ($C458-$C4A7, drive addresses $07B0-$07FF, including the entry $07AB just before). At run time: the end of the game loader's decode table ($C458-$C4FF)."
  },
  {
   "address": 50344,
   "type": "line",
   "text": "The last 88 bytes of `2`, after the drive program: not reached by any code here and not read by the drive program; they look like fragments of 6502 code left in the file when it was saved."
  },
  {
   "address": 60030,
   "type": "line",
   "text": "KERNAL ROM at $EA7E (checked in kernal 901227-02): reads $DC0D to acknowledge CIA 1, pulls Y, X and A and returns from the interrupt. The intro's raster interrupt leaves through JMP $EA7E ($8408). The RAM underneath holds nothing of the intro."
  },
  {
   "address": 60681,
   "type": "line",
   "text": "KERNAL ROM TALK (the target of the $FFB4 jump-table entry): the loaders send TALK to the drive before reading. RAM underneath: not the intro's."
  },
  {
   "address": 60684,
   "type": "line",
   "text": "KERNAL ROM LISTEN (target of $FFB1): opens the drive's command channel for the M-W and M-E commands ($C382, $5554) and for the close. RAM underneath: not the intro's."
  },
  {
   "address": 60857,
   "type": "line",
   "text": "KERNAL ROM SECOND (target of $FF93): sends the secondary address after LISTEN ($6F for the command channel, $E0 to close). RAM underneath: not the intro's."
  },
  {
   "address": 60871,
   "type": "line",
   "text": "KERNAL ROM TKSA (target of $FF96): sends the secondary address after TALK. RAM underneath: not the intro's."
  },
  {
   "address": 60893,
   "type": "line",
   "text": "KERNAL ROM CIOUT (target of $FFA8): sends one byte to the listening drive; the loaders send the drive program and the \"M-W\"/\"M-E\" commands with it. RAM underneath: not the intro's."
  },
  {
   "address": 60926,
   "type": "line",
   "text": "KERNAL ROM UNLSN (target of $FFAE): ends a command to the drive. RAM underneath: not the intro's."
  },
  {
   "address": 60947,
   "type": "line",
   "text": "KERNAL ROM ACPTR (target of $FFA5): reads a byte from the talking drive; the loaders call it once after TALK, before switching to their own 2-bit transfer. RAM underneath: not the intro's."
  },
  {
   "address": 62421,
   "type": "line",
   "text": "Inside the KERNAL's OPEN, at $F3D5 (it starts by testing the secondary address $B9 and the name length $B7): the serial-device step that sends the file name set by SETNAM to the drive, which makes the drive find the file. Both loaders call it directly instead of OPEN. RAM underneath: not the intro's."
  },
  {
   "address": 65280,
   "type": "line",
   "text": "Destination of the copier's first page (operand of STA $FF00,Y at run address $018C): $5A00-$A8FF go to $B100-$FFFF, this page first."
  },
  {
   "address": 65466,
   "type": "line",
   "text": "KERNAL SETLFS: logical file, device, secondary address (A, X, Y). RAM underneath: not the intro's."
  },
  {
   "address": 65469,
   "type": "line",
   "text": "KERNAL SETNAM: file name length in A, address in X/Y. RAM underneath: not the intro's."
  },
  {
   "address": 65472,
   "type": "line",
   "text": "KERNAL OPEN, through the vector at $031A; used by drive_initialize ($53F4). RAM underneath: not the intro's."
  },
  {
   "address": 65475,
   "type": "line",
   "text": "KERNAL CLOSE, through $031C; used by drive_initialize. RAM underneath: not the intro's."
  },
  {
   "address": 65484,
   "type": "line",
   "text": "KERNAL CLRCHN, through $0322: restores the default input and output; drive_initialize ends with it. RAM underneath: not the intro's."
  },
  {
   "address": 65493,
   "type": "line",
   "text": "KERNAL LOAD; boot loads `2` with it ($0241). RAM underneath: not the intro's."
  }
 ]
}