{
 "schema": 1,
 "platform": "c64",
 "game": "north-and-south",
 "part": "title",
 "build": "PAL cassette, four sides, Cyberload fast loader; the original release as the Ultimate Tape Archive V4.0 has it (entry 7562)",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    24576,
    25135,
    "runtime: rows 0 to 13 of the title scene's screen, filled by $8374 and moved by the credits ($83CA)"
   ],
   [
    25592,
    25599,
    "runtime: the title scene's sprite pointers, written every frame by $8B6B"
   ],
   [
    0,
    6143,
    "The loader and the script"
   ],
   [
    40960,
    65535,
    "The loader and the script"
   ],
   [
    3072,
    6143,
    "The strategic map"
   ],
   [
    40960,
    53246,
    "4 parts: The strategic map, The menu, The ending and others"
   ],
   [
    57344,
    65529,
    "2 parts: The strategic map, The menu"
   ]
  ],
  "extra": [],
  "edges": [
   0,
   256,
   512,
   1024,
   2048,
   4096,
   16384,
   32768,
   40960,
   49152,
   53248,
   57344
  ],
  "elsewhere": [
   [
    0,
    6143,
    "The loader and the script"
   ],
   [
    40960,
    65535,
    "The loader and the script"
   ],
   [
    3072,
    6143,
    "The strategic map"
   ],
   [
    40960,
    53246,
    "4 parts: The strategic map, The menu, The ending and others"
   ],
   [
    57344,
    65529,
    "2 parts: The strategic map, The menu"
   ]
  ]
 },
 "blocks": [
  {
   "start": 6144,
   "end": 24575,
   "type": "Byte"
  },
  {
   "start": 24576,
   "end": 25135,
   "type": "Undefined"
  },
  {
   "start": 25136,
   "end": 25591,
   "type": "Byte"
  },
  {
   "start": 25592,
   "end": 25599,
   "type": "Undefined"
  },
  {
   "start": 25600,
   "end": 32767,
   "type": "Byte"
  },
  {
   "start": 32768,
   "end": 32973,
   "type": "Code"
  },
  {
   "start": 32974,
   "end": 32978,
   "type": "Byte"
  },
  {
   "start": 32979,
   "end": 33282,
   "type": "Code"
  },
  {
   "start": 33283,
   "end": 33375,
   "type": "Byte"
  },
  {
   "start": 33376,
   "end": 33511,
   "type": "Code"
  },
  {
   "start": 33512,
   "end": 33517,
   "type": "Byte"
  },
  {
   "start": 33518,
   "end": 33701,
   "type": "Code"
  },
  {
   "start": 33702,
   "end": 33737,
   "type": "Byte"
  },
  {
   "start": 33738,
   "end": 34169,
   "type": "Code"
  },
  {
   "start": 34170,
   "end": 34179,
   "type": "Byte"
  },
  {
   "start": 34180,
   "end": 35379,
   "type": "Screencode Text"
  },
  {
   "start": 35380,
   "end": 35426,
   "type": "Byte"
  },
  {
   "start": 35427,
   "end": 35755,
   "type": "Code"
  },
  {
   "start": 35756,
   "end": 36863,
   "type": "Byte"
  },
  {
   "start": 36864,
   "end": 36869,
   "type": "Code"
  },
  {
   "start": 36870,
   "end": 36999,
   "type": "Byte"
  },
  {
   "start": 37000,
   "end": 38366,
   "type": "Code"
  },
  {
   "start": 38367,
   "end": 40959,
   "type": "Byte"
  }
 ],
 "symbols": [
  {
   "address": 6144,
   "name": "pic1_screen",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6400,
   "name": "pic1_screen_1900",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6656,
   "name": "pic1_screen_1a00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6912,
   "name": "pic1_screen_1b00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7168,
   "name": "pic1_colour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7424,
   "name": "pic1_colour_1d00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7680,
   "name": "pic1_colour_1e00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7936,
   "name": "pic1_colour_1f00",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8192,
   "name": "pic1_bitmap",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9216,
   "name": "pic1_bitmap_2400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10240,
   "name": "pic1_bitmap_2800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11264,
   "name": "pic1_bitmap_2c00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12288,
   "name": "pic1_bitmap_3000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13312,
   "name": "pic1_bitmap_3400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14336,
   "name": "pic1_bitmap_3800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15360,
   "name": "pic1_bitmap_3c00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16192,
   "name": "pic1_after",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "pic2_bitmap",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17408,
   "name": "pic2_bitmap_4400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18432,
   "name": "pic2_bitmap_4800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19456,
   "name": "pic2_bitmap_4c00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20480,
   "name": "pic2_bitmap_5000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21504,
   "name": "pic2_bitmap_5400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22528,
   "name": "pic2_bitmap_5800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23552,
   "name": "pic2_bitmap_5c00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24384,
   "name": "pic2_after",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24576,
   "name": "f_6000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24616,
   "name": "f_6028",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24617,
   "name": "f_6029",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24655,
   "name": "a_604F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24696,
   "name": "f_6078",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24697,
   "name": "f_6079",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24735,
   "name": "a_609F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24776,
   "name": "f_60C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24777,
   "name": "f_60C9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24815,
   "name": "a_60EF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24856,
   "name": "f_6118",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24857,
   "name": "f_6119",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24895,
   "name": "a_613F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24936,
   "name": "f_6168",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24937,
   "name": "f_6169",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24975,
   "name": "a_618F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25016,
   "name": "f_61B8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25017,
   "name": "f_61B9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25055,
   "name": "a_61DF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25136,
   "name": "pic2_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25576,
   "name": "pic2_screen_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25592,
   "name": "a_63F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25593,
   "name": "a_63F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25594,
   "name": "a_63FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25595,
   "name": "a_63FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25596,
   "name": "a_63FC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25600,
   "name": "pic2_gap",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26624,
   "name": "sprite_a0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26688,
   "name": "title_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27712,
   "name": "title_sprites_6c40",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28736,
   "name": "title_sprites_7040",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29760,
   "name": "title_sprites_7440",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30016,
   "name": "sprites_after",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30720,
   "name": "title_font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31744,
   "name": "title_font_7c00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "title_main",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32774,
   "name": "b_8006",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32862,
   "name": "b_805E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32907,
   "name": "b_808B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32938,
   "name": "b_80AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32948,
   "name": "b_80B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32953,
   "name": "b_80B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32974,
   "name": "title_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32979,
   "name": "title_video",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33156,
   "name": "read_joy2",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33195,
   "name": "joy_decode",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33203,
   "name": "b_81B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33207,
   "name": "b_81B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33211,
   "name": "b_81BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33215,
   "name": "b_81BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33227,
   "name": "read_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33239,
   "name": "b_81D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33266,
   "name": "b_81F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33274,
   "name": "b_81FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33280,
   "name": "b_8200",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33283,
   "name": "joy_dx",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33284,
   "name": "joy_dy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33285,
   "name": "joy_fire",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33287,
   "name": "key_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33295,
   "name": "key_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33303,
   "name": "key_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33375,
   "name": "title_key",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33376,
   "name": "title_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33378,
   "name": "b_8262",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33406,
   "name": "title_irq_on",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33424,
   "name": "b_8290",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33468,
   "name": "title_rnd",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33512,
   "name": "title_rnd_seeds",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33513,
   "name": "a_82E9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33514,
   "name": "a_82EA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33515,
   "name": "a_82EB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33516,
   "name": "a_82EC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33517,
   "name": "a_82ED",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33518,
   "name": "title_irq_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33589,
   "name": "b_8335",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33595,
   "name": "title_irq_bitmap",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33652,
   "name": "title_text_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33654,
   "name": "b_8376",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33656,
   "name": "b_8378",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33660,
   "name": "a_837C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33661,
   "name": "a_837D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33666,
   "name": "a_8382",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33667,
   "name": "a_8383",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33702,
   "name": "text_row_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33716,
   "name": "text_row_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33730,
   "name": "credits_moving",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33731,
   "name": "credits_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33732,
   "name": "credits_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33733,
   "name": "credits_phase",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33734,
   "name": "credits_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33735,
   "name": "credits_hold",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33736,
   "name": "credits_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33737,
   "name": "credits_done",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33738,
   "name": "credits_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33794,
   "name": "r_8402",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33795,
   "name": "b_8403",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33807,
   "name": "b_840F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33818,
   "name": "j_841A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33848,
   "name": "b_8438",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33852,
   "name": "b_843C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33861,
   "name": "b_8445",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33899,
   "name": "r_846B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33900,
   "name": "j_846C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33911,
   "name": "j_8477",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33943,
   "name": "b_8497",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33952,
   "name": "credits_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33954,
   "name": "b_84A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33996,
   "name": "credits_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33998,
   "name": "b_84CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34038,
   "name": "credits_clear_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34059,
   "name": "credits_clear_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34080,
   "name": "credits_col_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34105,
   "name": "j_8539",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34107,
   "name": "b_853B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34110,
   "name": "a_853E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34111,
   "name": "a_853F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34146,
   "name": "credits_col_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34170,
   "name": "credits_pages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34171,
   "name": "f_857B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 34180,
   "name": "credits_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35204,
   "name": "credits_text_8984",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35380,
   "name": "anim_kind",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35381,
   "name": "anim_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35382,
   "name": "anim_frame",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35383,
   "name": "anim_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35384,
   "name": "anim_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35388,
   "name": "anim_spin",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35389,
   "name": "anim_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35390,
   "name": "anim_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35391,
   "name": "anim_frames_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35396,
   "name": "anim_frames_0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35401,
   "name": "anim_frames_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35405,
   "name": "anim_spin_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35406,
   "name": "anim_arc",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35407,
   "name": "anim_arc_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35408,
   "name": "anim_arc_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35427,
   "name": "anim_spin_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35455,
   "name": "r_8A7F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35456,
   "name": "anim_arc_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35502,
   "name": "r_8AAE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35503,
   "name": "anim_step_next",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35543,
   "name": "r_8AD7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35544,
   "name": "b_8AD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35562,
   "name": "b_8AEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35580,
   "name": "b_8AFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35586,
   "name": "anim_pick",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35625,
   "name": "b_8B29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35637,
   "name": "b_8B35",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35656,
   "name": "b_8B48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35691,
   "name": "anim_show",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35750,
   "name": "b_8BA6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35756,
   "name": "title_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36012,
   "name": "title_colours_8cac",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36268,
   "name": "title_colours_8dac",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36524,
   "name": "title_colours_8eac",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36864,
   "name": "music_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36867,
   "name": "music_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36870,
   "name": "music_fade",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36871,
   "name": "voice_transpose",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36874,
   "name": "voice_tie",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36877,
   "name": "voice_flag10",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36880,
   "name": "voice_bend_step",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36883,
   "name": "voice_instr_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36886,
   "name": "music_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36887,
   "name": "music_tick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36888,
   "name": "voice_sid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36891,
   "name": "voice_gate",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36894,
   "name": "voice_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36897,
   "name": "voice_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36900,
   "name": "voice_repeat",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36903,
   "name": "music_fade_wait",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36904,
   "name": "voice_instr_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36907,
   "name": "voice_vibrato",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36910,
   "name": "voice_pulse_prog",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36913,
   "name": "voice_effects",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36916,
   "name": "voice_release",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36919,
   "name": "voice_instr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36922,
   "name": "voice_note",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36925,
   "name": "voice_vib_delay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36928,
   "name": "voice_vib_on",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36931,
   "name": "voice_vib_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36934,
   "name": "voice_vib_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36937,
   "name": "voice_vib_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36940,
   "name": "voice_vib_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36943,
   "name": "voice_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36946,
   "name": "voice_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36949,
   "name": "voice_pw_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36952,
   "name": "voice_pw_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36955,
   "name": "voice_wave",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36958,
   "name": "voice_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36961,
   "name": "voice_sr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36964,
   "name": "voice_pulse_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36967,
   "name": "voice_pulse_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36970,
   "name": "voice_pulse_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36973,
   "name": "voice_pulse_rate",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36976,
   "name": "voice_arp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36979,
   "name": "voice_arp_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36982,
   "name": "voice_arp_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36985,
   "name": "voice_arp_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36988,
   "name": "voice_arp_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36991,
   "name": "voice_wave_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36994,
   "name": "voice_note_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36997,
   "name": "voice_drum_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37000,
   "name": "music_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37024,
   "name": "b_90A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37032,
   "name": "b_90A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37040,
   "name": "b_90B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37067,
   "name": "r_90CB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37068,
   "name": "music_frame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37074,
   "name": "music_volume",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37080,
   "name": "b_90D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37149,
   "name": "b_911D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37166,
   "name": "b_912E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37168,
   "name": "b_9130",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37190,
   "name": "b_9146",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37195,
   "name": "b_914B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37205,
   "name": "b_9155",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37209,
   "name": "j_9159",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37213,
   "name": "music_stop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 37215,
   "name": "b_915F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37233,
   "name": "voice_next",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 37256,
   "name": "b_9188",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37270,
   "name": "b_9196",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37304,
   "name": "b_91B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37308,
   "name": "j_91BC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37320,
   "name": "b_91C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37332,
   "name": "b_91D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37344,
   "name": "b_91E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37359,
   "name": "j_91EF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37372,
   "name": "b_91FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37403,
   "name": "b_921B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37426,
   "name": "b_9232",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37442,
   "name": "b_9242",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37462,
   "name": "b_9256",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37467,
   "name": "a_925B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37472,
   "name": "b_9260",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37491,
   "name": "b_9273",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37543,
   "name": "b_92A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37561,
   "name": "b_92B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37567,
   "name": "b_92BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37593,
   "name": "b_92D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37608,
   "name": "b_92E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37614,
   "name": "b_92EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37628,
   "name": "j_92FC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37637,
   "name": "sid_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37652,
   "name": "b_9314",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37659,
   "name": "voice_effects_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37666,
   "name": "b_9322",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37697,
   "name": "b_9341",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37703,
   "name": "b_9347",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37755,
   "name": "b_937B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37763,
   "name": "b_9383",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37766,
   "name": "j_9386",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37833,
   "name": "j_93C9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37845,
   "name": "b_93D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37848,
   "name": "b_93D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37869,
   "name": "b_93ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37895,
   "name": "b_9407",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37914,
   "name": "j_941A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37945,
   "name": "b_9439",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37950,
   "name": "a_943E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37957,
   "name": "b_9445",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37967,
   "name": "b_944F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37983,
   "name": "b_945F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38019,
   "name": "b_9483",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38043,
   "name": "b_949B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38065,
   "name": "b_94B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38079,
   "name": "b_94BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38103,
   "name": "a_94D7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38112,
   "name": "b_94E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38131,
   "name": "a_94F3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38137,
   "name": "j_94F9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38145,
   "name": "b_9501",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38180,
   "name": "b_9524",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38188,
   "name": "b_952C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38189,
   "name": "a_952D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38219,
   "name": "b_954B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38228,
   "name": "a_9554",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38235,
   "name": "b_955B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38239,
   "name": "b_955F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38243,
   "name": "j_9563",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38268,
   "name": "b_957C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38277,
   "name": "b_9585",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38323,
   "name": "b_95B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38343,
   "name": "b_95C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38352,
   "name": "r_95D0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38353,
   "name": "set_freq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38366,
   "name": "f_95DE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38367,
   "name": "note_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38462,
   "name": "f_963E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38463,
   "name": "note_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38559,
   "name": "tune_orders",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38560,
   "name": "f_96A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 38565,
   "name": "music_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38566,
   "name": "tune_transpose",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38567,
   "name": "pattern_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38615,
   "name": "pattern_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38663,
   "name": "arp_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38670,
   "name": "arp_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38676,
   "name": "pulse_prog_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38681,
   "name": "pulse_prog_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38687,
   "name": "wave_prog_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38694,
   "name": "wave_prog_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38701,
   "name": "note_prog_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38708,
   "name": "note_prog_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38715,
   "name": "music_programs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38878,
   "name": "instruments",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38879,
   "name": "instruments_97df",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38880,
   "name": "instruments_97e0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38881,
   "name": "instruments_97e1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38882,
   "name": "instruments_97e2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38883,
   "name": "instruments_97e3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38884,
   "name": "instruments_97e4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38885,
   "name": "instruments_97e5",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39061,
   "name": "drum_tables",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39064,
   "name": "drum_tables_9898",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39068,
   "name": "tune_order_lists",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39248,
   "name": "tune_patterns",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40272,
   "name": "tune_patterns_9d50",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40955,
   "name": "tune_trailer",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 6144,
   "type": "line",
   "text": "the first picture's screen, 1,024 bytes the title copies to $0400 ($8006), 1,000 shown: two colours for each cell of the multicolour bitmap at $2000, high nibble the %01 pixels and low nibble the %10. The picture is the Infogrames armadillo with the Probe Software logo; the title sets bank 0, $D018 and white for border and background, and leaves the bitmap and multicolour modes as the boot set them ($D011 = $3B, $D016 = $D8)."
  },
  {
   "address": 6400,
   "type": "line",
   "text": "pic1_screen, continued: bytes $1900-$19FF of the block at $1800."
  },
  {
   "address": 6656,
   "type": "line",
   "text": "pic1_screen, continued: bytes $1A00-$1AFF of the block at $1800."
  },
  {
   "address": 6912,
   "type": "line",
   "text": "pic1_screen, continued: bytes $1B00-$1BFF of the block at $1800."
  },
  {
   "address": 7168,
   "type": "line",
   "text": "the first picture's colour RAM, 1,024 bytes the title copies to $D800 ($801E): the colour of the %11 pixels of each cell; 1,000 are shown."
  },
  {
   "address": 7424,
   "type": "line",
   "text": "pic1_colour, continued: bytes $1D00-$1DFF of the block at $1C00."
  },
  {
   "address": 7680,
   "type": "line",
   "text": "pic1_colour, continued: bytes $1E00-$1EFF of the block at $1C00."
  },
  {
   "address": 7936,
   "type": "line",
   "text": "pic1_colour, continued: bytes $1F00-$1FFF of the block at $1C00."
  },
  {
   "address": 8192,
   "type": "line",
   "text": "the first picture's multicolour bitmap, 8,000 bytes in video bank 0: the Infogrames armadillo and the Probe Software logo, shown while the title waits at $805E."
  },
  {
   "address": 9216,
   "type": "line",
   "text": "pic1_bitmap, continued: bytes $2400-$27FF of the block at $2000."
  },
  {
   "address": 10240,
   "type": "line",
   "text": "pic1_bitmap, continued: bytes $2800-$2BFF of the block at $2000."
  },
  {
   "address": 11264,
   "type": "line",
   "text": "pic1_bitmap, continued: bytes $2C00-$2FFF of the block at $2000."
  },
  {
   "address": 12288,
   "type": "line",
   "text": "pic1_bitmap, continued: bytes $3000-$33FF of the block at $2000."
  },
  {
   "address": 13312,
   "type": "line",
   "text": "pic1_bitmap, continued: bytes $3400-$37FF of the block at $2000."
  },
  {
   "address": 14336,
   "type": "line",
   "text": "pic1_bitmap, continued: bytes $3800-$3BFF of the block at $2000."
  },
  {
   "address": 15360,
   "type": "line",
   "text": "pic1_bitmap, continued: bytes $3C00-$3F3F of the block at $2000."
  },
  {
   "address": 16192,
   "type": "line",
   "text": "192 bytes after the first picture's bitmap, outside what the video chip shows: $7B up to $3F5B, then other bytes nothing reads."
  },
  {
   "address": 16384,
   "type": "line",
   "text": "the title scene's multicolour bitmap, 8,000 bytes in video bank 1, shown below the text band from raster line $A3."
  },
  {
   "address": 17408,
   "type": "line",
   "text": "pic2_bitmap, continued: bytes $4400-$47FF of the block at $4000."
  },
  {
   "address": 18432,
   "type": "line",
   "text": "pic2_bitmap, continued: bytes $4800-$4BFF of the block at $4000."
  },
  {
   "address": 19456,
   "type": "line",
   "text": "pic2_bitmap, continued: bytes $4C00-$4FFF of the block at $4000."
  },
  {
   "address": 20480,
   "type": "line",
   "text": "pic2_bitmap, continued: bytes $5000-$53FF of the block at $4000."
  },
  {
   "address": 21504,
   "type": "line",
   "text": "pic2_bitmap, continued: bytes $5400-$57FF of the block at $4000."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "pic2_bitmap, continued: bytes $5800-$5BFF of the block at $4000."
  },
  {
   "address": 23552,
   "type": "line",
   "text": "pic2_bitmap, continued: bytes $5C00-$5F3F of the block at $4000."
  },
  {
   "address": 24384,
   "type": "line",
   "text": "192 bytes after the title scene's bitmap, outside the picture: a $CF and then the power-on pattern of RAM the file was saved with (00 00 FF FF), broken at $5F6E, $5FC0 and $5FEE."
  },
  {
   "address": 25136,
   "type": "line",
   "text": "the title scene's screen below the text band, rows 14 to 24: two colours for each cell of the bitmap (high nibble the %01 pixels, low nibble the %10 pixels). Rows 0 to 13 of the screen are written by $8374."
  },
  {
   "address": 25576,
   "type": "line",
   "text": "16 bytes between the screen's last row and the sprite pointers, which the video chip does not show."
  },
  {
   "address": 25600,
   "type": "line",
   "text": "1,024 bytes between the screen and the sprites that nothing reads: the power-on pattern of RAM the file was saved with."
  },
  {
   "address": 26624,
   "type": "line",
   "text": "sprite pointer $A0's 64 bytes, a frame no animation uses (the first is $A1)."
  },
  {
   "address": 26688,
   "type": "line",
   "text": "the title scene's sprite frames, pointers $A1 to $D4 in bank 1: four sprites a frame for the two-by-two figure in its animations from $A1, $AD, $BD and $C1, and the thrown object's eight frames from $CD."
  },
  {
   "address": 27712,
   "type": "line",
   "text": "title_sprites, continued: bytes $6C40-$703F of the block at $6840."
  },
  {
   "address": 28736,
   "type": "line",
   "text": "title_sprites, continued: bytes $7040-$743F of the block at $6840."
  },
  {
   "address": 29760,
   "type": "line",
   "text": "title_sprites, continued: bytes $7440-$753F of the block at $6840."
  },
  {
   "address": 30016,
   "type": "line",
   "text": "704 bytes after the sprites that nothing reads: a $CF and the power-on pattern of RAM."
  },
  {
   "address": 30720,
   "type": "line",
   "text": "the text band's character set, 256 characters (the band reads it from $7800, $D018 = $8E): screen codes for the credits' letters, digits and marks; character 0 is blank."
  },
  {
   "address": 31744,
   "type": "line",
   "text": "title_font, continued: bytes $7C00-$7FFF of the block at $7800."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "the title, called by the script at $0806 once the TP file is loaded. Shows the first picture (its screen copied from $1800-$1BFF, its colours from $1C00-$1FFF, the bitmap at $2000 in video bank 0, white border and background) for a delay of 12 x 65,536 turns of the loop at $805E, then the title scene ($80D3, $8260, $8374): starts the tune ($9000 with A = 0), sets the raster interrupts ($827E) and loops until space or fire on joystick 2, or until both the credits ($83C9) and the tune ($9016) have ended. Space or fire first fades the tune out ($9006 = 5) and waits 120 frames ($80CE); then the raster interrupt is switched off, the screen blanked and it returns."
  },
  {
   "address": 32974,
   "type": "line",
   "text": "frames left of the wait before the title returns, counted down by the raster interrupt at $832D."
  },
  {
   "address": 32979,
   "type": "line",
   "text": "the title scene's machine: all RAM but I/O ($01 = $35), the CIAs' interrupts and timers off, video bank 1 ($4000), black border and background, a multicolour bitmap at $4000 with its screen at $6000 ($D018 = $80, $D011 = $3B, $D016 = $18), the raster interrupt off; points the NMI and reset vectors at an rti ($8183), so the RESTORE key does nothing; sprites 0 to 4 in colour 6 (blue) with the shared colours 14 and 0, and sprites 0 to 3 placed as a two-by-two block from x 169, y 161."
  },
  {
   "address": 33155,
   "type": "line",
   "text": "rti: the NMI handler while the title runs."
  },
  {
   "address": 33156,
   "type": "line",
   "text": "reads joystick 2 ($DC00) and goes on to $81AB."
  },
  {
   "address": 33177,
   "type": "line",
   "text": "unreached: the same read for joystick 1 ($DC01 with port B an input), which the jmp at $8196 skips."
  },
  {
   "address": 33195,
   "type": "line",
   "text": "turns a joystick byte into $8203 (left -1, right +1), $8204 (up -1, down +1) and $8205 (bit 4, fire: 0 when it is pressed)."
  },
  {
   "address": 33227,
   "type": "line",
   "text": "scans the keyboard: for each row, from row 0 to row 7 ($8207, one bit low), it looks for a column byte equal to one of $8207's (one key down in the row) and returns that key's code from the row's eight in $821F, through the pointer $820F/$8217; $FF when nothing is pressed. The title compares the code with $20, space."
  },
  {
   "address": 33283,
   "type": "line",
   "text": "the joystick's left or right, -1, 0 or +1 ($81AB); the title reads only the fire bit."
  },
  {
   "address": 33284,
   "type": "line",
   "text": "the joystick's up or down, -1, 0 or +1 ($81AB)."
  },
  {
   "address": 33285,
   "type": "line",
   "text": "0 while fire is held, 1 otherwise ($81AB)."
  },
  {
   "address": 33286,
   "type": "line",
   "text": "a byte no instruction names."
  },
  {
   "address": 33287,
   "type": "line",
   "text": "the row selects written to $DC00, indexed by X from 7 (row 0) down to 0 (row 7), which are also the column bytes $DC01 reads back with one key down: $7F, $BF, $DF, $EF, $F7, $FB, $FD, $FE."
  },
  {
   "address": 33295,
   "type": "line",
   "text": "the low bytes of the start of each row's eight key codes in $821F, with $8217 the high bytes: $821F for row 7 up to $8257 for row 0."
  },
  {
   "address": 33303,
   "type": "line",
   "text": "the high bytes of the rows' pointers ($82 each); from $821F, the 64 key codes, eight a row from row 7 to row 0, each row in the order of $8207 (the key on column 7 first): PETSCII for the letters and digits, $20 for space ($8222), small numbers for keys such as RUN/STOP and CONTROL."
  },
  {
   "address": 33375,
   "type": "line",
   "text": "the last code read_key returned."
  },
  {
   "address": 33376,
   "type": "line",
   "text": "copies the title scene's colours, 1,024 bytes from $8BAC, into colour RAM."
  },
  {
   "address": 33406,
   "type": "line",
   "text": "points $FFFE at the raster handler $82EE, enables the raster interrupt for line $F9, waiting until the beam is in the upper part of the frame to clear the line's bit 8, acknowledges the CIAs and turns interrupts on; then sprites 0 to 7 on and multicolour, none expanded."
  },
  {
   "address": 33468,
   "type": "line",
   "text": "a random number in A: 1 + $82E9 + $82EC (sec, then adc), then + $82ED with the carry out of that first sum, pushed into the shift register $82E8-$82ED (each byte moves one place up). Seeded at $8077 from $A2 (the low byte of the KERNAL's jiffy clock), the raster line and $D011."
  },
  {
   "address": 33512,
   "type": "line",
   "text": "the generator's six bytes, its new value at $82E8 and the five before it."
  },
  {
   "address": 33513,
   "type": "line",
   "text": "the generator's second byte, seeded from $A2 at $8077."
  },
  {
   "address": 33514,
   "type": "line",
   "text": "the generator's third byte."
  },
  {
   "address": 33515,
   "type": "line",
   "text": "the generator's fourth byte."
  },
  {
   "address": 33516,
   "type": "line",
   "text": "the generator's fifth byte, seeded from the raster line at $807F."
  },
  {
   "address": 33517,
   "type": "line",
   "text": "the generator's sixth byte, seeded from $D011 at $8085."
  },
  {
   "address": 33518,
   "type": "line",
   "text": "the raster interrupt for the top band, at line $0A from the second frame on: a text screen ($D011 = $1F) with the screen at $6000 and the characters at $7800 ($D018 = $8E), 40 columns with no scroll ($D016 = $08), background blue; arms line $A3 for $833B; then the sprites' animation ($8B6B, $8AAF, $8A63, $8A80), the tune ($9003) and the count-down $80CE."
  },
  {
   "address": 33595,
   "type": "line",
   "text": "the raster interrupt at line $A3: back to the multicolour bitmap ($D011 = $3F, $D016 = $18, $D018 = $80) on a black background; arms line $0A for $82EE and moves the credits ($83CA)."
  },
  {
   "address": 33652,
   "type": "line",
   "text": "fills the first fourteen rows of the screen at $6000 with $83A6's character for the row and colour RAM with $83B4's colour, a row at a time, by stepping its own store operands ($837C, $8382) 40 bytes on."
  },
  {
   "address": 33660,
   "type": "line",
   "text": "the low byte of the screen store in title_text_rows, stepped 40 bytes a row by $838D."
  },
  {
   "address": 33661,
   "type": "line",
   "text": "the high byte of the screen store in title_text_rows, stepped by $8398."
  },
  {
   "address": 33666,
   "type": "line",
   "text": "the low byte of the colour RAM store in title_text_rows, stepped with $837C by $8390."
  },
  {
   "address": 33667,
   "type": "line",
   "text": "the high byte of the colour RAM store in title_text_rows, stepped with $8382 by $8390 and $839D; the loop from here steps to the next row."
  },
  {
   "address": 33702,
   "type": "line",
   "text": "the character each of the fourteen text rows is filled with: 0 for the first thirteen, $66 for the fourteenth."
  },
  {
   "address": 33716,
   "type": "line",
   "text": "the colour of each of the fourteen text rows: 1 (white), and 6 (blue) for the fourteenth."
  },
  {
   "address": 33730,
   "type": "line",
   "text": "1 while a page of the credits is on its way in, showing or on its way out; 0 between pages."
  },
  {
   "address": 33731,
   "type": "line",
   "text": "which way the next page goes, flipped for each page: 0 in from the right and out to the left, 1 the other way."
  },
  {
   "address": 33732,
   "type": "line",
   "text": "how many columns of the page have moved, 0 to 39."
  },
  {
   "address": 33733,
   "type": "line",
   "text": "0 while a page moves in, 1 while it stays, 2 while it moves out."
  },
  {
   "address": 33734,
   "type": "line",
   "text": "a count-down: 50 frames before the first page, 20 after a page has moved out, 10 and then 35 a step while a page stays."
  },
  {
   "address": 33735,
   "type": "line",
   "text": "how many steps of $83C6 a page stays: 10, so 10 + 9 x 35 = 325 frames."
  },
  {
   "address": 33736,
   "type": "line",
   "text": "the page showing, 0 to 4."
  },
  {
   "address": 33737,
   "type": "line",
   "text": "set to 1 when the fifth page has stayed its time; from then $83CA does nothing, so that page stays on the screen, and the title loop waits for the tune."
  },
  {
   "address": 33738,
   "type": "line",
   "text": "the credits, once a frame from $833B: each of the five pages of six lines ($857A) comes in a column a frame from one side ($84A0 or $84CC moves the six rows, $8562 or $8520 fills the new column from the page), stays for 325 frames and leaves the same way, the column it leaves blanked ($850B or $84F6). The fifth page, HIT FIRE OR SPACE BAR TO CONTINUE, stays."
  },
  {
   "address": 33952,
   "type": "line",
   "text": "moves the six credit rows of the screen (every other row from $6028 to $61B8) one column left."
  },
  {
   "address": 33996,
   "type": "line",
   "text": "moves the six credit rows one column right."
  },
  {
   "address": 34038,
   "type": "line",
   "text": "blanks the first column of the six credit rows."
  },
  {
   "address": 34059,
   "type": "line",
   "text": "blanks the last column of the six credit rows."
  },
  {
   "address": 34080,
   "type": "line",
   "text": "copies column 39 - $83C4 of the page ($10/$11) into the first column of the six rows, by stepping its own store's operand ($853E) 80 bytes a row."
  },
  {
   "address": 34110,
   "type": "line",
   "text": "the low byte of the store's operand in credits_col_left and credits_col_right: $28 or $4F, the first or last column of the first credit row, stepped 80 bytes a row by $8553."
  },
  {
   "address": 34111,
   "type": "line",
   "text": "the high byte of the store's operand in credits_col_left and credits_col_right, set to $60 at $8536 and $8574 and stepped 80 bytes a row; the loop from here moves down a row."
  },
  {
   "address": 34146,
   "type": "line",
   "text": "copies column $83C4 of the page into the last column of the six rows, through the loop at $8539."
  },
  {
   "address": 34170,
   "type": "line",
   "text": "five pointers to the pages of the credits, 240 screen codes each (six lines of 40): $8584, $8674, $8764, $8854, $8944."
  },
  {
   "address": 34171,
   "type": "line",
   "text": "the high bytes of the five page pointers, interleaved with their low bytes from $857A."
  },
  {
   "address": 34180,
   "type": "line",
   "text": "the credits, five pages of six lines in screen codes: ORIGINAL PROGRAM AND ORGANISATION STEPHANE BAUDET; ORIGINAL STRATEGY SEQUENCE VINCENT BELLIARD; ARCADE GAMES ALAIN NAKACHE AND STEPHANE BAUDET; GRAPHICS ANIMATIONS AND GAGS DIDIER CHANFRAY; ORIGINAL SCENARIO P.AGRIPNIDIS, S.BAUDET, V.BELLIARD, D.CHANFRAY, S.TREVALLION; MUSIC, SOUND EFFECTS AND ANTHEMS C.CALLET; ANIMATED SEQUENCES PROGRAMMING A.CHARBONNIER; COMMODORE CONVERSION BY PROBE SOFTWARE; PROGRAMMER DARYL BOWERS; GRAPHIC DESIGNER LEE AMES; AUDIO CONVERSION JEROEN TEL; PRODUCER JO BONAR; and on the last page HIT FIRE OR SPACE BAR TO CONTINUE."
  },
  {
   "address": 35204,
   "type": "line",
   "text": "credits_text, continued: bytes $8984-$8A33 of the block at $8584."
  },
  {
   "address": 35380,
   "type": "line",
   "text": "which of four animations the sprites play, 0 to 3, picked at random ($8B02) when one ends."
  },
  {
   "address": 35381,
   "type": "line",
   "text": "the step within the animation."
  },
  {
   "address": 35382,
   "type": "line",
   "text": "the frame offset the step adds to the animation's first sprite pointer ($8A38)."
  },
  {
   "address": 35383,
   "type": "line",
   "text": "frames to the next step: 5, or 8 after a new animation is picked."
  },
  {
   "address": 35384,
   "type": "line",
   "text": "the first sprite pointer of each animation, for the four sprites of the two-by-two figure: $A1, $AD, $BD, $C1 (sprite data at $6840, $6B40, $6F40, $7040)."
  },
  {
   "address": 35388,
   "type": "line",
   "text": "animation 2's fifth sprite: its frame, 0 to 7, stepped down every third frame ($8A63)."
  },
  {
   "address": 35389,
   "type": "line",
   "text": "animation 2's fifth sprite's x position, 165."
  },
  {
   "address": 35390,
   "type": "line",
   "text": "animation 2's fifth sprite's y position, 100 at the start and 150 when animation 2 begins; moved by $8A50."
  },
  {
   "address": 35391,
   "type": "line",
   "text": "the frame offsets of animation 3's five steps: 0, 4, 8, 4, 0."
  },
  {
   "address": 35396,
   "type": "line",
   "text": "the frame offsets of animation 0's five steps: 0, 4, 0, 8, 0."
  },
  {
   "address": 35401,
   "type": "line",
   "text": "the frame offsets of animation 1's four steps: 0, 4, 8, 12."
  },
  {
   "address": 35405,
   "type": "line",
   "text": "frames to the next step of the fifth sprite's frame."
  },
  {
   "address": 35406,
   "type": "line",
   "text": "the step along $8A50, 0 to 18."
  },
  {
   "address": 35407,
   "type": "line",
   "text": "frames to the next step along the arc: 3."
  },
  {
   "address": 35408,
   "type": "line",
   "text": "nineteen moves of the fifth sprite's y, from -3 to +3, summing to 0: up and back down, a thrown object's arc."
  },
  {
   "address": 35427,
   "type": "line",
   "text": "in animation 2, every third frame steps the fifth sprite's frame $8A3C down by one, round 0 to 7."
  },
  {
   "address": 35456,
   "type": "line",
   "text": "in animation 2, adds $8A50's step to the fifth sprite's y every frame and takes the next step every third; at the end of the arc picks the next animation ($8B02)."
  },
  {
   "address": 35503,
   "type": "line",
   "text": "every fifth frame takes the next step of the animation playing ($8A3F, $8A44 or $8A49; animation 2 keeps frame 0) and, at its end, picks the next one ($8B02)."
  },
  {
   "address": 35586,
   "type": "line",
   "text": "picks the next animation from a random number ($82BC): below $40 animation 0, below $80 1, below $C0 2 (which also starts the fifth sprite at y 150), else 3; animations 1 to 3 never follow themselves (another number is drawn), 0 can. Resets the step."
  },
  {
   "address": 35691,
   "type": "line",
   "text": "writes the four sprite pointers of the figure at $63F8-$63FB from the animation's base and frame; in animation 2 also the fifth sprite's ($63FC = $CD + its frame) and its position, five sprites on; otherwise four."
  },
  {
   "address": 35756,
   "type": "line",
   "text": "the title scene's 1,024 bytes for colour RAM, 1,000 of them shown: the colour of the bitmap's %11 pixels in each cell of the picture at $4000."
  },
  {
   "address": 36012,
   "type": "line",
   "text": "title_colours, continued: bytes $8CAC-$8DAB of the block at $8BAC."
  },
  {
   "address": 36268,
   "type": "line",
   "text": "title_colours, continued: bytes $8DAC-$8EAB of the block at $8BAC."
  },
  {
   "address": 36524,
   "type": "line",
   "text": "title_colours, continued: bytes $8EAC-$8FAB of the block at $8BAC."
  },
  {
   "address": 36780,
   "type": "line",
   "text": "84 bytes after the colours that nothing reads, in the pattern of the machine's power-on RAM ($00 $00 $FF $FF), with $4A at $8FC0 and $EF at $8FEE: the memory the file was saved from."
  },
  {
   "address": 36864,
   "type": "line",
   "text": "the title tune's driver, by its entry vectors: $9000 starts tune A (jmp $9088), $9003 plays a frame (jmp $90CC). The title calls $9000 with A = 0 and $9003 once a frame from its raster interrupt ($832A)."
  },
  {
   "address": 36867,
   "type": "line",
   "text": "the driver's frame entry: jmp $90CC."
  },
  {
   "address": 36870,
   "type": "line",
   "text": "frames between steps of the fade-out, 0 for none: the title sets 5 when space or fire is pressed ($80AC), and a pattern can set it with the command $FC ($91F6)."
  },
  {
   "address": 36871,
   "type": "line",
   "text": "each voice's transpose, from the order list's bytes $80 and up (their low seven bits)."
  },
  {
   "address": 36874,
   "type": "line",
   "text": "1 when the next note of the voice is tied to this one (pattern command $FB): it keeps the instrument and gate."
  },
  {
   "address": 36877,
   "type": "line",
   "text": "$10 when the instrument's effect byte has bit 4 set ($92D4), else 0; the driver stores to it and never reads it."
  },
  {
   "address": 36880,
   "type": "line",
   "text": "counts frames of the end-of-note pitch drop ($941A)."
  },
  {
   "address": 36883,
   "type": "line",
   "text": "added to the instrument number of the voice's $C0 commands; from the order list's bytes $70 to $7F."
  },
  {
   "address": 36886,
   "type": "line",
   "text": "1 while the tune plays; 0 when it ends (order list $FE) or the fade-out reaches silence ($915D). The title waits for it."
  },
  {
   "address": 36887,
   "type": "line",
   "text": "frames left in the tick; reloaded from the speed $96A5, so a tick is speed + 1 frames."
  },
  {
   "address": 36888,
   "type": "line",
   "text": "each voice's offset of its registers in the SID: 0, 7, 14."
  },
  {
   "address": 36891,
   "type": "line",
   "text": "each voice's gate mask, ANDed into the waveform byte: $FF while the note sounds, $FE to release it."
  },
  {
   "address": 36894,
   "type": "line",
   "text": "ticks left of the voice's note."
  },
  {
   "address": 36897,
   "type": "line",
   "text": "the voice's note length in ticks, set by the pattern bytes $80-$9F (and $E0-$FF, a rest)."
  },
  {
   "address": 36900,
   "type": "line",
   "text": "how many more times the voice plays its pattern, from the order list's bytes $60 to $6F."
  },
  {
   "address": 36903,
   "type": "line",
   "text": "frames to the next step of the fade-out."
  },
  {
   "address": 36904,
   "type": "line",
   "text": "the instrument's fifth byte ($97E2): bit 3 keeps the voice's pulse width from note to note, the high nibble the release point."
  },
  {
   "address": 36907,
   "type": "line",
   "text": "the instrument's vibrato byte ($97E3): depth and speed."
  },
  {
   "address": 36910,
   "type": "line",
   "text": "the instrument's sixth byte ($97E4): the low nibble chooses a pulse program ($9714), the high nibble the vibrato's delay."
  },
  {
   "address": 36913,
   "type": "line",
   "text": "the instrument's last byte ($97E5): bit 7 runs a waveform and note program (the low nibble chooses it, $971F and $972D), bit 6 an arpeggio ($9707), bit 5 a pitch drop at the note's end, bit 4 sets $900D, and the low nibble without bit 7 a drum start ($9895)."
  },
  {
   "address": 36916,
   "type": "line",
   "text": "the tick of the note at which its gate is released: the instrument's release point, or the note's length if that is shorter."
  },
  {
   "address": 36919,
   "type": "line",
   "text": "the voice's instrument times 8, an index into the table at $97DE."
  },
  {
   "address": 36922,
   "type": "line",
   "text": "the note the voice plays, 0 to 95, or $FF for a rest."
  },
  {
   "address": 36925,
   "type": "line",
   "text": "ticks before the vibrato starts."
  },
  {
   "address": 36928,
   "type": "line",
   "text": "1 once the vibrato has started."
  },
  {
   "address": 36931,
   "type": "line",
   "text": "frames to the vibrato's next change of direction."
  },
  {
   "address": 36934,
   "type": "line",
   "text": "the vibrato's direction, 0 up, 1 down."
  },
  {
   "address": 36937,
   "type": "line",
   "text": "the vibrato's step, low byte: the distance to the next semitone shifted right by the depth."
  },
  {
   "address": 36940,
   "type": "line",
   "text": "the vibrato's step, high byte."
  },
  {
   "address": 36943,
   "type": "line",
   "text": "the frequency's low byte the next frame writes to the SID ($D400 + the voice's offset)."
  },
  {
   "address": 36946,
   "type": "line",
   "text": "the frequency's high byte for the SID."
  },
  {
   "address": 36949,
   "type": "line",
   "text": "the pulse width's low byte for the SID."
  },
  {
   "address": 36952,
   "type": "line",
   "text": "the pulse width's high nibble for the SID."
  },
  {
   "address": 36955,
   "type": "line",
   "text": "the waveform and gate byte for the SID's control register, ANDed with $901B as it is written."
  },
  {
   "address": 36958,
   "type": "line",
   "text": "the attack and decay for the SID."
  },
  {
   "address": 36961,
   "type": "line",
   "text": "the sustain and release for the SID."
  },
  {
   "address": 36964,
   "type": "line",
   "text": "the position in the voice's pulse program."
  },
  {
   "address": 36967,
   "type": "line",
   "text": "frames left of the pulse program's step."
  },
  {
   "address": 36970,
   "type": "line",
   "text": "the pulse sweep's direction, 0 up, 1 down."
  },
  {
   "address": 36973,
   "type": "line",
   "text": "how much the pulse width moves a frame."
  },
  {
   "address": 36976,
   "type": "line",
   "text": "the arpeggio the voice plays, from the pattern bytes $60 to $7F."
  },
  {
   "address": 36979,
   "type": "line",
   "text": "the step of the arpeggio, 0 to 2."
  },
  {
   "address": 36982,
   "type": "line",
   "text": "frames to the arpeggio's next step."
  },
  {
   "address": 36985,
   "type": "line",
   "text": "the arpeggio step's semitones above the note."
  },
  {
   "address": 36988,
   "type": "line",
   "text": "added to the arpeggio number of $60 commands ($924A); nothing stores to it, so it stays 0."
  },
  {
   "address": 36991,
   "type": "line",
   "text": "the position in the voice's waveform program."
  },
  {
   "address": 36994,
   "type": "line",
   "text": "the position in the voice's note program."
  },
  {
   "address": 36997,
   "type": "line",
   "text": "frames left of the drum start's first waveform."
  },
  {
   "address": 37000,
   "type": "line",
   "text": "starts tune A: A times 8 indexes the tune's entries ($FE); the tune's transpose ($96A6) goes into the add at $925A; the SID is cleared ($9305), the volume set to 15 (the operand at $90D2), the voices' state cleared, each voice released ($901B = $FE) at the start of its order list, and the tune turned on ($9016 = 1)."
  },
  {
   "address": 37068,
   "type": "line",
   "text": "one frame of the tune, while $9016 is set: the volume (the operand at $90D2) to $D418, each voice's shadow registers to the SID; a fade-out step every $9006 frames, the tune stopping at volume 0; then at the end of each tick, for each voice, the release of the gate at its release point and the next pattern byte when the note's time runs out ($9171); and every frame each voice's effects ($931B)."
  },
  {
   "address": 37074,
   "type": "line",
   "text": "the SID's volume, the operand of the lda at $90D1: 15 at the start, counted down by the fade-out."
  },
  {
   "address": 37213,
   "type": "line",
   "text": "silences the three voices (frequency 0) and turns the tune off ($9016 = 0)."
  },
  {
   "address": 37233,
   "type": "line",
   "text": "reads the voice's pattern ($F2,x through $96A7/$96D7, position $F5,x). At the pattern's end ($FF) it plays it again while $9024 counts down, then reads the voice's order list (through $969F, position $F8,x): $FF and a position loops it, $FE ends the tune, $80-$FF sets the transpose, $70-$7F the instrument offset, $60-$6F the repeats, and anything below is the next pattern. In the pattern, $FC and a byte sets the fade-out ($9006), $E0-$FF is a rest of that length, $C0-$DF an instrument, $80-$9F the note length, $60-$7F an arpeggio, and below $60 a note: the note plus the voice's and the tune's transposes. A new note takes its instrument's waveform, envelope, pulse and effects ($97DE), unless it is tied ($FB after it)."
  },
  {
   "address": 37467,
   "type": "line",
   "text": "the operand of the adc # that adds the tune's transpose to each note, written by the init ($9091); the code from here stores the note and starts it with its instrument."
  },
  {
   "address": 37637,
   "type": "line",
   "text": "sets the test bit and clears the gate of each voice, then zeroes the SID's registers $D400-$D41F."
  },
  {
   "address": 37659,
   "type": "line",
   "text": "one frame of a voice's effects. On a new note: a drum start ($9895: a first waveform for a few frames) and the vibrato's set-up ($97E3, $97E4). Then the vibrato, after its delay, sweeping the frequency up and down by a step derived from the next semitone; the pitch drop in the last five ticks of a note (bit 5 of $9031); the pulse program; the waveform and note programs (bit 7); the end of the drum start; and the arpeggio (bit 6)."
  },
  {
   "address": 37950,
   "type": "line",
   "text": "the operand of the sbc # of the end-of-note pitch drop, written at $942A and $9436 (half the step on every other frame); the code from here sets the frequency's high byte lower and goes on to the pulse program."
  },
  {
   "address": 38103,
   "type": "line",
   "text": "the operand of the cmp # with the pulse sweep's top limit for the pulse width's high byte, written at $9474 from the program's second byte; the code from here turns the upward sweep at the limit."
  },
  {
   "address": 38131,
   "type": "line",
   "text": "the operand of the cmp # with the pulse sweep's bottom limit for the pulse width's high byte, written at $946E from the program's first byte; the code from here turns the downward sweep at the limit and goes on to the waveform program."
  },
  {
   "address": 38189,
   "type": "line",
   "text": "the operand of the ldy # that picks the note program, written at $9503 with the waveform program's number; the code from here reads the voice's note program."
  },
  {
   "address": 38228,
   "type": "line",
   "text": "the operand of the lda # that holds the note program's step, written at $954B; the code from here adds it to the note (bit 7 clear) or takes it as a note of its own (bit 7 set) and sets the frequency."
  },
  {
   "address": 38353,
   "type": "line",
   "text": "the frequency of note A from the tables at $95DF (low bytes) and $963F (high), into the voice's shadow registers."
  },
  {
   "address": 38366,
   "type": "line",
   "text": "the rts of set_freq, which the vibrato also reads as the low byte of the note before note 0 ($93B2)."
  },
  {
   "address": 38367,
   "type": "line",
   "text": "the low bytes of the SID frequencies of the 96 notes; with $963F, note 1 is 0 (silence) and note 0 $F800, near the top of the SID's range."
  },
  {
   "address": 38462,
   "type": "line",
   "text": "the low byte of note 95's frequency, the last of $95DF's table; the high bytes start after it."
  },
  {
   "address": 38463,
   "type": "line",
   "text": "the high bytes of the SID frequencies of the 96 notes."
  },
  {
   "address": 38559,
   "type": "line",
   "text": "the start of each voice's order list for tune 0, three pointers: $989C, $98D3, $990E; a tune's entries are eight bytes apart ($9088), and only tune 0's are here."
  },
  {
   "address": 38560,
   "type": "line",
   "text": "the high bytes of the order-list pointers, interleaved with their low bytes from $969F, then the speed and the transpose."
  },
  {
   "address": 38565,
   "type": "line",
   "text": "frames per tick less one: 1, so a tick is two frames."
  },
  {
   "address": 38566,
   "type": "line",
   "text": "tune 0's transpose, $FF, which the init writes into the add at $925A: the add before it leaves the carry clear, so a note byte n plays note n - 1, plus the voice's transpose."
  },
  {
   "address": 38567,
   "type": "line",
   "text": "the low bytes of the 48 patterns' addresses."
  },
  {
   "address": 38615,
   "type": "line",
   "text": "the high bytes of the 48 patterns' addresses, which run from $9950 to $9FF3."
  },
  {
   "address": 38663,
   "type": "line",
   "text": "the low bytes of the arpeggios' addresses ($97C9 to $97DB), three semitone offsets each; the high bytes at $970E are $97."
  },
  {
   "address": 38670,
   "type": "line",
   "text": "the high bytes of the arpeggios' addresses, all $97."
  },
  {
   "address": 38676,
   "type": "line",
   "text": "the low bytes of the pulse programs' addresses, with the high bytes from $9719: programs 1 to 4 at $97AC, $97B1, $97B6 and $97BB; entry 0 is not used, since a low nibble of 0 means no program."
  },
  {
   "address": 38681,
   "type": "line",
   "text": "the high bytes of the pulse programs' addresses."
  },
  {
   "address": 38687,
   "type": "line",
   "text": "the low bytes of the waveform programs' addresses; the high bytes from $9726."
  },
  {
   "address": 38694,
   "type": "line",
   "text": "the high bytes of the waveform programs' addresses, all $97."
  },
  {
   "address": 38701,
   "type": "line",
   "text": "the low bytes of the note programs' addresses; the high bytes from $9734."
  },
  {
   "address": 38708,
   "type": "line",
   "text": "the high bytes of the note programs' addresses, all $97."
  },
  {
   "address": 38715,
   "type": "line",
   "text": "the waveform, note and pulse programs and the arpeggios the pointer tables before point into, each a list of bytes with $FF and a position to loop and $FE to hold; a pulse program's $FD sets a new width."
  },
  {
   "address": 38878,
   "type": "line",
   "text": "the instruments, eight bytes each: pulse width, waveform, attack and decay, sustain and release, flags and release point, vibrato, pulse program and vibrato delay, effects (the instrument number times 8 indexes them, $9037)."
  },
  {
   "address": 38879,
   "type": "line",
   "text": "instruments, continued: bytes $97DF-$97DF of the block at $97DE."
  },
  {
   "address": 38880,
   "type": "line",
   "text": "instruments, continued: bytes $97E0-$97E0 of the block at $97DE."
  },
  {
   "address": 38881,
   "type": "line",
   "text": "instruments, continued: bytes $97E1-$97E1 of the block at $97DE."
  },
  {
   "address": 38882,
   "type": "line",
   "text": "instruments, continued: bytes $97E2-$97E2 of the block at $97DE."
  },
  {
   "address": 38883,
   "type": "line",
   "text": "instruments, continued: bytes $97E3-$97E3 of the block at $97DE."
  },
  {
   "address": 38884,
   "type": "line",
   "text": "instruments, continued: bytes $97E4-$97E4 of the block at $97DE."
  },
  {
   "address": 38885,
   "type": "line",
   "text": "instruments, continued: bytes $97E5-$9894 of the block at $97DE."
  },
  {
   "address": 39061,
   "type": "line",
   "text": "the drum starts' two tables, three entries each from 1: lengths 1, 2, 2 at $9896 and first waveforms $81, $11, $41 at $9899 (the entry at $9898 is index 0, unused)."
  },
  {
   "address": 39064,
   "type": "line",
   "text": "drum_tables, continued: bytes $9898-$989B of the block at $9895."
  },
  {
   "address": 39068,
   "type": "line",
   "text": "the title tune's three order lists, voice 1 at $989C, voice 2 at $98D3, voice 3 at $990E: pattern numbers with repeats ($60-$6F), instrument offsets ($70-$7F) and transposes ($80 and up), each ending in $FF and the position to loop to."
  },
  {
   "address": 39248,
   "type": "line",
   "text": "the title tune's 48 patterns (addresses at $96A7/$96D7): notes below $60, arpeggios $60-$7F, lengths $80-$9F, instruments $C0-$DF, rests $E0-$FF, ties $FB, fade-outs $FC, each pattern ending in $FF."
  },
  {
   "address": 40272,
   "type": "line",
   "text": "tune_patterns, continued: bytes $9D50-$9FFA of the block at $9950."
  },
  {
   "address": 40955,
   "type": "line",
   "text": "five bytes after the last pattern that nothing reads, \"DCE00\" in ASCII."
  }
 ]
}