{
 "schema": 1,
 "platform": "c64",
 "game": "a-view-to-a-kill/intro",
 "build": null,
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    17408,
    18431,
    "screen RAM"
   ],
   [
    0,
    0,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    4,
    50,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    52,
    62,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    67,
    140,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    142,
    162,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    165,
    166,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    168,
    171,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    176,
    200,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    202,
    202,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    204,
    216,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    219,
    250,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    255,
    255,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    512,
    735,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    739,
    762,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    764,
    764,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    768,
    771,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    776,
    786,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    794,
    1023,
    "zero page or KERNAL work area the intro does not use"
   ],
   [
    1024,
    2047,
    "VIC bank 0 colour matrix and sprite pointers: bitmap_setup fills it with $02 and the sprite routines write the pointers; spaces at the hand-over"
   ],
   [
    7168,
    8191,
    "zero bytes after the credits character set: copy_banks copies them to $5C00, nothing reads them"
   ],
   [
    16384,
    32767,
    "VIC bank 1, all written at run time: copy_banks copies $0800-$3FF0 here, then $4400 is the credits screen, $4800 the character set copy (charset_copy) and $6000 the second bitmap buffer; the hand-over bytes are a stale near-copy of $0800-$3FFF"
   ],
   [
    40704,
    40767,
    "music_save's 64-byte buffer for the music state, written before it is read"
   ],
   [
    57344,
    65535,
    "RAM under the KERNAL ROM: $E000-$E9FF receives the tune from $8500 (copy_tune_start) and is read there by tune_read; what the hand-over holds in $E000-$FFFF is stale and never read, and the addresses the code calls there ($EA31, $FFBA-$FFE4) are KERNAL ROM routines"
   ],
   [
    36988,
    37023,
    "bytes between credits_newline and title_print, never executed or read: filler or stale bytes left in the image"
   ],
   [
    37086,
    37119,
    "three spare RTS bytes after title_print and stale bytes up to credit_lines, never executed or read: filler or stale bytes left in the image"
   ],
   [
    38041,
    39423,
    "stale bytes after the last credit string (fragments of screen and colour data), never executed or read: filler or stale bytes left in the image"
   ],
   [
    39462,
    39679,
    "stale bytes after dead_rti_stub, never executed or read: filler or stale bytes left in the image"
   ],
   [
    39840,
    40191,
    "spaces and stale bytes after title_rows, never executed or read: filler or stale bytes left in the image"
   ],
   [
    40235,
    40703,
    "stale bytes after stale_newline_copy, never executed or read: filler or stale bytes left in the image"
   ],
   [
    40768,
    40959,
    "stale bytes after music_save's buffer, ending in the text 'MOBOTIMON*', never executed or read: filler or stale bytes left in the image"
   ],
   [
    43651,
    45055,
    "stale bytes after the speech samples, never executed or read: filler or stale bytes left in the image"
   ],
   [
    47616,
    49151,
    "stale bytes after title_fragment, never executed or read: filler or stale bytes left in the image"
   ],
   [
    49617,
    49663,
    "stale bytes after music_restore, never executed or read: filler or stale bytes left in the image"
   ],
   [
    50099,
    50111,
    "stale bytes after logo_move, never executed or read: filler or stale bytes left in the image"
   ],
   [
    50372,
    50431,
    "fill after sparkle_loop, never executed or read: filler or stale bytes left in the image"
   ],
   [
    50669,
    50687,
    "fill after delay_unused, never executed or read: filler or stale bytes left in the image"
   ],
   [
    51129,
    51199,
    "fill after voice_reg_offset, never executed or read: filler or stale bytes left in the image"
   ],
   [
    51321,
    51455,
    "zeros after blood_step, never executed or read: filler or stale bytes left in the image"
   ],
   [
    51517,
    51711,
    "fill after shake, never executed or read: filler or stale bytes left in the image"
   ],
   [
    51892,
    51899,
    "five spare RTS bytes and fill after speech_and_fade, never executed or read: filler or stale bytes left in the image"
   ],
   [
    52039,
    52047,
    "fill after barrel_scroll, never executed or read: filler or stale bytes left in the image"
   ],
   [
    52205,
    52223,
    "fill after patched_scroll_start, never executed or read: filler or stale bytes left in the image"
   ],
   [
    52260,
    52271,
    "NOPs after irq_handler's dispatch, never executed or read: filler or stale bytes left in the image"
   ],
   [
    52291,
    52431,
    "fill after irq_mode1, never executed or read: filler or stale bytes left in the image"
   ],
   [
    52453,
    52470,
    "an unreachable JMP irq_music and a stray copy of its operand after irq_mode2, then fill; never executed or read: filler or stale bytes left in the image"
   ],
   [
    52561,
    52735,
    "an RTS and fill after scroll_copy_bank0, never executed or read: filler or stale bytes left in the image"
   ],
   [
    52821,
    53247,
    "fill after barrel_colour, never executed or read: filler or stale bytes left in the image"
   ],
   [
    53248,
    57343,
    "RAM under the I/O area: stale bytes (pieces of the older crack's menu code as at $8085, of the tune and of the credit text); never read, since the only code that banks the I/O out, tune_read, reads $E000-$E9FF"
   ]
  ],
  "extra": [
   [
    6144,
    8191,
    "character set"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 2047,
   "type": "Undefined"
  },
  {
   "start": 2048,
   "end": 6143,
   "type": "Byte"
  },
  {
   "start": 6144,
   "end": 8191,
   "type": "Undefined"
  },
  {
   "start": 8192,
   "end": 16383,
   "type": "Byte"
  },
  {
   "start": 16384,
   "end": 32767,
   "type": "Undefined"
  },
  {
   "start": 32768,
   "end": 32794,
   "type": "Code"
  },
  {
   "start": 32795,
   "end": 32799,
   "type": "Undefined"
  },
  {
   "start": 32800,
   "end": 32959,
   "type": "Code"
  },
  {
   "start": 32960,
   "end": 33023,
   "type": "Undefined"
  },
  {
   "start": 33024,
   "end": 34047,
   "type": "Screencode Text"
  },
  {
   "start": 34048,
   "end": 36607,
   "type": "Byte"
  },
  {
   "start": 36608,
   "end": 36863,
   "type": "PETSCII Text"
  },
  {
   "start": 36864,
   "end": 36929,
   "type": "Code"
  },
  {
   "start": 36930,
   "end": 36943,
   "type": "Undefined"
  },
  {
   "start": 36944,
   "end": 36986,
   "type": "Code"
  },
  {
   "start": 36987,
   "end": 37023,
   "type": "Undefined"
  },
  {
   "start": 37024,
   "end": 37085,
   "type": "Code"
  },
  {
   "start": 37086,
   "end": 37119,
   "type": "Undefined"
  },
  {
   "start": 37120,
   "end": 37374,
   "type": "Byte"
  },
  {
   "start": 37375,
   "end": 37375,
   "type": "Undefined"
  },
  {
   "start": 37376,
   "end": 38040,
   "type": "Screencode Text"
  },
  {
   "start": 38041,
   "end": 39423,
   "type": "Undefined"
  },
  {
   "start": 39424,
   "end": 39454,
   "type": "Code"
  },
  {
   "start": 39455,
   "end": 39455,
   "type": "Undefined"
  },
  {
   "start": 39456,
   "end": 39461,
   "type": "Code"
  },
  {
   "start": 39462,
   "end": 39679,
   "type": "Undefined"
  },
  {
   "start": 39680,
   "end": 39839,
   "type": "Screencode Text"
  },
  {
   "start": 39840,
   "end": 40191,
   "type": "Undefined"
  },
  {
   "start": 40192,
   "end": 40234,
   "type": "Code"
  },
  {
   "start": 40235,
   "end": 40959,
   "type": "Undefined"
  },
  {
   "start": 40960,
   "end": 41096,
   "type": "Code"
  },
  {
   "start": 41097,
   "end": 41098,
   "type": "Undefined"
  },
  {
   "start": 41099,
   "end": 41102,
   "type": "Code"
  },
  {
   "start": 41103,
   "end": 41103,
   "type": "Undefined"
  },
  {
   "start": 41104,
   "end": 41105,
   "type": "Word"
  },
  {
   "start": 41106,
   "end": 43650,
   "type": "Byte"
  },
  {
   "start": 43651,
   "end": 45055,
   "type": "Undefined"
  },
  {
   "start": 45056,
   "end": 47615,
   "type": "Byte"
  },
  {
   "start": 47616,
   "end": 49151,
   "type": "Undefined"
  },
  {
   "start": 49152,
   "end": 49399,
   "type": "Code"
  },
  {
   "start": 49400,
   "end": 49407,
   "type": "Undefined"
  },
  {
   "start": 49408,
   "end": 49509,
   "type": "Code"
  },
  {
   "start": 49510,
   "end": 49519,
   "type": "Undefined"
  },
  {
   "start": 49520,
   "end": 49571,
   "type": "Code"
  },
  {
   "start": 49572,
   "end": 49583,
   "type": "Undefined"
  },
  {
   "start": 49584,
   "end": 49595,
   "type": "Code"
  },
  {
   "start": 49596,
   "end": 49599,
   "type": "Undefined"
  },
  {
   "start": 49600,
   "end": 49616,
   "type": "Code"
  },
  {
   "start": 49617,
   "end": 49663,
   "type": "Undefined"
  },
  {
   "start": 49664,
   "end": 49789,
   "type": "Code"
  },
  {
   "start": 49790,
   "end": 49791,
   "type": "Undefined"
  },
  {
   "start": 49792,
   "end": 49883,
   "type": "Code"
  },
  {
   "start": 49884,
   "end": 49887,
   "type": "Undefined"
  },
  {
   "start": 49888,
   "end": 49917,
   "type": "Byte"
  },
  {
   "start": 49918,
   "end": 49919,
   "type": "Undefined"
  },
  {
   "start": 49920,
   "end": 50040,
   "type": "Code"
  },
  {
   "start": 50041,
   "end": 50045,
   "type": "Undefined"
  },
  {
   "start": 50046,
   "end": 50098,
   "type": "Code"
  },
  {
   "start": 50099,
   "end": 50111,
   "type": "Undefined"
  },
  {
   "start": 50112,
   "end": 50175,
   "type": "Byte"
  },
  {
   "start": 50176,
   "end": 50219,
   "type": "Code"
  },
  {
   "start": 50220,
   "end": 50223,
   "type": "Undefined"
  },
  {
   "start": 50224,
   "end": 50371,
   "type": "Code"
  },
  {
   "start": 50372,
   "end": 50431,
   "type": "Undefined"
  },
  {
   "start": 50432,
   "end": 50471,
   "type": "Code"
  },
  {
   "start": 50472,
   "end": 50495,
   "type": "Undefined"
  },
  {
   "start": 50496,
   "end": 50554,
   "type": "Code"
  },
  {
   "start": 50555,
   "end": 50591,
   "type": "Undefined"
  },
  {
   "start": 50592,
   "end": 50668,
   "type": "Code"
  },
  {
   "start": 50669,
   "end": 50687,
   "type": "Undefined"
  },
  {
   "start": 50688,
   "end": 50751,
   "type": "Byte"
  },
  {
   "start": 50752,
   "end": 51125,
   "type": "Code"
  },
  {
   "start": 51126,
   "end": 51128,
   "type": "Byte"
  },
  {
   "start": 51129,
   "end": 51199,
   "type": "Undefined"
  },
  {
   "start": 51200,
   "end": 51242,
   "type": "Code"
  },
  {
   "start": 51243,
   "end": 51249,
   "type": "Undefined"
  },
  {
   "start": 51250,
   "end": 51262,
   "type": "Code"
  },
  {
   "start": 51263,
   "end": 51263,
   "type": "Undefined"
  },
  {
   "start": 51264,
   "end": 51320,
   "type": "Code"
  },
  {
   "start": 51321,
   "end": 51455,
   "type": "Undefined"
  },
  {
   "start": 51456,
   "end": 51516,
   "type": "Code"
  },
  {
   "start": 51517,
   "end": 51711,
   "type": "Undefined"
  },
  {
   "start": 51712,
   "end": 51784,
   "type": "Code"
  },
  {
   "start": 51785,
   "end": 51791,
   "type": "Undefined"
  },
  {
   "start": 51792,
   "end": 51834,
   "type": "Code"
  },
  {
   "start": 51835,
   "end": 51839,
   "type": "Undefined"
  },
  {
   "start": 51840,
   "end": 51891,
   "type": "Code"
  },
  {
   "start": 51892,
   "end": 51899,
   "type": "Undefined"
  },
  {
   "start": 51900,
   "end": 51964,
   "type": "Code"
  },
  {
   "start": 51965,
   "end": 51967,
   "type": "Undefined"
  },
  {
   "start": 51968,
   "end": 52038,
   "type": "Code"
  },
  {
   "start": 52039,
   "end": 52047,
   "type": "Undefined"
  },
  {
   "start": 52048,
   "end": 52120,
   "type": "Code"
  },
  {
   "start": 52121,
   "end": 52127,
   "type": "Undefined"
  },
  {
   "start": 52128,
   "end": 52199,
   "type": "Code"
  },
  {
   "start": 52200,
   "end": 52204,
   "type": "Byte"
  },
  {
   "start": 52205,
   "end": 52223,
   "type": "Undefined"
  },
  {
   "start": 52224,
   "end": 52259,
   "type": "Code"
  },
  {
   "start": 52260,
   "end": 52271,
   "type": "Undefined"
  },
  {
   "start": 52272,
   "end": 52290,
   "type": "Code"
  },
  {
   "start": 52291,
   "end": 52431,
   "type": "Undefined"
  },
  {
   "start": 52432,
   "end": 52452,
   "type": "Code"
  },
  {
   "start": 52453,
   "end": 52470,
   "type": "Undefined"
  },
  {
   "start": 52471,
   "end": 52533,
   "type": "Code"
  },
  {
   "start": 52534,
   "end": 52536,
   "type": "Undefined"
  },
  {
   "start": 52537,
   "end": 52560,
   "type": "Code"
  },
  {
   "start": 52561,
   "end": 52735,
   "type": "Undefined"
  },
  {
   "start": 52736,
   "end": 52820,
   "type": "Code"
  },
  {
   "start": 52821,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 1,
   "name": "zpa_01",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2,
   "name": "zpa_02",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3,
   "name": "zpa_03",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 51,
   "name": "zpa_33",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 63,
   "name": "zpa_3F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64,
   "name": "zpa_40",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 65,
   "name": "zpa_41",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 66,
   "name": "zpa_42",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 141,
   "name": "zpa_8D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 163,
   "name": "zpa_A3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 164,
   "name": "zpa_A4",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 167,
   "name": "zpa_A7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 172,
   "name": "zpa_AC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 173,
   "name": "zpa_AD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 174,
   "name": "zpa_AE",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 175,
   "name": "zpa_AF",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 201,
   "name": "zpa_C9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 203,
   "name": "zpa_CB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 217,
   "name": "zpa_D9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 218,
   "name": "zpa_DA",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 251,
   "name": "zpa_FB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 252,
   "name": "zpa_FC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 253,
   "name": "zpa_FD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 254,
   "name": "zpa_FE",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 736,
   "name": "a_02E0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 737,
   "name": "a_02E1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 738,
   "name": "a_02E2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 763,
   "name": "a_02FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 765,
   "name": "a_02FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 766,
   "name": "a_02FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 767,
   "name": "a_02FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 772,
   "name": "a_0304",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 773,
   "name": "a_0305",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 774,
   "name": "a_0306",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 775,
   "name": "a_0307",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 787,
   "name": "a_0313",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 788,
   "name": "a_0314",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 789,
   "name": "a_0315",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 790,
   "name": "a_0316",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 791,
   "name": "a_0317",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 792,
   "name": "a_0318",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 793,
   "name": "a_0319",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1280,
   "name": "f_0500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1536,
   "name": "f_0600",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1792,
   "name": "f_0700",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2040,
   "name": "a_07F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2041,
   "name": "a_07F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2042,
   "name": "a_07FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2048,
   "name": "spr_dot",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2112,
   "name": "spr_unused_21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2176,
   "name": "spr_walk0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2368,
   "name": "spr_walk1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2560,
   "name": "spr_walk2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2752,
   "name": "spr_walk3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2944,
   "name": "spr_walk4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3136,
   "name": "spr_walk5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3328,
   "name": "spr_walk6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3520,
   "name": "spr_walk7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3712,
   "name": "spr_turn0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3904,
   "name": "spr_turn1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "spr_logo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4480,
   "name": "spr_sparkle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4672,
   "name": "spr_unused_49",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5696,
   "name": "spr_unused_59",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6144,
   "name": "credits_charset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8192,
   "name": "barrel_bitmap_r0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9152,
   "name": "barrel_bitmap_r3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10112,
   "name": "barrel_bitmap_r6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11072,
   "name": "barrel_bitmap_r9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12032,
   "name": "barrel_bitmap_r12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12992,
   "name": "barrel_bitmap_r15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13952,
   "name": "barrel_bitmap_r18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14912,
   "name": "barrel_bitmap_r21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15872,
   "name": "barrel_bitmap_r24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18008,
   "name": "f_4658",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18088,
   "name": "f_46A8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18168,
   "name": "f_46F8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18248,
   "name": "f_4748",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18368,
   "name": "f_47C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18372,
   "name": "f_47C4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18408,
   "name": "f_47E8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18424,
   "name": "a_47F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18425,
   "name": "a_47F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18426,
   "name": "a_47FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18427,
   "name": "a_47FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "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": 18431,
   "name": "a_47FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32768,
   "name": "copy_tune_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32770,
   "name": "b_8002",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32772,
   "name": "copy_tune_src_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32775,
   "name": "copy_tune_dst_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32800,
   "name": "handover",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32808,
   "name": "b_8028",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32814,
   "name": "oldcrack_title_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32853,
   "name": "b_8055",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32866,
   "name": "b_8062",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32875,
   "name": "b_806B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32901,
   "name": "b_8085",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32909,
   "name": "b_808D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32917,
   "name": "b_8095",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32925,
   "name": "b_809D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32933,
   "name": "oldcrack_load",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33022,
   "name": "oldcrack_filename",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33024,
   "name": "oldcrack_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33280,
   "name": "oldcrack_screen_q2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33536,
   "name": "oldcrack_screen_q3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33792,
   "name": "oldcrack_screen_q4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34048,
   "name": "tune_voice1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34540,
   "name": "tune_voice2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35053,
   "name": "tune_voice2_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35569,
   "name": "tune_voice3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36451,
   "name": "tune_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36608,
   "name": "oldcrack_menu_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36864,
   "name": "credits_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36873,
   "name": "credits_print",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36891,
   "name": "b_901B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36901,
   "name": "j_9025",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36914,
   "name": "b_9032",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36944,
   "name": "credits_newline",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36964,
   "name": "b_9064",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36966,
   "name": "b_9066",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36967,
   "name": "newline_src_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36968,
   "name": "newline_src_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36970,
   "name": "newline_dst_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36971,
   "name": "newline_dst_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37024,
   "name": "title_print",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37026,
   "name": "b_90A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37042,
   "name": "b_90B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37058,
   "name": "b_90C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37074,
   "name": "b_90D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37120,
   "name": "credit_lines",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37376,
   "name": "str_blank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37379,
   "name": "str_albert_r_broccoli_s",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37398,
   "name": "str_a_view_to_a_kill",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37416,
   "name": "str_c_eon_productions_ltd",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37436,
   "name": "str_c_glidrose_publications_ltd",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37468,
   "name": "str_games_design",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37480,
   "name": "str_by",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37482,
   "name": "str_tigress_marketing_ltd",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37503,
   "name": "str_many_thanks_to",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37517,
   "name": "str_david_bishop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37529,
   "name": "str_chris_palmer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37541,
   "name": "str_programming_by_softstone_ltd",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37569,
   "name": "str_thanks_to_tony_knight",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37590,
   "name": "str_and_his_team",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37602,
   "name": "str_daryl_bowers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37614,
   "name": "str_gary_burfield_wallis",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37634,
   "name": "str_grant_harrison",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37648,
   "name": "str_garry_knight",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37660,
   "name": "str_argentino_trombin",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37677,
   "name": "str_thanks_also_to_sadie",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37697,
   "name": "str_thanks_to_nichola_blades_and",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37725,
   "name": "str_robert_ritson_for_graphics_h",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37756,
   "name": "str_james_bond_theme_music",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37780,
   "name": "str_c_united_partnerships_ltd_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37810,
   "name": "str_thanks_to_tony_crowther",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37833,
   "name": "str_for_the_arrangment",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37851,
   "name": "str_a_view_to_a_kill_song",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37869,
   "name": "str_title_music_by",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37883,
   "name": "str_duran_duran",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37894,
   "name": "str_and",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37897,
   "name": "str_john_barry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37907,
   "name": "str_c_cbs_songs_ltd_1985",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37927,
   "name": "str_spaces_9427",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37948,
   "name": "str_spaces_943C",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37966,
   "name": "str_spaces_944E",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37985,
   "name": "str_speech_by_b_jones",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38003,
   "name": "str_now_james",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38014,
   "name": "str_your_mission_begins",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39424,
   "name": "dead_vectors",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39456,
   "name": "dead_rti_stub",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39680,
   "name": "title_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39720,
   "name": "title_row_presents",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39760,
   "name": "title_row_as",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39800,
   "name": "title_row_bond",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40192,
   "name": "stale_newline_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40212,
   "name": "b_9D14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40214,
   "name": "b_9D16",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40215,
   "name": "a_9D17",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40216,
   "name": "a_9D18",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40218,
   "name": "a_9D1A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40219,
   "name": "a_9D1B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40704,
   "name": "f_9F00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40960,
   "name": "speech_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41000,
   "name": "j_A028",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41004,
   "name": "j_A02C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41014,
   "name": "b_A036",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41020,
   "name": "j_A03C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41049,
   "name": "b_A059",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41054,
   "name": "b_A05E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41059,
   "name": "b_A063",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41067,
   "name": "speech_bit1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41088,
   "name": "speech_bit0",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41099,
   "name": "speech_pad",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41104,
   "name": "speech_length",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41106,
   "name": "speech_data",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42130,
   "name": "speech_data_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43154,
   "name": "speech_data_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45056,
   "name": "title_fragment",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46080,
   "name": "title_fragment_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47104,
   "name": "title_fragment_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49152,
   "name": "rolling_dots",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49213,
   "name": "b_C03D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49215,
   "name": "b_C03F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49225,
   "name": "b_C049",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49247,
   "name": "b_C05F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49251,
   "name": "dot_delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49253,
   "name": "b_C065",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49256,
   "name": "b_C068",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49268,
   "name": "bitmap_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49298,
   "name": "b_C092",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49328,
   "name": "b_C0B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49376,
   "name": "bitmap_base",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 49408,
   "name": "white_wipe",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49412,
   "name": "b_C104",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49491,
   "name": "b_C153",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49494,
   "name": "b_C156",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49520,
   "name": "swap_bank",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49549,
   "name": "show_bank1",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 49584,
   "name": "music_save",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49586,
   "name": "b_C1B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49600,
   "name": "music_restore",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49602,
   "name": "b_C1C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49664,
   "name": "bond_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49673,
   "name": "b_C209",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49699,
   "name": "b_C223",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49704,
   "name": "b_C228",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49740,
   "name": "b_C24C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49785,
   "name": "r_C279",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49786,
   "name": "b_C27A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49792,
   "name": "bond_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49888,
   "name": "walk_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49896,
   "name": "walk_frames_body",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49904,
   "name": "walk_frames_legs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49912,
   "name": "turn_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49914,
   "name": "turn_frames_body",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49916,
   "name": "turn_frames_legs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49920,
   "name": "after_barrel",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50014,
   "name": "b_C35E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50046,
   "name": "logo_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50048,
   "name": "b_C380",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50061,
   "name": "b_C38D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50064,
   "name": "b_C390",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50079,
   "name": "b_C39F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50090,
   "name": "b_C3AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50093,
   "name": "b_C3AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50112,
   "name": "logo_start_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50128,
   "name": "logo_msb_set",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50144,
   "name": "logo_msb_clear",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50160,
   "name": "logo_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50176,
   "name": "logo_inc",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50196,
   "name": "r_C414",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50197,
   "name": "logo_dec",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50219,
   "name": "r_C42B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50224,
   "name": "logo_assemble",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50228,
   "name": "j_C434",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50237,
   "name": "b_C43D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50239,
   "name": "b_C43F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50248,
   "name": "b_C448",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50294,
   "name": "sparkle_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 50296,
   "name": "b_C478",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50298,
   "name": "b_C47A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50306,
   "name": "b_C482",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50316,
   "name": "b_C48C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50337,
   "name": "b_C4A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50355,
   "name": "j_C4B3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50360,
   "name": "b_C4B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50362,
   "name": "b_C4BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50363,
   "name": "dead_delay_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50432,
   "name": "dead_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50448,
   "name": "b_C510",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50450,
   "name": "b_C512",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50469,
   "name": "j_C525",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50496,
   "name": "credits_scroll_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50510,
   "name": "credits_scroll",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50526,
   "name": "b_C55E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50532,
   "name": "b_C564",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50554,
   "name": "r_C57A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50592,
   "name": "intro_init",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50627,
   "name": "delay_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50653,
   "name": "b_C5DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50688,
   "name": "tune_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50689,
   "name": "a_C601",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50690,
   "name": "a_C602",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50691,
   "name": "tune_ctrl",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50692,
   "name": "a_C604",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50693,
   "name": "a_C605",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50694,
   "name": "tune_pw_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50695,
   "name": "a_C607",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50696,
   "name": "a_C608",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50697,
   "name": "tune_phase",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50698,
   "name": "tune_frames",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50699,
   "name": "tune_ptr_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50700,
   "name": "a_C60C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50701,
   "name": "a_C60D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50702,
   "name": "tune_ptr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50703,
   "name": "a_C60F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50704,
   "name": "a_C610",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50705,
   "name": "tune_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50706,
   "name": "a_C612",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50707,
   "name": "a_C613",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 50708,
   "name": "tune_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50711,
   "name": "tune_tmp_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50712,
   "name": "tune_work_pw",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50713,
   "name": "tune_work_ctrl",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50714,
   "name": "tune_work_ad",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50715,
   "name": "tune_work_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50716,
   "name": "tune_saved_port",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50717,
   "name": "tune_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50718,
   "name": "tune_vib",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50752,
   "name": "tune_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50817,
   "name": "tune_restart",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50859,
   "name": "tune_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50877,
   "name": "j_C6BD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50896,
   "name": "b_C6D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50899,
   "name": "b_C6D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50912,
   "name": "tune_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50914,
   "name": "b_C6E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50978,
   "name": "r_C722",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50979,
   "name": "voice_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51049,
   "name": "b_C769",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51059,
   "name": "tune_read",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51078,
   "name": "tune_check_end",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 51095,
   "name": "r_C797",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51096,
   "name": "tune_vibrato",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51098,
   "name": "b_C79A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51126,
   "name": "voice_reg_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51200,
   "name": "barrel_sequence",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 51209,
   "name": "barrel_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51238,
   "name": "b_C826",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51250,
   "name": "barrel_step_store",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 51264,
   "name": "blood_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 51272,
   "name": "b_C848",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51287,
   "name": "b_C857",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51305,
   "name": "b_C869",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51318,
   "name": "j_C876",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 51320,
   "name": "r_C878",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51456,
   "name": "shake",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51462,
   "name": "b_C906",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51487,
   "name": "b_C91F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51494,
   "name": "b_C926",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51496,
   "name": "b_C928",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51499,
   "name": "b_C92B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51712,
   "name": "copy_banks",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 51730,
   "name": "b_CA12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51762,
   "name": "b_CA32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51782,
   "name": "b_CA46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51792,
   "name": "bitmap_mask",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51810,
   "name": "b_CA62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51834,
   "name": "r_CA7A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51840,
   "name": "speech_and_fade",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51843,
   "name": "b_CA83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51845,
   "name": "b_CA85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51879,
   "name": "b_CAA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51900,
   "name": "gunshot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51907,
   "name": "b_CAC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51909,
   "name": "b_CAC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51952,
   "name": "b_CAF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51954,
   "name": "b_CAF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51968,
   "name": "barrel_scroll",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52017,
   "name": "b_CB31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52027,
   "name": "b_CB3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52048,
   "name": "credits_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52098,
   "name": "b_CB82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52100,
   "name": "b_CB84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52128,
   "name": "charset_copy",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52144,
   "name": "b_CBB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52146,
   "name": "b_CBB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52200,
   "name": "patched_scroll_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52224,
   "name": "irq_handler",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52237,
   "name": "b_CC0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52245,
   "name": "b_CC15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52251,
   "name": "b_CC1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52257,
   "name": "b_CC21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52272,
   "name": "irq_mode1",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52288,
   "name": "b_CC40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52432,
   "name": "irq_mode2",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52471,
   "name": "irq_music",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52480,
   "name": "scroll_copy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52485,
   "name": "b_CD05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52507,
   "name": "scroll_copy_loop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52511,
   "name": "b_CD1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52537,
   "name": "scroll_copy_bank0",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 52736,
   "name": "barrel_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52747,
   "name": "b_CE0B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52757,
   "name": "b_CE15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52761,
   "name": "b_CE19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52785,
   "name": "barrel_colour_left",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 52795,
   "name": "b_CE3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52799,
   "name": "b_CE3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55336,
   "name": "f_D828",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55376,
   "name": "f_D850",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55416,
   "name": "f_D878",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55456,
   "name": "f_D8A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55496,
   "name": "f_D8C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55536,
   "name": "f_D8F0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55552,
   "name": "f_D900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55576,
   "name": "f_D918",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55616,
   "name": "f_D940",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55656,
   "name": "f_D968",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55696,
   "name": "f_D990",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55736,
   "name": "f_D9B8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55776,
   "name": "f_D9E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55808,
   "name": "f_DA00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55816,
   "name": "f_DA08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55856,
   "name": "f_DA30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55896,
   "name": "f_DA58",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55936,
   "name": "f_DA80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55976,
   "name": "f_DAA8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56016,
   "name": "f_DAD0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56056,
   "name": "f_DAF8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56064,
   "name": "f_DB00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56096,
   "name": "f_DB20",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56136,
   "name": "f_DB48",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56176,
   "name": "f_DB70",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "f_E000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 59953,
   "name": "j_EA31",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 65466,
   "name": "s_FFBA",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65469,
   "name": "s_FFBD",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65490,
   "name": "s_FFD2",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65493,
   "name": "j_FFD5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 65508,
   "name": "s_FFE4",
   "type": "Subroutine",
   "kind": "auto"
  }
 ],
 "comments": [
  {
   "address": 1,
   "type": "line",
   "text": "Processor port. tune_read sets it to 0 (all RAM) to read the notes under the KERNAL; speech_and_fade clears bit 0 ($36) to see the speech player under the BASIC ROM. $37 otherwise."
  },
  {
   "address": 2,
   "type": "line",
   "text": "Step counter, used twice: bond_step's walk frames left ($22 at the start) and logo_assemble's steps left ($80); also the low byte of speech_play's end address."
  },
  {
   "address": 3,
   "type": "line",
   "text": "High byte of speech_play's end address ($AA80)."
  },
  {
   "address": 51,
   "type": "line",
   "text": "Bond's turn frame index for bond_step, 0 and 1; at 2 the gunshot fires."
  },
  {
   "address": 63,
   "type": "line",
   "text": "Gun-barrel step counter, $90 down to 0, one per barrel_step (every second frame): while it runs the picture scrolls and Bond walks, afterwards the blood runs. barrel_colour tests it too."
  },
  {
   "address": 64,
   "type": "line",
   "text": "Frame divider for irq_mode1: barrel_step runs when it counts down to 0, then it is reset to 2."
  },
  {
   "address": 65,
   "type": "line",
   "text": "Which bitmap buffer swap_bank shows next: 1 bank 1 ($6000), 2 bank 0 ($2000)."
  },
  {
   "address": 66,
   "type": "line",
   "text": "Set when scroll_copy has prepared the hidden buffer; cleared by swap_bank."
  },
  {
   "address": 141,
   "type": "line",
   "text": "Number of credit lines printed (credits_print); at $54 (84) sparkle_loop ends the intro. Cleared by intro_init."
  },
  {
   "address": 163,
   "type": "line",
   "text": "blood_step's pointer to the bitmap line being turned red, low byte; starts at $2000 (bitmap_base)."
  },
  {
   "address": 164,
   "type": "line",
   "text": "blood_step's pointer, high byte; barrel_scroll waits for it to reach $31 before the shake."
  },
  {
   "address": 167,
   "type": "line",
   "text": "Pixel lines of blood still to draw, $C0 (192) down to 0."
  },
  {
   "address": 172,
   "type": "line",
   "text": "bond_step's call counter: a new walk or turn frame every fourth call. Also the low byte of credits_setup's colour RAM pointer."
  },
  {
   "address": 173,
   "type": "line",
   "text": "bond_step's walk frame index (0-7). Also the high byte of credits_setup's colour RAM pointer and charset_copy's destination pointer."
  },
  {
   "address": 174,
   "type": "line",
   "text": "barrel_step's new fine X scroll value. Also a pointer low byte in credits_setup and charset_copy."
  },
  {
   "address": 175,
   "type": "line",
   "text": "shake's current X scroll value. Also a pointer high byte in credits_setup and charset_copy."
  },
  {
   "address": 201,
   "type": "line",
   "text": "bitmap_mask's AND mask, $FF, $FC, $F0, $C0, $00 in turn."
  },
  {
   "address": 203,
   "type": "line",
   "text": "KERNAL's current key ($40 none); read only by the unreachable oldcrack_title_tail."
  },
  {
   "address": 217,
   "type": "line",
   "text": "Note pointer of the voice being stepped, low byte (tune_step, voice_step)."
  },
  {
   "address": 218,
   "type": "line",
   "text": "Note pointer of the voice being stepped, high byte."
  },
  {
   "address": 251,
   "type": "line",
   "text": "Pointer $FB/$FC, low byte: one side of every copy loop (source in copy_banks and bitmap_mask, destination in scroll_copy), the fill target of bitmap_setup and barrel_colour, the credit_lines entry in credits_print, the sample pointer in speech_play."
  },
  {
   "address": 252,
   "type": "line",
   "text": "High byte of the $FB/$FC pointer."
  },
  {
   "address": 253,
   "type": "line",
   "text": "Pointer $FD/$FE, low byte: the other side of the copy loops (destination in copy_banks and bitmap_mask, source in scroll_copy), the text address in credits_print; speech_play keeps the length word here."
  },
  {
   "address": 254,
   "type": "line",
   "text": "High byte of the $FD/$FE pointer; speech_play's length high byte."
  },
  {
   "address": 736,
   "type": "line",
   "text": "Counters of the unreachable delay_unused, $02E0-$02E2."
  },
  {
   "address": 737,
   "type": "line",
   "text": "Middle counter of delay_unused."
  },
  {
   "address": 738,
   "type": "line",
   "text": "Inner counter of delay_unused."
  },
  {
   "address": 763,
   "type": "line",
   "text": "Set by credits_scroll when the fine scroll wraps, so a new line is printed."
  },
  {
   "address": 765,
   "type": "line",
   "text": "sparkle_loop's countdown ($10) before the credits start scrolling."
  },
  {
   "address": 766,
   "type": "line",
   "text": "Frame divider for irq_mode2, reset to 5 after each credits_scroll; 0 at the hand-over (see irq_mode2)."
  },
  {
   "address": 767,
   "type": "line",
   "text": "Fine Y scroll of the credits, 7 down to 0 (credits_scroll)."
  },
  {
   "address": 772,
   "type": "line",
   "text": "BASIC vectors $0304-$0307, written only by the unreachable dead_vectors."
  },
  {
   "address": 773,
   "type": "line",
   "text": "High byte of the BASIC vector at $0304; dead_vectors sets both bytes to $2A."
  },
  {
   "address": 774,
   "type": "line",
   "text": "BASIC vector byte $0306, set to $2A by dead_vectors."
  },
  {
   "address": 775,
   "type": "line",
   "text": "BASIC vector byte $0307, set to $2A by dead_vectors."
  },
  {
   "address": 787,
   "type": "line",
   "text": "IRQ mode for irq_handler: 0 music only, 1 gun barrel (barrel_step), 2 credits (credits_scroll). A byte of the KERNAL's work area that the KERNAL itself does not use."
  },
  {
   "address": 788,
   "type": "line",
   "text": "KERNAL IRQ vector: set to irq_handler by intro_init, back to $EA31 at the end (sparkle_loop)."
  },
  {
   "address": 789,
   "type": "line",
   "text": "High byte of the IRQ vector: $CC (irq_handler) from intro_init, $EA again at the end."
  },
  {
   "address": 790,
   "type": "line",
   "text": "BRK and NMI vectors $0316-$0319, written only by the unreachable dead_vectors."
  },
  {
   "address": 791,
   "type": "line",
   "text": "High byte of the BRK vector, $9A from dead_vectors."
  },
  {
   "address": 792,
   "type": "line",
   "text": "Low byte of the NMI vector, $2A from dead_vectors."
  },
  {
   "address": 793,
   "type": "line",
   "text": "High byte of the NMI vector, $9A from dead_vectors."
  },
  {
   "address": 2048,
   "type": "line",
   "text": "Sprite shape $20 (bank 0): a filled white disc, the rolling dot. rolling_dots points sprites 0 and 1 at it through $07F8/$07F9."
  },
  {
   "address": 2112,
   "type": "line",
   "text": "Sprite shape $21: never pointed at (no code writes $21 to a sprite pointer); a few vertical strokes, perhaps a draft logo piece."
  },
  {
   "address": 2176,
   "type": "line",
   "text": "Bond walking, frame 0 of 8: shapes $22, $23, $24 (head and shoulders, body, legs), shown by bond_step through walk_frames on sprites 0, 1 and 2 stacked 20 lines apart."
  },
  {
   "address": 2368,
   "type": "line",
   "text": "Bond walking, frame 1 of 8: shapes $25, $26, $27 (head and shoulders, body, legs), shown by bond_step through walk_frames on sprites 0, 1 and 2 stacked 20 lines apart."
  },
  {
   "address": 2560,
   "type": "line",
   "text": "Bond walking, frame 2 of 8: shapes $28, $29, $2A (head and shoulders, body, legs), shown by bond_step through walk_frames on sprites 0, 1 and 2 stacked 20 lines apart."
  },
  {
   "address": 2752,
   "type": "line",
   "text": "Bond walking, frame 3 of 8: shapes $2B, $2C, $2D (head and shoulders, body, legs), shown by bond_step through walk_frames on sprites 0, 1 and 2 stacked 20 lines apart."
  },
  {
   "address": 2944,
   "type": "line",
   "text": "Bond walking, frame 4 of 8: shapes $2E, $2F, $30 (head and shoulders, body, legs), shown by bond_step through walk_frames on sprites 0, 1 and 2 stacked 20 lines apart."
  },
  {
   "address": 3136,
   "type": "line",
   "text": "Bond walking, frame 5 of 8: shapes $31, $32, $33 (head and shoulders, body, legs), shown by bond_step through walk_frames on sprites 0, 1 and 2 stacked 20 lines apart."
  },
  {
   "address": 3328,
   "type": "line",
   "text": "Bond walking, frame 6 of 8: shapes $34, $35, $36 (head and shoulders, body, legs), shown by bond_step through walk_frames on sprites 0, 1 and 2 stacked 20 lines apart."
  },
  {
   "address": 3520,
   "type": "line",
   "text": "Bond walking, frame 7 of 8: shapes $37, $38, $39 (head and shoulders, body, legs), shown by bond_step through walk_frames on sprites 0, 1 and 2 stacked 20 lines apart."
  },
  {
   "address": 3712,
   "type": "line",
   "text": "Bond turning, frame 0 of the turn: shapes $3A, $3B, $3C (head, body with the arm swung out to the left holding the gun, legs), shown by bond_step through turn_frames once the walk ends."
  },
  {
   "address": 3904,
   "type": "line",
   "text": "Bond facing the viewer in a crouch with the gun held in front in both hands, frame 1 of the turn: shapes $3D, $3E, $3F; bond_step fires the gunshot as it shows this frame."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "The six multicolour pieces of the Domark 'DM' logo, shapes $40-$45 (seen in bank 1 at $5000-$517F): top-left, bottom-left, top-middle, bottom-middle, top-right, bottom-right, on sprites 2 to 7 in that order (after_barrel). They use pixel pairs %10 (the sprite colour, red) and %11 ($D026, white) only."
  },
  {
   "address": 4480,
   "type": "line",
   "text": "Three frames of a white star-shaped sparkle, shapes $46, $47, $48, cycled on sprites 0 and 1 over the logo by sparkle_loop."
  },
  {
   "address": 4672,
   "type": "line",
   "text": "Shapes $49-$58: never pointed at (the highest pointer the code writes is $48). Multicolour fragments of some other picture, apparently leftover graphics."
  },
  {
   "address": 5696,
   "type": "line",
   "text": "Shapes $59-$5F ($1640-$17FF), also never pointed at, the rest of the unused leftover shapes."
  },
  {
   "address": 6144,
   "type": "line",
   "text": "The credits' character set: 128 glyphs (1 KB) laid out as the ROM's upper/lower-case set, lower case at screen codes 1-26, upper case at $41-$5A, glyph 0 drawn as a copyright sign. charset_copy puts it at $4800 for bank 1; copy_banks also copies it earlier with the sprites."
  },
  {
   "address": 8192,
   "type": "line",
   "text": "Gun-barrel picture, multicolour bitmap at $2000 (VIC bank 0, copied to $6000 for bank 1), character rows 0-2: the top edge, one stray cell in column 0 and the upper rim of the barrel spiral in columns 29-39. Only pixel pairs %00 and %11 are used, so the picture shows in the colour RAM colour (black, then white after white_wipe, red where blood_step has passed)."
  },
  {
   "address": 9152,
   "type": "line",
   "text": "Gun-barrel picture, multicolour bitmap at $2000 (VIC bank 0, copied to $6000 for bank 1), character rows 3-5: the upper spiral: the left-hand swirl in columns 0-7 and the barrel's top in columns 23-39. Only pixel pairs %00 and %11 are used, so the picture shows in the colour RAM colour (black, then white after white_wipe, red where blood_step has passed)."
  },
  {
   "address": 10112,
   "type": "line",
   "text": "Gun-barrel picture, multicolour bitmap at $2000 (VIC bank 0, copied to $6000 for bank 1), character rows 6-8: the swirl in columns 0-9 and the rifling rings around the barrel opening in columns 25-39. Only pixel pairs %00 and %11 are used, so the picture shows in the colour RAM colour (black, then white after white_wipe, red where blood_step has passed)."
  },
  {
   "address": 11072,
   "type": "line",
   "text": "Gun-barrel picture, multicolour bitmap at $2000 (VIC bank 0, copied to $6000 for bank 1), character rows 9-11: the middle band: the swirl in columns 0-10 and the barrel's centre, the bright disc in columns 32-39. Only pixel pairs %00 and %11 are used, so the picture shows in the colour RAM colour (black, then white after white_wipe, red where blood_step has passed)."
  },
  {
   "address": 12032,
   "type": "line",
   "text": "Gun-barrel picture, multicolour bitmap at $2000 (VIC bank 0, copied to $6000 for bank 1), character rows 12-14: the lower middle: the swirl in columns 0-10, rifling in columns 22-30 and the disc in columns 31-39. Only pixel pairs %00 and %11 are used, so the picture shows in the colour RAM colour (black, then white after white_wipe, red where blood_step has passed)."
  },
  {
   "address": 12992,
   "type": "line",
   "text": "Gun-barrel picture, multicolour bitmap at $2000 (VIC bank 0, copied to $6000 for bank 1), character rows 15-17: the lower spiral: columns 0-10 and 22-39. Only pixel pairs %00 and %11 are used, so the picture shows in the colour RAM colour (black, then white after white_wipe, red where blood_step has passed)."
  },
  {
   "address": 13952,
   "type": "line",
   "text": "Gun-barrel picture, multicolour bitmap at $2000 (VIC bank 0, copied to $6000 for bank 1), character rows 18-20: the bottom of the spiral: columns 0-8 and 22-39 thinning out. Only pixel pairs %00 and %11 are used, so the picture shows in the colour RAM colour (black, then white after white_wipe, red where blood_step has passed)."
  },
  {
   "address": 14912,
   "type": "line",
   "text": "Gun-barrel picture, multicolour bitmap at $2000 (VIC bank 0, copied to $6000 for bank 1), character rows 21-23: the last traces of the spiral in rows 21-22; row 23 is empty. Only pixel pairs %00 and %11 are used, so the picture shows in the colour RAM colour (black, then white after white_wipe, red where blood_step has passed)."
  },
  {
   "address": 15872,
   "type": "line",
   "text": "Gun-barrel bitmap, row 24 ($3E00-$3F3F): empty; the scroll copies only rows 0-23 and colour RAM for row 24 stays black. The 192 bytes after it, $3F40-$3FFF, lie outside the 8,000-byte bitmap and are never displayed, though copy_banks and bitmap_mask pass over most of them."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "Start of the intro proper (the hand-over at $8020 jumps here). Copies the ten pages $8500-$8EFF, the theme tune's note lists, to $E000-$E9FF in the RAM under the KERNAL ROM, stepping the high bytes of its own LDA/STA operands ($8004, $8007) until the source page reaches $8F, then jumps to intro_init ($C5A0). It leaves those operands at $8F/$EA, so running it a second time (the dead menu's key 1 at $8082) would copy 255 pages round the whole memory."
  },
  {
   "address": 32772,
   "type": "line",
   "text": "Self-modified operand: the high byte of copy_tune_start's LDA $8500,Y, $85 at the hand-over, stepped to $8F; the byte count of the copy."
  },
  {
   "address": 32772,
   "type": "side",
   "text": "high byte of the LDA $8500,Y operand, stepped by the INC at $800E"
  },
  {
   "address": 32775,
   "type": "line",
   "text": "Self-modified operand: the high byte of copy_tune_start's STA $E000,Y, $E0 at the hand-over, stepped to $EA."
  },
  {
   "address": 32775,
   "type": "side",
   "text": "high byte of the STA $E000,Y operand, stepped by the INC at $800B"
  },
  {
   "address": 32800,
   "type": "line",
   "text": "Hand-over point: the depacker jumps here. Black border and background, one KERNAL GETIN (JSR $FFE4, result ignored, so a key already in the buffer is thrown away), then JMP $8000. These fourteen bytes sit over the start of an older crack's title-screen routine (its tail follows at $802E), so the whole older screen and menu below are now unreachable; the BOMBJACK crack of this image appears to have patched them out."
  },
  {
   "address": 32814,
   "type": "line",
   "text": "Unreachable: the tail of an older crack's title routine. Copies screen rows from $8200-$84FF to $0500-$07FF with white colour RAM (the first quarter, $8100 to $0400, was in the bytes now patched at $8020), loops back to $8028, then waits for a key through the KERNAL's $CB and prints the PETSCII menu at $8F00 with CHROUT. Keys: 1 restarts at $8000 (this intro), 2 to 5 put 'P', 'C', 'S' or 'F' in $80FE and go to oldcrack_load ($80A5)."
  },
  {
   "address": 32933,
   "type": "line",
   "text": "Unreachable, the older crack's file loader: SETLFS device 8, secondary address 1 ($FFBA); SETNAM with the two bytes at $80FE; pushes $08/$26 so that LOAD's RTS returns to $0827; then LOAD ($FFD5) with A=0. The file names are 'P*', 'C*', 'S*' and 'F*', which are not the file names of this image (the BASIC menu loads files 1 to 5)."
  },
  {
   "address": 33022,
   "type": "line",
   "text": "Two-byte file name for oldcrack_load: a letter the menu writes ($50 P, $43 C, $53 S, $46 F; at the hand-over $00) followed by '*' ($2A). Only the unreachable menu uses it."
  },
  {
   "address": 33024,
   "type": "line",
   "text": "An older crack's title screen, 40 x 25 screen codes ($8100-$84E7, with sprite pointers $3D-$3F at $84F8), meant for $0400 and shown only by the unreachable oldcrack_title_tail: 'THE DYNAMIC-DUO PRESENTS 'A VIEW TO A KILL' BROKEN BY THE DARK-ANGLE & THE EXECUTOR WHO ARE FORMING THE DYNAMIC-DUO ! GREETINGS TO: ANTIROM, ALPHA, HEADBANGER, ANTIPROTECT, RUEDIGER, TARZAN & ALEXANDER ! PRESS ANY KEY'. Not the game's and never displayed in this image."
  },
  {
   "address": 33280,
   "type": "line",
   "text": "oldcrack_screen, second quarter ($8200-$82FF, bound for $0500): 'BROKEN', 'BY', 'THE DARK-ANGLE'."
  },
  {
   "address": 33536,
   "type": "line",
   "text": "oldcrack_screen, third quarter ($8300-$83FF, bound for $0600): '&', 'THE EXECUTOR', 'WHO ARE FORMING THE DYNAMIC-DUO !'."
  },
  {
   "address": 33792,
   "type": "line",
   "text": "oldcrack_screen, last quarter ($8400-$84FF, bound for $0700): the greetings list, 'PRESS ANY KEY' and the old screen's sprite pointers."
  },
  {
   "address": 34048,
   "type": "line",
   "text": "The theme tune, voice 1 (copied to $E000 by copy_tune_start and played from there): 164 notes of three bytes, SID frequency high, frequency low, duration in note steps (20 steps a second). Its end, $86EB ($E1EB), is where tune_check_end restarts all three voices. The same tune data sits at $E000 in city-hall."
  },
  {
   "address": 34540,
   "type": "line",
   "text": "Theme tune, voice 2 ($E1EC when played), notes 1-171: same three-byte format; 343 notes in all, their durations adding up to exactly voice 1's 2,134 steps."
  },
  {
   "address": 35053,
   "type": "line",
   "text": "Theme tune, voice 2, notes 172-343 ($88ED-$8AF0)."
  },
  {
   "address": 35569,
   "type": "line",
   "text": "Theme tune, voice 3 ($E5F1 when played): 294 notes played, $8AF1-$8E62, the last of them starting just before voice 1 runs out and the tune restarts."
  },
  {
   "address": 36451,
   "type": "line",
   "text": "The 157 bytes after voice 3's last played note: a few note-like bytes and then zeros up to $8EFF. Copied to $E963-$E9FF but never read, since tune_check_end restarts before voice 3 gets there. City-hall's copy of the tune is identical up to $8E77 (its $E977) and differs after."
  },
  {
   "address": 36608,
   "type": "line",
   "text": "PETSCII for the older crack's menu (clear screen, white): 'PLEASE-CHOOSE / 1) SEE OPENING / 2) PARIS-CHASE / 3) CITY ESCAPE / 4) SILICON MINE / 5) FINALE / ENTER NUMBER', padded with colour codes to 256 bytes; printed only by the unreachable oldcrack_title_tail."
  },
  {
   "address": 36864,
   "type": "line",
   "text": "Points $FB/$FC at the first entry of credit_lines ($9100); called once by credits_setup."
  },
  {
   "address": 36873,
   "type": "line",
   "text": "Prints the next credit line on the bottom text row: reads the entry at ($FB) of credit_lines (address high byte, low byte, length), copies that many screen codes to $47C4 (row 24, column 4), pads with spaces to column 39, moves $FB/$FC on three bytes and counts the line in $8D. There is no end marker: sparkle_loop stops the scroll when $8D reaches 84, one short of the 85 entries."
  },
  {
   "address": 36944,
   "type": "line",
   "text": "Moves the whole text screen at $4400 up one row: a four-page copy from $43E8 to $43C0 whose LDA/STA operands it resets first ($9067/$9068 and $906A/$906B) and then steps a page at a time; the top row lands at $43C0-$43E7, outside the screen, and the sprite pointers at $47F8 are not touched. Then jumps to credits_print for the new bottom row."
  },
  {
   "address": 36967,
   "type": "line",
   "text": "Self-modified operands of credits_newline's copy loop: $9067/$9068 the LDA source ($43E8 at the start, high byte stepped per page), $906A/$906B the STA destination ($43C0, likewise)."
  },
  {
   "address": 36967,
   "type": "side",
   "text": "LDA operand low byte, set to $E8 by credits_newline"
  },
  {
   "address": 36968,
   "type": "line",
   "text": "Source page of credits_newline's copy, reset to $43 each call and incremented for each of the four pages."
  },
  {
   "address": 36968,
   "type": "side",
   "text": "LDA operand high byte, $43 then stepped"
  },
  {
   "address": 36970,
   "type": "line",
   "text": "Destination low byte of credits_newline's copy, reset to $C0 each call (one row, 40 bytes, below the source)."
  },
  {
   "address": 36970,
   "type": "side",
   "text": "STA operand low byte, set to $C0"
  },
  {
   "address": 36971,
   "type": "line",
   "text": "Destination page of credits_newline's copy, reset to $43 each call and incremented with the source page."
  },
  {
   "address": 36971,
   "type": "side",
   "text": "STA operand high byte, $43 then stepped"
  },
  {
   "address": 37024,
   "type": "line",
   "text": "Writes the four 40-column title rows at title_rows ($9B00) to screen rows 15, 17, 19 and 21 ($4658, $46A8, $46F8, $4748): 'D O M A R K', 'presents you', 'as', 'JAMES BOND 007', under the finished logo. They then scroll up with the credits."
  },
  {
   "address": 37120,
   "type": "line",
   "text": "The credits, one three-byte entry per screen line: text address high byte, low byte, length. 85 entries ($9100-$91FE); credits_print takes them in order and sparkle_loop stops after 84, so the last (a blank line) is never printed. Blank lines point at the two spaces at $9200."
  },
  {
   "address": 37376,
   "type": "line",
   "text": "Two spaces, the text of every blank credit line (47 of the 84 printed entries point here)."
  },
  {
   "address": 37379,
   "type": "line",
   "text": "Credit line 0, 19 screen codes: \"Albert R Broccoli's\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37398,
   "type": "line",
   "text": "Credit line 2, 18 screen codes: \"'A VIEW TO A KILL'\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37416,
   "type": "line",
   "text": "Credit line 4, 20 screen codes: \"(c)Eon Productions Ltd\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37436,
   "type": "line",
   "text": "Credit line 6, 32 screen codes: \"(c)Glidrose Publications Ltd. 1985\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37468,
   "type": "line",
   "text": "Credit line 9, 12 screen codes: \"GAMES DESIGN\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37480,
   "type": "line",
   "text": "Credit line 10, 2 screen codes: \"by\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37482,
   "type": "line",
   "text": "Credit line 11, 21 screen codes: \"TIGRESS MARKETING Ltd\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37503,
   "type": "line",
   "text": "Credit line 13, 14 screen codes: \"Many thanks to\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37517,
   "type": "line",
   "text": "Credit line 15, 12 screen codes: \"David Bishop\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37529,
   "type": "line",
   "text": "Credit line 16, 12 screen codes: \"Chris Palmer\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37541,
   "type": "line",
   "text": "Credit line 19, 28 screen codes: \"Programming by SOFTSTONE Ltd\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37569,
   "type": "line",
   "text": "Credit line 21, 21 screen codes: \"Thanks to Tony Knight\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37590,
   "type": "line",
   "text": "Credit line 22, 12 screen codes: \"and his team\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37602,
   "type": "line",
   "text": "Credit line 24, 12 screen codes: \"Daryl Bowers\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37614,
   "type": "line",
   "text": "Credit line 26, 20 screen codes: \"Gary Burfield-Wallis\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37634,
   "type": "line",
   "text": "Credit line 28, 14 screen codes: \"Grant Harrison\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37648,
   "type": "line",
   "text": "Credit line 30, 12 screen codes: \"Garry Knight\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37660,
   "type": "line",
   "text": "Credit line 32, 17 screen codes: \"Argentino Trombin\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37677,
   "type": "line",
   "text": "Credit line 34, 20 screen codes: \"Thanks also to Sadie\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37697,
   "type": "line",
   "text": "Credit line 36, 28 screen codes: \"Thanks to Nichola Blades and\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37725,
   "type": "line",
   "text": "Credit line 37, 31 screen codes: \"Robert Ritson for graphics help\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37756,
   "type": "line",
   "text": "Credit line 40, 24 screen codes: \"'James Bond' theme music\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37780,
   "type": "line",
   "text": "Credit line 41, 30 screen codes: \"(c)United Partnerships Ltd. 1982\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37810,
   "type": "line",
   "text": "Credit line 43, 23 screen codes: \"Thanks to Tony Crowther\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37833,
   "type": "line",
   "text": "Credit line 44, 18 screen codes: \"for the arrangment\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37851,
   "type": "line",
   "text": "Credit line 46, 18 screen codes: \"'A VIEW TO A KILL'\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37869,
   "type": "line",
   "text": "Credit line 48, 14 screen codes: \"title music by\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37883,
   "type": "line",
   "text": "Credit line 50, 11 screen codes: \"Duran Duran\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37894,
   "type": "line",
   "text": "Credit line 51, 3 screen codes: \"and\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37897,
   "type": "line",
   "text": "Credit line 52, 10 screen codes: \"John Barry\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37907,
   "type": "line",
   "text": "Credit line 54, 20 screen codes: \"(c)CBS Songs Ltd. 1985\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 37927,
   "type": "line",
   "text": "A blank credit line of 21 spaces (entry 56), one of three spacers before 'speech by B.-Jones'."
  },
  {
   "address": 37948,
   "type": "line",
   "text": "A blank credit line of 18 spaces (entry 57), one of three spacers before 'speech by B.-Jones'."
  },
  {
   "address": 37966,
   "type": "line",
   "text": "A blank credit line of 19 spaces (entry 60), one of three spacers before 'speech by B.-Jones'."
  },
  {
   "address": 37985,
   "type": "line",
   "text": "Credit line 61, 18 screen codes: \"speech by B.-Jones\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 38003,
   "type": "line",
   "text": "Credit line 66, 11 screen codes: \"Now, James,\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 38014,
   "type": "line",
   "text": "Credit line 71, 27 screen codes: \"your mission begins........\" (upper case as $41-$5A, lower case as 1-26, $00 the copyright sign)."
  },
  {
   "address": 39424,
   "type": "line",
   "text": "Unreachable (nothing in the image jumps here): sets the low bytes of the BRK and NMI vectors ($0316, $0318) and all four bytes of the BASIC vectors $0304-$0307 to $2A, the high bytes of BRK and NMI to $9A, and jumps to intro_init. $9A2A holds $FF, not code; ten bytes lower, $9A20, is a PLA/TAY/PLA/TAX/PLA/RTI exit (dead_rti_stub), so the vectors look meant for that stub and are off by ten. It never runs."
  },
  {
   "address": 39456,
   "type": "line",
   "text": "Unreachable six-byte exit, PLA/TAY/PLA/TAX/PLA/RTI: the end of a KERNAL-style interrupt handler, which is what dead_vectors' BRK/NMI vectors ($9A2A) seem to have been meant to reach."
  },
  {
   "address": 39680,
   "type": "line",
   "text": "Four 40-column rows of screen codes for title_print: 'D O M A R K' (spaced capitals), 'presents you', 'as', 'JAMES BOND 007', each padded with spaces; shown under the logo at rows 15-21."
  },
  {
   "address": 39720,
   "type": "line",
   "text": "Second title row: 'presents you' in lower case, centred."
  },
  {
   "address": 39760,
   "type": "line",
   "text": "Third title row: 'as'."
  },
  {
   "address": 39800,
   "type": "line",
   "text": "Fourth title row: 'JAMES BOND 007' in capitals."
  },
  {
   "address": 40192,
   "type": "line",
   "text": "Unreachable: an older copy of credits_newline assembled to run at $9D00 (it modifies its own operands at $9D17-$9D1B and ends with JMP $9009). Residue from an earlier build, like the bytes around it."
  },
  {
   "address": 40215,
   "type": "line",
   "text": "stale_newline_copy's own source operand low byte (the older build's equivalent of $9067)."
  },
  {
   "address": 40216,
   "type": "line",
   "text": "stale_newline_copy's source page operand, the older build's $9068."
  },
  {
   "address": 40218,
   "type": "line",
   "text": "stale_newline_copy's destination low byte operand, the older build's $906A."
  },
  {
   "address": 40219,
   "type": "line",
   "text": "stale_newline_copy's destination page operand, the older build's $906B."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "The digitised speech, the only sampled sound in this part and presumably what the credits call 'speech by B.-Jones': a one-bit sample player under the BASIC ROM, run with BASIC banked out and interrupts off. The first word at $A090 is the length counted from $A090 ($09F0, end $AA80); the pointer $FB/$FC reads at offset 2, so the samples are $A092-$AA81 plus one bit of $AA82. Each byte is shifted out from bit 7: a 1 sets the SID volume ($D418) to 15, a 0 sets it to 0, with padding NOPs so each bit takes about 100 to 130 cycles: some 9,400 bits a second, 2.2 seconds in all (measured by running it in the kit's 6502 simulator). Ends with $D418 = $18."
  },
  {
   "address": 41067,
   "type": "line",
   "text": "A 1 bit: volume 15, then a run of NOPs so the two bit paths take roughly the same time."
  },
  {
   "address": 41088,
   "type": "line",
   "text": "A 0 bit: volume 0, then speech_pad."
  },
  {
   "address": 41099,
   "type": "line",
   "text": "Three NOPs and RTS, the timing pad used by speech_bit0 and after each bit's end check."
  },
  {
   "address": 41104,
   "type": "line",
   "text": "Length of the speech data counted from this word: $09F0, so speech_play stops when its pointer reaches $AA80."
  },
  {
   "address": 41106,
   "type": "line",
   "text": "The speech samples, one bit per sample, most significant bit first, played at about 9,400 samples a second by speech_play: $A092-$A491, the first 1,024 bytes. A run of 707 zero bytes ($A453-$A715, about 0.6 s of silence) splits the speech into two phrases."
  },
  {
   "address": 42130,
   "type": "line",
   "text": "Speech samples, $A492-$A891 (continued from speech_data)."
  },
  {
   "address": 43154,
   "type": "line",
   "text": "Speech samples, $A892-$AA82, the end of the speech (the last played bit is bit 7 of $AA82)."
  },
  {
   "address": 45056,
   "type": "line",
   "text": "Hires bitmap fragment, 2,560 bytes laid out as eight 320-byte character rows: pieces of a picture with the words 'A VIEW TO A KILL' in large letters across rows 3-4. Only the unreachable dead_copy ($C500) refers to it (it would copy $B000-$B9FF to the bank-1 bitmap at $6000); the intro never shows it. Rows 0-2 here."
  },
  {
   "address": 46080,
   "type": "line",
   "text": "title_fragment continued, $B400-$B7FF: the 'A VIEW TO A KILL' lettering and the shapes above it."
  },
  {
   "address": 47104,
   "type": "line",
   "text": "title_fragment, last part, $B800-$B9FF."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "The white dots that open a Bond film: all sprites on, sprites 0 and 1 white with shape pointer $20 ($0800, a filled circle), both at X 24, Y $87. Five times: sprite 1 moves right one pixel per dot_delay, 66 pixels, then sprite 0 jumps 66 pixels to catch it up, setting the X high bits in $D010 when the sums pass 255. Blocking, about four seconds."
  },
  {
   "address": 49251,
   "type": "line",
   "text": "Busy-wait of 7 x 255 inner loops (about 9,000 cycles), the speed of rolling_dots."
  },
  {
   "address": 49268,
   "type": "line",
   "text": "Switches the screen to multicolour bitmap mode ($D011 bit 5, $D016 bit 4), fills the colour matrix $03E0-$07DF with $02 (pixel pairs %01 black, %10 red) and colour RAM $D800-$DBFF with 0 (pairs %11 black, so the picture starts invisible), moves sprites 0 and 1 to X $110, Y $10 (above the visible area), sets 38 columns with X scroll 7, falls into bitmap_base ($C0E0)."
  },
  {
   "address": 49376,
   "type": "line",
   "text": "Second half of bitmap_setup: bitmap at $2000 ($D018 bit 3), blood pointer $A3/$A4 = $2000 and blood line count $A7 = $C0 (192 pixel lines) for blood_step, then runs rolling_dots ($C000) to its end."
  },
  {
   "address": 49408,
   "type": "line",
   "text": "Reveals the gun-barrel picture from the right: writes white (1) into colour RAM one column at a time, column 39 down to column 11 (29 columns), rows 0-22, with a delay of 16 x 255 loops between columns. Pixel pairs %11 turn from black to white."
  },
  {
   "address": 49520,
   "type": "line",
   "text": "Called by the IRQ each time the fine X scroll wraps: clears $42 so scroll_copy prepares the other buffer, and makes CIA 2 show VIC bank 1 ($4000, the $6000 bitmap) when $41 = 1, bank 0 ($0000, the $2000 bitmap) otherwise. The colour matrix and sprite pointers exist in both banks ($0400/$07F8 and $4400/$47F8)."
  },
  {
   "address": 49549,
   "type": "line",
   "text": "Entry of swap_bank that always selects VIC bank 1 ($DD00 bits 0-1 = %10) and clears $42; also called by speech_and_fade once the bitmap has been cleared."
  },
  {
   "address": 49584,
   "type": "line",
   "text": "Saves the 64 bytes of music-driver state $C600-$C63F to $9F00 before the gunshot and the speech."
  },
  {
   "address": 49600,
   "type": "line",
   "text": "Copies the 64 saved bytes at $9F00 back to $C600 and sets $D418 back to $1F (filter mode low-pass, volume 15), so the tune carries on where it stopped."
  },
  {
   "address": 49664,
   "type": "line",
   "text": "Bond walks in from the right, turns and fires (called by barrel_step every second frame). Advances the frame index $AD (0-7). While the step count $02 is not 0: moves sprites 0-2 one pixel left (clearing $D010 when X borrows past 0) and every fourth call ($AC) shows walk frame $AD from walk_frames and DEC $02. When $02 is 0: every fourth call shows turn frame $33 from turn_frames, and when $33 reaches 2 fires the gunshot (gunshot, $CABC). Shape pointers go to both screens, $07F8 and $47F8."
  },
  {
   "address": 49792,
   "type": "line",
   "text": "Prepares the walking Bond: sprites 0-2 black, hires, unexpanded, stacked at Y $7E, $92, $A6 (head, body, legs) and X $130 (off the right edge, $D010 = $FF), shapes $22/$23/$24, only sprites 0-2 enabled. Walk step count $02 = $22 (34 frames), animation frame $AD = 7, turn index $33 = 0. The $D01B writes ($FF then 0) end with the sprites in front of the picture."
  },
  {
   "address": 49888,
   "type": "line",
   "text": "Shape pointers for Bond's eight walk frames, three tables of eight read by bond_step with the frame index $AD: $C2E0 head ($22, $25 ... $37), $C2E8 body ($23 ... $38), $C2F0 legs ($24 ... $39)."
  },
  {
   "address": 49896,
   "type": "line",
   "text": "walk_frames' second table: body shapes $23, $26, $29, $2C, $2F, $32, $35, $38 for sprite 1."
  },
  {
   "address": 49904,
   "type": "line",
   "text": "walk_frames' third table: leg shapes $24, $27, $2A, $2D, $30, $33, $36, $39 for sprite 2."
  },
  {
   "address": 49912,
   "type": "line",
   "text": "Shape pointers for the two turn frames, three tables of two read by bond_step with $33: $C2F8 head ($3A, $3D), $C2FA body ($3B, $3E), $C2FC legs ($3C, $3F)."
  },
  {
   "address": 49914,
   "type": "line",
   "text": "turn_frames' body table: $3B, $3E for sprite 1."
  },
  {
   "address": 49916,
   "type": "line",
   "text": "turn_frames' legs table: $3C, $3F for sprite 2."
  },
  {
   "address": 49920,
   "type": "line",
   "text": "After the gun barrel: shows VIC bank 0, runs speech_and_fade ($CA80), sets up the credits screen (credits_setup, $CB50), then builds the Domark logo out of sprites 2-7: shapes $40-$45 (bank 1, $5000-$517F), multicolour with $D026 white, sprite colour red ($02), sprites 0 and 1 white; start positions from logo_start_pos ($C3C0), all eight sprites on, $D010 = $C0; then logo_assemble ($C430)."
  },
  {
   "address": 50046,
   "type": "line",
   "text": "One step of the logo pieces: for each position register of sprites 2-7 ($D004-$D00F, Y = 4 to 15) reads logo_dir ($C3F0): 0 leaves it, bit 7 set moves it one pixel back (logo_dec), otherwise one pixel on (logo_inc). For the Y registers, bit 6 holds the move back while the step count $02 is $6B or more (the first 22 of the 128 steps)."
  },
  {
   "address": 50112,
   "type": "line",
   "text": "Start positions for the Domark logo, copied to $D000-$D00F by after_barrel (X, Y for sprites 0-7): sprites 0 and 1 at 0,0 (the sparkles, placed later), sprite 2 at 0,0, 3 at 0,$FF, 4 at $98,0, 5 at $98,$FF, 6 at $30,0 and 7 at $30,$FF, 6 and 7 with the X high bit ($D010 = $C0): the six pieces start at the top and bottom edges, left, centre and right, and logo_move brings them together."
  },
  {
   "address": 50128,
   "type": "line",
   "text": "For logo_inc, indexed by sprite register (0-15): the $D010 bit of that register's sprite ($01, $01, $02, $02 ... $80, $80), ORed in when an X position passes 255."
  },
  {
   "address": 50144,
   "type": "line",
   "text": "For logo_dec, indexed by sprite register: the inverse masks ($FE, $FE, $FD ... $7F, $7F) that clear a sprite's $D010 bit when its X drops below 0."
  },
  {
   "address": 50160,
   "type": "line",
   "text": "Movement codes for logo_move, one per sprite register $D000-$D00F: 0 still, 1 add one each step, $80 subtract one, $C0 subtract one but only after the first 22 steps. Sprites 2-7: X +1, +1, 0, 0, -1, -1 and Y +1, -1 (late), +1, -1 (late), +1, -1 (late): in 128 steps the left pieces move 128 pixels right, the right ones 128 left, the top pieces 128 down and the bottom ones 106 up."
  },
  {
   "address": 50176,
   "type": "line",
   "text": "Adds 1 to sprite register $D000+Y; when it wraps to 0 on an X register, sets that sprite's $D010 high bit from logo_msb_set."
  },
  {
   "address": 50197,
   "type": "line",
   "text": "Subtracts 1 from sprite register $D000+Y; when it wraps to $FF on an X register, clears that sprite's $D010 high bit with logo_msb_clear."
  },
  {
   "address": 50224,
   "type": "line",
   "text": "Domark logo: 128 steps ($02 from $80) of logo_move with a delay of $20 x 255 loops each, bringing the six pieces in from the top and bottom edges of the screen. Then prints the title lines (title_print, $90A0), puts two white sparkle sprites (0 and 1, shapes $46/$47) at $7E,$75 and $B1,$9F, and enters sparkle_loop."
  },
  {
   "address": 50294,
   "type": "line",
   "text": "The intro's final loop: after a delay of $48 x 255, steps both sparkle shapes through $46, $47, $48. While no credit line has been printed ($8D = 0) it counts $02FD down from $10 and, on 0, switches the IRQ to mode 2 (the credits scroll). When 84 lines have been printed ($8D = $54) it puts the KERNAL's $EA31 back in $0314 and sets the SID volume to 0: the scroll and the music stop, and the sparkles go on for ever. There is no exit: this part never loads another."
  },
  {
   "address": 50363,
   "type": "line",
   "text": "Unreachable fragment after sparkle_loop: DEX/BNE into the middle of the JMP at $C4B8, DEY/BNE, JMP $C4B3. Left over from an earlier version of the loop."
  },
  {
   "address": 50432,
   "type": "line",
   "text": "Unreachable (no caller): copies $B000-$B9FF to $6000-$69FF and then loops on itself at $C525 for ever. The LDA $01 / AND #$FE at its start is discarded (never stored), so with BASIC banked in it would copy BASIC ROM. A leftover."
  },
  {
   "address": 50496,
   "type": "line",
   "text": "Selects 24 text rows ($D011 bit 3 clear) and sets the fine Y scroll counter $02FF to 7. Its LDA $D011 reads bit 7 as the current raster line's bit 8, not as the compare bit credits_setup wrote, so the compare line goes back to $0F0/$0F8 only if this runs while the raster is on lines 0-255; on lines 256-311 no raster interrupt would come again (open question)."
  },
  {
   "address": 50510,
   "type": "line",
   "text": "Every fifth frame in IRQ mode 2: moves the fine Y scroll ($D011 bits 0-2, counter $02FF) up one pixel; when it passes 0 it goes back to 7, sets $02FB and calls credits_newline ($9050) to move the text up one row and print the next line."
  },
  {
   "address": 50592,
   "type": "line",
   "text": "Intro set-up, reached from copy_tune_start. Calls tune_init ($C640), clears the IRQ mode $0313 and the credit-line counter $8D, enables the VIC raster interrupt (only) at line $F8, points the KERNAL's IRQ vector $0314 at irq_handler ($CC00), CLI, and jumps to copy_banks ($CA00). The CIA 1 timer interrupt stays on and still reaches the KERNAL through irq_handler."
  },
  {
   "address": 50627,
   "type": "line",
   "text": "Unreachable (no caller in the image): black border and background, then a three-level delay loop counting $02E0/$02E1/$02E2 down from $20/$FF/$FF, about 19 million cycles. A leftover like the other dead fragments at $C4BB and $C500."
  },
  {
   "address": 50688,
   "type": "line",
   "text": "Music driver state (the 64 bytes $C600-$C63F are saved and restored around the gunshot and the speech). $C600-$C602: attack/decay for voices 1-3, set by tune_init to $2E, $18, $1F."
  },
  {
   "address": 50689,
   "type": "line",
   "text": "Voice 2 attack/decay ($18)."
  },
  {
   "address": 50690,
   "type": "line",
   "text": "Voice 3 attack/decay ($1F)."
  },
  {
   "address": 50691,
   "type": "line",
   "text": "$C603-$C605: control register value for each voice when a note starts, $41 (pulse wave, gate on)."
  },
  {
   "address": 50692,
   "type": "line",
   "text": "Voice 2 control value ($41)."
  },
  {
   "address": 50693,
   "type": "line",
   "text": "Voice 3 control value ($41)."
  },
  {
   "address": 50694,
   "type": "line",
   "text": "$C606-$C608: pulse width high byte for each voice, $0C, $0D, $0C."
  },
  {
   "address": 50695,
   "type": "line",
   "text": "Voice 2 pulse width high ($0D)."
  },
  {
   "address": 50696,
   "type": "line",
   "text": "Voice 3 pulse width high ($0C)."
  },
  {
   "address": 50697,
   "type": "line",
   "text": "Tempo phase, 0 or 1: with 0 the next step comes after three frames, with 1 after two (tune_tick). $00 at the hand-over."
  },
  {
   "address": 50698,
   "type": "line",
   "text": "Frames since the last note step, counted by tune_tick; $01 at the hand-over."
  },
  {
   "address": 50699,
   "type": "line",
   "text": "$C60B-$C60D: low bytes of the three voices' note pointers; $C60E-$C610 the high bytes."
  },
  {
   "address": 50700,
   "type": "line",
   "text": "Voice 2 note pointer, low byte ($EC at the start)."
  },
  {
   "address": 50701,
   "type": "line",
   "text": "Voice 3 note pointer, low byte ($F1 at the start)."
  },
  {
   "address": 50702,
   "type": "line",
   "text": "$C60E-$C610: high bytes of the voices' note pointers, $E0, $E1, $E5 at the start of the tune."
  },
  {
   "address": 50703,
   "type": "line",
   "text": "Voice 2 note pointer, high byte ($E1 at the start)."
  },
  {
   "address": 50704,
   "type": "line",
   "text": "Voice 3 note pointer, high byte ($E5 at the start)."
  },
  {
   "address": 50705,
   "type": "line",
   "text": "$C611-$C613: duration counters, steps left of each voice's current note; 8 at the start."
  },
  {
   "address": 50706,
   "type": "line",
   "text": "Voice 2 duration counter."
  },
  {
   "address": 50707,
   "type": "line",
   "text": "Voice 3 duration counter."
  },
  {
   "address": 50708,
   "type": "line",
   "text": "$C614-$C616: each voice's current low frequency byte, the base that tune_vibrato adds its offset to."
  },
  {
   "address": 50711,
   "type": "line",
   "text": "Work byte of voice_step: the low frequency byte just read."
  },
  {
   "address": 50712,
   "type": "line",
   "text": "Work byte: the pulse width high byte of the voice being stepped."
  },
  {
   "address": 50713,
   "type": "line",
   "text": "Work byte: the control value of the voice being stepped."
  },
  {
   "address": 50714,
   "type": "line",
   "text": "Work byte: the attack/decay of the voice being stepped."
  },
  {
   "address": 50715,
   "type": "line",
   "text": "Work byte: the duration counter of the voice being stepped, counted down by voice_step."
  },
  {
   "address": 50716,
   "type": "line",
   "text": "tune_read's copy of the processor port $01 while it reads with all RAM banked in."
  },
  {
   "address": 50717,
   "type": "line",
   "text": "Index of the voice being stepped (0-2) in tune_step."
  },
  {
   "address": 50718,
   "type": "line",
   "text": "$C61E-$C620: vibrato offsets, 0, 4, 8, 12 in turn, per voice; $C621-$C63F are not used but ride along in music_save's block."
  },
  {
   "address": 50752,
   "type": "line",
   "text": "Music driver set-up (the same driver sits at the same address in city-hall): per voice attack/decay $2E/$18/$1F ($C600-$C602), control $41 pulse with gate ($C603-$C605), pulse width high $0C/$0D/$0C ($C606-$C608); filter cutoff $0F/$5A, voice 1 through the filter, low-pass with volume 15 ($D415-$D418); falls into tune_restart."
  },
  {
   "address": 50817,
   "type": "line",
   "text": "Points the three voices at the start of their note lists, $E000, $E1EC and $E5F1 (copies of $8500, $86EC and $8AF1), and sets each duration counter to 8."
  },
  {
   "address": 50859,
   "type": "line",
   "text": "Once per raster interrupt: tune_vibrato, then the tempo divider. $C609 flips between 0 and 1 and $C60A counts frames, so the notes advance after three frames and two frames in turn (20 steps a second on PAL); on each step tune_step ($C6E0), then the end check tune_check_end."
  },
  {
   "address": 50912,
   "type": "line",
   "text": "One note step for each voice X = 0-2: copies the voice's pointer to $D9/$DA and its settings to the work bytes $C618-$C61B, calls voice_step, and stores back the counter and the advanced pointer."
  },
  {
   "address": 50979,
   "type": "line",
   "text": "Counts the voice's duration down; at 0 plays its next note from ($D9): gate off, attack/decay, frequency high then low (the low byte kept in $C614,X for the vibrato), pulse width high, control with gate, and the new duration from the note's third byte; the pointer moves on three bytes. Sustain/release is never written."
  },
  {
   "address": 51059,
   "type": "line",
   "text": "Reads the note byte ($D9),Y with the processor port $01 at 0, all RAM, so the note lists under the KERNAL ROM are visible; restores $01 from $C61C."
  },
  {
   "address": 51078,
   "type": "line",
   "text": "When voice 1's pointer reaches $E1EC, the end of its list, jumps to tune_restart: the whole tune starts over, whatever voices 2 and 3 are doing. Voice 3 has then played up to $E962 ($8E62)."
  },
  {
   "address": 51096,
   "type": "line",
   "text": "Every frame, for each voice: adds 4 (modulo 16) to its offset $C61E,X and writes the note's low frequency byte plus that offset to the SID, a small repeating rise in pitch on every note."
  },
  {
   "address": 51126,
   "type": "line",
   "text": "SID register offsets of the three voices, 0, 7, 14, used by voice_step and tune_vibrato."
  },
  {
   "address": 51200,
   "type": "line",
   "text": "The gun-barrel opening, first half: bitmap_setup ($C074, which also plays the rolling dots), bond_setup ($C280), then JMP barrel_scroll ($CB00)."
  },
  {
   "address": 51209,
   "type": "line",
   "text": "Every second frame in IRQ mode 1. While $3F is not 0: steps the fine X scroll ($D016 bits 0-2) down by one pixel, and when it passes 0 sets it back to 7 and calls swap_bank; then bond_step ($C200) and DEC $3F. Once $3F is 0 it runs blood_step instead."
  },
  {
   "address": 51250,
   "type": "line",
   "text": "barrel_step's store: new fine scroll $AE into $D016, bond_step, DEC $3F. (The seven bytes before it, $C82B-$C831, are unreachable junk.)"
  },
  {
   "address": 51264,
   "type": "line",
   "text": "The blood running down the barrel, one pixel line per call (every second frame, 192 calls while $A7 counts down): EORs with $55 the 40 bitmap bytes of one pixel line at ($A3), which turns white pixel pairs (%11, colour RAM) into red (%10, the matrix's low nibble $2) and black %00 into black %01. Steps $A3/$A4 to the next pixel line, adding $140 minus 7 at the foot of a character row. Works on the bank-0 bitmap at $2000, the one on show when the scroll ends."
  },
  {
   "address": 51456,
   "type": "line",
   "text": "Screen shake after the shot: 58 ($3A) steps, each writing the next fine X scroll value to $D016 (6 down to 0, then up to 7, and back down), with a delay of $30 x 255 loops between steps. The blood keeps running in the IRQ meanwhile."
  },
  {
   "address": 51712,
   "type": "line",
   "text": "Copies VIC bank 0 into bank 1 before anything is shown: $0800-$1FFF (sprite shapes and the credits character set) to $4800-$5FFF, and $2000-$3FF0 (the gun-barrel bitmap) to $6000-$7FF0, so both halves of the double-buffered scroll start with the same picture. Then jumps to barrel_sequence ($C800)."
  },
  {
   "address": 51792,
   "type": "line",
   "text": "One dissolve pass: ANDs every byte of the bank-0 bitmap $2000-$3FF0 with the mask in $C9, and writes the result both back and to the same place in bank 1 ($6000), 31 pages and 240 bytes."
  },
  {
   "address": 51840,
   "type": "line",
   "text": "Speech, then the picture dissolves. SEI, a delay of 255 x 255 loops, saves the music state (music_save, $C1B0), banks BASIC out ($01 bit 0 cleared) to reach the player at $A000 under the BASIC ROM, plays the speech (speech_play), banks BASIC back in, restores the music (music_restore), CLI. Then clears the bitmap in five passes of bitmap_mask with masks $FF, $FC, $F0, $C0, $00 (the right-hand pixel pairs of every byte go first) and shows VIC bank 1 (show_bank1)."
  },
  {
   "address": 51900,
   "type": "line",
   "text": "The shot, called by bond_step inside the IRQ: saves the music state, SEI, a delay, then voice 3 as noise: volume 15, frequency $BAAA, attack/decay $09, sustain/release $05, gate on ($81); a delay of 255 x 255 loops while it sounds; restores the music (music_restore, which also resets $D418 to $1F) and CLI. Music stops for the length of the shot."
  },
  {
   "address": 51968,
   "type": "line",
   "text": "Gun-barrel main loop. white_wipe ($C100) reveals the picture, clears the raster high bit, sets the scroll counter $3F = $90 (144 IRQ steps) and $40 = 3, switches the IRQ to mode 1 (INC $0313) at raster line $F0, marks bank 0 shown ($41 = 2, $42 = 0), then repeats scroll_copy ($CD00) and barrel_colour ($CE00) until $3F reaches 0. Then waits until blood_step's pointer high byte $A4 reaches $31 (about 13 character rows of blood), shakes the screen (shake, $C900) and goes on to after_barrel ($C300)."
  },
  {
   "address": 52048,
   "type": "line",
   "text": "Credits screen: text mode with 24 rows and Y scroll 7 ($D011 = $97), 38 columns, X scroll 7 ($D016 = $C7), credit pointer reset (credits_reset, $9000), colour RAM all white, the screen at $4400-$47FF all spaces; continues into charset_copy. The $97 also sets bit 7 of $D011, the raster compare's bit 8, moving the interrupt line to $1F0, which a PAL screen never reaches; only the read-modify-write in credits_scroll_init puts it back (see there)."
  },
  {
   "address": 52128,
   "type": "line",
   "text": "Copies the 128-glyph character set $1800-$1BFF to $4800, points $D018 at screen $4400 and characters $4800 (value $12 in VIC bank 1), multicolour off, CIA 2 to bank 1, and credits_scroll_init ($C540). The byte after its RTS starts '$02, STA $0313, RTS' (an LDA #$02 whose opcode the RTS has replaced), so an earlier version started the credits scroll here at once."
  },
  {
   "address": 52200,
   "type": "line",
   "text": "Five bytes after charset_copy's RTS: $02, $8D $13 $03, $60, the rest of LDA #$02 / STA $0313 / RTS, the RTS at $CBE7 having replaced the LDA's opcode. In an earlier version charset_copy started the credits scroll (IRQ mode 2) itself; here sparkle_loop does it after the logo."
  },
  {
   "address": 52224,
   "type": "line",
   "text": "Interrupt handler, through the KERNAL vector $0314. Acknowledges the raster interrupt; any other source (the CIA 1 timer) goes to the KERNAL's $EA31. On a raster interrupt it dispatches on $0313: 1 goes to irq_mode1 ($CC30, the gun-barrel scroll), 2 to irq_mode2 ($CCD0, the credits scroll), anything else straight to irq_music ($CCF7)."
  },
  {
   "address": 52272,
   "type": "line",
   "text": "IRQ mode 1: re-arms the raster compare at line $F0 and every second frame ($40 counts 2) calls barrel_step ($C809), then plays the music."
  },
  {
   "address": 52432,
   "type": "line",
   "text": "IRQ mode 2: re-arms the raster compare at line $F8 and every fifth frame ($02FE counts 5) calls credits_scroll ($C54E), then plays the music. $02FE is not set before the mode starts: it is 0 at the hand-over, so the first scroll step comes 256 frames (about five seconds) after the mode is switched on."
  },
  {
   "address": 52471,
   "type": "line",
   "text": "Common IRQ exit: one tick of the music driver (tune_tick, $C6AB), then pulls Y, X and A as the KERNAL's $FF48 pushed them and returns with RTI."
  },
  {
   "address": 52480,
   "type": "line",
   "text": "Main-loop half of the double-buffered horizontal scroll. Does nothing while $42 is set (the hidden buffer is ready). Otherwise shifts the hidden bitmap left by two cells (16 bytes) over 30 pages: with $41 = 2 (bank 0 shown) it copies $6010 onward to $6000 (bank 1) and sets $41 = 1; with $41 = 1 it copies $2010 onward to $2000 (bank 0) and sets $41 = 2; both set $42 = 1. Each row's first two cells move into the end of the row above, so the picture wraps diagonally."
  },
  {
   "address": 52507,
   "type": "line",
   "text": "Copy loop of scroll_copy, also called for the bank-0 buffer from $CD49: $1E pages from ($FD) to ($FB), then marks bank 1 as the one to show next ($41 = 1) and the buffer ready ($42 = 1)."
  },
  {
   "address": 52537,
   "type": "line",
   "text": "scroll_copy's path for $41 = 1: shifts bitmap $2010-$3E0F down to $2000 through scroll_copy_loop, then overrides its $41 with 2 (bank 0 next)."
  },
  {
   "address": 52736,
   "type": "line",
   "text": "Main-loop colour work during the scroll: when $3F is exactly $42 it whitens colour RAM columns 5-15 of rows 0-23; while $3F is below $3A it whitens columns 0-6 of rows 0-23 (every pass). Together with white_wipe this lets the picture show white as it scrolls in from the right. Returns without work otherwise."
  },
  {
   "address": 52785,
   "type": "line",
   "text": "barrel_colour's second case: colour RAM columns 0-6 of rows 0-23 set to white."
  }
 ]
}