{
 "schema": 1,
 "platform": "c64",
 "game": "a-view-to-a-kill/mine",
 "build": null,
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    16384,
    17407,
    "screen RAM"
   ],
   [
    1024,
    2047,
    "the KERNAL text screen at $0400, written by CHROUT on the prompt and welcome pages and by mission_complete; runtime output"
   ],
   [
    2048,
    2237,
    "the depacker stub of the packed file (BASIC SYS line, relocator, RLE unpacker that jumps to $5660); the packer, not the part"
   ],
   [
    2238,
    2303,
    "a stale copy of $0900-$0941 left below the unpacked image; nothing reads or runs it"
   ],
   [
    5120,
    5791,
    "play_buffer: 42 x 16 characters built at run time by map_to_buffer"
   ],
   [
    13568,
    13823,
    "carried_list and list_buf, the item lists built at run time (the image holds zeros and fill)"
   ],
   [
    2432,
    2559,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part; KERNAL-calling code fragments (CHROUT, CHKIN), much of it identical in the City Hall part"
   ],
   [
    2820,
    4095,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part; the same bytes as the City Hall part at $0C41-$0FCF and up to $0BFF"
   ],
   [
    4327,
    4351,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    4554,
    4607,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    5792,
    5887,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part; just past play_buffer"
   ],
   [
    6645,
    6655,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    6865,
    6911,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    7073,
    7199,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part; the variables end at entry_code_flag ($1BA0)"
   ],
   [
    7395,
    7423,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    7491,
    7503,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    9040,
    9055,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part"
   ],
   [
    9953,
    9966,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    11649,
    11666,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part ($00 $82, $FF/$FE, then $2A $2A $02 'E' 'T' 'U')"
   ],
   [
    11842,
    11868,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part (a colour-RAM fill routine fragment)"
   ],
   [
    12158,
    12287,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    12515,
    12590,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part (a code fragment that copies bytes through ($AE))"
   ],
   [
    13359,
    13566,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part after the object table copy"
   ],
   [
    15313,
    15359,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part"
   ],
   [
    15693,
    15711,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part"
   ],
   [
    15819,
    15871,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part ($EA bytes, then fill)"
   ],
   [
    16375,
    16383,
    "leftover bytes from an earlier build, reached by no code, table or pointer in this part"
   ],
   [
    16384,
    17407,
    "the screen of VIC bank 1, rebuilt by game_init from panel_screen and by buffer_to_screen; the unpacked image already holds a copy"
   ],
   [
    31488,
    31511,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part; between the last Bond shape ($EB) and the music variables"
   ],
   [
    32387,
    32639,
    "RAM fill (the emulator's power-up pattern of $FE/$FF runs and $7F $01 $01...), neither written nor read by the part; after welcome_text"
   ],
   [
    48312,
    48383,
    "72 bytes of $02 after panel_colours, beyond the copy's reach; never read"
   ]
  ],
  "extra": [
   [
    20480,
    22527,
    "character set"
   ],
   [
    7504,
    7959,
    "panel_screen, rows 0-10 of the status panel, copied to $4000 by game_init through a pointer"
   ],
   [
    17408,
    18431,
    "sprite shapes $10-$1F: May Day walking, two sprites per frame"
   ],
   [
    18432,
    20479,
    "panel_charset, the hires character set of the status panel"
   ],
   [
    22528,
    31487,
    "sprite shapes $60-$EB: Bond, four layers of 35 frames"
   ],
   [
    32640,
    32767,
    "sprite shapes $FE and $FF: May Day standing"
   ],
   [
    32768,
    47767,
    "the mine map, 100 rows of 150 tiles"
   ],
   [
    47873,
    48311,
    "panel_colours, colour RAM of the panel rows, copied by game_init through a pointer"
   ],
   [
    57344,
    65535,
    "the three-voice tune, read from the RAM under the KERNAL by music_fetch_byte through a pointer"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 2303,
   "type": "Undefined"
  },
  {
   "start": 2304,
   "end": 2431,
   "type": "Code"
  },
  {
   "start": 2432,
   "end": 2559,
   "type": "Undefined"
  },
  {
   "start": 2560,
   "end": 2639,
   "type": "Code"
  },
  {
   "start": 2640,
   "end": 2819,
   "type": "Screencode Text"
  },
  {
   "start": 2820,
   "end": 4095,
   "type": "Undefined"
  },
  {
   "start": 4096,
   "end": 4318,
   "type": "Code"
  },
  {
   "start": 4319,
   "end": 4319,
   "type": "Undefined"
  },
  {
   "start": 4320,
   "end": 4326,
   "type": "Code"
  },
  {
   "start": 4327,
   "end": 4351,
   "type": "Undefined"
  },
  {
   "start": 4352,
   "end": 4454,
   "type": "Code"
  },
  {
   "start": 4455,
   "end": 4463,
   "type": "Undefined"
  },
  {
   "start": 4464,
   "end": 4553,
   "type": "Code"
  },
  {
   "start": 4554,
   "end": 4607,
   "type": "Undefined"
  },
  {
   "start": 4608,
   "end": 5119,
   "type": "Byte"
  },
  {
   "start": 5120,
   "end": 5887,
   "type": "Undefined"
  },
  {
   "start": 5888,
   "end": 5976,
   "type": "Code"
  },
  {
   "start": 5977,
   "end": 5987,
   "type": "Undefined"
  },
  {
   "start": 5988,
   "end": 5995,
   "type": "Code"
  },
  {
   "start": 5996,
   "end": 5999,
   "type": "Undefined"
  },
  {
   "start": 6000,
   "end": 6029,
   "type": "Code"
  },
  {
   "start": 6030,
   "end": 6047,
   "type": "Undefined"
  },
  {
   "start": 6048,
   "end": 6086,
   "type": "Code"
  },
  {
   "start": 6087,
   "end": 6095,
   "type": "Undefined"
  },
  {
   "start": 6096,
   "end": 6397,
   "type": "Code"
  },
  {
   "start": 6398,
   "end": 6399,
   "type": "Undefined"
  },
  {
   "start": 6400,
   "end": 6516,
   "type": "Code"
  },
  {
   "start": 6517,
   "end": 6644,
   "type": "Byte"
  },
  {
   "start": 6645,
   "end": 6655,
   "type": "Undefined"
  },
  {
   "start": 6656,
   "end": 6785,
   "type": "Code"
  },
  {
   "start": 6786,
   "end": 6799,
   "type": "Undefined"
  },
  {
   "start": 6800,
   "end": 6864,
   "type": "Code"
  },
  {
   "start": 6865,
   "end": 7199,
   "type": "Undefined"
  },
  {
   "start": 7200,
   "end": 7394,
   "type": "Code"
  },
  {
   "start": 7395,
   "end": 7423,
   "type": "Undefined"
  },
  {
   "start": 7424,
   "end": 7490,
   "type": "Code"
  },
  {
   "start": 7491,
   "end": 7503,
   "type": "Undefined"
  },
  {
   "start": 7504,
   "end": 7959,
   "type": "Byte"
  },
  {
   "start": 7960,
   "end": 8471,
   "type": "Undefined"
  },
  {
   "start": 8472,
   "end": 8525,
   "type": "Code"
  },
  {
   "start": 8526,
   "end": 8527,
   "type": "Undefined"
  },
  {
   "start": 8528,
   "end": 8901,
   "type": "Code"
  },
  {
   "start": 8902,
   "end": 8911,
   "type": "Undefined"
  },
  {
   "start": 8912,
   "end": 9039,
   "type": "Code"
  },
  {
   "start": 9040,
   "end": 9055,
   "type": "Undefined"
  },
  {
   "start": 9056,
   "end": 9114,
   "type": "Code"
  },
  {
   "start": 9115,
   "end": 9119,
   "type": "Undefined"
  },
  {
   "start": 9120,
   "end": 9212,
   "type": "Code"
  },
  {
   "start": 9213,
   "end": 9215,
   "type": "Undefined"
  },
  {
   "start": 9216,
   "end": 9312,
   "type": "Code"
  },
  {
   "start": 9313,
   "end": 9343,
   "type": "Byte"
  },
  {
   "start": 9344,
   "end": 9417,
   "type": "Code"
  },
  {
   "start": 9418,
   "end": 9425,
   "type": "Byte"
  },
  {
   "start": 9426,
   "end": 9439,
   "type": "Undefined"
  },
  {
   "start": 9440,
   "end": 9513,
   "type": "Code"
  },
  {
   "start": 9514,
   "end": 9521,
   "type": "Byte"
  },
  {
   "start": 9522,
   "end": 9535,
   "type": "Undefined"
  },
  {
   "start": 9536,
   "end": 9673,
   "type": "Code"
  },
  {
   "start": 9674,
   "end": 9679,
   "type": "Undefined"
  },
  {
   "start": 9680,
   "end": 9694,
   "type": "Code"
  },
  {
   "start": 9695,
   "end": 9695,
   "type": "Undefined"
  },
  {
   "start": 9696,
   "end": 9721,
   "type": "Code"
  },
  {
   "start": 9722,
   "end": 9727,
   "type": "Undefined"
  },
  {
   "start": 9728,
   "end": 9952,
   "type": "Code"
  },
  {
   "start": 9953,
   "end": 9966,
   "type": "Undefined"
  },
  {
   "start": 9967,
   "end": 9972,
   "type": "Byte"
  },
  {
   "start": 9973,
   "end": 9983,
   "type": "Undefined"
  },
  {
   "start": 9984,
   "end": 11477,
   "type": "Code"
  },
  {
   "start": 11478,
   "end": 11519,
   "type": "Undefined"
  },
  {
   "start": 11520,
   "end": 11648,
   "type": "Code"
  },
  {
   "start": 11649,
   "end": 11666,
   "type": "Undefined"
  },
  {
   "start": 11667,
   "end": 11748,
   "type": "Byte"
  },
  {
   "start": 11749,
   "end": 11764,
   "type": "Address"
  },
  {
   "start": 11765,
   "end": 11772,
   "type": "Undefined"
  },
  {
   "start": 11773,
   "end": 11841,
   "type": "Code"
  },
  {
   "start": 11842,
   "end": 11868,
   "type": "Undefined"
  },
  {
   "start": 11869,
   "end": 11885,
   "type": "Code"
  },
  {
   "start": 11886,
   "end": 11903,
   "type": "Undefined"
  },
  {
   "start": 11904,
   "end": 12157,
   "type": "Code"
  },
  {
   "start": 12158,
   "end": 12287,
   "type": "Undefined"
  },
  {
   "start": 12288,
   "end": 12410,
   "type": "Code"
  },
  {
   "start": 12411,
   "end": 12415,
   "type": "Byte"
  },
  {
   "start": 12416,
   "end": 12514,
   "type": "Code"
  },
  {
   "start": 12515,
   "end": 12590,
   "type": "Undefined"
  },
  {
   "start": 12591,
   "end": 13358,
   "type": "Byte"
  },
  {
   "start": 13359,
   "end": 13823,
   "type": "Undefined"
  },
  {
   "start": 13824,
   "end": 13951,
   "type": "Byte"
  },
  {
   "start": 13952,
   "end": 13983,
   "type": "Undefined"
  },
  {
   "start": 13984,
   "end": 14029,
   "type": "Code"
  },
  {
   "start": 14030,
   "end": 14069,
   "type": "Address"
  },
  {
   "start": 14070,
   "end": 14253,
   "type": "Code"
  },
  {
   "start": 14254,
   "end": 14293,
   "type": "Address"
  },
  {
   "start": 14294,
   "end": 14918,
   "type": "Code"
  },
  {
   "start": 14919,
   "end": 14991,
   "type": "Undefined"
  },
  {
   "start": 14992,
   "end": 15312,
   "type": "Code"
  },
  {
   "start": 15313,
   "end": 15359,
   "type": "Undefined"
  },
  {
   "start": 15360,
   "end": 15664,
   "type": "Code"
  },
  {
   "start": 15665,
   "end": 15672,
   "type": "Byte"
  },
  {
   "start": 15673,
   "end": 15692,
   "type": "Code"
  },
  {
   "start": 15693,
   "end": 15711,
   "type": "Undefined"
  },
  {
   "start": 15712,
   "end": 15724,
   "type": "Code"
  },
  {
   "start": 15725,
   "end": 15726,
   "type": "Undefined"
  },
  {
   "start": 15727,
   "end": 15790,
   "type": "Code"
  },
  {
   "start": 15791,
   "end": 15791,
   "type": "Undefined"
  },
  {
   "start": 15792,
   "end": 15802,
   "type": "Code"
  },
  {
   "start": 15803,
   "end": 15807,
   "type": "Undefined"
  },
  {
   "start": 15808,
   "end": 15818,
   "type": "Code"
  },
  {
   "start": 15819,
   "end": 15871,
   "type": "Undefined"
  },
  {
   "start": 15872,
   "end": 16374,
   "type": "Code"
  },
  {
   "start": 16375,
   "end": 17407,
   "type": "Undefined"
  },
  {
   "start": 17408,
   "end": 22111,
   "type": "Byte"
  },
  {
   "start": 22112,
   "end": 22175,
   "type": "Code"
  },
  {
   "start": 22176,
   "end": 22278,
   "type": "PETSCII Text"
  },
  {
   "start": 22279,
   "end": 22348,
   "type": "Code"
  },
  {
   "start": 22349,
   "end": 31487,
   "type": "Byte"
  },
  {
   "start": 31488,
   "end": 31551,
   "type": "Undefined"
  },
  {
   "start": 31552,
   "end": 31943,
   "type": "Code"
  },
  {
   "start": 31944,
   "end": 31946,
   "type": "Byte"
  },
  {
   "start": 31947,
   "end": 31951,
   "type": "Undefined"
  },
  {
   "start": 31952,
   "end": 32034,
   "type": "Code"
  },
  {
   "start": 32035,
   "end": 32386,
   "type": "PETSCII Text"
  },
  {
   "start": 32387,
   "end": 32639,
   "type": "Undefined"
  },
  {
   "start": 32640,
   "end": 48311,
   "type": "Byte"
  },
  {
   "start": 48312,
   "end": 48383,
   "type": "Undefined"
  },
  {
   "start": 48384,
   "end": 49151,
   "type": "Byte"
  },
  {
   "start": 49152,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 57344,
   "end": 65535,
   "type": "Byte"
  }
 ],
 "symbols": [
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2,
   "name": "zp_temp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 163,
   "name": "probe_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 173,
   "name": "list_end",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 174,
   "name": "zp_temp_ae",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 175,
   "name": "menu_textpos",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 217,
   "name": "buf_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 218,
   "name": "buf_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 221,
   "name": "tile_rows",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 222,
   "name": "buf_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 223,
   "name": "tile_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 224,
   "name": "clock_scr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 225,
   "name": "clock_scr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 233,
   "name": "mus_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 234,
   "name": "mus_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 251,
   "name": "ptr1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 252,
   "name": "ptr1_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 253,
   "name": "ptr2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 254,
   "name": "ptr2_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 255,
   "name": "list_cursor",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 648,
   "name": "kernal_screen_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 788,
   "name": "irq_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 789,
   "name": "irq_vector_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 790,
   "name": "brk_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 791,
   "name": "brk_vector_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 792,
   "name": "nmi_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 793,
   "name": "nmi_vector_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 820,
   "name": "hz_save_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 821,
   "name": "hz_char",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 824,
   "name": "hurt_loop",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 825,
   "name": "joy_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 826,
   "name": "joy_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 827,
   "name": "joy_fire",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1022,
   "name": "new_xscroll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1023,
   "name": "new_yscroll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1024,
   "name": "f_0400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1064,
   "name": "f_0428",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1280,
   "name": "f_0500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2304,
   "name": "animate_bond",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 2322,
   "name": "b_0912",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2333,
   "name": "b_091D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2337,
   "name": "b_0921",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2348,
   "name": "b_092C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2361,
   "name": "j_0939",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 2367,
   "name": "r_093F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 2368,
   "name": "b_0940",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2372,
   "name": "b_0944",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2375,
   "name": "idle_anim_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 2398,
   "name": "b_095E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2403,
   "name": "b_0963",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2414,
   "name": "idle_anim",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 2426,
   "name": "b_097A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2560,
   "name": "mission_complete",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 2599,
   "name": "b_0A27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2624,
   "name": "b_0A40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2637,
   "name": "b_0A4D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 2640,
   "name": "win_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2814,
   "name": "win_code_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "irq_install",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4130,
   "name": "raster_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4140,
   "name": "b_102C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4158,
   "name": "irq_panel",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 4216,
   "name": "b_1078",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4222,
   "name": "irq_playfield",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 4281,
   "name": "irq_mid",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 4287,
   "name": "mid_bg_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4313,
   "name": "j_10D9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4320,
   "name": "irq_effects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4352,
   "name": "map_to_buffer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4376,
   "name": "b_1118",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4382,
   "name": "b_111E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4383,
   "name": "map_src_operand",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4384,
   "name": "map_src_operand_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4436,
   "name": "b_1154",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4450,
   "name": "b_1162",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4464,
   "name": "explosion_flash",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4467,
   "name": "b_1173",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4471,
   "name": "b_1177",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4474,
   "name": "b_117A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4489,
   "name": "b_1189",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4492,
   "name": "b_118C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4507,
   "name": "b_119B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4510,
   "name": "b_119E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4535,
   "name": "explosion_toggle",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4548,
   "name": "b_11C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4608,
   "name": "tile_tl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4707,
   "name": "tile_lift_tl",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4708,
   "name": "tile_tl_64",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4736,
   "name": "tile_tr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4835,
   "name": "tile_lift_tr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4836,
   "name": "tile_tr_64",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4864,
   "name": "tile_bl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4963,
   "name": "tile_lift_bl",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4964,
   "name": "tile_bl_64",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4992,
   "name": "tile_br",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5091,
   "name": "tile_lift_br",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5092,
   "name": "tile_br_64",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5120,
   "name": "play_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5162,
   "name": "f_142A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5204,
   "name": "f_1454",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5246,
   "name": "f_147E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5288,
   "name": "f_14A8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5330,
   "name": "f_14D2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5372,
   "name": "f_14FC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5414,
   "name": "f_1526",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5456,
   "name": "f_1550",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5498,
   "name": "f_157A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5540,
   "name": "f_15A4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5582,
   "name": "f_15CE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5624,
   "name": "f_15F8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5708,
   "name": "f_164C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5888,
   "name": "buffer_to_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5932,
   "name": "b_172C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5934,
   "name": "b_172E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5936,
   "name": "b_1730",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5937,
   "name": "copy_src_operand",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5938,
   "name": "copy_src_operand_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5940,
   "name": "copy_dst_operand",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5941,
   "name": "copy_dst_operand_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5959,
   "name": "b_1747",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5973,
   "name": "b_1755",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5988,
   "name": "restart_vector",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6000,
   "name": "start_level",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6048,
   "name": "read_joystick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6059,
   "name": "b_17AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6063,
   "name": "b_17AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6067,
   "name": "b_17B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6071,
   "name": "b_17B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6083,
   "name": "b_17C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6096,
   "name": "game_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6147,
   "name": "b_1803",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6193,
   "name": "b_1831",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6197,
   "name": "b_1835",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6275,
   "name": "b_1883",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6342,
   "name": "b_18C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6350,
   "name": "b_18CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6400,
   "name": "anim_conveyors",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6406,
   "name": "b_1906",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6424,
   "name": "b_1918",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6433,
   "name": "b_1921",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6440,
   "name": "b_1928",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6446,
   "name": "b_192E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6449,
   "name": "b_1931",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6471,
   "name": "b_1947",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6480,
   "name": "b_1950",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6487,
   "name": "b_1957",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6493,
   "name": "b_195D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6496,
   "name": "b_1960",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6516,
   "name": "r_1974",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6517,
   "name": "conveyor_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6656,
   "name": "bond_motion",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6675,
   "name": "r_1A13",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6676,
   "name": "move_facing",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 6688,
   "name": "b_1A20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6693,
   "name": "b_1A25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6707,
   "name": "b_1A33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6713,
   "name": "b_1A39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6721,
   "name": "b_1A41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6735,
   "name": "b_1A4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6739,
   "name": "j_1A53",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6766,
   "name": "b_1A6E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6781,
   "name": "b_1A7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6800,
   "name": "lift_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6814,
   "name": "b_1A9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6842,
   "name": "b_1ABA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6912,
   "name": "xscroll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6913,
   "name": "yscroll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6914,
   "name": "map_view",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6915,
   "name": "map_view_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6916,
   "name": "map_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6917,
   "name": "map_col_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6918,
   "name": "map_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6919,
   "name": "view_moved",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6920,
   "name": "clock_digits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6921,
   "name": "clock_hundredths",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6922,
   "name": "clock_tens_sec",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6923,
   "name": "clock_seconds",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6924,
   "name": "clock_tens_min",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6925,
   "name": "clock_minutes",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6926,
   "name": "clock_count_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6927,
   "name": "view_nudged",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6928,
   "name": "item_counts",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6929,
   "name": "explosives_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6933,
   "name": "planks_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6934,
   "name": "type2_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6948,
   "name": "time_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6949,
   "name": "bond_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6950,
   "name": "facing",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6951,
   "name": "climb_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6952,
   "name": "anim_frame",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6957,
   "name": "anim_divider",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6974,
   "name": "scroll_req_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6975,
   "name": "scroll_req_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6980,
   "name": "hzb_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6981,
   "name": "hzb_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6982,
   "name": "hzb_period",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6983,
   "name": "hza_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6984,
   "name": "hza_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6985,
   "name": "hza_period",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6986,
   "name": "hzc_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6987,
   "name": "hzc_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6988,
   "name": "hzc_period",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6989,
   "name": "key_item_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6990,
   "name": "scroll_busy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6991,
   "name": "redraw_request",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6992,
   "name": "on_conveyor",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6993,
   "name": "on_lift",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6994,
   "name": "on_floor6e",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6996,
   "name": "belt1_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6997,
   "name": "belt2_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7002,
   "name": "fall_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7003,
   "name": "hurt_passes",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7004,
   "name": "hurt_ticks",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7006,
   "name": "hurt_ticks_init",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7008,
   "name": "conveyor_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7009,
   "name": "conveyor_period",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7010,
   "name": "conveyor_frame",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7011,
   "name": "fall_drift",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7012,
   "name": "fall_drift_period",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7013,
   "name": "flash_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7014,
   "name": "idle_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7015,
   "name": "lift_map_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7016,
   "name": "lift_map_ptr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7017,
   "name": "lift_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7018,
   "name": "examine_mode",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7019,
   "name": "panel_focus",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7022,
   "name": "rope_down",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7023,
   "name": "rope_map_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7024,
   "name": "rope_map_ptr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7025,
   "name": "charge_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7026,
   "name": "charge_planted",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7027,
   "name": "entered_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7032,
   "name": "code_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7033,
   "name": "rope_length",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7040,
   "name": "paused_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7041,
   "name": "mayday_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7056,
   "name": "winch_parts",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7062,
   "name": "mayday_freed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7072,
   "name": "entry_code_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7200,
   "name": "clock_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7220,
   "name": "b_1C34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7235,
   "name": "b_1C43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7250,
   "name": "b_1C52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7265,
   "name": "b_1C61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7287,
   "name": "b_1C77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7291,
   "name": "b_1C7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7302,
   "name": "b_1C86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7309,
   "name": "b_1C8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7324,
   "name": "b_1C9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7337,
   "name": "b_1CA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7350,
   "name": "b_1CB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7363,
   "name": "b_1CC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7376,
   "name": "b_1CD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7389,
   "name": "b_1CDD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7424,
   "name": "draw_clock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7436,
   "name": "b_1D0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7486,
   "name": "b_1D3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7504,
   "name": "panel_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7960,
   "name": "panel_screen_rest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8472,
   "name": "mayday_follow_scroll",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 8499,
   "name": "b_2133",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8523,
   "name": "b_214B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8528,
   "name": "scroll_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8534,
   "name": "scroll_engine",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 8558,
   "name": "b_216E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8616,
   "name": "b_21A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8624,
   "name": "b_21B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8678,
   "name": "b_21E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8683,
   "name": "j_21EB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8697,
   "name": "b_21F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8721,
   "name": "b_2211",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8754,
   "name": "b_2232",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8760,
   "name": "b_2238",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8780,
   "name": "b_224C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8813,
   "name": "b_226D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8816,
   "name": "j_2270",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8830,
   "name": "b_227E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8841,
   "name": "b_2289",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8865,
   "name": "mayday_follow_y",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 8884,
   "name": "b_22B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8887,
   "name": "b_22B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8912,
   "name": "frame_pointers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8942,
   "name": "b_22EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8947,
   "name": "b_22F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8959,
   "name": "b_22FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8965,
   "name": "b_2305",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8972,
   "name": "b_230C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8986,
   "name": "b_231A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8991,
   "name": "b_231F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8994,
   "name": "b_2322",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9001,
   "name": "b_2329",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9008,
   "name": "b_2330",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9015,
   "name": "b_2337",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9019,
   "name": "b_233B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9056,
   "name": "bond_sprites_xy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9084,
   "name": "j_237C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9094,
   "name": "b_2386",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9120,
   "name": "look_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9135,
   "name": "b_23AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9140,
   "name": "b_23B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9162,
   "name": "b_23CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9167,
   "name": "b_23CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9192,
   "name": "r_23E8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9193,
   "name": "set_bond_y",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9203,
   "name": "look_down_limit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9216,
   "name": "anim_hazard_b",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9224,
   "name": "b_2408",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9234,
   "name": "j_2412",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9240,
   "name": "b_2418",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9268,
   "name": "b_2434",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9274,
   "name": "b_243A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9283,
   "name": "b_2443",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9296,
   "name": "b_2450",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9302,
   "name": "clear_hazard_b",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9306,
   "name": "b_245A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9313,
   "name": "hazard_b_pattern",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9344,
   "name": "anim_hazard_a",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9354,
   "name": "b_248A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9380,
   "name": "b_24A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9382,
   "name": "b_24A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9388,
   "name": "b_24AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9391,
   "name": "b_24AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9404,
   "name": "clear_hazard_a",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9410,
   "name": "b_24C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9418,
   "name": "hazard_a_glyph",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9426,
   "name": "hazard_a_glyph_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9440,
   "name": "anim_hazard_c",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9450,
   "name": "b_24EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9476,
   "name": "b_2504",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9478,
   "name": "b_2506",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9484,
   "name": "b_250C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9487,
   "name": "b_250F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9500,
   "name": "clear_hazard_c",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9506,
   "name": "b_2522",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9514,
   "name": "hazard_c_glyph",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9522,
   "name": "hazard_c_glyph_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9536,
   "name": "start_game",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9540,
   "name": "j_2544",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9549,
   "name": "main_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9553,
   "name": "b_2551",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9589,
   "name": "b_2575",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9620,
   "name": "b_2594",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9646,
   "name": "b_25AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9663,
   "name": "b_25BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9666,
   "name": "at_end_column",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9680,
   "name": "game_over",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 9696,
   "name": "end_check",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9703,
   "name": "b_25E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9728,
   "name": "map_edges",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9746,
   "name": "b_2612",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9756,
   "name": "b_261C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9766,
   "name": "b_2626",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9776,
   "name": "r_2630",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9777,
   "name": "fill_left_edge",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9782,
   "name": "b_2636",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9828,
   "name": "fill_right_edge",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9833,
   "name": "b_2669",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9879,
   "name": "fill_top_edge",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9888,
   "name": "b_26A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9892,
   "name": "b_26A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9916,
   "name": "fill_bottom_edge",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9925,
   "name": "b_26C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9929,
   "name": "b_26C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9967,
   "name": "bomb_code",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9973,
   "name": "bomb_code_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9984,
   "name": "player_control",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10037,
   "name": "b_2735",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10043,
   "name": "b_273B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10049,
   "name": "b_2741",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10055,
   "name": "b_2747",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10061,
   "name": "b_274D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10067,
   "name": "state_stand",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10096,
   "name": "hurt",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 10113,
   "name": "b_2781",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10147,
   "name": "b_27A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10157,
   "name": "b_27AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10167,
   "name": "b_27B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10170,
   "name": "b_27BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10194,
   "name": "j_27D2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 10210,
   "name": "b_27E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10223,
   "name": "b_27EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10226,
   "name": "b_27F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10248,
   "name": "b_2808",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10261,
   "name": "b_2815",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10278,
   "name": "r_2826",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10279,
   "name": "state_walk",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10289,
   "name": "b_2831",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10311,
   "name": "b_2847",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10328,
   "name": "b_2858",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10344,
   "name": "b_2868",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10356,
   "name": "b_2874",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10368,
   "name": "b_2880",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10387,
   "name": "b_2893",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10404,
   "name": "b_28A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10430,
   "name": "b_28BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10448,
   "name": "b_28D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10458,
   "name": "b_28DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10464,
   "name": "state_jump",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10489,
   "name": "b_28F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10506,
   "name": "b_290A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10549,
   "name": "b_2935",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10582,
   "name": "j_2956",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 10597,
   "name": "r_2965",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10598,
   "name": "b_2966",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10603,
   "name": "b_296B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10639,
   "name": "b_298F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10653,
   "name": "j_299D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 10666,
   "name": "b_29AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10678,
   "name": "b_29B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10690,
   "name": "b_29C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10702,
   "name": "b_29CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10709,
   "name": "b_29D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10718,
   "name": "b_29DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10721,
   "name": "state_fall",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10733,
   "name": "b_29ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10768,
   "name": "b_2A10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10771,
   "name": "land_on_floor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10775,
   "name": "j_2A17",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 10778,
   "name": "b_2A1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10790,
   "name": "b_2A26",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10802,
   "name": "b_2A32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10814,
   "name": "b_2A3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10821,
   "name": "b_2A45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10837,
   "name": "b_2A55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10840,
   "name": "state_climb",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10858,
   "name": "b_2A6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10882,
   "name": "b_2A82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10894,
   "name": "j_2A8E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 10916,
   "name": "b_2AA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10947,
   "name": "b_2AC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10964,
   "name": "b_2AD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10972,
   "name": "b_2ADC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10987,
   "name": "j_2AEB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 10993,
   "name": "b_2AF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10999,
   "name": "rope_remove",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11016,
   "name": "b_2B08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11043,
   "name": "b_2B23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11049,
   "name": "state_hurt",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11058,
   "name": "b_2B32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11072,
   "name": "b_2B40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11085,
   "name": "probe_front",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11089,
   "name": "b_2B51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11110,
   "name": "b_2B66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11114,
   "name": "j_2B6A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11120,
   "name": "b_2B70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11133,
   "name": "b_2B7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11155,
   "name": "hazard_test",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11179,
   "name": "b_2BAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11194,
   "name": "b_2BBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11201,
   "name": "probe_feet",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11211,
   "name": "b_2BCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11220,
   "name": "b_2BD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11225,
   "name": "b_2BD9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11227,
   "name": "j_2BDB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11240,
   "name": "b_2BE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11245,
   "name": "j_2BED",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11247,
   "name": "b_2BEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11262,
   "name": "b_2BFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11269,
   "name": "b_2C05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11287,
   "name": "b_2C17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11294,
   "name": "b_2C1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11312,
   "name": "b_2C30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11319,
   "name": "b_2C37",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11337,
   "name": "b_2C49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11351,
   "name": "b_2C57",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11360,
   "name": "b_2C60",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11365,
   "name": "b_2C65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11370,
   "name": "probe_wall",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11382,
   "name": "b_2C76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11384,
   "name": "j_2C78",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11386,
   "name": "b_2C7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11394,
   "name": "b_2C82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11405,
   "name": "b_2C8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11408,
   "name": "probe_head",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11410,
   "name": "b_2C92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11418,
   "name": "b_2C9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11424,
   "name": "b_2CA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11427,
   "name": "conveyor_push",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 11435,
   "name": "b_2CAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11443,
   "name": "b_2CB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11451,
   "name": "r_2CBB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11452,
   "name": "conveyor_move",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 11471,
   "name": "b_2CCF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11520,
   "name": "action_menu",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 11534,
   "name": "b_2D0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11554,
   "name": "b_2D22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11590,
   "name": "b_2D46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11603,
   "name": "b_2D53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11615,
   "name": "b_2D5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11630,
   "name": "b_2D6E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11646,
   "name": "menu_jump",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11647,
   "name": "menu_jump_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11648,
   "name": "menu_jump_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11667,
   "name": "menu_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11749,
   "name": "menu_handlers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11750,
   "name": "menu_handlers_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11765,
   "name": "menu_handlers_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11773,
   "name": "menu_scroll_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11775,
   "name": "b_2DFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11793,
   "name": "b_2E11",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11796,
   "name": "b_2E14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11808,
   "name": "wait_fire_release_menu",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11825,
   "name": "wait_fire_release_list",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 11869,
   "name": "short_delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11871,
   "name": "b_2E5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11874,
   "name": "b_2E62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11904,
   "name": "item_menu",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 11919,
   "name": "b_2E8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11944,
   "name": "b_2EA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11957,
   "name": "b_2EB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11962,
   "name": "item_list",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11966,
   "name": "j_2EBE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11983,
   "name": "b_2ECF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11993,
   "name": "b_2ED9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12010,
   "name": "j_2EEA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12012,
   "name": "b_2EEC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12013,
   "name": "icon_operand",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12014,
   "name": "icon_operand_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12040,
   "name": "b_2F08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12070,
   "name": "b_2F26",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12083,
   "name": "b_2F33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12097,
   "name": "b_2F41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12100,
   "name": "b_2F44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12124,
   "name": "b_2F5C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12139,
   "name": "j_2F6B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12152,
   "name": "j_2F78",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12288,
   "name": "meter_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12331,
   "name": "b_302B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12345,
   "name": "b_3039",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12347,
   "name": "j_303B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12355,
   "name": "b_3043",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12369,
   "name": "b_3051",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12401,
   "name": "b_3071",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12411,
   "name": "meter_bars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12416,
   "name": "draw_all_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12418,
   "name": "b_3082",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12439,
   "name": "b_3097",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12446,
   "name": "b_309E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12449,
   "name": "b_30A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12457,
   "name": "b_30A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12466,
   "name": "b_30B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12483,
   "name": "j_30C3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 12484,
   "name": "b_30C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12506,
   "name": "b_30DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12509,
   "name": "b_30DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12591,
   "name": "obj_present",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12655,
   "name": "obj_taken",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12719,
   "name": "obj_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12783,
   "name": "obj_xhi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12847,
   "name": "obj_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12911,
   "name": "obj_type",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12975,
   "name": "obj_width",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13039,
   "name": "obj_height",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13103,
   "name": "obj_icon_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13167,
   "name": "obj_icon_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13231,
   "name": "obj_spare",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13567,
   "name": "carried_list_m1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13568,
   "name": "carried_list",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13696,
   "name": "list_buf",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13697,
   "name": "a_3581",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 13698,
   "name": "a_3582",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 13699,
   "name": "a_3583",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 13700,
   "name": "a_3584",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 13701,
   "name": "a_3585",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 13824,
   "name": "item_icons",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13944,
   "name": "icon_return",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13948,
   "name": "icon_blank_end",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13984,
   "name": "opt_return",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13991,
   "name": "use_item",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 14021,
   "name": "use_jump",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14022,
   "name": "use_jump_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14023,
   "name": "use_jump_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14024,
   "name": "b_36C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14030,
   "name": "use_handlers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14031,
   "name": "use_handlers_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14070,
   "name": "examine",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 14089,
   "name": "b_3709",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14100,
   "name": "b_3714",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14143,
   "name": "b_373F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14151,
   "name": "j_3747",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14171,
   "name": "examine_pickup",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 14193,
   "name": "b_3771",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14196,
   "name": "b_3774",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14220,
   "name": "pickup_jsr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14221,
   "name": "pickup_jsr_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14222,
   "name": "pickup_jsr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14225,
   "name": "j_3791",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14234,
   "name": "b_379A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14254,
   "name": "pickup_handlers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14255,
   "name": "pickup_handlers_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14294,
   "name": "erase_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14306,
   "name": "b_37E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14313,
   "name": "b_37E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14316,
   "name": "b_37EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14324,
   "name": "b_37F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14333,
   "name": "b_37FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14343,
   "name": "j_3807",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14345,
   "name": "b_3809",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14366,
   "name": "b_381E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14369,
   "name": "b_3821",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14375,
   "name": "item_explosive",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14385,
   "name": "b_3831",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14413,
   "name": "b_384D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14423,
   "name": "b_3857",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14445,
   "name": "b_386D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14459,
   "name": "b_387B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14470,
   "name": "b_3886",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14473,
   "name": "b_3889",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14489,
   "name": "item_refused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14492,
   "name": "item_number",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14494,
   "name": "j_389E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14519,
   "name": "item_number_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14524,
   "name": "b_38BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14527,
   "name": "item_number_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14532,
   "name": "item_number_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14537,
   "name": "item_number_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14542,
   "name": "item_number_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14547,
   "name": "item_number_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14552,
   "name": "item_rope",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14587,
   "name": "b_38FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14625,
   "name": "b_3921",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14628,
   "name": "item_refused_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14631,
   "name": "item_winch_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14640,
   "name": "item_winch_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14666,
   "name": "b_394A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14692,
   "name": "item_winch_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14701,
   "name": "b_396D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14704,
   "name": "item_planks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14735,
   "name": "planks_site",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14742,
   "name": "b_3996",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14747,
   "name": "b_399B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14760,
   "name": "lay_plank",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14764,
   "name": "b_39AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14773,
   "name": "drop_from_lists",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14775,
   "name": "b_39B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14793,
   "name": "b_39C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14816,
   "name": "item_detonator",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14845,
   "name": "b_39FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14857,
   "name": "r_3A09",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14858,
   "name": "b_3A0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14861,
   "name": "item_lever",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14895,
   "name": "b_3A2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14906,
   "name": "b_3A3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14909,
   "name": "item_winch_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14918,
   "name": "item_nothing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14919,
   "name": "pickup_stubs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14923,
   "name": "pickup_type2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14927,
   "name": "pickup_type3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14931,
   "name": "pickup_type4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14935,
   "name": "pickup_type5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14939,
   "name": "pickup_type6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14943,
   "name": "pickup_type7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14947,
   "name": "pickup_type8",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14951,
   "name": "pickup_type9",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14955,
   "name": "pickup_type10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14959,
   "name": "pickup_type11",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14963,
   "name": "pickup_type12",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14967,
   "name": "pickup_type13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14971,
   "name": "pickup_type14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14975,
   "name": "pickup_type15",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14979,
   "name": "pickup_type16",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14983,
   "name": "pickup_type17",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14987,
   "name": "pickup_type18",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14991,
   "name": "pickup_type19",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14992,
   "name": "opt_abort",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14997,
   "name": "call_lift",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15015,
   "name": "b_3AA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15018,
   "name": "b_3AAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15022,
   "name": "b_3AAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15042,
   "name": "b_3AC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15068,
   "name": "b_3ADC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15110,
   "name": "b_3B06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15119,
   "name": "b_3B0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15126,
   "name": "j_3B16",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15135,
   "name": "b_3B1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15159,
   "name": "b_3B37",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15201,
   "name": "b_3B61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15210,
   "name": "b_3B6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15217,
   "name": "j_3B71",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15226,
   "name": "j_3B7A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15229,
   "name": "sound_ok",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15260,
   "name": "sound_fail",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15291,
   "name": "opt_pause",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15299,
   "name": "b_3BC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15360,
   "name": "ride_lift_rts",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 15361,
   "name": "ride_lift",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15371,
   "name": "b_3C0B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15417,
   "name": "b_3C39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15466,
   "name": "b_3C6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15475,
   "name": "b_3C73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15482,
   "name": "j_3C7A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15512,
   "name": "b_3C98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15515,
   "name": "b_3C9B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15518,
   "name": "j_3C9E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15564,
   "name": "b_3CCC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15613,
   "name": "b_3CFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15622,
   "name": "b_3D06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15629,
   "name": "j_3D0D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15659,
   "name": "b_3D2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15665,
   "name": "lift_tiles_whole",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15666,
   "name": "lift_whole_tr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15667,
   "name": "lift_whole_bl",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15668,
   "name": "lift_whole_br",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15669,
   "name": "lift_tiles_half",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15670,
   "name": "lift_half_tr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15671,
   "name": "lift_half_bl",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15672,
   "name": "lift_half_br",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15673,
   "name": "floor6e_nothing",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 15674,
   "name": "lift_delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15678,
   "name": "b_3D3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15685,
   "name": "lift_delay_short",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15687,
   "name": "b_3D47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15712,
   "name": "panel_flash",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15725,
   "name": "panel_flash_pad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15727,
   "name": "panel_flash_rts",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 15728,
   "name": "j_3D70",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15749,
   "name": "b_3D85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15751,
   "name": "b_3D87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15761,
   "name": "b_3D91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15768,
   "name": "b_3D98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15779,
   "name": "b_3DA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15781,
   "name": "b_3DA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15792,
   "name": "panel_row8_red",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15796,
   "name": "b_3DB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15808,
   "name": "panel_row4_red",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15812,
   "name": "b_3DC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15872,
   "name": "mayday_walk_out",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15880,
   "name": "b_3E08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15900,
   "name": "b_3E1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15918,
   "name": "j_3E2E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15929,
   "name": "b_3E39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15969,
   "name": "b_3E61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15971,
   "name": "b_3E63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15974,
   "name": "b_3E66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16017,
   "name": "remove_from_list",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 16019,
   "name": "b_3E93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16048,
   "name": "r_3EB0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16049,
   "name": "b_3EB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16078,
   "name": "b_3ECE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16118,
   "name": "b_3EF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16120,
   "name": "b_3EF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16123,
   "name": "b_3EFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16163,
   "name": "winch_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16182,
   "name": "b_3F36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16185,
   "name": "b_3F39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16240,
   "name": "b_3F70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16243,
   "name": "b_3F73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16252,
   "name": "winch_site",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16265,
   "name": "b_3F89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16270,
   "name": "winch_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16287,
   "name": "b_3F9F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16290,
   "name": "j_3FA2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16340,
   "name": "b_3FD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16343,
   "name": "b_3FD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16352,
   "name": "mayday_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16536,
   "name": "f_4098",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16576,
   "name": "f_40C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17384,
   "name": "f_43E8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17400,
   "name": "a_43F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17401,
   "name": "a_43F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17402,
   "name": "a_43FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17403,
   "name": "a_43FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17404,
   "name": "a_43FC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17405,
   "name": "a_43FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17408,
   "name": "mayday_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18432,
   "name": "panel_charset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 19312,
   "name": "meter_glyph",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19456,
   "name": "panel_charset_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20480,
   "name": "play_charset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20624,
   "name": "belt1_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20720,
   "name": "belt2_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20992,
   "name": "hazard_a_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21071,
   "name": "hazard_a_last",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21072,
   "name": "hazard_b_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21232,
   "name": "hazard_c_glyphs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21504,
   "name": "play_charset_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22112,
   "name": "code_prompt",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22157,
   "name": "b_568D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22158,
   "name": "prompt_src_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22176,
   "name": "prompt_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22279,
   "name": "read_code",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 22281,
   "name": "b_5709",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22302,
   "name": "b_571E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22323,
   "name": "b_5733",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22341,
   "name": "b_5745",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22349,
   "name": "code_buffer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22359,
   "name": "city_hall_code",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22364,
   "name": "city_hall_code_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22372,
   "name": "play_charset_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22528,
   "name": "bond_sprites_60",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23552,
   "name": "bond_sprites_70",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24576,
   "name": "bond_sprites_80",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25600,
   "name": "bond_sprites_90",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26624,
   "name": "bond_sprites_A0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27648,
   "name": "bond_sprites_B0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28672,
   "name": "bond_sprites_C0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29696,
   "name": "bond_sprites_D0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30720,
   "name": "bond_sprites_E0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31512,
   "name": "mus_attack",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31513,
   "name": "mus_attack_v2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31514,
   "name": "mus_attack_v3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31515,
   "name": "mus_wave",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31516,
   "name": "mus_wave_v2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31517,
   "name": "mus_wave_v3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31518,
   "name": "mus_pulse",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31519,
   "name": "mus_pulse_v2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31520,
   "name": "mus_pulse_v3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31521,
   "name": "mus_tempo_phase",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31522,
   "name": "mus_tempo_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31523,
   "name": "mus_ptr_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31524,
   "name": "mus_ptr_lo_v2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31525,
   "name": "mus_ptr_lo_v3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31526,
   "name": "mus_ptr_hi_v1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31527,
   "name": "mus_ptr_hi_v2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31528,
   "name": "mus_ptr_hi_v3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31529,
   "name": "mus_duration",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31530,
   "name": "mus_duration_v2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31531,
   "name": "mus_duration_v3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31532,
   "name": "mus_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31535,
   "name": "mus_tmp_freq",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31536,
   "name": "mus_tmp_pulse",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31537,
   "name": "mus_tmp_wave",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31538,
   "name": "mus_tmp_attack",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31539,
   "name": "mus_tmp_duration",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31540,
   "name": "mus_saved_port",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31541,
   "name": "mus_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31542,
   "name": "mus_shimmer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31552,
   "name": "music_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31617,
   "name": "music_restart",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31659,
   "name": "music_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31677,
   "name": "j_7BBD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31696,
   "name": "b_7BD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31699,
   "name": "b_7BD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31712,
   "name": "music_voices",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31714,
   "name": "b_7BE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31778,
   "name": "r_7C22",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 31779,
   "name": "music_voice_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31849,
   "name": "b_7C69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31859,
   "name": "music_fetch_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31878,
   "name": "music_loop_check",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31895,
   "name": "r_7C97",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 31896,
   "name": "music_vibrato",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31901,
   "name": "b_7C9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31926,
   "name": "j_7CB6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31938,
   "name": "j_7CC2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31944,
   "name": "sid_voice_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31952,
   "name": "welcome_page",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32002,
   "name": "b_7D02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32004,
   "name": "welcome_src_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32021,
   "name": "b_7D15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32035,
   "name": "welcome_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32291,
   "name": "welcome_text_tail",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32640,
   "name": "mayday_standing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "map_rows_0_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33668,
   "name": "map_rows_6_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34568,
   "name": "map_rows_12_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34718,
   "name": "map_rows_12_17_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35468,
   "name": "map_rows_18_23",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36368,
   "name": "map_rows_24_29",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37268,
   "name": "map_rows_30_35",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38168,
   "name": "map_rows_36_41",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39068,
   "name": "map_rows_42_47",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39968,
   "name": "map_rows_48_53",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40868,
   "name": "map_rows_54_59",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40960,
   "name": "map_rows_54_59_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41768,
   "name": "map_rows_60_65",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42668,
   "name": "map_rows_66_71",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43568,
   "name": "map_rows_72_77",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44468,
   "name": "map_rows_78_83",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45368,
   "name": "map_rows_84_89",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46268,
   "name": "map_rows_90_95",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47168,
   "name": "map_rows_96_99",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47768,
   "name": "map_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47872,
   "name": "panel_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48128,
   "name": "panel_colours_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48384,
   "name": "objects_src",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48640,
   "name": "objects_src_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48896,
   "name": "objects_src_c",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55376,
   "name": "f_D850",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55470,
   "name": "f_D8AE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55471,
   "name": "a_D8AF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55552,
   "name": "a_D900",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55630,
   "name": "f_D94E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55631,
   "name": "a_D94F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "tune_E000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58368,
   "name": "tune_E400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59392,
   "name": "tune_E800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60416,
   "name": "tune_EC00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61440,
   "name": "tune_F000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62464,
   "name": "tune_F400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63488,
   "name": "tune_F800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64512,
   "name": "tune_FC00",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 1,
   "type": "line",
   "text": "6510 processor port. The part runs with $36 (BASIC ROM out, I/O and KERNAL in): game_init clears bit 0 at $1811. music_fetch_byte ($7C73) sets it to $00 for one read so the CPU sees the tune in the RAM under the KERNAL, then puts it back."
  },
  {
   "address": 2,
   "type": "line",
   "text": "Scratch byte used by several routines: the floor flag in probe_feet/probe_front ($2B4D, $2BC1), the highlighted option (0-7) in action_menu ($2D00), the divisor 21 in meter_update ($3000) and the object index in draw_all_objects ($3080)."
  },
  {
   "address": 163,
   "type": "line",
   "text": "probe_front ($2B6A): count of columns (2) still to test in the current screen row while looking for hazard characters."
  },
  {
   "address": 173,
   "type": "line",
   "text": "item_list ($2EBE): index in list_buf at which the three visible rows end (cursor + 3)."
  },
  {
   "address": 174,
   "type": "line",
   "text": "Scratch: in action_menu ($2D3E, $2D59) the text offset to stop scrolling at; in meter_update ($300A) the low byte of the dividend."
  },
  {
   "address": 175,
   "type": "line",
   "text": "action_menu ($2D19): offset into menu_text ($2D93) of the option now shown, a multiple of 10."
  },
  {
   "address": 217,
   "type": "line",
   "text": "map_to_buffer ($1100): low byte of the pointer into play_buffer ($1400) where the current tile row is written; $DA is the high byte."
  },
  {
   "address": 218,
   "type": "line",
   "text": "High byte of buf_ptr, the play_buffer write pointer used by map_to_buffer ($1100)."
  },
  {
   "address": 221,
   "type": "line",
   "text": "map_to_buffer ($1100): tile rows still to expand, counts 8 down to 0."
  },
  {
   "address": 222,
   "type": "line",
   "text": "map_to_buffer ($1100): offset of the next character pair in the current buffer row (0, 2, 4 ... 40)."
  },
  {
   "address": 223,
   "type": "line",
   "text": "map_to_buffer ($1100): tile index along the map row, 0 to 20 (21 tiles = 42 characters)."
  },
  {
   "address": 224,
   "type": "line",
   "text": "draw_clock ($1D00): pointer to the screen cell where the clock digits start, set to $4035 (row 1, column 13 of the panel); $E1 is the high byte."
  },
  {
   "address": 225,
   "type": "line",
   "text": "High byte of clock_scr, always $40 (the panel screen at $4000)."
  },
  {
   "address": 233,
   "type": "line",
   "text": "music_voices ($7BE0): the current voice's note pointer (low byte; $EA high) while its next note is read; copied from and back to mus_ptr_lo/mus_ptr_hi ($7B23/$7B26)."
  },
  {
   "address": 234,
   "type": "line",
   "text": "High byte of mus_ptr, the note pointer into the tune in the RAM under the KERNAL ($E000-$FFFF)."
  },
  {
   "address": 251,
   "type": "line",
   "text": "General pointer (low byte; $FC high) used by most routines: the copy source in game_init, the screen cell near Bond's head ($4242) for the collision probes, the map address in the object routines."
  },
  {
   "address": 252,
   "type": "line",
   "text": "High byte of ptr1."
  },
  {
   "address": 253,
   "type": "line",
   "text": "Second pointer (low byte; $FE high): the copy destination in game_init, the hazard glyph base $5200 in probe_front, the icon cell in item_list; also scratch (quotient in meter_update, width in draw_all_objects)."
  },
  {
   "address": 254,
   "type": "line",
   "text": "High byte of ptr2."
  },
  {
   "address": 255,
   "type": "line",
   "text": "item_list ($2EBA): index into list_buf ($3580) of the entry above the highlighted one (1 at the top). use_item ($36A7) and the item routines take the chosen object from list_buf+cursor+1. The welcome page also loads the stack pointer from here ($7D1D, LDX $FF / TXS), which holds 7 at the hand-over."
  },
  {
   "address": 648,
   "type": "line",
   "text": "KERNAL variable HIBASE, the page of the screen the KERNAL prints to. Set to 4 ($0400) before each KERNAL-printed page: the code prompt ($5674), the welcome page ($7CE4), game_init ($17EA) and the mission-complete screen ($0A0E)."
  },
  {
   "address": 788,
   "type": "line",
   "text": "KERNAL IRQ vector, set to raster_irq ($1022) by irq_install ($1000)."
  },
  {
   "address": 789,
   "type": "line",
   "text": "High byte of the IRQ vector ($10 for raster_irq)."
  },
  {
   "address": 790,
   "type": "line",
   "text": "KERNAL BRK vector, set to restart_vector ($1764) by start_level ($1770)."
  },
  {
   "address": 791,
   "type": "line",
   "text": "High byte of the BRK vector ($17 for restart_vector)."
  },
  {
   "address": 792,
   "type": "line",
   "text": "KERNAL NMI vector (RESTORE key), set to restart_vector ($1764) by start_level ($1770), so RESTORE restarts the mine."
  },
  {
   "address": 793,
   "type": "line",
   "text": "High byte of the NMI vector ($17 for restart_vector); the bytes after it are the KERNAL's work area, not the part's."
  },
  {
   "address": 820,
   "type": "line",
   "text": "hazard_test ($2B93): the caller's Y (screen offset) saved while the glyph is examined."
  },
  {
   "address": 821,
   "type": "line",
   "text": "hazard_test ($2B93): the character code under test ($40-$65)."
  },
  {
   "address": 824,
   "type": "line",
   "text": "state_hurt ($2B29): count of extra clock ticks still to run this pass."
  },
  {
   "address": 825,
   "type": "line",
   "text": "Joystick port 2 horizontal from read_joystick ($17A0): $FF left, 0 centred, 1 right."
  },
  {
   "address": 826,
   "type": "line",
   "text": "Joystick port 2 vertical from read_joystick ($17A0): $FF up, 0 centred, 1 down."
  },
  {
   "address": 827,
   "type": "line",
   "text": "Joystick port 2 fire from read_joystick ($17A0): 1 pressed, 0 released."
  },
  {
   "address": 1022,
   "type": "line",
   "text": "scroll_engine ($2156): the horizontal fine scroll being computed this frame, copied to xscroll ($1B00) at $228C."
  },
  {
   "address": 1023,
   "type": "line",
   "text": "scroll_engine ($2156): the vertical fine scroll being computed this frame, copied to yscroll ($1B01) at $2292."
  },
  {
   "address": 2304,
   "type": "line",
   "text": "Advance Bond's animation frame anim_frame ($1B28) once every third main-loop pass (main_loop $257F). By bond_state ($1B25): 0 standing: breathing loop at $096E; 1 walking: frame+1 mod 8; 2 jumping: frame+1, no wrap; 3 falling: frame+1 mod 4; 4 climbing: frame+1 or -1 by climb_dir ($1B27) mod 8, still when climb_dir is 0. frame_pointers ($22D0) turns the frame into sprite shapes."
  },
  {
   "address": 2375,
   "type": "line",
   "text": "Standing animation, entered from $096E: every 7th call (countdown idle_timer $1B66) step anim_frame between 1 and 2, the direction taken from $1B65. $1B65 is also the IRQ's panel-flash countdown (panel_flash, $3D60), so the two share one byte."
  },
  {
   "address": 2414,
   "type": "line",
   "text": "Standing (bond_state 0): force anim_frame ($1B28) back to 1 if it is 3 or more, count idle_timer ($1B66) down and step the frame at idle_anim_step ($0947) when it reaches 0."
  },
  {
   "address": 2560,
   "type": "line",
   "text": "Mission complete, reached from end_check ($25F7) when the five code digits match bomb_code ($26EF) and entry_code_flag ($1BA0) is set. Switches the VIC to bank 0 ($DD00 bits = %11) with the screen at $0400 and the ROM upper/lower-case characters ($D018 = $17), clears two pages of screen to spaces and white, turns the sprites off, prints win_text ($0A50) from row 1 and stops in an endless loop at $0A4D. Nothing leaves it but a reset."
  },
  {
   "address": 2640,
   "type": "line",
   "text": "Mission-complete text, screen codes for the ROM upper/lower-case set, $FF-terminated at $0B04, copied to $0428 by mission_complete: 'CONGRATULATIONS 007', 'MISSION COMPLETE', 'YOUR CODE FOR THE NEXT PROGRAM IS', 'ILVCT'. The code is a constant in this text ($0AFE-$0B02); nothing computes it."
  },
  {
   "address": 2814,
   "type": "line",
   "text": "The code for the finale, 'ILVCT' in screen codes ($49 $4C $56 $43 $54), the last five characters of win_text before its $FF. The finale's code check compares the same five letters."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "Install the raster interrupt: IRQ vector ($0314) = raster_irq ($1022), raster compare line 0 (with $D011 bit 7 cleared) and the raster interrupt enabled in $D01A. The CIA timer was already stopped by game_init. Called once from start_game ($254A)."
  },
  {
   "address": 4130,
   "type": "line",
   "text": "Raster interrupt, three bands per frame. A non-raster IRQ goes on to the KERNAL ($EA31). Acknowledges, re-enables interrupts (CLI, so the bands may nest) and picks the band by raster line: below $8D: set up the playfield (irq_playfield $107E); $8D-$94: panel colours and animations (irq_mid $10B9); $95 and above: set up the status panel for the next frame (irq_panel $103E)."
  },
  {
   "address": 4158,
   "type": "line",
   "text": "Band from line $FB to $8A: the status panel. Next interrupt at line $8A; characters from panel_charset ($4800, $D018 low bits 2), 25 rows with Y scroll 3, 40 columns with X scroll 0 (the multicolour bit game_init set stays on; the panel's colour RAM picks hires or multicolour per cell), background black, all sprites off. Then music_play ($7BAB), the clock (clock_tick $1C20 and draw_clock $1D00, skipped while paused_flag $1B80 is set) and the scroll step (scroll_frame $2150)."
  },
  {
   "address": 4222,
   "type": "line",
   "text": "Line $8A: start of the mine view. Background and both multicolours yellow (7) for a thin strip, next interrupt at line $91, playfield characters ($5000, $D018 low bits 4), 24 rows with the Y fine scroll from yscroll ($1B01), 38 columns with the X fine scroll from xscroll ($1B00), multicolour still on, all eight sprites on."
  },
  {
   "address": 4281,
   "type": "line",
   "text": "Line $91: background black (the value at $10BF, which explosion_flash toggles between 0 and 1), multicolours 8 (orange) and 9 (brown), next interrupt at line $FB. Runs the three hazard-character animations (anim_hazard_b $2400, anim_hazard_a $2480, anim_hazard_c $24E0) and irq_effects ($10E0)."
  },
  {
   "address": 4287,
   "type": "line",
   "text": "Operand of LDA #$00 at $10BE: the background colour of the mine view. explosion_toggle ($11B7) flips it between 0 and 1 to flash the screen; explosion_flash leaves it 0."
  },
  {
   "address": 4320,
   "type": "line",
   "text": "Called from irq_mid: animate the two conveyor belts (anim_conveyors $1900) and flash the active side of the panel (panel_flash $3D60)."
  },
  {
   "address": 4352,
   "type": "line",
   "text": "Expand the map into play_buffer ($1400): 8 rows of 21 tiles from the map address map_view ($1B02/$1B03), which is written into the LDX operand at $111F/$1120. Each tile byte indexes the four tile tables ($1200 top-left, $1280 top-right, $1300 bottom-left, $1380 bottom-right) and becomes 2x2 characters; the buffer is 42 characters wide and 16 high. Map rows are 150 ($96) bytes apart."
  },
  {
   "address": 4383,
   "type": "line",
   "text": "Operand bytes $111F/$1120 of LDX $879E,Y in map_to_buffer: the map address of the view's top-left tile, copied from map_view ($1B02/$1B03) and advanced by 150 per tile row. $879E is only the value left from the last run."
  },
  {
   "address": 4384,
   "type": "line",
   "text": "High byte of map_src_operand (LDX $879E,Y at $111E). The code after it is the rest of map_to_buffer: the four tile tables' characters stored 2x2 in play_buffer, then the next tile and the next tile row."
  },
  {
   "address": 4464,
   "type": "line",
   "text": "Explosion: seven times, shake the view (scroll down 2, up 4, down 2 steps through scroll_req_y $1B3F, waiting for the IRQ to take each) and flip the view's background between black and white (explosion_toggle) at each step; ends with the background black. Called four times in a row when the bomb goes off or time runs out (game_over $25D0), once when a planted charge is fired (item_detonator $39E0)."
  },
  {
   "address": 4535,
   "type": "line",
   "text": "Flip mid_bg_colour ($10BF), the mine view's background, between 0 (black) and 1 (white)."
  },
  {
   "address": 4608,
   "type": "line",
   "text": "Tile table, top-left character of each 2x2 tile, 128 entries indexed by map byte. Entry $63 (at $1263) is the lift cage, which the lift routines rewrite as the cage moves between half-tile positions. Read by map_to_buffer."
  },
  {
   "address": 4707,
   "type": "line",
   "text": "Tile $63 top-left character: the lift cage, rewritten by lift_reset, call_lift and ride_lift ($1ABF, $3AC8, $3C1E ...) as the cage moves by half a tile."
  },
  {
   "address": 4708,
   "type": "line",
   "text": "tile_tl continued, entries $64-$7F: the characters of the objects stamped into the map by draw_all_objects (tile $64 + object type)."
  },
  {
   "address": 4736,
   "type": "line",
   "text": "Tile table, top-right character of each tile, 128 entries (see tile_tl)."
  },
  {
   "address": 4835,
   "type": "line",
   "text": "Tile $63 top-right character: the lift cage (see tile_lift_tl)."
  },
  {
   "address": 4836,
   "type": "line",
   "text": "tile_tr continued, entries $64-$7F: top-right characters of the object tiles."
  },
  {
   "address": 4864,
   "type": "line",
   "text": "Tile table, bottom-left character of each tile, 128 entries (see tile_tl)."
  },
  {
   "address": 4963,
   "type": "line",
   "text": "Tile $63 bottom-left character: the lift cage (see tile_lift_tl)."
  },
  {
   "address": 4964,
   "type": "line",
   "text": "tile_bl continued, entries $64-$7F: bottom-left characters of the object tiles."
  },
  {
   "address": 4992,
   "type": "line",
   "text": "Tile table, bottom-right character of each tile, 128 entries (see tile_tl)."
  },
  {
   "address": 5091,
   "type": "line",
   "text": "Tile $63 bottom-right character: the lift cage (see tile_lift_tl)."
  },
  {
   "address": 5092,
   "type": "line",
   "text": "tile_br continued, entries $64-$7F: bottom-right characters of the object tiles."
  },
  {
   "address": 5120,
   "type": "line",
   "text": "Runtime buffer, 42 x 16 characters ($1400-$169F): the map around Bond expanded to characters by map_to_buffer, blanked at the map edges by map_edges ($2600), then 41 x 14 of it copied to the screen by buffer_to_screen ($1700), offset by one column and one row for odd positions. Rebuilt every time the view crosses a tile."
  },
  {
   "address": 5888,
   "type": "line",
   "text": "Copy the visible part of play_buffer to screen rows 11-24 ($41B8 onward): 14 rows of 41 characters, starting one column in when map_col ($1B04) is odd and one row in when map_row ($1B06) is odd, since the buffer is built from whole tiles. Writes its own LDA/STA operands at $1731/$1732 and $1734/$1735."
  },
  {
   "address": 5937,
   "type": "line",
   "text": "Operand ($1731/$1732) of LDA $164C,Y in buffer_to_screen: the play_buffer row being copied, set to $1400 (+1 for an odd map_col, +42 for an odd map_row) and advanced by 42 per row."
  },
  {
   "address": 5938,
   "type": "line",
   "text": "High byte of copy_src_operand."
  },
  {
   "address": 5940,
   "type": "line",
   "text": "Operand ($1734/$1735) of STA $43E8,Y in buffer_to_screen: the screen row being written, set to $41B8 (row 11) and advanced by 40 per row."
  },
  {
   "address": 5941,
   "type": "line",
   "text": "High byte of copy_dst_operand. The code after it is the rest of buffer_to_screen: the 41-byte row copy and the pointer steps for 14 rows."
  },
  {
   "address": 5988,
   "type": "line",
   "text": "BRK and NMI (RESTORE) handler, installed by start_level: LDX #$FF / SEI / TXS / CLD / JMP start_game ($2540). Pressing RESTORE restarts the mine from scratch, keeping only what start_game does not reset."
  },
  {
   "address": 6000,
   "type": "line",
   "text": "Last step of game_init: point the BRK and NMI vectors at restart_vector ($1764), clear the digits entered (code_count $1B78) and the key item flag (key_item_count $1B4D), reset the stack and jump into start_game at $2544."
  },
  {
   "address": 6048,
   "type": "line",
   "text": "Read joystick port 2 ($DC00) into joy_x ($0339: $FF left, 1 right), joy_y ($033A: $FF up, 1 down) and joy_fire ($033B: 1 pressed). Called every main-loop pass and by every wait-for-fire loop."
  },
  {
   "address": 6096,
   "type": "line",
   "text": "Set up a new game. VIC bank 1 ($4000-$7FFF, $DD00 bits %10) with the screen at $4000; copy panel_screen ($1D50, four pages) to $4000-$43FF; bank BASIC out ($01 = $36); multicolour on; stop CIA 1 timer A (no KERNAL keyboard scan); colour RAM rows 11-24 = $F (multicolour yellow); border dark grey; Bond's sprite colours; view at map column $14, row 2, map_view = $8000; remove a dropped rope (rope_remove $2AF7); panel colours from panel_colours ($BB01-$BCB7) to $D801-$D9B7; the music (music_init $7B40); objects: clear the carried list ($3501-$3580), reload the object table from objects_src ($BD00-$BFFF) and stamp the objects into the map twice (draw_all_objects $3080); lift at its start (lift_reset $1A90); clock 90:00:00; clear the time-up flag and winch parts; then start_level ($1770)."
  },
  {
   "address": 6400,
   "type": "line",
   "text": "Every conveyor_period ($1B61) frames, step the two conveyor belts: copy 32 bytes of conveyor_frames ($1975), frame conveyor_frame ($1B62, 3 down to 0), into glyphs $12-$15 ($5090) and $1E-$21 ($50F0) of the playfield set. The frames are taken in one order or the other by the sign of belt1_dir ($1B54) and belt2_dir ($1B55), so each belt appears to run the way it carries Bond."
  },
  {
   "address": 6517,
   "type": "line",
   "text": "Conveyor belt glyphs: four frames of 32 bytes (4 characters each) at $1975-$19F4, the belt pattern shifted by one step per frame; anim_conveyors copies one frame to glyphs $12-$15 and $1E-$21."
  },
  {
   "address": 6656,
   "type": "line",
   "text": "Turn Bond's state into move requests (the view moves, Bond stays in the middle). Walking: one step the way he faces (move_facing), skipped while on a conveyor when the clock's tenths digit is odd. Jumping: up while climb_dir ($1B27) is 2, down when 1, plus a step the way he faces. Falling: down every pass, with a sideways step that comes less and less often (fall_drift $1B63/$1B64, idle_timer $1B66). Climbing: up or down by climb_dir. Standing and hurt: nothing. Writes scroll_req_x ($1B3E) and scroll_req_y ($1B3F)."
  },
  {
   "address": 6676,
   "type": "line",
   "text": "Horizontal step for bond_motion: scroll_req_x = $FF (right) when facing ($1B26) is 1, = A (1, left) when facing is 2, nothing when facing is 0."
  },
  {
   "address": 6800,
   "type": "line",
   "text": "Put the lift back at its start: blank the four map bytes at its old position (lift_map_ptr $1B67/$1B68), set lift_row ($1B69) to $14, lift_map_ptr to $8625 and write four lift tiles ($63) there, and reset the lift tile's characters to the whole-tile shape ($74/$75 over $00/$00)."
  },
  {
   "address": 6912,
   "type": "line",
   "text": "Horizontal fine scroll of the mine view (0-6, even), ORed into $D016 by irq_playfield. Set by scroll_engine ($228C) and by the winch routines."
  },
  {
   "address": 6913,
   "type": "line",
   "text": "Vertical fine scroll of the mine view (1-7, odd), ORed into $D011 by irq_playfield. Set by scroll_engine and the winch routines."
  },
  {
   "address": 6914,
   "type": "line",
   "text": "Map address (low byte; $1B03 high) of the top-left tile that map_to_buffer draws. Starts at $8000; moves by 1 per two columns and by 150 per two rows."
  },
  {
   "address": 6915,
   "type": "line",
   "text": "High byte of map_view."
  },
  {
   "address": 6916,
   "type": "line",
   "text": "Horizontal position of the view in the mine, in character columns (half tiles), low byte ($1B05 high): $14 at the start, up to about 300. Bond is drawn at a fixed place in the view, so it also stands for his column: the view's left tile is (map_col - $14)/2 (map_view $8000 at map_col $14; map_col $113 gives tile column 127, as winch_down sets)."
  },
  {
   "address": 6917,
   "type": "line",
   "text": "High byte of map_col: 0 in the left part of the mine, 1 in the right (columns 256 and up)."
  },
  {
   "address": 6918,
   "type": "line",
   "text": "Vertical position of the view in the mine, in character rows (half tiles): 2 at the start, up to about $BF. Bond is drawn at a fixed place in the view, so it also stands for his depth: the view's top tile row is (map_row - 2)/2 (map_row $0A gives tile row 4, map_row $35 row 25, as winch_down and winch_up set)."
  },
  {
   "address": 6919,
   "type": "line",
   "text": "Set by scroll_engine when map_view changed this frame, so map_to_buffer runs."
  },
  {
   "address": 6920,
   "type": "line",
   "text": "The countdown clock, six digits shown as [$1B0C $1B0D]:[$1B0A $1B0B]:[$1B08 $1B09] by draw_clock: $1B08 tenths, $1B09 hundredths (steps of 2 per frame), $1B0A tens of seconds (0-5), $1B0B seconds, $1B0C tens of minutes, $1B0D minutes. game_init sets 90:00:00."
  },
  {
   "address": 6921,
   "type": "line",
   "text": "Clock hundredths digit, counted down by 2 each frame by clock_tick."
  },
  {
   "address": 6922,
   "type": "line",
   "text": "Clock tens-of-seconds digit (0-5)."
  },
  {
   "address": 6923,
   "type": "line",
   "text": "Clock seconds digit (0-9)."
  },
  {
   "address": 6924,
   "type": "line",
   "text": "Clock tens-of-minutes digit, 9 at the start."
  },
  {
   "address": 6925,
   "type": "line",
   "text": "Clock minutes digit, 0 at the start."
  },
  {
   "address": 6926,
   "type": "line",
   "text": "When non-zero clock_tick counts up and wraps like a 24-hour clock; nothing in this part writes it, so the clock always counts down."
  },
  {
   "address": 6927,
   "type": "line",
   "text": "Set by scroll_engine when map_col or map_row changed this frame, so map_edges ($2600) runs."
  },
  {
   "address": 6928,
   "type": "line",
   "text": "Per-type pick-up counters $1B11-$1B23, incremented through pickup_stubs ($3A47) when an item is taken. Only three are read: $1B11 explosives, $1B15 planks, $1B16 type-2 items; the key item's count is kept apart at $1B4D. The rest are written and never read. game_init clears none of them."
  },
  {
   "address": 6929,
   "type": "line",
   "text": "Explosive charges carried (item type 1), +1 per pick-up, -1 in item_explosive ($382C)."
  },
  {
   "address": 6933,
   "type": "line",
   "text": "Item type 15 counter, -1 in item_planks ($3989, $39DA)."
  },
  {
   "address": 6934,
   "type": "line",
   "text": "Count of type-2 items picked up (objects 40 and 41). hazard_test reads it for lit hazard glyphs from $5E up: non-zero, an ordinary hit (Bond is hurt); zero, hazard_test jumps back to $2BAB for ever (see there). Nothing ever decreases it, and game_init does not clear it."
  },
  {
   "address": 6948,
   "type": "line",
   "text": "Set to 1 by clock_tick when the countdown reaches 00:00:00; main_loop then blows up the mine (game_over $25D0)."
  },
  {
   "address": 6949,
   "type": "line",
   "text": "Bond's state: 0 standing, 1 walking, 2 jumping, 3 falling, 4 climbing (ladder, rope, winch), 5 hurt. Dispatched by player_control ($2700), bond_motion ($1A00), animate_bond ($0900), frame_pointers ($22D0) and bond_sprites_xy ($2360)."
  },
  {
   "address": 6950,
   "type": "line",
   "text": "Bond's facing: 1 right, 2 left, 0 neither (set while climbing). Set from joy_x by the state handlers (joy_x 1 gives facing 1)."
  },
  {
   "address": 6951,
   "type": "line",
   "text": "Vertical direction: climbing 1 down, 2 up, 0 still; jumping 2 rising, 1 descending."
  },
  {
   "address": 6952,
   "type": "line",
   "text": "Bond's animation frame within his state, stepped by animate_bond; added to the state's base shape by frame_pointers."
  },
  {
   "address": 6957,
   "type": "line",
   "text": "Main-loop pass counter: animate_bond runs when it counts down to 0, then it is reset to 3."
  },
  {
   "address": 6974,
   "type": "line",
   "text": "Horizontal move request for the next frame: $FF moves Bond right (xscroll -2, map_col +1 at the wrap), 1 moves him left, 0 none. Written by bond_motion and conveyor_move, cleared by scroll_engine when taken."
  },
  {
   "address": 6975,
   "type": "line",
   "text": "Vertical scroll request: $FF up, 1 down, 0 none. Several routines set it and wait until scroll_engine clears it (explosion_flash, look_down, winch_down, winch_up)."
  },
  {
   "address": 6980,
   "type": "line",
   "text": "anim_hazard_b: position (0-9) of the moving pattern in glyphs $4A-$5D."
  },
  {
   "address": 6981,
   "type": "line",
   "text": "anim_hazard_b: frames until the next step, reloaded from hzb_period ($1B46)."
  },
  {
   "address": 6982,
   "type": "line",
   "text": "anim_hazard_b: frames per step (8 in the image)."
  },
  {
   "address": 6983,
   "type": "line",
   "text": "anim_hazard_a: position (0-9) of the lit glyph among glyphs $40-$49."
  },
  {
   "address": 6984,
   "type": "line",
   "text": "anim_hazard_a: frames until the next step, reloaded from hza_period ($1B49)."
  },
  {
   "address": 6985,
   "type": "line",
   "text": "anim_hazard_a: frames per step (5 in the image)."
  },
  {
   "address": 6986,
   "type": "line",
   "text": "anim_hazard_c: position (0-7) of the lit glyph among glyphs $5E-$65."
  },
  {
   "address": 6987,
   "type": "line",
   "text": "anim_hazard_c: frames until the next step, reloaded from hzc_period ($1B4C)."
  },
  {
   "address": 6988,
   "type": "line",
   "text": "anim_hazard_c: frames per step (4 in the image)."
  },
  {
   "address": 6989,
   "type": "line",
   "text": "Count of object 50 (item type 11) carried; cleared by start_level. With it: the final check at map column $15 (main_loop $2564), hazard animation b everywhere, and no climbing in the right part of the mine (state_climb $2A58). Object 50 can only be taken once four winch parts are fitted and five digits entered (examine_pickup $375B)."
  },
  {
   "address": 6990,
   "type": "line",
   "text": "Set while scroll_engine runs, so the IRQ does not enter it twice; cleared by game_init."
  },
  {
   "address": 6991,
   "type": "line",
   "text": "Set by any routine that changed the map (objects removed, rope, planks, lift moved); scroll_engine then rebuilds play_buffer."
  },
  {
   "address": 6992,
   "type": "line",
   "text": "Set this pass by the floor probes when Bond stands on a conveyor (characters $12-$21); conveyor_push ($2CA3) then moves him."
  },
  {
   "address": 6993,
   "type": "line",
   "text": "Set this pass when Bond stands in the lift (characters $74-$7B); ride_lift ($3C01) then moves the lift with the joystick."
  },
  {
   "address": 6994,
   "type": "line",
   "text": "Set this pass when Bond stands on characters $6E-$73; the handler it selects ($3D39) is a bare RTS."
  },
  {
   "address": 6996,
   "type": "line",
   "text": "Direction of the conveyor belts left of map column $BE (conveyor_move $2CBC), as a scroll_req_x value: $FF carries Bond right, 1 left ($FF in the image). Flipped by item_lever when it is used on row $99 between columns $3C and $BD."
  },
  {
   "address": 6997,
   "type": "line",
   "text": "Direction of the conveyor belts from map column $BE on, as a scroll_req_x value ($FF right, 1 left; 1 in the image). Flipped by item_lever when used on row $99 at column $BE or beyond."
  },
  {
   "address": 7002,
   "type": "line",
   "text": "Passes spent falling (+1 per pass in state 3, main_loop $25BC). Landing with 65 ($41) or more hurts Bond (state_fall $29FE); a jump that has risen 28 ($1C) passes turns into a fall. Set to $46 where a fall must end in injury."
  },
  {
   "address": 7003,
   "type": "line",
   "text": "Main-loop passes left in the hurt state (30 on each injury)."
  },
  {
   "address": 7004,
   "type": "line",
   "text": "Extra clock ticks run per pass while hurt, copied from hurt_ticks_init ($1B5E)."
  },
  {
   "address": 7006,
   "type": "line",
   "text": "Clock ticks lost per pass while hurt: $30 (48). 48 ticks x 2 hundredths x 30 passes is about 29 seconds off the clock per injury."
  },
  {
   "address": 7008,
   "type": "line",
   "text": "anim_conveyors: frames until the next belt step, reloaded from conveyor_period."
  },
  {
   "address": 7009,
   "type": "line",
   "text": "anim_conveyors: frames per belt step (2 in the image)."
  },
  {
   "address": 7010,
   "type": "line",
   "text": "anim_conveyors: belt frame, 3 down to 0."
  },
  {
   "address": 7011,
   "type": "line",
   "text": "bond_motion, falling: passes until the next sideways step, reloaded from fall_drift_period ($1B64)."
  },
  {
   "address": 7012,
   "type": "line",
   "text": "bond_motion, falling: passes between sideways steps; +1 after every 9 steps so the drift thins out."
  },
  {
   "address": 7013,
   "type": "line",
   "text": "panel_flash: IRQ frames until the next flash (8); idle_anim_step also reads it as its direction flag."
  },
  {
   "address": 7014,
   "type": "line",
   "text": "Countdown shared by idle_anim (passes between breathing frames) and the falling drift (steps before the drift slows)."
  },
  {
   "address": 7015,
   "type": "line",
   "text": "Map address (low; $1B68 high) of the lift cage's four tiles, $8625 at the start."
  },
  {
   "address": 7016,
   "type": "line",
   "text": "High byte of lift_map_ptr."
  },
  {
   "address": 7017,
   "type": "line",
   "text": "Lift position in half tiles, $14 (top) to $98 (bottom)."
  },
  {
   "address": 7018,
   "type": "line",
   "text": "Set by examine ($3749) while the found object is listed, so item_list returns to it on fire instead of opening the action menu; cleared each main-loop pass."
  },
  {
   "address": 7019,
   "type": "line",
   "text": "Which panel box flashes: 0 none, 1 the action menu (set by wait_fire_release_menu), 2 the item list (wait_fire_release_list). Cleared each main-loop pass."
  },
  {
   "address": 7022,
   "type": "line",
   "text": "Set while the rope from item_rope ($38D8) hangs in the map; rope_remove clears it."
  },
  {
   "address": 7023,
   "type": "line",
   "text": "Map address (low; $1B70 high) of the rope's lowest tile."
  },
  {
   "address": 7024,
   "type": "line",
   "text": "High byte of rope_map_ptr."
  },
  {
   "address": 7025,
   "type": "line",
   "text": "Object (0-15) the planted explosive will clear, or $10 when none was near."
  },
  {
   "address": 7026,
   "type": "line",
   "text": "1 once an explosive is planted (item_explosive), 0 after it is fired (item_detonator). Also index 0 of entered_digits, which end_check never compares."
  },
  {
   "address": 7027,
   "type": "line",
   "text": "The digits entered at the bomb with the numbered items, in order ($1B73-$1B77), compared with bomb_code by end_check."
  },
  {
   "address": 7032,
   "type": "line",
   "text": "Number of digits entered (0-5 in normal play). item_number ($38AA-$38B1) stores at entered_digits + code_count with no limit: the sixth digit lands on code_count itself and is overwritten at once by the new count 6; digit n goes to $1B72 + n, over rope_length, paused_flag (digit 14), mayday_on, winch_parts (30), mayday_freed (36), entry_code_flag (46) and on to clock_tick at $1C20 (174). The count wraps to 0 after 255."
  },
  {
   "address": 7033,
   "type": "line",
   "text": "Tiles of rope dropped by item_rope, counted back down by rope_remove."
  },
  {
   "address": 7040,
   "type": "line",
   "text": "Set by the PAUSE option ($3BBB) until fire is pressed; the IRQ skips the clock while it is set. The music keeps playing."
  },
  {
   "address": 7041,
   "type": "line",
   "text": "Set once May Day has walked out (mayday_walk_out $3E00, $3EB1); while set, scroll_frame moves her two sprites with the view and main_loop keeps them."
  },
  {
   "address": 7056,
   "type": "line",
   "text": "Winch parts fitted at the winch (row $0D in the right part): +1 for each of item types 12, 13, 14 and 18 used there. Four are needed for WINCH UP, WINCH DOWN and to take object 50."
  },
  {
   "address": 7062,
   "type": "line",
   "text": "Set when May Day is freed (mayday_walk_out). Needed for item 13 and WINCH DOWN. Not cleared by game_init."
  },
  {
   "address": 7072,
   "type": "line",
   "text": "1 when the City Hall code DB4CT was typed at the prompt, 0 when RETURN was pressed. Read only by end_check ($25F2): with 0 the right five digits at the end still blow the mine up."
  },
  {
   "address": 7200,
   "type": "line",
   "text": "One clock tick (every frame from the IRQ, more while hurt): counts clock_digits down by 2 hundredths with borrows (seconds tens wrap at 6); at 00:00:00 sets time_up ($1B24). With clock_count_up ($1B0E) set it would count up and wrap at 24 in the top pair, but nothing sets it."
  },
  {
   "address": 7424,
   "type": "line",
   "text": "Draw the clock in the panel: each of the six digits as a 2x2 block of characters $D7 + 4*digit ($D7/$D8 over $D9/$DA for 0) from screen $4035, pairs separated by one column."
  },
  {
   "address": 7504,
   "type": "line",
   "text": "Status panel screen image, copied whole ($1D50-$214F, 1 KB) to the screen at $4000 by game_init. Rows 0-10 ($1D50-$1F17) are the panel: clock, meter, item list and action boxes in the characters of panel_charset. The rest is overwritten by the mine view; its tail ($2118-$214F) is the code of scroll_frame, copied along blindly."
  },
  {
   "address": 7960,
   "type": "line",
   "text": "Bytes of the panel_screen copy that land on screen rows 11-24, which buffer_to_screen overwrites: zeros here, then code from $2118."
  },
  {
   "address": 8472,
   "type": "line",
   "text": "Part of scroll_frame: when mayday_on ($1B81) is set, move May Day's two sprites (4 and 5) two pixels against the horizontal scroll request so she stays put in the mine while the view moves; she is switched off (mayday_on = 0) when she passes the left edge (X below $1B). Continues at mayday_follow_y ($22A1)."
  },
  {
   "address": 8528,
   "type": "line",
   "text": "Scroll step, called by the IRQ every frame: does nothing while scroll_busy ($1B4E) is set, otherwise moves May Day's sprites (mayday_follow_scroll) and runs scroll_engine."
  },
  {
   "address": 8534,
   "type": "line",
   "text": "Apply the scroll requests. Horizontal: xscroll +2 or -2 per request; when it passes 6 or 0 the view moves one character column: map_col ($1B04/$1B05) +-1 and, every second column, map_view +-1 (a tile). Vertical likewise with yscroll (odd values, 1-7): map_row +-1 and map_view +-150 every second row. Then: rebuild play_buffer if a tile boundary was crossed or redraw_request is set (map_to_buffer $1100), blank the edges if the position changed (map_edges $2600), copy to the screen (buffer_to_screen $1700) and store the new fine scroll for the next frame. Clears both requests."
  },
  {
   "address": 8865,
   "type": "line",
   "text": "Vertical half of mayday_follow_scroll: move sprites 4 and 5 two lines against scroll_req_y, then run scroll_engine."
  },
  {
   "address": 8912,
   "type": "line",
   "text": "Point sprites 0-3 at Bond's shapes for bond_state and anim_frame: standing $60; walking $61 + frame facing left, $69 + frame facing right; jumping $71/$72 facing left, $73/$74 facing right, the second of each pair from frame 6; falling $75 + frame; climbing $79 + frame; hurt $81 facing left, $82 facing right. Sprite 1 gets shape + $23, sprite 2 + $46, sprite 3 + $69: four layers of 35 shapes each at $5800-$7AFF, written to the pointers at $43F8-$43FB."
  },
  {
   "address": 9056,
   "type": "line",
   "text": "Place Bond's four sprites at the centre of the view: sprites 0-2 overlaid at X $AD, Y $AD (head and body in three colours), sprite 3 (legs) at X $AD, Y $C2 below them. In state 5 (hurt) sprite 3 goes to X $C5, Y $C0 instead, beside the others, for the hurt shapes $81/$82."
  },
  {
   "address": 9120,
   "type": "line",
   "text": "Pulling the stick down while standing: pan the view down 44 scroll steps (two lines each) and back up, one request at a time through scroll_req_y, moving Bond's sprites the opposite way so he stays where he is; lets the player see below. Refused near the bottom of the mine (map_row $B7 or more, look_down_limit)."
  },
  {
   "address": 9193,
   "type": "line",
   "text": "Set the Y of sprites 0, 1 and 2 (Bond's head and body) to X."
  },
  {
   "address": 9203,
   "type": "line",
   "text": "For look_down: when map_row is $B7 or more, drop look_down's return address and return to its caller, so no panning happens."
  },
  {
   "address": 9216,
   "type": "line",
   "text": "Hazard animation b, from irq_mid: when Bond is below map row $16 or carries the key item ($1B4D), every hzb_period frames move a 31-byte pattern (hazard_b_pattern $2461) on by 16 bytes through glyphs $4A-$5D ($5250-$52EF), wrapping; otherwise keep those glyphs blank. What the glyphs show is not established; the probes treat any of their lit pixels in row 3 as harmful."
  },
  {
   "address": 9302,
   "type": "line",
   "text": "Blank glyphs $4A-$5D ($5250-$52EF) of the playfield set."
  },
  {
   "address": 9313,
   "type": "line",
   "text": "31 bytes of glyph rows copied by anim_hazard_b into glyphs $4A-$5D at a moving offset."
  },
  {
   "address": 9344,
   "type": "line",
   "text": "Hazard animation a, from irq_mid: every hza_period frames blank glyphs $40-$49 ($5200-$524F) and draw the 8-byte glyph hazard_a_glyph ($24CA) in the next of the ten (hza_step 0-9)."
  },
  {
   "address": 9404,
   "type": "line",
   "text": "Blank glyphs $40-$49 ($5200-$524F)."
  },
  {
   "address": 9418,
   "type": "line",
   "text": "8-byte glyph (rows $00,$20,$20,$20,$A8,$A8,$A8,$30) that anim_hazard_a moves through glyphs $40-$49."
  },
  {
   "address": 9426,
   "type": "line",
   "text": "Bytes after hazard_a_glyph, never read (fill)."
  },
  {
   "address": 9440,
   "type": "line",
   "text": "Hazard animation c, from irq_mid: every hzc_period frames blank glyphs $5E-$65 ($52F0-$532F) and draw the 8-byte glyph hazard_c_glyph ($252A) in the next of the eight (hzc_step 0-7). Touching a lit one without a type-2 item stops the main loop (hazard_test)."
  },
  {
   "address": 9500,
   "type": "line",
   "text": "Blank glyphs $5E-$65 ($52F0-$532F)."
  },
  {
   "address": 9514,
   "type": "line",
   "text": "8-byte glyph (rows $00,$00,$00,$0C,$3F,$3F,$3F,$0C) that anim_hazard_c moves through glyphs $5E-$65."
  },
  {
   "address": 9522,
   "type": "line",
   "text": "Bytes after hazard_c_glyph, never read (zero)."
  },
  {
   "address": 9536,
   "type": "line",
   "text": "Start or restart the mine (from the welcome page, from RESTORE and after the mine blows up): game_init, then (from $2544, where start_level enters) draw the view, copy it to the screen, install the raster IRQ and fall into main_loop."
  },
  {
   "address": 9549,
   "type": "line",
   "text": "Main loop, one pass after a delay loop of about 6,400 cycles: clear examine_mode and panel_focus; at map column $15 (left part) with the key item go to end_check; else update the meter (meter_update $3000), run the player (player_control $2700), turn state into scrolling (bond_motion $1A00), every third pass animate Bond (animate_bond $0900), set his sprites (bond_sprites_xy, frame_pointers), park May Day's sprites at 0,0 unless mayday_on; if time_up blow up (game_over); count fall_count while falling."
  },
  {
   "address": 9666,
   "type": "line",
   "text": "Map column $15 reached: go on with the check only when the key item is carried (key_item_count), else carry on playing."
  },
  {
   "address": 9680,
   "type": "line",
   "text": "The bomb goes off: four explosion_flash runs (28 shakes and flashes), then restart the mine at start_game. Reached on time_up, and from end_check when the digits are wrong or entry_code_flag is 0."
  },
  {
   "address": 9696,
   "type": "line",
   "text": "The defusing check, at map column $15 with the key item: if fewer or more than five digits were entered, carry on playing; if the five in entered_digits ($1B73-$1B77) differ from bomb_code ($26F0-$26F4), or entry_code_flag ($1BA0) is 0 (no City Hall code at the prompt), the bomb goes off (game_over); otherwise mission_complete ($0A00)."
  },
  {
   "address": 9728,
   "type": "line",
   "text": "Blank the parts of play_buffer that lie beyond the mine's edges with character 1 (solid): left of map column $14 (fill_left_edge), right of column $119 (fill_right_edge), above row 4 (fill_top_edge) and below row $BF (fill_bottom_edge)."
  },
  {
   "address": 9777,
   "type": "line",
   "text": "Fill buffer columns 0 up to ($14 - map_col) of all 13 buffer rows with character 1."
  },
  {
   "address": 9828,
   "type": "line",
   "text": "Beyond the right edge (map_col $119 and more): fill the rightmost (map_col - $116) buffer columns of all 13 buffer rows with character 1."
  },
  {
   "address": 9879,
   "type": "line",
   "text": "Fill whole buffer rows (42 characters) from the top down to row (4 - map_row) with character 1."
  },
  {
   "address": 9916,
   "type": "line",
   "text": "Fill whole buffer rows from buffer row 13 upward for each row map_row is past $BF, with character 1."
  },
  {
   "address": 9967,
   "type": "line",
   "text": "The digits that defuse the bomb, compared from $26F0 to $26F4 by end_check: 6, 7, 1, 3, 4. ($26EF is never compared.) A digit comes from the numbered item used (item_number: type 3 gives 1 ... type 9 gives 7), so this is objects 47, 48, 42, 44, 45 used in that order."
  },
  {
   "address": 9973,
   "type": "line",
   "text": "Bytes after bomb_code, never read (fill)."
  },
  {
   "address": 9984,
   "type": "line",
   "text": "Bond's controls, once per main-loop pass: clear the floor flags, point the probes at the screen cell above Bond ($4242, row 14 column 18) and at the hazard glyphs ($5200), read the stick and run the handler for bond_state (0 state_stand $2753, 1 state_walk $2827, 2 state_jump $28E0, 3 state_fall $29E1, 4 state_climb $2A58, 5 state_hurt $2B29), then conveyor_push."
  },
  {
   "address": 10067,
   "type": "line",
   "text": "Standing. A lit hazard in front hurts (hurt $2770). Up with a ladder in front: climb (state 4). Probe the floor: with no solid character under either foot, a conveyor, type-$6E floor or lift sets its flag, and nothing at all starts a fall. Then fire with left or right: jump that way; fire alone: the item list (item_menu $2E80); left or right: walk that way (facing 1 right, 2 left); down, not in the lift: look_down."
  },
  {
   "address": 10096,
   "type": "line",
   "text": "Bond is hurt: 30 passes (hurt_passes) in state 5, each costing hurt_ticks_init ($30) clock ticks."
  },
  {
   "address": 10279,
   "type": "line",
   "text": "Walking. A lit hazard in front hurts. Down with a ladder in front: climb. With no solid character under a foot: a ladder below starts climbing, a conveyor/lift/type-$6E floor sets its flag, nothing at all starts a fall (a deadly floor does nothing here). On a column boundary (xscroll 2) a solid character ($01-$11) in front at body height hurts (probe_wall). Then fire: jump; stick centred: stand; otherwise face the stick's way and keep walking."
  },
  {
   "address": 10464,
   "type": "line",
   "text": "Jumping. A lit hazard: fall with fall_count $46, so the landing hurts. A ladder in front: climb. Rising (anim_frame below 6): on a row boundary a solid character over the head (probe_head) starts such a fall. From frame 6 climb_dir = 1 (descending), a fall_count test against $1C (fall_count does not count during a jump, so it never fires), and on a row boundary probe_feet: ground or a special floor stands him up, a deadly floor hurts, a ladder top starts climbing. In both halves, on a column boundary a wall in front (probe_wall) turns him round and starts a fall that hurts."
  },
  {
   "address": 10721,
   "type": "line",
   "text": "Falling. A lit hazard in front sets fall_count to $46 (the landing will hurt). On a row boundary probe the floor (land_on_floor): landed with fall_count below $41, stand up; $41 or more, hurt. Otherwise the jump's wall test applies (a wall in front turns him round)."
  },
  {
   "address": 10771,
   "type": "line",
   "text": "Floor result for state_fall and state_climb from probe_feet's X and Y: solid floor, lift, conveyor or type-$6E floor: A=1 (landed, the flag set). Deadly floor ($22-$25): hurt. Ladder below, on a column boundary: climb (state 4), A=0. Nothing: A=0."
  },
  {
   "address": 10840,
   "type": "line",
   "text": "Climbing. Carrying the key item in the right part of the mine (map_col_hi set): fall instead. Snap xscroll to 2. A solid character at head height (probe_head): only down is allowed (climb_dir 1 on down, else 0). No ladder in front (probe_front Y=0): fall, facing 0, and take away a dropped rope (rope_remove). On a ladder: on a row boundary, landing on a floor stands him up (rope removed); left or right: fall off that way; up/down/centre: climb_dir 2/1/0."
  },
  {
   "address": 10999,
   "type": "line",
   "text": "If a rope is down (rope_down $1B6E), blank its rope_length tiles from rope_map_ptr upward (150 bytes per tile row) and request a redraw; clear rope_down. Called by game_init and when Bond leaves a ladder or rope."
  },
  {
   "address": 11049,
   "type": "line",
   "text": "Hurt (state 5): probe the floor, run hurt_ticks extra clock ticks this pass (time lost), and after hurt_passes passes stand Bond up again."
  },
  {
   "address": 11085,
   "type": "line",
   "text": "Probe six screen rows from ptr1 ($4242, Bond's head): Y=1 when column +1 of one of them holds character $28 (ladder). Then test columns +2 and +1 of the same six rows for hazard characters $40-$65 with hazard_test, which on a lit glyph returns straight to the state handler with X=1. Returns X=0 when nothing hurt."
  },
  {
   "address": 11155,
   "type": "line",
   "text": "Test hazard character A ($40-$65): look at pixel row 3 of glyph (A - $40) * 8 + 3 from ptr2 ($5200). The multiply is 8-bit, so for $60-$65 it wraps and reads glyphs $40-$45 (hazard a) instead. Blank: harmless, return. Lit and below $5E: drop probe_front's return address and return to the state handler with X=1 (hit). Lit and $5E or more: a hit when type2_count ($1B16) is non-zero; when it is zero, $2BAB-$2BB7 loops for ever, since nothing it tests can change: the main loop stops while the IRQ (clock, music) runs on."
  },
  {
   "address": 11201,
   "type": "line",
   "text": "Probe the floor six rows below ptr1, columns 0-2. zp_temp = 1 when a solid character ($01-$11) is under column 2 or 1. Returns Y: 5 ladder ($28) below, 4 deadly floor ($22-$25), 3 conveyor ($12-$21, sets on_conveyor), 2 floor $6E-$73 (sets on_floor6e), 1 lift ($74-$7B, sets on_lift), 0 none of these; X = zp_temp, or X=1 and Y=0 when the floor is any character $01-$27."
  },
  {
   "address": 11370,
   "type": "line",
   "text": "Probe the five rows in front of Bond (screen offset $28 or $2B from ptr1, by facing): X=1 when one of them holds a solid character ($01-$11)."
  },
  {
   "address": 11408,
   "type": "line",
   "text": "Probe columns 2 and 1 of the head row (ptr1): X=1 when either holds a solid character ($01-$11)."
  },
  {
   "address": 11427,
   "type": "line",
   "text": "After the state handler: on a conveyor, carry Bond (conveyor_move $2CBC); in the lift, move it with the stick (ride_lift $3C01); on floor $6E-$73, $3D39 (an RTS)."
  },
  {
   "address": 11452,
   "type": "line",
   "text": "Carry Bond along a conveyor: scroll_req_x = belt1_dir left of map column $BE, belt2_dir from there on."
  },
  {
   "address": 11520,
   "type": "line",
   "text": "The action box: show option 0 (RETURN) in the panel at $4177, wait for fire to be released (wait_fire_release_menu), then left and right scroll through the eight options (a 10-character text scrolled one character at a time with a delay, menu_scroll_step $2DFD) and fire picks one: its handler from menu_handlers ($2DE5) is written into the JMP at $2D7E. Options: RETURN, EXAMINE, USE, GET LIFT, WINCH UP, WINCH DOWN, PAUSE, ABORT."
  },
  {
   "address": 11646,
   "type": "line",
   "text": "JMP to the chosen option's handler; its operand ($2D7F/$2D80) is written by action_menu from menu_handlers. The image holds $36A7 (USE)."
  },
  {
   "address": 11647,
   "type": "line",
   "text": "Low byte of menu_jump's operand, written by action_menu."
  },
  {
   "address": 11648,
   "type": "line",
   "text": "High byte of menu_jump's operand, written by action_menu."
  },
  {
   "address": 11667,
   "type": "line",
   "text": "The action options, 10 characters each in the panel character set (letter = $AD + position in the alphabet, $AC space, $00 a narrow space): '  RETURN  ', ' EXAMINE  ', '     USE  ', ' GET LIFT ', ' WINCH UP ', 'WINCH DOWN', '  PAUSE   ', ' ABORT    '. Followed by two $FE bytes."
  },
  {
   "address": 11749,
   "type": "line",
   "text": "Handler of each action option: RETURN $36A0, EXAMINE $36F6, USE $36A7, GET LIFT $3A95, WINCH UP $3F8E, WINCH DOWN $3F23, PAUSE $3BBB, ABORT $3A90."
  },
  {
   "address": 11750,
   "type": "line",
   "text": "menu_handlers from its second byte: read by action_menu as LDA $2DE5,Y / LDA $2DE6,Y."
  },
  {
   "address": 11765,
   "type": "line",
   "text": "Eight bytes after menu_handlers ($A0 $81 ... $00), never read."
  },
  {
   "address": 11773,
   "type": "line",
   "text": "Draw 10 characters of menu_text from offset X at the menu box (ptr1) and wait about 6,000 cycles: one step of the option scroll."
  },
  {
   "address": 11808,
   "type": "line",
   "text": "Wait until fire is released, pause briefly (short_delay), and mark the action box as the one to flash (panel_focus = 1)."
  },
  {
   "address": 11825,
   "type": "line",
   "text": "Wait until fire is released, pause briefly, and mark the item list as the one to flash (panel_focus = 2)."
  },
  {
   "address": 11869,
   "type": "line",
   "text": "Busy wait of about 40,000 cycles (32 x 255 decrements)."
  },
  {
   "address": 11904,
   "type": "line",
   "text": "Fire while standing: wait for fire to be released, fill list_buf ($3580-$35D9) with $FE, then write $FF, $00 (the RETURN entry), the objects in carried_list ($3501 on) and a closing $FF from $3581, and show it (item_list $2EBA) with list_cursor = 1."
  },
  {
   "address": 11962,
   "type": "line",
   "text": "Show three entries of list_buf from list_cursor as 2x2 icons side by side in the panel (rows 5-6, columns 16, 19, 22; the middle one is the choice): an object's icon from obj_icon_lo/hi ($332F/$336F), written into the LDA at $2EED; a blank icon for RETURN ($00, icon $3678) and for the ends ($FF, icon $367C). Left and right scroll the list, not past a $FE. Fire: return to examine in examine_mode, else open action_menu for the middle entry."
  },
  {
   "address": 12013,
   "type": "line",
   "text": "Operand ($2EED/$2EEE) of LDA $367C,Y in item_list: the address of the current entry's 4-byte icon, written per entry."
  },
  {
   "address": 12014,
   "type": "line",
   "text": "High byte of icon_operand (LDA $367C,Y at $2EEC). The code after it is the rest of item_list: draw the icon's two rows, step to the next of the three places, then wait for the stick and fire."
  },
  {
   "address": 12288,
   "type": "line",
   "text": "The meter in the panel (rows 3-4 from column 32): divide ($C7 - map_row + map_col, map_col_hi carried in) by 21 and show the quotient as a needle: quotient AND 3 picks one of four vertical bars (meter_bars $307B) drawn into panel glyph $6E ($4B70-$4B77), quotient / 4 picks the cell where glyph $6E is placed (the cells either side are cleared). The reading rises going right and going up. What the meter stands for in the game is not established here."
  },
  {
   "address": 12411,
   "type": "line",
   "text": "The four needle positions of meter_update: one glyph row ($C0, $30, $0C, $03: a two-pixel bar at the left, left-middle, right-middle, right), written to all eight rows of panel glyph $6E. The fifth byte ($01) is never read."
  },
  {
   "address": 12416,
   "type": "line",
   "text": "Stamp every present object (obj_present $312F non-zero, objects 63 down to 0) into the map: tile $64 + obj_type, a rectangle obj_width x obj_height tiles with its top-left at $8000 + 150 * obj_row + obj_x (+256 when obj_xhi is set). Called twice by game_init, before and after the object table is reloaded."
  },
  {
   "address": 12591,
   "type": "line",
   "text": "Object table, working copy of objects_src ($BD00, reloaded by game_init), ten arrays of 64 bytes, one entry per object. obj_present ($312F): 1 when the object is in the mine (drawn by draw_all_objects); cleared when a charge blows it away. Objects 0-15 are rock falls that can be blasted, 16 is empty, 17-39 explosive charges, 40-58 the other items, 59 and 60 have no entry in this array."
  },
  {
   "address": 12655,
   "type": "line",
   "text": "Object table: 1 once the object has been picked up (examine_pickup $3778); examine skips taken objects."
  },
  {
   "address": 12719,
   "type": "line",
   "text": "Object table: tile column of the object's top-left corner (0-149)."
  },
  {
   "address": 12783,
   "type": "line",
   "text": "Object table: adds 256 to the map address when set; 0 for every object in the image."
  },
  {
   "address": 12847,
   "type": "line",
   "text": "Object table: tile row of the object's top-left corner (0-99)."
  },
  {
   "address": 12911,
   "type": "line",
   "text": "Object table: type, 0-20. It picks the map tile ($64 + type), the pick-up counter (pickup_stubs via pickup_handlers $37AE) and the USE handler (use_handlers $36CE). 0 rock fall; 1 explosive; 2 objects 40 and 41, which keep hazard c from freezing the game; 3-9 the numbered items giving digits 1-7 (objects 42-48); 10 rope; 11 the key item (object 50); 12, 13, 14, 18 winch parts; 15 plank (54, 55); 16 detonator; 17 lever; 19 and 20 objects 59 and 60."
  },
  {
   "address": 12975,
   "type": "line",
   "text": "Object table: width in tiles (1-9)."
  },
  {
   "address": 13039,
   "type": "line",
   "text": "Object table: height in tiles (1-5)."
  },
  {
   "address": 13103,
   "type": "line",
   "text": "Object table: low byte of the object's 4-character icon in item_icons ($3600-$3677), shown by item_list."
  },
  {
   "address": 13167,
   "type": "line",
   "text": "Object table: high byte of the icon pointer ($36 for every item)."
  },
  {
   "address": 13231,
   "type": "line",
   "text": "Last 128 bytes of the object table copy ($33AF-$342E), loaded from $BF80-$BFFF by game_init and never read by this part."
  },
  {
   "address": 13567,
   "type": "line",
   "text": "Byte before carried_list, the destination of STA $34FF,X when the lists are shifted down (drop_from_lists, remove_from_list, item_explosive); the last byte of obj_spare's range is not part of the table ($342E ends it)."
  },
  {
   "address": 13568,
   "type": "line",
   "text": "Runtime: the objects Bond carries, in pick-up order, from $3501, ended by 0; $3501-$3580 cleared by game_init. examine_pickup appends, remove_from_list and the item routines delete."
  },
  {
   "address": 13696,
   "type": "line",
   "text": "Runtime: the list item_list scrolls through, built by item_menu: $FE (wall), $FF (end), $00 (RETURN), the carried objects, $FF, then $FE to $35D9. examine builds a short one: the found object, $FF, $FE."
  },
  {
   "address": 13824,
   "type": "line",
   "text": "Item icons for the panel list, 4 panel characters each (top-left, top-right, bottom-left, bottom-right as item_list draws them), addressed through obj_icon_lo/hi: $3600 the rock falls, $3620 explosive, $3624 rope, $3628 type-2 item, $362C plank, $3630 lever, $3634 winch part 18, $3638 and $363C winch parts 13 and 14, $3640 part 12, $3644 detonator, $3648 key item, $3658-$3670 the numbers 1-7 (the clock's big digits 1-7); $3674-$3677 are zeros."
  },
  {
   "address": 13944,
   "type": "line",
   "text": "Icon of the RETURN entry of the list: panel characters $D1-$D4."
  },
  {
   "address": 13948,
   "type": "line",
   "text": "Blank icon for the $FF ends of the list; also the image value of icon_operand. $3680-$369F are zeros never addressed."
  },
  {
   "address": 13984,
   "type": "line",
   "text": "Action RETURN: wait for fire to be released, give the 'done' beep (sound_ok) and return to the game."
  },
  {
   "address": 13991,
   "type": "line",
   "text": "Action USE: take the chosen entry of list_buf (list_cursor + 1); RETURN or an end marker gets the refusal buzz and the action menu again. Otherwise jump through use_handlers ($36CE) by the object's type; the address is written into the JMP at $36C5."
  },
  {
   "address": 14021,
   "type": "line",
   "text": "JMP to the USE handler of the item's type; its operand ($36C6/$36C7) is written by use_item. $FFFF in the image."
  },
  {
   "address": 14022,
   "type": "line",
   "text": "Low byte of use_jump's operand, written by use_item."
  },
  {
   "address": 14023,
   "type": "line",
   "text": "High byte of use_jump's operand, written by use_item. After it, the NOT-FOUND path of use_item: the refusal buzz and back to action_menu."
  },
  {
   "address": 14030,
   "type": "line",
   "text": "USE handler for each item type 0-19: 0 $36A0 (as RETURN), 1 $3827 explosive, 2 $3899 refused, 3-9 $389C-$38D3 enter digit 1-7, 10 $38D8 rope, 11 $3924 refused, 12 $3927 winch part, 13 $3930 winch part (needs May Day), 14 $3964 winch part, 15 $3970 plank, 16 $39E0 detonator, 17 $3A0D lever, 18 $3A3D winch part, 19 $3A46 (RTS). Type 20 would read the next two bytes, the code at $36F6, as an address ($2020)."
  },
  {
   "address": 14031,
   "type": "line",
   "text": "use_handlers from its second byte: the table is read as words by use_item (LDA $36CE,Y / LDA $36CF,Y)."
  },
  {
   "address": 14070,
   "type": "line",
   "text": "Action EXAMINE: wait for fire release; look for an object (17-63) not yet taken whose tile row is (map_row + 5) / 2 and whose tile column lies from (map_col - 3) / 2 to 4 more, i.e. at Bond's feet or just in front; none found: the refusal buzz. Found: set examine_mode and show it alone in the list (item_list); fire over it picks it up (examine_pickup), over RETURN goes back to the menu."
  },
  {
   "address": 14171,
   "type": "line",
   "text": "Pick the examined object up. Object 50 (the key item) is refused (buzz) unless winch_parts is 4 and code_count is 5. Mark it taken, run its pick-up stub through pickup_handlers ($37AE) with the address written into the JSR at $378C, append it to carried_list, erase it from the map (erase_object $37D6), beep, and examine again."
  },
  {
   "address": 14220,
   "type": "line",
   "text": "JSR to the pick-up stub of the object's type; operand ($378D/$378E) written by examine_pickup from pickup_handlers. $FFFF in the image."
  },
  {
   "address": 14221,
   "type": "line",
   "text": "Low byte of pickup_jsr's operand, written by examine_pickup."
  },
  {
   "address": 14222,
   "type": "line",
   "text": "High byte of pickup_jsr's operand. The code after it appends the object to carried_list, erases it from the map, beeps and examines again."
  },
  {
   "address": 14254,
   "type": "line",
   "text": "Pick-up stub for each item type 0-19: type 0 $36A0 (as RETURN), 1-18 the INC stubs at $3A47-$3A8B (pickup_stubs), 19 $3A8F (RTS). Type 20 would take the next two bytes, the code at $37D6 ($A9 $7F), as $7FA9."
  },
  {
   "address": 14255,
   "type": "line",
   "text": "pickup_handlers from its second byte: read by examine_pickup as LDA $37AE,Y / LDA $37AF,Y."
  },
  {
   "address": 14294,
   "type": "line",
   "text": "Erase object X from the map: fill its obj_width x obj_height rectangle (same address as draw_all_objects) with tile 0 and request a redraw."
  },
  {
   "address": 14375,
   "type": "line",
   "text": "USE explosive (type 1): refused while a charge is already planted. explosives_count -1, remove it from the lists, and look for a rock fall (objects 15 down to 0, present) whose tile column and row both lie within -8 to +5 of map_col/2 and map_row/2; it becomes charge_target (none found: $10). Set charge_planted and beep. The blast comes with the detonator."
  },
  {
   "address": 14489,
   "type": "line",
   "text": "USE of an item that does nothing (types 2, 11): the refusal buzz."
  },
  {
   "address": 14492,
   "type": "line",
   "text": "USE a numbered item (types 3-9 enter A = 1-7; the entries at $38B7, $38BF, $38C4, $38C9, $38CE, $38D3 load 2-7 and jump here): only in the right part of the mine (map_col_hi set) above map row $55, else refused. Store the digit at entered_digits + code_count and count it; beep. The item stays in the list, so a number can be entered again."
  },
  {
   "address": 14519,
   "type": "line",
   "text": "USE numbered item type 4: digit 2, via item_number."
  },
  {
   "address": 14527,
   "type": "line",
   "text": "USE numbered item type 5: digit 3, via item_number."
  },
  {
   "address": 14532,
   "type": "line",
   "text": "USE numbered item type 6: digit 4, via item_number."
  },
  {
   "address": 14537,
   "type": "line",
   "text": "USE numbered item type 7: digit 5, via item_number."
  },
  {
   "address": 14542,
   "type": "line",
   "text": "USE numbered item type 8: digit 6, via item_number."
  },
  {
   "address": 14547,
   "type": "line",
   "text": "USE numbered item type 9: digit 7, via item_number."
  },
  {
   "address": 14552,
   "type": "line",
   "text": "USE rope (type 10): refused while a rope is down or when Bond's tile (map_view + $1CB, three tile rows down and nine across) is not empty. Otherwise fill tile $41 (rope) from there upward until the first non-empty tile, counting rope_length, remember the address in rope_map_ptr, set rope_down, redraw and beep. The rope stays in the list; rope_remove takes the rope out of the map again when Bond leaves it."
  },
  {
   "address": 14628,
   "type": "line",
   "text": "USE key item (type 11): the refusal buzz."
  },
  {
   "address": 14631,
   "type": "line",
   "text": "USE winch part (type 12): only at the winch (winch_site $3F7C: map row $0D in the right part). winch_parts +1, remove the item (remove_from_list), which starts May Day's walk when four parts are in and she is free."
  },
  {
   "address": 14640,
   "type": "line",
   "text": "USE winch part (type 13): needs mayday_freed and the winch site. winch_parts +1, remove the item, then draw 23 tiles $41 downward from map address $840D (row 6, column 137): the winch cable. Redraw and beep."
  },
  {
   "address": 14692,
   "type": "line",
   "text": "USE winch part (type 14): as type 12, at the winch site, winch_parts +1 and remove the item."
  },
  {
   "address": 14704,
   "type": "line",
   "text": "USE plank (type 15): only at map row $0D in the left part at column $DC or more (planks_site $398F). Compares the object number with $54, which no object has (the planks are objects 54 and 55, $36 and $37), so it always lays the plank at $8656: five tiles $43 on map row 10, columns 122-126, the gap there. The branch for $8651 (columns 117-121, already floor) is never taken. Removes the item, planks_count -1, beep."
  },
  {
   "address": 14735,
   "type": "line",
   "text": "For item_planks: continue only when map_row is $0D, map_col_hi is 0 and map_col is $DC or more; else drop the caller's return address and buzz."
  },
  {
   "address": 14760,
   "type": "line",
   "text": "Write five tiles $43 (plank) at ptr1 and request a redraw."
  },
  {
   "address": 14773,
   "type": "line",
   "text": "Delete the chosen entry (list_cursor + 1) from list_buf and carried_list, moving the rest down (up to $3C entries)."
  },
  {
   "address": 14816,
   "type": "line",
   "text": "USE detonator (type 16): refused unless a charge is planted. explosion_flash; if there is a charge_target, erase it from the map and clear its obj_present and obj_x; charge_planted = 0. Blasting object 3 (the rock at tile column $2D, row $5F) frees May Day (mayday_walk_out $3E00). The detonator stays in the list."
  },
  {
   "address": 14861,
   "type": "line",
   "text": "USE lever (type 17): only on map row $99. Left part between columns $3C and $BD: reverse belt1_dir; left part at $BE or more, or the right part: reverse belt2_dir; left of $3C: refused. Beep."
  },
  {
   "address": 14909,
   "type": "line",
   "text": "USE winch part (type 18): as type 12, at the winch site, winch_parts +1 and remove the item."
  },
  {
   "address": 14918,
   "type": "line",
   "text": "USE handler of type 19: RTS, nothing happens and no sound."
  },
  {
   "address": 14919,
   "type": "line",
   "text": "Pick-up stub type 1 (explosive): INC explosives_count ($1B11). The stubs for the other types follow, four bytes each, INC counter / RTS: 2 $1B16, 3-9 $1B1D-$1B23, 10 $1B13, 11 $1B4D, 12 $1B1A, 13 $1B18, 14 $1B19, 15 $1B15, 16 $1B12, 17 $1B1C, 18 $1B1B; $3A8F is the RTS used for type 19."
  },
  {
   "address": 14923,
   "type": "line",
   "text": "Pick-up stub type 2: INC type2_count ($1B16)."
  },
  {
   "address": 14927,
   "type": "line",
   "text": "Pick-up stub type 3 (number 1): INC $1B1D."
  },
  {
   "address": 14931,
   "type": "line",
   "text": "Pick-up stub type 4 (number 2): INC $1B1E."
  },
  {
   "address": 14935,
   "type": "line",
   "text": "Pick-up stub type 5 (number 3): INC $1B1F."
  },
  {
   "address": 14939,
   "type": "line",
   "text": "Pick-up stub type 6 (number 4): INC $1B20."
  },
  {
   "address": 14943,
   "type": "line",
   "text": "Pick-up stub type 7 (number 5): INC $1B21."
  },
  {
   "address": 14947,
   "type": "line",
   "text": "Pick-up stub type 8 (number 6): INC $1B22."
  },
  {
   "address": 14951,
   "type": "line",
   "text": "Pick-up stub type 9 (number 7): INC $1B23."
  },
  {
   "address": 14955,
   "type": "line",
   "text": "Pick-up stub type 10 (rope): INC $1B13."
  },
  {
   "address": 14959,
   "type": "line",
   "text": "Pick-up stub type 11 (key item): INC key_item_count ($1B4D)."
  },
  {
   "address": 14963,
   "type": "line",
   "text": "Pick-up stub type 12 (winch part): INC $1B1A."
  },
  {
   "address": 14967,
   "type": "line",
   "text": "Pick-up stub type 13 (winch part): INC $1B18."
  },
  {
   "address": 14971,
   "type": "line",
   "text": "Pick-up stub type 14 (winch part): INC $1B19."
  },
  {
   "address": 14975,
   "type": "line",
   "text": "Pick-up stub type 15 (plank): INC planks_count ($1B15)."
  },
  {
   "address": 14979,
   "type": "line",
   "text": "Pick-up stub type 16 (detonator): INC $1B12."
  },
  {
   "address": 14983,
   "type": "line",
   "text": "Pick-up stub type 17 (lever): INC $1B1C."
  },
  {
   "address": 14987,
   "type": "line",
   "text": "Pick-up stub type 18 (winch part): INC $1B1B."
  },
  {
   "address": 14991,
   "type": "line",
   "text": "Pick-up stub type 19: a bare RTS."
  },
  {
   "address": 14992,
   "type": "line",
   "text": "Action ABORT: drop the return address and restart the mine (start_game)."
  },
  {
   "address": 14997,
   "type": "line",
   "text": "Action GET LIFT: only between map columns $82 and $A9 (map_col_hi is not tested) above row $98. Move the lift one half tile at a time, with a delay, until lift_row - 7 equals map_row, rewriting the cage tile's characters (whole or half, $74/$75 and $00) and the lift's four map bytes and requesting a redraw at each step; then beep."
  },
  {
   "address": 15229,
   "type": "line",
   "text": "The 'done' beep: SID voice 2, frequency $2032, attack/decay $09, sustain/release $09, triangle with the gate on. Voice 2 is also the tune's second voice; the next note there overwrites it."
  },
  {
   "address": 15260,
   "type": "line",
   "text": "The refusal buzz: SID voice 2, frequency $0832, attack/decay $07, sustain/release $08, sawtooth with the gate on."
  },
  {
   "address": 15291,
   "type": "line",
   "text": "Action PAUSE: wait for fire release, set paused_flag (the clock stops, the music plays on), wait for fire, clear it."
  },
  {
   "address": 15360,
   "type": "line",
   "text": "RTS shared by ride_lift when the stick is centred or the lift is at its top."
  },
  {
   "address": 15361,
   "type": "line",
   "text": "In the lift (on_lift): stick up moves the lift and Bond up a half tile (not above lift_row $14), down moves them down (not below $98); map_row, map_view, the lift's map bytes and the cage tile's characters follow; each step has a delay before and after (lift_delay, lift_delay_short)."
  },
  {
   "address": 15665,
   "type": "line",
   "text": "Characters of the lift tile ($63) at a whole-tile position: $74, $75 over $00, $00 (top-left, top-right, bottom-left, bottom-right)."
  },
  {
   "address": 15666,
   "type": "line",
   "text": "lift_tiles_whole: top-right character $75."
  },
  {
   "address": 15667,
   "type": "line",
   "text": "lift_tiles_whole: bottom-left character $00."
  },
  {
   "address": 15668,
   "type": "line",
   "text": "lift_tiles_whole: bottom-right character $00."
  },
  {
   "address": 15669,
   "type": "line",
   "text": "Characters of the lift tile at a half-tile position: $00, $00 over $74, $75."
  },
  {
   "address": 15670,
   "type": "line",
   "text": "lift_tiles_half: top-right character $00."
  },
  {
   "address": 15671,
   "type": "line",
   "text": "lift_tiles_half: bottom-left character $74."
  },
  {
   "address": 15672,
   "type": "line",
   "text": "lift_tiles_half: bottom-right character $75."
  },
  {
   "address": 15673,
   "type": "line",
   "text": "Handler for standing on characters $6E-$73 (on_floor6e): RTS, nothing."
  },
  {
   "address": 15674,
   "type": "line",
   "text": "Delay of about 13,000 cycles (10 x 256 decrements) between lift steps."
  },
  {
   "address": 15685,
   "type": "line",
   "text": "Delay of about 2,000 cycles after a lift step."
  },
  {
   "address": 15712,
   "type": "line",
   "text": "From irq_effects, every 8 frames: panel_focus 0: colour row 4 and row 8, columns 15-24, red (2); 1 (action box): flash row 8 between yellow (7) and red, row 4 red; 2 (item list): flash row 4, row 8 red."
  },
  {
   "address": 15725,
   "type": "line",
   "text": "Two RTS bytes never reached ($3D6D, $3D6E), between the JMP at $3D6A and panel_flash's RTS at $3D6F."
  },
  {
   "address": 15727,
   "type": "line",
   "text": "panel_flash's RTS for the frames between flashes, then (from $3D70, reached by the JMP at $3D6A) the flash itself: by panel_focus, recolour rows 4 and 8 of the panel as described at panel_flash."
  },
  {
   "address": 15792,
   "type": "line",
   "text": "Colour RAM row 8, columns 15-24 ($D94F-$D958) red: the frame above the action box."
  },
  {
   "address": 15808,
   "type": "line",
   "text": "Colour RAM row 4, columns 15-24 ($D8AF-$D8B8) red: the frame above the item list."
  },
  {
   "address": 15872,
   "type": "line",
   "text": "May Day is freed (object 3 blasted), when map_col is below $69: her two sprites (4 and 5, shapes $10-$1F in pairs, stepped every four pixels) walk right from the left edge, one pixel per delay, until X = $69 - map_col + $5B, then take the standing shapes $FE/$FF. At map row $BD she walks at Y $AD/$C2 from X 0; elsewhere at Y $A5/$BA from where the sprites were. Sets mayday_on and mayday_freed."
  },
  {
   "address": 16017,
   "type": "line",
   "text": "Delete the chosen item from carried_list and list_buf. If May Day is free and all four winch parts are in, she walks in from the left edge, at Y $AD/$C2, to X = $69 - map_col + $5B (the same walk as mayday_walk_out), takes the standing shapes and mayday_on is set."
  },
  {
   "address": 16163,
   "type": "line",
   "text": "Action WINCH DOWN: needs mayday_freed, four winch_parts, map row $0D in the right part. Put Bond at map column $113, row $0A (map_view $82D7, fine scroll 2/7), switch May Day off (mayday_off), climbing state, and scroll down 170 steps: he rides the winch down the shaft."
  },
  {
   "address": 16252,
   "type": "line",
   "text": "For the winch parts: continue only at map row $0D with map_col_hi set; else drop the caller's return address and buzz."
  },
  {
   "address": 16270,
   "type": "line",
   "text": "Action WINCH UP: needs four winch_parts and five digits entered (code_count 5); unlike WINCH DOWN it does not test where Bond is. Put Bond at map column $113, row $35 (map_view $8F25, fine scroll 2/7), climbing state, and scroll up 170 steps: the winch lifts him up the shaft."
  },
  {
   "address": 16352,
   "type": "line",
   "text": "Switch May Day off: mayday_on = 0, request a redraw, sprites 4 and 5 to X 0, Y 0."
  },
  {
   "address": 17408,
   "type": "line",
   "text": "May Day's walk: sprite shapes $10-$1F ($4400-$47FF), eight frames of two sprites (upper half at the even shape, lower at the odd), stepped by mayday_walk_out and remove_from_list."
  },
  {
   "address": 18432,
   "type": "line",
   "text": "Status panel character set, glyphs $00-$7F ($4800-$4BFF), hires, selected by irq_panel ($D018 low bits 2 in VIC bank 1). Glyph $6E ($4B70) is the meter needle, rewritten by meter_update."
  },
  {
   "address": 19312,
   "type": "line",
   "text": "Panel glyph $6E ($4B70-$4B77), the meter's needle, rewritten by meter_update. The rest of the set follows: glyphs $6F-$7F."
  },
  {
   "address": 19456,
   "type": "line",
   "text": "Status panel character set, glyphs $80-$FF ($4C00-$4FFF): the item icons ($80-$AB), the letters of the action box ($AC space, $AD-$C6 A-Z), the RETURN icon ($D1-$D4) and the clock's 2x2 digits ($D7-$FE), which also serve as the icons of the numbered items."
  },
  {
   "address": 20480,
   "type": "line",
   "text": "Mine view character set, multicolour, glyphs $00-$7F ($5000-$53FF), selected by irq_playfield ($D018 low bits 4). Classes the probes use: $01-$11 solid floor and rock, $12-$21 conveyors (glyphs $12-$15 and $1E-$21 animated by anim_conveyors), $22-$25 deadly floor, $28 ladder, $40-$65 animated hazards (anim_hazard_a/b/c), $6E-$73 a floor with no effect, $74-$7B the lift."
  },
  {
   "address": 20624,
   "type": "line",
   "text": "Playfield glyphs $12-$15 ($5090-$50AF): conveyor belt 1, rewritten by anim_conveyors; followed by glyphs $16-$1D."
  },
  {
   "address": 20720,
   "type": "line",
   "text": "Playfield glyphs $1E-$21 ($50F0-$510F): conveyor belt 2, rewritten by anim_conveyors; then glyphs $22-$25 (deadly floor), $26-$27, $28 (ladder) and the rest up to $3F."
  },
  {
   "address": 20992,
   "type": "line",
   "text": "Playfield glyphs $40-$49 ($5200-$524F): hazard a, one lit glyph at a time, drawn by anim_hazard_a."
  },
  {
   "address": 21071,
   "type": "line",
   "text": "Last byte of glyph $49, also the base of clear_hazard_b's STA $524F,Y (it clears $5250-$52EF)."
  },
  {
   "address": 21072,
   "type": "line",
   "text": "Playfield glyphs $4A-$5D ($5250-$52EF): hazard b, drawn by anim_hazard_b, blank while it is off."
  },
  {
   "address": 21232,
   "type": "line",
   "text": "Playfield glyphs $5E-$65 ($52F0-$532F): hazard c, drawn by anim_hazard_c; then glyphs $66-$7F, among them $6E-$73 and the lift $74-$7B."
  },
  {
   "address": 21504,
   "type": "line",
   "text": "Mine view character set, glyphs $80-$CB ($5400-$565F); from glyph $CC ($5660) the code prompt's code and text sit in the set, so glyphs $CC-$EB hold code."
  },
  {
   "address": 22112,
   "type": "line",
   "text": "Hand-over entry of the part ($5660, jumped to by the depacker). Black screen, KERNAL screen page $0400 with the ROM upper-case characters ($D018 = $14), then print prompt_text ($56A0) through CHROUT ($FFD2), stepping the high byte of its own LDA operand ($568E) every 256 characters, and fall into read_code. The two read-modify-writes at $5679-$5688 ORA 3 into $D002 and set the low bits of $D000: sprite X registers, where the same sequence in mission_complete ($0A13) works on $DD02/$DD00 to select VIC bank 0. The bank is already 0 at the hand-over, so it does no harm."
  },
  {
   "address": 22158,
   "type": "line",
   "text": "High byte of the LDA $56A0,Y operand in code_prompt, incremented for each 256 characters printed."
  },
  {
   "address": 22176,
   "type": "line",
   "text": "The code prompt, PETSCII with control codes, $FF-terminated at $5706: clear screen, lock the case switch, 'PLEASE ENTER CODE' in yellow, then 'IF YOU HAVE NOT COMPLETED THE CITY HALL' / 'PLEASE HIT RETURN' in light red."
  },
  {
   "address": 22279,
   "type": "line",
   "text": "Read the code: take characters from CHRIN ($FFCF), skipping zeros, into code_buffer ($574D). RETURN at any position (RETURN alone, or a code shorter than five letters) stores 0 in entry_code_flag ($1BA0) and goes to the welcome page ($7CD0). After five characters, compare them with city_hall_code ($5757): equal, store 1 in entry_code_flag and go to the welcome page; different, print RETURN, cursor up and a space and read again."
  },
  {
   "address": 22349,
   "type": "line",
   "text": "The five characters typed at the prompt ($574D-$5751). The image holds ' ', RETURN, '4', 'C', 'T' left over from before it was saved, then $01 bytes to $5756."
  },
  {
   "address": 22359,
   "type": "line",
   "text": "The code City Hall gives for this part, compared by read_code: 'DB4CT' in PETSCII ($5757-$575B)."
  },
  {
   "address": 22364,
   "type": "line",
   "text": "A second 'DB4CT' ($575C-$5760) and three $01 bytes, not read by any code in the part."
  },
  {
   "address": 22372,
   "type": "line",
   "text": "Mine view character set, glyphs $EC-$FF after the prompt code ($5764-$57FF)."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "Bond's sprite shapes $60-$6F ($5800-$5BFF): from layer 0 (sprite 0) standing to layer 0 (sprite 0) walking right 7. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 23552,
   "type": "line",
   "text": "Bond's sprite shapes $70-$7F ($5C00-$5FFF): from layer 0 (sprite 0) walking right 8 to layer 0 (sprite 0) climbing. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 24576,
   "type": "line",
   "text": "Bond's sprite shapes $80-$8F ($6000-$63FF): from layer 0 (sprite 0) climbing to layer 1 (sprite 1) walking right 4. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 25600,
   "type": "line",
   "text": "Bond's sprite shapes $90-$9F ($6400-$67FF): from layer 1 (sprite 1) walking right 5 to layer 1 (sprite 1) climbing. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 26624,
   "type": "line",
   "text": "Bond's sprite shapes $A0-$AF ($6800-$6BFF): from layer 1 (sprite 1) climbing to layer 2 (sprite 2) walking right 1. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 27648,
   "type": "line",
   "text": "Bond's sprite shapes $B0-$BF ($6C00-$6FFF): from layer 2 (sprite 2) walking right 2 to layer 2 (sprite 2) climbing. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "Bond's sprite shapes $C0-$CF ($7000-$73FF): from layer 2 (sprite 2) climbing to layer 3 (sprite 3, the legs) walking left 6. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 29696,
   "type": "line",
   "text": "Bond's sprite shapes $D0-$DF ($7400-$77FF): from layer 3 (sprite 3, the legs) walking left 7 to layer 3 (sprite 3, the legs) falling. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 30720,
   "type": "line",
   "text": "Bond's sprite shapes $E0-$EB ($7800-$7AFF): from layer 3 (sprite 3, the legs) falling to layer 3 (sprite 3, the legs) hurt right. Each layer holds 35 shapes: standing, walking left 1-8, walking right 1-8, jumping left 2, jumping right 2, falling 4, climbing 8, hurt left, hurt right; frame_pointers picks them."
  },
  {
   "address": 31512,
   "type": "line",
   "text": "Music: attack/decay value of each of the three voices ($7B18-$7B1A: $09, $19, $1A), written before each note."
  },
  {
   "address": 31513,
   "type": "line",
   "text": "mus_attack for voice 2 ($19)."
  },
  {
   "address": 31514,
   "type": "line",
   "text": "mus_attack for voice 3 ($1A)."
  },
  {
   "address": 31515,
   "type": "line",
   "text": "Music: control value (waveform + gate) of each voice ($7B1B-$7B1D: $81 noise, $21 sawtooth, $41 pulse)."
  },
  {
   "address": 31516,
   "type": "line",
   "text": "mus_wave for voice 2 ($21 sawtooth)."
  },
  {
   "address": 31517,
   "type": "line",
   "text": "mus_wave for voice 3 ($41 pulse)."
  },
  {
   "address": 31518,
   "type": "line",
   "text": "Music: pulse width high nibble of each voice ($7B1E-$7B20: $00, $0E, $06)."
  },
  {
   "address": 31519,
   "type": "line",
   "text": "mus_pulse for voice 2 ($0E)."
  },
  {
   "address": 31520,
   "type": "line",
   "text": "mus_pulse for voice 3 ($06)."
  },
  {
   "address": 31521,
   "type": "line",
   "text": "Music: alternates 0 and 1; the voices step every 3 frames in phase 0 and every 2 in phase 1, so the tune moves on every 2.5 frames on average."
  },
  {
   "address": 31522,
   "type": "line",
   "text": "Music: frames counted towards the next step (2 or 3 by mus_tempo_phase)."
  },
  {
   "address": 31523,
   "type": "line",
   "text": "Music: low byte of each voice's note pointer ($7B23-$7B25); the high bytes follow at $7B26-$7B28. They start at $E000, $EAD1 and $F755."
  },
  {
   "address": 31524,
   "type": "line",
   "text": "mus_ptr_lo for voice 2."
  },
  {
   "address": 31525,
   "type": "line",
   "text": "mus_ptr_lo for voice 3."
  },
  {
   "address": 31526,
   "type": "line",
   "text": "Music: high byte of each voice's note pointer ($7B26-$7B28)."
  },
  {
   "address": 31527,
   "type": "line",
   "text": "mus_ptr_hi for voice 2."
  },
  {
   "address": 31528,
   "type": "line",
   "text": "mus_ptr_hi for voice 3."
  },
  {
   "address": 31529,
   "type": "line",
   "text": "Music: steps left of each voice's current note ($7B29-$7B2B), 8 at the start."
  },
  {
   "address": 31530,
   "type": "line",
   "text": "mus_duration for voice 2."
  },
  {
   "address": 31531,
   "type": "line",
   "text": "mus_duration for voice 3."
  },
  {
   "address": 31532,
   "type": "line",
   "text": "Music: the low frequency byte of each voice's note ($7B2C-$7B2E), which music_vibrato keeps changing."
  },
  {
   "address": 31535,
   "type": "line",
   "text": "Music: the note's low frequency byte while it is being loaded."
  },
  {
   "address": 31536,
   "type": "line",
   "text": "Music: the voice's pulse width while its note is loaded."
  },
  {
   "address": 31537,
   "type": "line",
   "text": "Music: the voice's waveform/gate while its note is loaded."
  },
  {
   "address": 31538,
   "type": "line",
   "text": "Music: the voice's attack/decay while its note is loaded."
  },
  {
   "address": 31539,
   "type": "line",
   "text": "Music: the voice's duration counter while it is updated."
  },
  {
   "address": 31540,
   "type": "line",
   "text": "Music: $01 saved by music_fetch_byte while the RAM under the KERNAL is banked in."
  },
  {
   "address": 31541,
   "type": "line",
   "text": "Music: the voice (0-2) being updated."
  },
  {
   "address": 31542,
   "type": "line",
   "text": "Music: counter per voice, used for voices 2 and 3 (indexes 1 and 2, $7B37-$7B38): stepped by 4 and masked to 0-15 every frame and added to the low frequency byte by music_vibrato. $7B36 itself and $7B39-$7B3F are never used."
  },
  {
   "address": 31552,
   "type": "line",
   "text": "Start the tune: attack/decay, waveform and pulse for the three voices, filter cutoff low 3 bits $09 and high byte $73, resonance 0 with voices 1 and 3 routed through the filter ($D417 = $05), low-pass and band-pass with volume 15 ($D418 = $3F); then music_restart."
  },
  {
   "address": 31617,
   "type": "line",
   "text": "Point the three voices at the start of their note lists ($E000, $EAD1, $F755) with 8 steps to the first note. Run again whenever voice 1 reaches $EAD1, so the tune loops."
  },
  {
   "address": 31659,
   "type": "line",
   "text": "Music, every frame from irq_panel: music_vibrato, then every 2 or 3 frames (mus_tempo_phase) step the voices (music_voices), and restart the tune when voice 1's pointer has reached $EAD1."
  },
  {
   "address": 31712,
   "type": "line",
   "text": "Step each of the three voices: copy its pointer, attack, waveform, pulse and duration to the work bytes and run music_voice_step."
  },
  {
   "address": 31779,
   "type": "line",
   "text": "Count the voice's duration down; at 0 load the next note: gate off, attack/decay, frequency high then low byte and a new duration from the note list (three bytes: frequency high, frequency low, duration; frequency 0 is a rest), pulse width, gate on; pointer +3."
  },
  {
   "address": 31859,
   "type": "line",
   "text": "Read byte Y of the note list at (mus_ptr): $01 = $00 (all RAM, I/O and KERNAL out) for the load, then the old value back. The tune lives in the RAM under the KERNAL, which the CPU cannot otherwise see."
  },
  {
   "address": 31878,
   "type": "line",
   "text": "Restart the tune (music_restart) when voice 1's pointer equals $EAD1, the start of voice 2's notes."
  },
  {
   "address": 31896,
   "type": "line",
   "text": "Every frame: voice 1's low frequency byte (mus_freq_lo) +10 and written to $D400, a rising sweep over each note; voices 2 and 3 get their low frequency byte plus mus_shimmer (0-12 in steps of 4), a four-step trill."
  },
  {
   "address": 31944,
   "type": "line",
   "text": "SID register offset of each voice: 0, 7, 14. The five bytes after it ($A1 $FF $FD $20 $AB) are never read."
  },
  {
   "address": 31952,
   "type": "line",
   "text": "Welcome page, reached from the code prompt: same screen set-up as code_prompt (with the same $D000/$D002 writes), print welcome_text ($7D23) through CHROUT (the LDA operand's high byte set to $7D at $7CFD, the $7E23 in the image being a leftover), wait for fire, load the stack pointer from zero page $FF (7 at the hand-over; an LDX #$FF was probably meant) and jump to start_game."
  },
  {
   "address": 32004,
   "type": "line",
   "text": "High byte of the LDA operand in welcome_page, set to $7D before printing and incremented every 256 characters."
  },
  {
   "address": 32035,
   "type": "line",
   "text": "Welcome page text, PETSCII with colour and cursor codes, $FF-terminated at $7E82: 'PRESS FIRE TO START' (yellow), 'WELCOME 007...' (light red), then in light blue 'YOU ARE IN A DISUSED MINE UNDER SILICON VALLEY. THE EVIL MAX ZORIN HAS PLANTED A BOMB WHICH YOU MUST DEFUSE BY USING THE CODE NUMBERS YOU WILL FIND. YOU WILL ALSO NEED THE HELP OF MAYDAY WHO IS TRAPPED SOMEWHERE IN THE MINE.' and in white 'MISSION CODE : AVTAK', 'CLASSIFICATION: TOP SECRET'."
  },
  {
   "address": 32291,
   "type": "line",
   "text": "Second page of welcome_text from $7E23 (the address in the image's LDA operand at $7D02), ending with the $FF at $7E82; the rest up to $7F7F is RAM fill."
  },
  {
   "address": 32640,
   "type": "line",
   "text": "May Day standing: sprite shapes $FE (upper) and $FF (lower), set by the walk routines when she stops."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "Mine map, tile rows 0-5 ($8000-$8383), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: the solid top rows and the upper gallery, with the entrance area where the view starts (map_col $14, row 2)."
  },
  {
   "address": 33668,
   "type": "line",
   "text": "Mine map, tile rows 6-11 ($8384-$8707), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: explosives 17 and 18, the rope (49) and the detonator (56); the lift's start at row 10 column 73 ($8625), the plank gap at row 10 columns 122-126 and the top of the winch cable at column 137."
  },
  {
   "address": 34568,
   "type": "line",
   "text": "Mine map, tile rows 12-17 ($8708-$8A8B), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock falls 6 and 9, type-2 item 40."
  },
  {
   "address": 34718,
   "type": "line",
   "text": "Map, tile row 13 from column 80 on ($879E is named only because it is the value left in map_to_buffer's LDX operand): part of map_rows_12_17."
  },
  {
   "address": 35468,
   "type": "line",
   "text": "Mine map, tile rows 18-23 ($8A8C-$8E0F), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock fall 8, explosive 19."
  },
  {
   "address": 36368,
   "type": "line",
   "text": "Mine map, tile rows 24-29 ($8E10-$9193), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock fall 4, explosives 20 and 39, number 7 (48), the key item (50), plank 54."
  },
  {
   "address": 37268,
   "type": "line",
   "text": "Mine map, tile rows 30-35 ($9194-$9517), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock fall 14, explosive 21, number 4 (45), the lever (57) and the spot of object 60."
  },
  {
   "address": 38168,
   "type": "line",
   "text": "Mine map, tile rows 36-41 ($9518-$989B), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock falls 0 and 10, explosives 22 and 28, winch part 52."
  },
  {
   "address": 39068,
   "type": "line",
   "text": "Mine map, tile rows 42-47 ($989C-$9C1F), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: explosives 23 and 29, number 5 (46)."
  },
  {
   "address": 39968,
   "type": "line",
   "text": "Mine map, tile rows 48-53 ($9C20-$9FA3), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock falls 5 and 15, explosives 24-27, winch part 58."
  },
  {
   "address": 40868,
   "type": "line",
   "text": "Mine map, tile rows 54-59 ($9FA4-$A327), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock fall 1, explosive 30, number 6 (47)."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "Mine map continued from map_rows_54_59 ($9FA4): tile row 54 from column 92 to the end of row 59 ($A000-$A327)."
  },
  {
   "address": 41768,
   "type": "line",
   "text": "Mine map, tile rows 60-65 ($A328-$A6AB), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock fall 13, explosives 31 and 32, number 2 (43) and the spot of object 59."
  },
  {
   "address": 42668,
   "type": "line",
   "text": "Mine map, tile rows 66-71 ($A6AC-$AA2F), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock falls 7 and 12, explosive 34, number 3 (44)."
  },
  {
   "address": 43568,
   "type": "line",
   "text": "Mine map, tile rows 72-77 ($AA30-$ADB3), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock fall 11, explosive 33, type-2 item 41, winch part 51."
  },
  {
   "address": 44468,
   "type": "line",
   "text": "Mine map, tile rows 78-83 ($ADB4-$B137), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: explosive 38."
  },
  {
   "address": 45368,
   "type": "line",
   "text": "Mine map, tile rows 84-89 ($B138-$B4BB), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: explosives 35 and 36, winch part 53."
  },
  {
   "address": 46268,
   "type": "line",
   "text": "Mine map, tile rows 90-95 ($B4BC-$B83F), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: rock fall 2, rock fall 3 (the one that traps May Day, column 45 row 95), plank 55."
  },
  {
   "address": 47168,
   "type": "line",
   "text": "Mine map, tile rows 96-99 ($B840-$BA97), 150 tiles a row, read by map_to_buffer through map_view: 0 open, 1 solid rock, others from the tile tables ($1200-$13FF), $41 rope, $43 plank, $63 lift cage, $64 + type the objects stamped by draw_all_objects. Objects placed here: explosive 37, number 1 (42), and the solid bottom rows."
  },
  {
   "address": 47768,
   "type": "line",
   "text": "104 bytes after the map's last row ($BA98-$BAFF); game_init's colour copy starts at $BB01, so nothing reads them. They look like more colour values."
  },
  {
   "address": 47872,
   "type": "line",
   "text": "Colour RAM of the status panel: $BB01-$BBFF go to $D801-$D8FF and $BC01-$BCB7 to $D901-$D9B7 (rows 0-10), copied by game_init through ptr1/ptr2 ($1871). $BB00 and $BC00 are skipped by the copy loop (Y runs down to 1), so $D800 keeps its old colour and $D900 is set to 7 separately ($18B2)."
  },
  {
   "address": 48128,
   "type": "line",
   "text": "Second page of panel_colours: $BC01-$BCB7 to colour RAM $D901-$D9B7 (panel rows 6-10); $BCB8-$BCFF are not copied."
  },
  {
   "address": 48384,
   "type": "line",
   "text": "The object table as authored, copied by game_init to $312F-$342E (obj_present, obj_taken, obj_x, obj_xhi from $BD00-$BDFF), so every new game starts with all objects in place."
  },
  {
   "address": 48640,
   "type": "line",
   "text": "objects_src continued: $BE00-$BEFF become obj_row, obj_type, obj_width and obj_height ($322F-$332E)."
  },
  {
   "address": 48896,
   "type": "line",
   "text": "objects_src continued: $BF00-$BF7F become obj_icon_lo and obj_icon_hi ($332F-$33AE); $BF80-$BFFF become obj_spare, never read."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "The tune, $E000-$E3FF: voice 1 notes (from $E000). Three bytes per note (frequency high, frequency low, duration in steps), read through music_fetch_byte from the RAM under the KERNAL. The same 8 KB is in the Paris part at the same address."
  },
  {
   "address": 58368,
   "type": "line",
   "text": "The tune, $E400-$E7FF: voice 1 notes. Three bytes per note (frequency high, frequency low, duration in steps), read through music_fetch_byte from the RAM under the KERNAL. The same 8 KB is in the Paris part at the same address."
  },
  {
   "address": 59392,
   "type": "line",
   "text": "The tune, $E800-$EBFF: voice 1 notes to $EAD0, then voice 2 from $EAD1. Three bytes per note (frequency high, frequency low, duration in steps), read through music_fetch_byte from the RAM under the KERNAL. The same 8 KB is in the Paris part at the same address."
  },
  {
   "address": 60416,
   "type": "line",
   "text": "The tune, $EC00-$EFFF: voice 2 notes. Three bytes per note (frequency high, frequency low, duration in steps), read through music_fetch_byte from the RAM under the KERNAL. The same 8 KB is in the Paris part at the same address."
  },
  {
   "address": 61440,
   "type": "line",
   "text": "The tune, $F000-$F3FF: voice 2 notes. Three bytes per note (frequency high, frequency low, duration in steps), read through music_fetch_byte from the RAM under the KERNAL. The same 8 KB is in the Paris part at the same address."
  },
  {
   "address": 62464,
   "type": "line",
   "text": "The tune, $F400-$F7FF: voice 2 notes to $F754, then voice 3 from $F755. Three bytes per note (frequency high, frequency low, duration in steps), read through music_fetch_byte from the RAM under the KERNAL. The same 8 KB is in the Paris part at the same address."
  },
  {
   "address": 63488,
   "type": "line",
   "text": "The tune, $F800-$FBFF: voice 3 notes. Three bytes per note (frequency high, frequency low, duration in steps), read through music_fetch_byte from the RAM under the KERNAL. The same 8 KB is in the Paris part at the same address."
  },
  {
   "address": 64512,
   "type": "line",
   "text": "The tune, $FC00-$FFFF: voice 3 notes; the tune restarts when voice 1 ends, about when voice 3 reaches $FBD5, so this last kilobyte is probably never played. Three bytes per note (frequency high, frequency low, duration in steps), read through music_fetch_byte from the RAM under the KERNAL. The same 8 KB is in the Paris part at the same address."
  }
 ]
}
