{
 "schema": 1,
 "platform": "c64",
 "game": "lemmings",
 "part": "resident",
 "build": "PAL disk release, three disks (Psygnosis 1994), the boot disk unpatched; five parts: the resident loader, the intro, the menu, the game at level 1 of Fun's briefing, and the end sequence",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    2049,
    52023,
    "4 parts: The end sequence, The game, The intro and others"
   ],
   [
    57344,
    65529,
    "2 parts: The intro, The game"
   ]
  ],
  "extra": [],
  "edges": [
   0,
   256,
   512,
   1024,
   2048,
   4096,
   16384,
   32768,
   40960,
   49152,
   53248,
   57344
  ],
  "elsewhere": [
   [
    2049,
    52023,
    "4 parts: The end sequence, The game, The intro and others"
   ],
   [
    57344,
    65529,
    "2 parts: The intro, The game"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 63,
   "type": "Undefined"
  },
  {
   "start": 64,
   "end": 92,
   "type": "Byte"
  },
  {
   "start": 93,
   "end": 2048,
   "type": "Undefined"
  },
  {
   "start": 52024,
   "end": 52064,
   "type": "Undefined"
  },
  {
   "start": 52065,
   "end": 52071,
   "type": "Byte"
  },
  {
   "start": 52072,
   "end": 52176,
   "type": "Code"
  },
  {
   "start": 52177,
   "end": 52177,
   "type": "Byte"
  },
  {
   "start": 52178,
   "end": 52238,
   "type": "Code"
  },
  {
   "start": 52239,
   "end": 52255,
   "type": "Undefined"
  },
  {
   "start": 52256,
   "end": 52700,
   "type": "Code"
  },
  {
   "start": 52701,
   "end": 52717,
   "type": "Undefined"
  },
  {
   "start": 52718,
   "end": 53101,
   "type": "Code"
  },
  {
   "start": 53102,
   "end": 53104,
   "type": "Undefined"
  },
  {
   "start": 53105,
   "end": 53122,
   "type": "Code"
  },
  {
   "start": 53123,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 65530,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "zpa_01",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2,
   "name": "unpack_out",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "zpa_03",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 4,
   "name": "unpack_copy",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5,
   "name": "zpa_05",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6,
   "name": "fill_end",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7,
   "name": "zpa_07",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 8,
   "name": "literal_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9,
   "name": "zpa_09",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 10,
   "name": "stream_end",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11,
   "name": "zpa_0B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 12,
   "name": "stream_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13,
   "name": "zpa_0D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 14,
   "name": "copy_src",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15,
   "name": "zpa_0F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32,
   "name": "ptr_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33,
   "name": "zpa_21",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34,
   "name": "zpa_22",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35,
   "name": "zpa_23",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36,
   "name": "zpa_24",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37,
   "name": "zpa_25",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38,
   "name": "zpa_26",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39,
   "name": "zpa_27",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40,
   "name": "ptr_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41,
   "name": "zpa_29",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 42,
   "name": "load_addr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "zpa_2B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 44,
   "name": "zpa_2C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 45,
   "name": "zpa_2D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52,
   "name": "cursor_row_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53,
   "name": "zpa_35",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 54,
   "name": "zpp_36",
   "type": "ZeroPagePointer",
   "kind": "auto"
  },
  {
   "address": 55,
   "name": "zpa_37",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56,
   "name": "zpa_38",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 57,
   "name": "zpa_39",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58,
   "name": "zpa_3A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 59,
   "name": "zpa_3B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 60,
   "name": "zpa_3C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 61,
   "name": "zpa_3D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 62,
   "name": "zpa_3E",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 63,
   "name": "zpa_3F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64,
   "name": "voice_wait",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 67,
   "name": "zpf_43",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 70,
   "name": "zpf_46",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 73,
   "name": "zpa_49",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 74,
   "name": "zpa_4A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 75,
   "name": "zpf_4B",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 78,
   "name": "zpf_4E",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 81,
   "name": "zpf_51",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 84,
   "name": "zpf_54",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 87,
   "name": "zpf_57",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 90,
   "name": "zpf_5A",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 153,
   "name": "kernal_devices",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 154,
   "name": "zpa_9A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 160,
   "name": "a_00A0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 162,
   "name": "a_00A2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 169,
   "name": "a_00A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 170,
   "name": "lemming_colour_rows",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 171,
   "name": "zpa_AB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 172,
   "name": "zpa_AC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 173,
   "name": "zpa_AD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 174,
   "name": "zpa_AE",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 175,
   "name": "zpa_AF",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 176,
   "name": "bash_cell_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 177,
   "name": "frame_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 178,
   "name": "zpa_B2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 179,
   "name": "zpa_B3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 180,
   "name": "lemming_pos",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 181,
   "name": "zpa_B5",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 182,
   "name": "cursor_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 183,
   "name": "zpa_B7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 184,
   "name": "cursor_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 185,
   "name": "zpa_B9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 186,
   "name": "pixel_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 250,
   "name": "zp_fa",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 251,
   "name": "store_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 252,
   "name": "zpa_FC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 253,
   "name": "transfer_byte",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 425,
   "name": "a_01A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 512,
   "name": "object_drawn",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 674,
   "name": "a_02A2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 681,
   "name": "a_02A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 768,
   "name": "object_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 788,
   "name": "kernal_irq",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 789,
   "name": "kernal_irq_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 937,
   "name": "a_03A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1024,
   "name": "frame_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1025,
   "name": "joy_raw",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1026,
   "name": "joy_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1027,
   "name": "joy_down",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1028,
   "name": "joy_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1029,
   "name": "joy_right",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1030,
   "name": "joy_fire",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1031,
   "name": "sprite_y_base",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1032,
   "name": "sprite_x_rot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1033,
   "name": "terrain_mc0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1034,
   "name": "terrain_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1035,
   "name": "terrain_mc1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1036,
   "name": "scroll_x_fine",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1037,
   "name": "scroll_x_column",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1038,
   "name": "scroll_target_fine",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1039,
   "name": "scroll_target_column",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1040,
   "name": "scroll_step_fine",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1041,
   "name": "scroll_step_column",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1043,
   "name": "sprite_x_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1051,
   "name": "sprite_x_msb",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1052,
   "name": "irq_frames",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1053,
   "name": "swap_ready",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1054,
   "name": "fuse_digit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1055,
   "name": "scroll_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1056,
   "name": "lemming_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1057,
   "name": "shown_screen",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1058,
   "name": "next_char",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1059,
   "name": "chars_used",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1060,
   "name": "lemming_action",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1110,
   "name": "lemming_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1160,
   "name": "lemming_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1210,
   "name": "lemming_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1260,
   "name": "lemming_fuse",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1310,
   "name": "lemming_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1360,
   "name": "cell_row_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1361,
   "name": "cell_row_lo_next",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1380,
   "name": "cell_row_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1381,
   "name": "cell_row_hi_next",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1400,
   "name": "release_rate",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1401,
   "name": "cursor_distance",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1402,
   "name": "best_distance",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1403,
   "name": "irq_tick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1404,
   "name": "start_scroll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1405,
   "name": "scroll_steps",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1406,
   "name": "object_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1407,
   "name": "key_seen",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1408,
   "name": "del_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1409,
   "name": "del_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1410,
   "name": "del_released",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1411,
   "name": "nuke_armed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1412,
   "name": "nuke_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1413,
   "name": "rate_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1414,
   "name": "pause_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1415,
   "name": "end_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1416,
   "name": "level_over",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1417,
   "name": "joy_y_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1418,
   "name": "joy_y_frac",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1419,
   "name": "joy_y_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1420,
   "name": "joy_x_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1421,
   "name": "joy_x_frac",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1422,
   "name": "joy_x_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1424,
   "name": "mouse_x_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1425,
   "name": "mouse_y_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1426,
   "name": "mouse_prev",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1427,
   "name": "mouse_now",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1428,
   "name": "cia_porta",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1429,
   "name": "release_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1430,
   "name": "entrance_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1432,
   "name": "blast_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1433,
   "name": "object_frame_due",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1434,
   "name": "object_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1439,
   "name": "skill_target_found",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1442,
   "name": "a_05A2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1460,
   "name": "copied_column",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1461,
   "name": "last_fine",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1462,
   "name": "last_column",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1463,
   "name": "out_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1464,
   "name": "release_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1465,
   "name": "cursor_saved",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1466,
   "name": "cursor_saved_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1467,
   "name": "cursor_saved_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1468,
   "name": "cursor_saved_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1469,
   "name": "cursor_offset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1470,
   "name": "cursor_shape",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1471,
   "name": "skill_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1472,
   "name": "selected_skill",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1473,
   "name": "target_lemming",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1474,
   "name": "bg_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1475,
   "name": "fire_held",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1476,
   "name": "give_skill",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1477,
   "name": "lemming_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1478,
   "name": "lemming_action_now",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1479,
   "name": "fuse_now",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1480,
   "name": "skill_tens_now",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1488,
   "name": "rate_tens_min",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1489,
   "name": "rate_units_digit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1490,
   "name": "skill_units_now",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1498,
   "name": "rate_units_min",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1499,
   "name": "rate_units_now",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1500,
   "name": "object_frame",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1564,
   "name": "object_frame_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1756,
   "name": "paused_pass",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1757,
   "name": "level_ending",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1758,
   "name": "time_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1759,
   "name": "tick_50",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1760,
   "name": "trapdoor_sound_done",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1761,
   "name": "release_started",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1762,
   "name": "exit_pick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1763,
   "name": "frame_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1764,
   "name": "a_06E4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1765,
   "name": "blast_column",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1766,
   "name": "blast_column_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1767,
   "name": "blast_row_char",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1768,
   "name": "blast_row_fine",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1769,
   "name": "sound_saved_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1770,
   "name": "sound_saved_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1771,
   "name": "paused_copy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1772,
   "name": "one_way_kind",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1773,
   "name": "cell_saved_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1774,
   "name": "cell_saved_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1792,
   "name": "graphics_codes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1856,
   "name": "graphics_codes_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1954,
   "name": "a_07A2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52024,
   "name": "mouse_found",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52025,
   "name": "clock",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52026,
   "name": "clock_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52027,
   "name": "clock_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52028,
   "name": "under_cursor",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52029,
   "name": "under_cursor_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52030,
   "name": "lemmings_out",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52031,
   "name": "lemmings_out_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52032,
   "name": "percent_saved",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52033,
   "name": "percent_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52034,
   "name": "percent_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52037,
   "name": "saved_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52038,
   "name": "result_kind",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52039,
   "name": "sound_mode",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52040,
   "name": "level_number",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52041,
   "name": "access_code",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52051,
   "name": "loaded_level",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52062,
   "name": "keep_pb",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52063,
   "name": "pb_kept",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52064,
   "name": "drive_side",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52065,
   "name": "test_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52072,
   "name": "resident_vectors",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52084,
   "name": "boot_sequence",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52116,
   "name": "to_intro",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 52122,
   "name": "fresh_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52126,
   "name": "b_CB9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52129,
   "name": "test_flag_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52138,
   "name": "game_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 52144,
   "name": "menu_choice",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52154,
   "name": "next_level",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 52160,
   "name": "j_CBC0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52174,
   "name": "b_CBCE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52177,
   "name": "loop_gap_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52178,
   "name": "restore_briefing",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52213,
   "name": "b_CBF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52215,
   "name": "a_CBF7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52218,
   "name": "a_CBFA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52256,
   "name": "loader_vectors",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52259,
   "name": "vector_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52262,
   "name": "vector_menu",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52265,
   "name": "vector_end",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52268,
   "name": "vector_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52271,
   "name": "vector_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52274,
   "name": "vector_load",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52277,
   "name": "vector_load_tune",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52280,
   "name": "vector_tables",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52283,
   "name": "unpack_header",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52335,
   "name": "b_CC6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52347,
   "name": "b_CC7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52353,
   "name": "b_CC81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52365,
   "name": "unpack",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52367,
   "name": "b_CC8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52383,
   "name": "b_CC9F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52385,
   "name": "b_CCA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52393,
   "name": "b_CCA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52399,
   "name": "b_CCAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52412,
   "name": "next_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52418,
   "name": "b_CCC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52421,
   "name": "b_CCC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52439,
   "name": "b_CCD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52442,
   "name": "b_CCDA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52453,
   "name": "b_CCE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52457,
   "name": "b_CCE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52465,
   "name": "b_CCF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52471,
   "name": "b_CCF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52483,
   "name": "b_CD03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52490,
   "name": "b_CD0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52500,
   "name": "b_CD14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52515,
   "name": "load_codes_64",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52528,
   "name": "to_menu",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52541,
   "name": "b_CD3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52553,
   "name": "j_CD49",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52566,
   "name": "to_ending",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 52574,
   "name": "load_pa",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52579,
   "name": "load_pb",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52589,
   "name": "b_CD6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52593,
   "name": "copy_pages",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52607,
   "name": "b_CD7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52622,
   "name": "j_CD8E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52630,
   "name": "load_by_code",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52633,
   "name": "j_CD99",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52636,
   "name": "j_CD9C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52648,
   "name": "a_CDA8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52678,
   "name": "b_CDC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52700,
   "name": "r_CDDC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52701,
   "name": "name_letter",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52702,
   "name": "file_kinds",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52710,
   "name": "kind_sides",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52718,
   "name": "load_file",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52809,
   "name": "b_CE49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52815,
   "name": "r_CE4F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52816,
   "name": "receive_file",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52878,
   "name": "j_CE8E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52906,
   "name": "b_CEAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52907,
   "name": "a_CEAB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52921,
   "name": "r_CEB9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52922,
   "name": "receive_escaped",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52950,
   "name": "b_CED6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52952,
   "name": "b_CED8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52956,
   "name": "b_CEDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52960,
   "name": "send_command",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52961,
   "name": "a_CEE1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 52985,
   "name": "receive_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 53002,
   "name": "r_CF0A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 53003,
   "name": "receive_2bits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 53004,
   "name": "a_CF0C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 53019,
   "name": "a_CF1B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 53030,
   "name": "send_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 53045,
   "name": "send_2bits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 53046,
   "name": "a_CF36",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 53053,
   "name": "b_CF3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53061,
   "name": "a_CF45",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 53068,
   "name": "b_CF4C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53074,
   "name": "wait_drive",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 53076,
   "name": "b_CF54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53079,
   "name": "b_CF57",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53087,
   "name": "a_CF5F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 53098,
   "name": "b_CF6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53102,
   "name": "name_kind",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53103,
   "name": "name_second",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53104,
   "name": "receive_mark",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53105,
   "name": "build_code_tables",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 53107,
   "name": "b_CF73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 53123,
   "name": "file_codes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 53187,
   "name": "file_codes_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53233,
   "name": "tune_codes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 53248,
   "name": "tune_codes_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53504,
   "name": "briefing_stash",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 54528,
   "name": "briefing_stash_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 54581,
   "name": "text_templates",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55360,
   "name": "briefing_stash_1b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55552,
   "name": "briefing_stash_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55616,
   "name": "briefing_stash_2b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55808,
   "name": "f_DA00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55872,
   "name": "briefing_stash_2c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55880,
   "name": "f_DA48",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55944,
   "name": "briefing_stash_2d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 56064,
   "name": "f_DB00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56136,
   "name": "f_DB48",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56176,
   "name": "f_DB70",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56179,
   "name": "f_DB73",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56180,
   "name": "f_DB74",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56244,
   "name": "briefing_stash_3b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 56576,
   "name": "briefing_stash_3",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 0,
   "type": "line",
   "text": "the processor port's data direction register"
  },
  {
   "address": 1,
   "type": "line",
   "text": "the processor port: which ROMs and the I/O area are in view"
  },
  {
   "address": 2,
   "type": "line",
   "text": "the unpacker's output pointer ($02/$03)"
  },
  {
   "address": 3,
   "type": "line",
   "text": "unpack_out's high byte"
  },
  {
   "address": 4,
   "type": "line",
   "text": "the boot unpack's copy pointer ($04/$05); also the fill value of a run ($05)"
  },
  {
   "address": 5,
   "type": "line",
   "text": "unpack_copy's high byte, and the value a fill run writes"
  },
  {
   "address": 6,
   "type": "line",
   "text": "the end of a fill run ($06/$07)"
  },
  {
   "address": 7,
   "type": "line",
   "text": "fill_end's high byte"
  },
  {
   "address": 8,
   "type": "line",
   "text": "how many bytes of $E0 and up are still copied as they are ($08/$09)"
  },
  {
   "address": 9,
   "type": "line",
   "text": "literal_count's high byte"
  },
  {
   "address": 10,
   "type": "line",
   "text": "the packed stream's end ($0A/$0B)"
  },
  {
   "address": 11,
   "type": "line",
   "text": "stream_end's high byte"
  },
  {
   "address": 12,
   "type": "line",
   "text": "the packed stream's read pointer ($0C/$0D)"
  },
  {
   "address": 13,
   "type": "line",
   "text": "stream_ptr's high byte"
  },
  {
   "address": 14,
   "type": "line",
   "text": "the boot unpack's copy source ($0E/$0F)"
  },
  {
   "address": 15,
   "type": "line",
   "text": "copy_src's high byte"
  },
  {
   "address": 32,
   "type": "line",
   "text": "screen and colour pointers ($20-$27): rows of the two screens and of colour RAM, set by $0E8A, $5AF6 and others"
  },
  {
   "address": 33,
   "type": "line",
   "text": "ptr_a's high byte: the screen row's page"
  },
  {
   "address": 34,
   "type": "line",
   "text": "the second pointer of ptr_a, low byte: colour RAM's row"
  },
  {
   "address": 35,
   "type": "line",
   "text": "the second pointer's high byte ($D8-$DB)"
  },
  {
   "address": 36,
   "type": "line",
   "text": "the third pointer of ptr_a, low byte: the other screen's row"
  },
  {
   "address": 37,
   "type": "line",
   "text": "the third pointer's high byte"
  },
  {
   "address": 38,
   "type": "line",
   "text": "the fourth pointer of ptr_a, low byte"
  },
  {
   "address": 39,
   "type": "line",
   "text": "the fourth pointer's high byte"
  },
  {
   "address": 40,
   "type": "line",
   "text": "pointers to the preview and to texts ($28/$29)"
  },
  {
   "address": 41,
   "type": "line",
   "text": "ptr_b's high byte"
  },
  {
   "address": 42,
   "type": "line",
   "text": "where the file being loaded starts ($2A/$2B), and that plus 8 ($2C/$2D) for the packed-file check"
  },
  {
   "address": 43,
   "type": "line",
   "text": "load_addr's high byte"
  },
  {
   "address": 44,
   "type": "line",
   "text": "load_addr plus 8, low byte"
  },
  {
   "address": 45,
   "type": "line",
   "text": "load_addr plus 8, high byte"
  },
  {
   "address": 52,
   "type": "line",
   "text": "the cursor's row on the hidden screen ($34/$35, and $36/$37 for the putting back)"
  },
  {
   "address": 53,
   "type": "line",
   "text": "cursor_row_ptr's high byte"
  },
  {
   "address": 54,
   "type": "line",
   "text": "the cursor's row for putting the characters back, low byte"
  },
  {
   "address": 55,
   "type": "line",
   "text": "its high byte"
  },
  {
   "address": 56,
   "type": "line",
   "text": "the three screen rows a lemming is drawn into, on the hidden screen ($38-$3D) and in colour RAM ($3E/$3F)"
  },
  {
   "address": 57,
   "type": "line",
   "text": "the first lemming row's high byte"
  },
  {
   "address": 58,
   "type": "line",
   "text": "the second lemming row, low byte"
  },
  {
   "address": 59,
   "type": "line",
   "text": "the second row's high byte"
  },
  {
   "address": 60,
   "type": "line",
   "text": "the third lemming row, low byte"
  },
  {
   "address": 61,
   "type": "line",
   "text": "the third row's high byte"
  },
  {
   "address": 62,
   "type": "line",
   "text": "the first row in colour RAM, low byte"
  },
  {
   "address": 63,
   "type": "line",
   "text": "the first row in colour RAM, high byte"
  },
  {
   "address": 64,
   "type": "line",
   "text": "the sound driver's per-voice bytes, three each: steps left of the note ($40), the note ($43), the sequence ($46), the sequence pointer ($49/$4A, shared), the position in it ($4B), the slide ($4E), the frequency ($51 low, $54 high), active ($57), repeats left ($5A)"
  },
  {
   "address": 67,
   "type": "line",
   "text": "the sound driver's note, voice 0 (voices 1 and 2 at $44, $45)"
  },
  {
   "address": 70,
   "type": "line",
   "text": "the sequence playing on voice 0 (1 and 2 at $47, $48)"
  },
  {
   "address": 73,
   "type": "line",
   "text": "the sound driver's sequence pointer, low byte"
  },
  {
   "address": 74,
   "type": "line",
   "text": "the sequence pointer's high byte"
  },
  {
   "address": 75,
   "type": "line",
   "text": "the position in voice 0's sequence (1 and 2 at $4C, $4D)"
  },
  {
   "address": 78,
   "type": "line",
   "text": "voice 0's slide speed (1 and 2 at $4F, $50)"
  },
  {
   "address": 81,
   "type": "line",
   "text": "voice 0's frequency, low byte (1 and 2 at $52, $53)"
  },
  {
   "address": 84,
   "type": "line",
   "text": "voice 0's frequency, high byte (1 and 2 at $55, $56)"
  },
  {
   "address": 87,
   "type": "line",
   "text": "voice 0 active, 0 when its sequence has ended (1 and 2 at $58, $59)"
  },
  {
   "address": 90,
   "type": "line",
   "text": "voice 0's repeats left of a $FB block (1 and 2 at $5B, $5C)"
  },
  {
   "address": 93,
   "type": "line",
   "text": "voice 0's repeats left of a $FB block ends at $5A; $5D and $5E are named by no instruction"
  },
  {
   "address": 153,
   "type": "line",
   "text": "the KERNAL's input and output devices, set to the keyboard and the screen by restore_irq ($53C6)"
  },
  {
   "address": 154,
   "type": "line",
   "text": "the KERNAL's output device"
  },
  {
   "address": 160,
   "type": "line",
   "text": "named only as the operand of a BIT (the skip idiom); zero page"
  },
  {
   "address": 162,
   "type": "line",
   "text": "named only as the operand of the BITs at $1591 and $25FB (the skip idiom); zero page"
  },
  {
   "address": 169,
   "type": "line",
   "text": "named only as the operand of BITs (the skip idiom); zero page"
  },
  {
   "address": 170,
   "type": "line",
   "text": "colour RAM pointers for the second and third rows a lemming covers ($AA-$AD) and for the cursor ($AE/$AF)"
  },
  {
   "address": 171,
   "type": "line",
   "text": "the second lemming row in colour RAM, high byte"
  },
  {
   "address": 172,
   "type": "line",
   "text": "the third lemming row in colour RAM, low byte"
  },
  {
   "address": 173,
   "type": "line",
   "text": "the third row in colour RAM, high byte"
  },
  {
   "address": 174,
   "type": "line",
   "text": "the cursor's row in colour RAM, low byte"
  },
  {
   "address": 175,
   "type": "line",
   "text": "the cursor's row in colour RAM, high byte"
  },
  {
   "address": 176,
   "type": "line",
   "text": "the cell bash_cell clears ($B0 X, $B2 Y)"
  },
  {
   "address": 177,
   "type": "line",
   "text": "the lemming's drawing: the row its frame starts in ($B1) and its end ($B3)"
  },
  {
   "address": 178,
   "type": "line",
   "text": "bash_cell's Y"
  },
  {
   "address": 179,
   "type": "line",
   "text": "the lemming frame's last row in its character"
  },
  {
   "address": 180,
   "type": "line",
   "text": "the lemming being drawn: its X on the screen ($B4) and its Y ($B5)"
  },
  {
   "address": 181,
   "type": "line",
   "text": "lemming_pos's Y"
  },
  {
   "address": 182,
   "type": "line",
   "text": "the cursor's X ($B6) and its fraction ($B7)"
  },
  {
   "address": 183,
   "type": "line",
   "text": "cursor_x's fraction"
  },
  {
   "address": 184,
   "type": "line",
   "text": "the cursor's Y ($B8) and its fraction ($B9)"
  },
  {
   "address": 185,
   "type": "line",
   "text": "cursor_y's fraction"
  },
  {
   "address": 186,
   "type": "line",
   "text": "how many terrain pixels a stroke changed ($2930)"
  },
  {
   "address": 250,
   "type": "line",
   "text": "a zero-page byte next to pixel_count, not named by the code"
  },
  {
   "address": 251,
   "type": "line",
   "text": "where the loader stores the next byte it receives ($FB/$FC)"
  },
  {
   "address": 252,
   "type": "line",
   "text": "store_ptr's high byte"
  },
  {
   "address": 253,
   "type": "line",
   "text": "the byte being sent to or received from the drive, two bits at a time"
  },
  {
   "address": 512,
   "type": "line",
   "text": "per object (up to 256): $80 once it has been drawn this frame ($2A48)"
  },
  {
   "address": 674,
   "type": "line",
   "text": "named only as the operand of a BIT (the skip idiom)"
  },
  {
   "address": 681,
   "type": "line",
   "text": "named only as the operand of BITs (the skip idiom)"
  },
  {
   "address": 768,
   "type": "line",
   "text": "per object: its number of animation frames, from the kind byte's bits 3-5 ($117A)"
  },
  {
   "address": 788,
   "type": "line",
   "text": "the KERNAL's IRQ vector; the briefing and the menu point it at their own handlers"
  },
  {
   "address": 789,
   "type": "line",
   "text": "the high byte of kernal_irq, the KERNAL's IRQ vector"
  },
  {
   "address": 937,
   "type": "line",
   "text": "named only as the operand of the BIT at $2103 (the skip idiom); the bytes are object_frames'"
  },
  {
   "address": 1024,
   "type": "line",
   "text": "bit 7 set by the play interrupt once per screen swap ($0913); the main loop at $0E5F waits for it and clears it"
  },
  {
   "address": 1025,
   "type": "line",
   "text": "the joystick byte read from $DC00 by $0B3C, shifted out bit by bit into $0402-$0406"
  },
  {
   "address": 1026,
   "type": "line",
   "text": "five flags, $80 when pressed: up, down, left, right, fire (from $DC00 bits 0-4, by $0B3C)"
  },
  {
   "address": 1027,
   "type": "line",
   "text": "the joystick's down flag (one of joy_bits)"
  },
  {
   "address": 1028,
   "type": "line",
   "text": "the joystick's left flag"
  },
  {
   "address": 1029,
   "type": "line",
   "text": "the joystick's right flag"
  },
  {
   "address": 1030,
   "type": "line",
   "text": "the joystick's fire flag"
  },
  {
   "address": 1031,
   "type": "line",
   "text": "first sprite row's Y for the terrain sprites: the scroll's coarse row offset plus $48 ($0B7B), set by $0CDF"
  },
  {
   "address": 1032,
   "type": "line",
   "text": "how far the eight terrain sprites' X positions are rotated through $0413-$041A ($0BB4), set by $0CDF"
  },
  {
   "address": 1033,
   "type": "line",
   "text": "terrain sprite multicolour 0, from the level header's colour table at $E060 ($0E1C)"
  },
  {
   "address": 1034,
   "type": "line",
   "text": "terrain sprites' own colour, from $E064 ($0E1C)"
  },
  {
   "address": 1035,
   "type": "line",
   "text": "terrain sprite multicolour 1, from $E068 ($0E1C)"
  },
  {
   "address": 1036,
   "type": "line",
   "text": "the view's horizontal position in pixels within a column (0-7); with $040D it says which part of the level is shown"
  },
  {
   "address": 1037,
   "type": "line",
   "text": "the view's horizontal position in columns"
  },
  {
   "address": 1038,
   "type": "line",
   "text": "where the view should move to, fine part; set by the cursor at the screen edge, and at the level's start by scroll_target_right ($11EF, $11F8) to bring the view to the start position"
  },
  {
   "address": 1039,
   "type": "line",
   "text": "where the view should move to, column part"
  },
  {
   "address": 1040,
   "type": "line",
   "text": "this pass's scroll step, fine part, at most one column ($0DDB)"
  },
  {
   "address": 1041,
   "type": "line",
   "text": "this pass's scroll step, columns (0 or 1)"
  },
  {
   "address": 1043,
   "type": "line",
   "text": "the eight terrain sprites' X positions, 24 pixels apart, rotated into $D000-$D00E by $0B73"
  },
  {
   "address": 1051,
   "type": "line",
   "text": "the X positions' ninth bits, built for $D010 by $0B73"
  },
  {
   "address": 1052,
   "type": "line",
   "text": "counts frames since the last screen swap ($08EF)"
  },
  {
   "address": 1053,
   "type": "line",
   "text": "$80 when the main loop has drawn the hidden screen and it may be shown ($0E74)"
  },
  {
   "address": 1054,
   "type": "line",
   "text": "the burning fuse's top three bits for the lemming being drawn: which countdown digit is drawn above it"
  },
  {
   "address": 1055,
   "type": "line",
   "text": "set to 6 by $0C90"
  },
  {
   "address": 1056,
   "type": "line",
   "text": "an offset into the frame tables for the lemming being drawn"
  },
  {
   "address": 1057,
   "type": "line",
   "text": "which of the two screens is shown: 0 for $4000, 1 for $4400; toggled by the interrupt at each swap ($0904)"
  },
  {
   "address": 1058,
   "type": "line",
   "text": "the next free character code for drawing lemmings this frame; starts at 2 every pass"
  },
  {
   "address": 1059,
   "type": "line",
   "text": "the character code reached after the last lemming drawn"
  },
  {
   "address": 1060,
   "type": "line",
   "text": "per lemming (50): the action in bits 0-4, bit 7 the direction"
  },
  {
   "address": 1110,
   "type": "line",
   "text": "per lemming: bits 0 the column's ninth bit, 1 climber, 2 floater, 3-7 the animation frame"
  },
  {
   "address": 1160,
   "type": "line",
   "text": "per lemming: its X in the level, low byte"
  },
  {
   "address": 1210,
   "type": "line",
   "text": "per lemming: its Y"
  },
  {
   "address": 1260,
   "type": "line",
   "text": "per lemming: the bomb fuse, $BF when lit, 5 off a pass; 0 when none"
  },
  {
   "address": 1310,
   "type": "line",
   "text": "per lemming: bit 7 not in play; the low bits count the action's steps: the fall's length, the builder's bricks"
  },
  {
   "address": 1360,
   "type": "line",
   "text": "the low bytes of the cell map's rows, from $E08E (20 rows)"
  },
  {
   "address": 1361,
   "type": "line",
   "text": "cell_row_lo from its second entry, built by $2DB5"
  },
  {
   "address": 1380,
   "type": "line",
   "text": "the high bytes of the cell map's rows"
  },
  {
   "address": 1381,
   "type": "line",
   "text": "cell_row_hi from its second entry"
  },
  {
   "address": 1400,
   "type": "line",
   "text": "the release rate as a step 0-23 ($0B14 down to the level's minimum at $E03C, $0B30 up to 23)"
  },
  {
   "address": 1401,
   "type": "line",
   "text": "how near the lemming being tested is to the cursor"
  },
  {
   "address": 1402,
   "type": "line",
   "text": "the nearest so far ($FF at the start of the pass)"
  },
  {
   "address": 1403,
   "type": "line",
   "text": "set to $80 by every play interrupt ($08EA); $0DF5 waits on it to count frames"
  },
  {
   "address": 1404,
   "type": "line",
   "text": "how far the view scrolls before play starts, from the first entrance ($1109)"
  },
  {
   "address": 1405,
   "type": "line",
   "text": "counts the start's scroll steps down"
  },
  {
   "address": 1406,
   "type": "line",
   "text": "the object being drawn"
  },
  {
   "address": 1407,
   "type": "line",
   "text": "$80 when the keyboard scan at $0A5A found a key down"
  },
  {
   "address": 1408,
   "type": "line",
   "text": "$80 after a press of DEL (key 11 of the scan table, $0AE7); cleared when $DC01 reads a key at the start of the scan; with $0581 and $0582 it detects DEL pressed twice"
  },
  {
   "address": 1409,
   "type": "line",
   "text": "counts passes with no key down since DEL was pressed ($0AA6); a second DEL within 8 of them arms the nuke"
  },
  {
   "address": 1410,
   "type": "line",
   "text": "$80 on a pass with no key down after DEL ($0AA9), so that holding DEL does not count as two presses"
  },
  {
   "address": 1411,
   "type": "line",
   "text": "$80 once DEL has been pressed twice within 8 key-free passes ($0ADC)"
  },
  {
   "address": 1412,
   "type": "line",
   "text": "the next lemming the nuke gives a fuse"
  },
  {
   "address": 1413,
   "type": "line",
   "text": "counts passes between steps of the release rate while + or - is held (one step every 7)"
  },
  {
   "address": 1414,
   "type": "line",
   "text": "$80 while SHIFT is held (key 10 of the scan table; SHIFT LOCK holds it down), cleared at the start of every scan ($0A70): the game is paused"
  },
  {
   "address": 1415,
   "type": "line",
   "text": "counts 30 passes down once no lemming is left in play; at 0 the level ends ($0F31)"
  },
  {
   "address": 1416,
   "type": "line",
   "text": "$80 once the level has ended: by time, by the back-arrow key while paused, or with every lemming gone ($0F36, $0ECA)"
  },
  {
   "address": 1417,
   "type": "line",
   "text": "the joystick cursor's vertical speed ($0589/$058A) and its direction ($058B)"
  },
  {
   "address": 1418,
   "type": "line",
   "text": "the joystick cursor's vertical speed, fraction"
  },
  {
   "address": 1419,
   "type": "line",
   "text": "the joystick cursor's vertical direction ($80 one way)"
  },
  {
   "address": 1420,
   "type": "line",
   "text": "the horizontal speed ($058C/$058D) and its direction ($058E)"
  },
  {
   "address": 1421,
   "type": "line",
   "text": "the joystick cursor's horizontal speed, fraction"
  },
  {
   "address": 1422,
   "type": "line",
   "text": "the joystick cursor's horizontal direction ($80 one way)"
  },
  {
   "address": 1424,
   "type": "line",
   "text": "the mouse's last X reading"
  },
  {
   "address": 1425,
   "type": "line",
   "text": "the mouse's last Y reading"
  },
  {
   "address": 1426,
   "type": "line",
   "text": "the reading before, kept by the delta routines ($0592) and the new one ($0593)"
  },
  {
   "address": 1427,
   "type": "line",
   "text": "the new paddle reading, kept by the delta routines"
  },
  {
   "address": 1428,
   "type": "line",
   "text": "$DC00 as it was before the mouse's port was selected"
  },
  {
   "address": 1429,
   "type": "line",
   "text": "the release timer's step, from the rate"
  },
  {
   "address": 1430,
   "type": "line",
   "text": "which entrance the next lemming comes from (0, 3, 6)"
  },
  {
   "address": 1432,
   "type": "line",
   "text": "the explosion's row being cut out"
  },
  {
   "address": 1433,
   "type": "line",
   "text": "$80 when the objects move to their next frame this pass"
  },
  {
   "address": 1434,
   "type": "line",
   "text": "the objects' frame timer ($2A37)"
  },
  {
   "address": 1439,
   "type": "line",
   "text": "$FF once a lemming under the cursor has been found this pass"
  },
  {
   "address": 1442,
   "type": "line",
   "text": "named only as the operand of the BIT at $5369 (the skip idiom)"
  },
  {
   "address": 1460,
   "type": "line",
   "text": "the scroll column whose terrain characters $0D1F last copied"
  },
  {
   "address": 1461,
   "type": "line",
   "text": "the scroll position, fine, at the last frame ($0CFF)"
  },
  {
   "address": 1462,
   "type": "line",
   "text": "the scroll position, columns, at the last frame ($0CF9)"
  },
  {
   "address": 1463,
   "type": "line",
   "text": "lemmings released so far; when it reaches the level's count at $E039, no more come"
  },
  {
   "address": 1464,
   "type": "line",
   "text": "the release timer; its carry lets a lemming out ($1DD9)"
  },
  {
   "address": 1465,
   "type": "line",
   "text": "the four characters under the cursor, put back next frame ($05B9-$05BC)"
  },
  {
   "address": 1466,
   "type": "line",
   "text": "the second character under the cursor"
  },
  {
   "address": 1467,
   "type": "line",
   "text": "the third character under the cursor"
  },
  {
   "address": 1468,
   "type": "line",
   "text": "the fourth character under the cursor"
  },
  {
   "address": 1469,
   "type": "line",
   "text": "the cursor's column in its row"
  },
  {
   "address": 1470,
   "type": "line",
   "text": "which cursor shape: 0 when a lemming is under it, 4 otherwise"
  },
  {
   "address": 1471,
   "type": "line",
   "text": "$80 when a lemming is under the cursor"
  },
  {
   "address": 1472,
   "type": "line",
   "text": "the skill chosen with keys 1-8 (0-7), set by $0AB4; also moves the panel's highlight sprite ($0A4A)"
  },
  {
   "address": 1473,
   "type": "line",
   "text": "the lemming under the cursor, $FF for none"
  },
  {
   "address": 1474,
   "type": "line",
   "text": "the play area's background colour, from the level header at $E05C ($0E1C)"
  },
  {
   "address": 1475,
   "type": "line",
   "text": "$80 while fire is held"
  },
  {
   "address": 1476,
   "type": "line",
   "text": "$80 when the skill should be given this pass"
  },
  {
   "address": 1477,
   "type": "line",
   "text": "the lemming being moved or drawn"
  },
  {
   "address": 1478,
   "type": "line",
   "text": "the lemming's action while it is moved ($0424 with bit 5 clear)"
  },
  {
   "address": 1479,
   "type": "line",
   "text": "the lemming's fuse, top three bits"
  },
  {
   "address": 1480,
   "type": "line",
   "text": "the eight skills' counts as play goes, tens digits"
  },
  {
   "address": 1488,
   "type": "line",
   "text": "the tens digits of the panel's two rate counts: $05D0 the level's minimum rate, set at its start ($10FE), $05D1 the rate in force"
  },
  {
   "address": 1489,
   "type": "line",
   "text": "the release rate's units digit in the panel"
  },
  {
   "address": 1490,
   "type": "line",
   "text": "the eight skills' counts, units digits"
  },
  {
   "address": 1498,
   "type": "line",
   "text": "the units digit of the level's minimum rate, set at the level's start ($10F8) and drawn as draw_count's count 8; a value 0-9, which draw_count turns into a character by adding $48"
  },
  {
   "address": 1499,
   "type": "line",
   "text": "the units digit of the release rate in force, draw_count's count 9; a value 0-9, which draw_count turns into a character by adding $48"
  },
  {
   "address": 1500,
   "type": "line",
   "text": "per object: its current animation frame"
  },
  {
   "address": 1564,
   "type": "line",
   "text": "object_frame from object 64 on, $061C-$06DB"
  },
  {
   "address": 1756,
   "type": "line",
   "text": "the pause flag copied at the start of the pass ($0E3C): when set, the clock ($0EE9) and $1DD9 are skipped ($0E4E)"
  },
  {
   "address": 1757,
   "type": "line",
   "text": "$80 from the moment the level ends; stops the play interrupt calling $1916 ($091E)"
  },
  {
   "address": 1758,
   "type": "line",
   "text": "$80 once the level is over without the lemmings: set by end_level, which the clock running out reaches ($0EC7) and so does the back arrow while paused ($0AFA)"
  },
  {
   "address": 1759,
   "type": "line",
   "text": "counts frames in fives up to 50: one second of the clock at $0EE9"
  },
  {
   "address": 1760,
   "type": "line",
   "text": "$80 once the first trap door's sound has played"
  },
  {
   "address": 1761,
   "type": "line",
   "text": "$80 once the trap doors are open"
  },
  {
   "address": 1762,
   "type": "line",
   "text": "0 or 3, which exit the exit test uses this pass"
  },
  {
   "address": 1763,
   "type": "line",
   "text": "the high part of the frame offset for the lemming being drawn"
  },
  {
   "address": 1764,
   "type": "line",
   "text": "the explosion's pixel shift"
  },
  {
   "address": 1765,
   "type": "line",
   "text": "the explosion's column ($06E5/$06E6)"
  },
  {
   "address": 1766,
   "type": "line",
   "text": "the explosion's column, high byte"
  },
  {
   "address": 1767,
   "type": "line",
   "text": "the explosion's character row, $FF when there is none to draw"
  },
  {
   "address": 1768,
   "type": "line",
   "text": "the explosion's line within its character"
  },
  {
   "address": 1769,
   "type": "line",
   "text": "X saved by play_sound"
  },
  {
   "address": 1770,
   "type": "line",
   "text": "Y saved by play_sound"
  },
  {
   "address": 1771,
   "type": "line",
   "text": "the pause flag, copied by animate_objects"
  },
  {
   "address": 1772,
   "type": "line",
   "text": "the cell kind a one-way wall facing the lemming has (2 or 3)"
  },
  {
   "address": 1773,
   "type": "line",
   "text": "X saved by cell_kind"
  },
  {
   "address": 1774,
   "type": "line",
   "text": "Y saved by cell_kind"
  },
  {
   "address": 1792,
   "type": "line",
   "text": "per level, the code byte of its tune file (copied from $CFF1 by $CF71; the loader forces the top three bits to S)"
  },
  {
   "address": 1856,
   "type": "line",
   "text": "graphics_codes from level 64 on, $0740-$0763"
  },
  {
   "address": 1954,
   "type": "line",
   "text": "named only as the operand of the BIT at $261A (the skip idiom); the bytes are graphics_codes'"
  },
  {
   "address": 52024,
   "type": "line",
   "text": "bit 7 set when a 1351 mouse was found at boot; play then reads it instead of the joystick"
  },
  {
   "address": 52025,
   "type": "line",
   "text": "the level's clock: minutes ($CB39), tens of seconds ($CB3A), seconds ($CB3B)"
  },
  {
   "address": 52026,
   "type": "line",
   "text": "the clock's tens of seconds"
  },
  {
   "address": 52027,
   "type": "line",
   "text": "the clock's seconds"
  },
  {
   "address": 52028,
   "type": "line",
   "text": "the count of lemmings under the cursor, two digits ($CB3C/$CB3D)"
  },
  {
   "address": 52029,
   "type": "line",
   "text": "its units digit"
  },
  {
   "address": 52030,
   "type": "line",
   "text": "the count of lemmings out, two digits ($CB3E/$CB3F)"
  },
  {
   "address": 52031,
   "type": "line",
   "text": "the units digit of lemmings_out"
  },
  {
   "address": 52032,
   "type": "line",
   "text": "the percentage saved, five decimal digits with two after the point ($CB40-$CB44); three are shown"
  },
  {
   "address": 52033,
   "type": "line",
   "text": "its second digit"
  },
  {
   "address": 52034,
   "type": "line",
   "text": "its third digit and the decimals"
  },
  {
   "address": 52037,
   "type": "line",
   "text": "how many lemmings have been saved"
  },
  {
   "address": 52038,
   "type": "line",
   "text": "how the level ended: 8 by the clock or the back arrow ($0EB5), 9 with every lemming gone ($0F2C); the end screen takes it ($539F)"
  },
  {
   "address": 52039,
   "type": "line",
   "text": "bit 7 set for music, clear for sound effects (key 4 at the menu)"
  },
  {
   "address": 52040,
   "type": "line",
   "text": "the level being played, 0-99: 0-24 Fun, 25-49 Tricky, 50-74 Taxing, 75-99 Mayhem"
  },
  {
   "address": 52041,
   "type": "line",
   "text": "the access code the next level file must carry, ten letters; WANNABFREE before level 1"
  },
  {
   "address": 52051,
   "type": "line",
   "text": "the level whose files are in memory, so they are not loaded twice"
  },
  {
   "address": 52062,
   "type": "line",
   "text": "bit 7 set: going to the menu keeps PB ($4800-$4FFF) at $A400 instead of loading CC ($CD30)"
  },
  {
   "address": 52063,
   "type": "line",
   "text": "$80 when $A400 holds the copy of PB, so starting a game copies it back instead of loading it ($CD63)"
  },
  {
   "address": 52064,
   "type": "line",
   "text": "the disk side the loader last asked for"
  },
  {
   "address": 52065,
   "type": "line",
   "text": "when bit 7 is set, ending a level ($0EB5) counts every lemming as saved, 100 %; with the next six bytes, flags no instruction but $0ED3 names"
  },
  {
   "address": 52072,
   "type": "line",
   "text": "the resident part's own entry points: $CB68 and $CB71 a fresh start ($CB9A), $CB6B from the menu ($CBB0), $CB6E back into the game loop ($CBC0), and the boot sequence at $CB74"
  },
  {
   "address": 52084,
   "type": "line",
   "text": "the boot file's last step: points the NMI at an RTI ($CC0F), then for each of the two loading pictures restores the briefing ($CBD2), loads it (codes $6C and $6D: ID and IE) and shows it ($6710); then loads the intro ($CC23: IA and IB, then $4750)"
  },
  {
   "address": 52116,
   "type": "line",
   "text": "restores the briefing code and loads the intro ($CC23)"
  },
  {
   "address": 52122,
   "type": "line",
   "text": "forgets which files are in memory ($CB53-$CB5D = $FF), loads PA, the play engine ($CC2C), and goes to the menu ($CC26)"
  },
  {
   "address": 52129,
   "type": "line",
   "text": "inside fresh_start: the loop's DEX"
  },
  {
   "address": 52138,
   "type": "line",
   "text": "the game's top level: after the menu ($CBAA) plays levels in a loop: load and brief ($5000), play ($0879), keep the level ($CBD2), the result ($5003); $80 plays on, 0 goes back to the menu ($CD30), $40 after the last level to the end sequence ($CD56)"
  },
  {
   "address": 52144,
   "type": "line",
   "text": "from the menu (Y from it): Y not 0 replays the intro ($CB94); 0 starts the game: PB in ($CC2F), then the game loop at $CBBA"
  },
  {
   "address": 52154,
   "type": "line",
   "text": "one round of the loop: briefing, play, the result"
  },
  {
   "address": 52177,
   "type": "line",
   "text": "one byte after $CBCE's JMP that no path reaches"
  },
  {
   "address": 52178,
   "type": "line",
   "text": "before each load: screen off; with every ROM and the I/O area out of view ($01 = $10) rebuilds the file-code tables ($CF71) and copies 15 pages from $D100-$DFFF, a packed copy of the briefing and end-screen code kept in the RAM under the I/O area, to $9000-$9EFF; then unpacks it ($CC20) into $5000-$64AF, where play's character sets had overwritten it"
  },
  {
   "address": 52215,
   "type": "line",
   "text": "the high byte of the LDA at $CBF5, set to $D1 by $CBE8 and stepped page by page by $CBFE: the stash under the I/O area"
  },
  {
   "address": 52218,
   "type": "line",
   "text": "the high byte of the STA at $CBF8, set to $90 by $CBEB and stepped by $CC01"
  },
  {
   "address": 52256,
   "type": "line",
   "text": "jump table of the resident loader (nine JMPs)"
  },
  {
   "address": 52259,
   "type": "line",
   "text": "loader entry 1 ($CD23): loads the files of codes $64 and $65 and jumps to $4750"
  },
  {
   "address": 52262,
   "type": "line",
   "text": "loader entry 2: the menu ($CD30)"
  },
  {
   "address": 52265,
   "type": "line",
   "text": "loader entry 3: the end sequence ($CD56)"
  },
  {
   "address": 52268,
   "type": "line",
   "text": "loader entry 4: loads PA, the play engine ($CD5E)"
  },
  {
   "address": 52271,
   "type": "line",
   "text": "loader entry 5: PB, loaded or copied back from $A400 ($CD63)"
  },
  {
   "address": 52274,
   "type": "line",
   "text": "loader entry 6: load_by_code"
  },
  {
   "address": 52277,
   "type": "line",
   "text": "loader entry 7: the tune's file ($CD8E)"
  },
  {
   "address": 52280,
   "type": "line",
   "text": "loader entry 8: rebuild the file-code tables ($CF71)"
  },
  {
   "address": 52283,
   "type": "line",
   "text": "unpacks the briefing's stash once it is at $9000: reads its eight-byte header (the copy's address $5636, the output $5000, the end $64B0 and the literal count), copies the stream from $9008 to $5636, then unpacks it ($CC8D)"
  },
  {
   "address": 52365,
   "type": "line",
   "text": "unpacks the stream from ($0C) to ($02) until ($0A): bytes below $E0 are copied, and so are bytes from $E0 up while the literal count ($08/$09) lasts; after that a byte from $F0 up sets a new count first; then its low nybble 0 or 1 fills with a byte up to an address, 2 repeats the next byte the number given by the byte after, 3-15 repeat the next byte that many times"
  },
  {
   "address": 52412,
   "type": "line",
   "text": "the next byte of the packed stream"
  },
  {
   "address": 52515,
   "type": "line",
   "text": "loads codes $64 and $65 (IA and IB) and jumps to $4750"
  },
  {
   "address": 52528,
   "type": "line",
   "text": "loads the menu: code $68 (CC); or, when $CB5E bit 7 is set, keeps $4800-$4FFF (PB) at $A400 instead and marks it in $CB5F; then $66 (CA) and $67 (CB), and jumps to the menu at $9150"
  },
  {
   "address": 52566,
   "type": "line",
   "text": "loads code $6B (IC), the end sequence, and jumps to $C400"
  },
  {
   "address": 52574,
   "type": "line",
   "text": "loads code $69, PA: the play engine at $0801"
  },
  {
   "address": 52579,
   "type": "line",
   "text": "loads code $6A, PB, unless $CB5F says a copy is kept at $A400: then copies it back to $4800 ($CD6D)"
  },
  {
   "address": 52593,
   "type": "line",
   "text": "copies eight pages from X*256 to Y*256"
  },
  {
   "address": 52622,
   "type": "line",
   "text": "the same with the code from $0700,X, its top three bits forced to 7"
  },
  {
   "address": 52630,
   "type": "line",
   "text": "loads the file whose code byte is $0400,X: low five bits the second letter of its name, top three bits its kind and disk side"
  },
  {
   "address": 52648,
   "type": "line",
   "text": "the operand of the LDA at $CDA7: the file code being loaded, written by $CD99"
  },
  {
   "address": 52672,
   "type": "line",
   "text": "the file is on another disk side than $CB60 says is in the drive: the game's prompt at $5009, then try again"
  },
  {
   "address": 52694,
   "type": "line",
   "text": "the load failed: the game's handler at $5006, then try again"
  },
  {
   "address": 52701,
   "type": "line",
   "text": "the second letter of the file name being loaded"
  },
  {
   "address": 52702,
   "type": "line",
   "text": "the first letters of the file names by kind: F T X M P I C S"
  },
  {
   "address": 52710,
   "type": "line",
   "text": "the disk side each kind is on: F 2, T 3, X 4, M 5 (the four level sides), P, I and C 0 (disk 1), S $FF (any: every level side carries SA-SI)"
  },
  {
   "address": 52718,
   "type": "line",
   "text": "loads the file named A (kind letter) and X (second letter): sends the name to the drive and receives the file ($CE50); a file whose first two bytes point eight bytes past its start is packed, and is unpacked from its header ($CC8D). A = 0 when it loaded, $80 when the drive reported an error"
  },
  {
   "address": 52816,
   "type": "line",
   "text": "the transfer: sets up the serial line's bits, sends the command and the name ($CEE0), then receives bytes ($CEF9), each decoded as it arrives: $AC is an escape, $AC $AC a real $AC, $AC $FF the end, $AC $F7 an error, $AC with anything else a new block. Each byte is stored EOR the one before it, the files' coding on the disk ($CEAA). The first two bytes are the load address"
  },
  {
   "address": 52907,
   "type": "line",
   "text": "the operand of the EOR at $CEAA: the last byte received, so each byte is decoded with the one before it; cleared to 0 for each file ($CE75)"
  },
  {
   "address": 52922,
   "type": "line",
   "text": "receives one byte for the load address, handling the escapes; C set at the end or on an error"
  },
  {
   "address": 52960,
   "type": "line",
   "text": "sends the drive the command byte 2 and the two letters of the name"
  },
  {
   "address": 52961,
   "type": "line",
   "text": "the operand of the LDA at $CEE0: the serial port's value, rewritten by $CE5F"
  },
  {
   "address": 52985,
   "type": "line",
   "text": "receives one byte: four times two bits ($CF0B)"
  },
  {
   "address": 53003,
   "type": "line",
   "text": "clocks two bits in from the serial port's data and clock lines"
  },
  {
   "address": 53004,
   "type": "line",
   "text": "the operand of the LDX at $CF0B, rewritten by $CE64 for the port's other bits"
  },
  {
   "address": 53019,
   "type": "line",
   "text": "the operand of the LDX at $CF1A, rewritten by $CE69"
  },
  {
   "address": 53030,
   "type": "line",
   "text": "sends one byte, two bits at a time ($CF35)"
  },
  {
   "address": 53045,
   "type": "line",
   "text": "puts two bits on the serial port's lines"
  },
  {
   "address": 53046,
   "type": "line",
   "text": "the operand of the LDA at $CF35, rewritten by $CE5A"
  },
  {
   "address": 53061,
   "type": "line",
   "text": "the operand of the LDA at $CF44, rewritten by $CE55"
  },
  {
   "address": 53074,
   "type": "line",
   "text": "waits a moment, then until the drive raises its line, then answers"
  },
  {
   "address": 53087,
   "type": "line",
   "text": "the operand of the LDA at $CF5E, rewritten by $CE6C"
  },
  {
   "address": 53102,
   "type": "line",
   "text": "the file name's first letter for the drive"
  },
  {
   "address": 53103,
   "type": "line",
   "text": "the second letter"
  },
  {
   "address": 53104,
   "type": "line",
   "text": "set to $FE after each wait"
  },
  {
   "address": 53105,
   "type": "line",
   "text": "copies the two file-code tables from $CF83 and $CFF1 to $0400 and $0700"
  },
  {
   "address": 53123,
   "type": "line",
   "text": "the code byte of every file the game loads, by number: 0-99 the levels (kind in bits 5-7: F, T, X, M; the letter in bits 0-4), then 100 IA, 101 IB, 102 CA, 103 CB, 104 CC, 105 PA, 106 PB, 107 IC, 108 ID, 109 IE"
  },
  {
   "address": 53187,
   "type": "line",
   "text": "file_codes from entry 64 on ($CFC3-$CFF0): Taxing 15 to the last of the other files"
  },
  {
   "address": 53233,
   "type": "line",
   "text": "the tune file for each level: the letter of its S file (0 is SA), 100 entries; copied to $0700"
  },
  {
   "address": 53248,
   "type": "line",
   "text": "the end of tune_codes, $D000-$D0F0, under the I/O area: $CF71 reads it with the area out of view"
  },
  {
   "address": 53504,
   "type": "line",
   "text": "the briefing and end-screen code, packed, kept in the RAM under the I/O area ($D100-$DFFF): its header says copy to $5636 and unpack into $5000-$64AF; $CBD2 restores it before every load"
  },
  {
   "address": 54528,
   "type": "line",
   "text": "the briefing stash, $D500-$D8FF"
  },
  {
   "address": 54581,
   "type": "line",
   "text": "briefing and end-of-level messages as screen codes, with XX where numbers go; a copy filled in for the current level lies at $5444"
  },
  {
   "address": 55296,
   "type": "line",
   "text": "a byte of the briefing stash; the label comes from the play screen's writes to colour RAM at this address ($0FC5), which reach the I/O area, not this RAM"
  },
  {
   "address": 55360,
   "type": "line",
   "text": "the briefing stash, $D840-$D8FF"
  },
  {
   "address": 55552,
   "type": "line",
   "text": "the briefing stash, $D900-$DCFF"
  },
  {
   "address": 55616,
   "type": "line",
   "text": "the briefing stash, $D940-$D9FF"
  },
  {
   "address": 55808,
   "type": "line",
   "text": "a byte of the briefing stash; the label comes from writes to colour RAM ($0FCB)"
  },
  {
   "address": 55872,
   "type": "line",
   "text": "the briefing stash, $DA40-$DA47"
  },
  {
   "address": 55880,
   "type": "line",
   "text": "a byte of the briefing stash; the label comes from writes to colour RAM ($0FCE)"
  },
  {
   "address": 55944,
   "type": "line",
   "text": "the briefing stash, $DA88-$DAFF"
  },
  {
   "address": 56064,
   "type": "line",
   "text": "a byte of the briefing stash; the label comes from writes to colour RAM ($54DE)"
  },
  {
   "address": 56136,
   "type": "line",
   "text": "a byte of the briefing stash; the label comes from writes to colour RAM ($11CB)"
  },
  {
   "address": 56176,
   "type": "line",
   "text": "a byte of the briefing stash; the label comes from writes to colour RAM ($11BC)"
  },
  {
   "address": 56179,
   "type": "line",
   "text": "a byte of the briefing stash; the label comes from writes to colour RAM ($11DA)"
  },
  {
   "address": 56180,
   "type": "line",
   "text": "a byte of the briefing stash; the label comes from writes to colour RAM ($11DD)"
  },
  {
   "address": 56244,
   "type": "line",
   "text": "the briefing stash, $DBB4-$DCFF"
  },
  {
   "address": 56576,
   "type": "line",
   "text": "the briefing stash, $DD00-$DFFF"
  }
 ]
}