{
 "schema": 1,
 "platform": "apple2",
 "game": "karateka",
 "part": "dungeon",
 "build": "Br\u00f8derbund's original 1984 disk, side A: Karateka.woz (SHA-1 426b1049...aa259d1f608) from archive.org's A Woz A Day collection, item wozaday_Karateka, run on the kit's enhanced IIe; the engine analysed at its hand-over to $0200 and each stage at its hand-over to $BFFA (orientation.md)",
 "source": "live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    49152,
    53247,
    "I/O and the cards' ROM"
   ],
   [
    53248,
    65535,
    "the ROM, or the language card's RAM"
   ],
   [
    0,
    4095,
    "The engine"
   ],
   [
    8192,
    40959,
    "The engine"
   ],
   [
    49152,
    65535,
    "The engine"
   ]
  ],
  "extra": [],
  "edges": [
   0,
   256,
   512,
   768,
   1024,
   2048,
   3072,
   8192,
   16384,
   24576,
   49152,
   53248,
   57344
  ],
  "elsewhere": [
   [
    0,
    4095,
    "The engine"
   ],
   [
    8192,
    40959,
    "The engine"
   ],
   [
    49152,
    65535,
    "The engine"
   ]
  ]
 },
 "blocks": [
  {
   "start": 4096,
   "end": 4169,
   "type": "Code"
  },
  {
   "start": 4170,
   "end": 6399,
   "type": "Byte"
  },
  {
   "start": 6400,
   "end": 6707,
   "type": "Code"
  },
  {
   "start": 6708,
   "end": 6721,
   "type": "Byte"
  },
  {
   "start": 6722,
   "end": 7289,
   "type": "Code"
  },
  {
   "start": 7290,
   "end": 8191,
   "type": "Byte"
  },
  {
   "start": 40960,
   "end": 43007,
   "type": "Byte"
  },
  {
   "start": 43008,
   "end": 43245,
   "type": "Code"
  },
  {
   "start": 43246,
   "end": 43249,
   "type": "Byte"
  },
  {
   "start": 43250,
   "end": 43298,
   "type": "Code"
  },
  {
   "start": 43299,
   "end": 43391,
   "type": "Byte"
  },
  {
   "start": 43392,
   "end": 43598,
   "type": "Code"
  },
  {
   "start": 43599,
   "end": 43600,
   "type": "Byte"
  },
  {
   "start": 43601,
   "end": 43639,
   "type": "Code"
  },
  {
   "start": 43640,
   "end": 45055,
   "type": "Byte"
  },
  {
   "start": 45056,
   "end": 45210,
   "type": "Code"
  },
  {
   "start": 45211,
   "end": 45311,
   "type": "Byte"
  },
  {
   "start": 45312,
   "end": 45513,
   "type": "Code"
  },
  {
   "start": 45514,
   "end": 45570,
   "type": "Byte"
  },
  {
   "start": 45571,
   "end": 45576,
   "type": "Code"
  },
  {
   "start": 45577,
   "end": 45577,
   "type": "Byte"
  },
  {
   "start": 45578,
   "end": 45686,
   "type": "Code"
  },
  {
   "start": 45687,
   "end": 45823,
   "type": "Byte"
  },
  {
   "start": 45824,
   "end": 46232,
   "type": "Code"
  },
  {
   "start": 46233,
   "end": 46847,
   "type": "Byte"
  },
  {
   "start": 46848,
   "end": 47905,
   "type": "Code"
  },
  {
   "start": 47906,
   "end": 49145,
   "type": "Byte"
  },
  {
   "start": 49146,
   "end": 49148,
   "type": "Code"
  },
  {
   "start": 49149,
   "end": 49151,
   "type": "Byte"
  }
 ],
 "symbols": [
  {
   "address": 4096,
   "name": "stage_tunes",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4099,
   "name": "s_1003",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 4102,
   "name": "s_1006",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 4105,
   "name": "s_1009",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 4108,
   "name": "s_100C",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 4111,
   "name": "s_100F",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 4114,
   "name": "s_1012",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 4117,
   "name": "s_1015",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 4127,
   "name": "r_101F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 4128,
   "name": "j_1020",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4135,
   "name": "j_1027",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4142,
   "name": "j_102E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4149,
   "name": "j_1035",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4156,
   "name": "j_103C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4163,
   "name": "j_1043",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4170,
   "name": "tune_death",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4222,
   "name": "tune_beaten",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4259,
   "name": "tune_cell1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4282,
   "name": "tune_cell2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4313,
   "name": "tune_arm",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4353,
   "name": "tune_akuma",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4608,
   "name": "room_piece_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4808,
   "name": "room_piece_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5310,
   "name": "room_piece_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5424,
   "name": "mariko_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5632,
   "name": "mariko_20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5694,
   "name": "mariko_21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5741,
   "name": "mariko_22",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5777,
   "name": "mariko_23",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5806,
   "name": "mariko_24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5886,
   "name": "mariko_25",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6099,
   "name": "mariko_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6185,
   "name": "mariko_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6247,
   "name": "mariko_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6335,
   "name": "room_piece_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6352,
   "name": "room_piece_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6400,
   "name": "clear_page",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6403,
   "name": "draw_shape",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 6406,
   "name": "draw_shape_right",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 6409,
   "name": "draw_mirrored",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6412,
   "name": "draw_mirrored_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6415,
   "name": "j_190F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6423,
   "name": "b_1917",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6425,
   "name": "b_1919",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6439,
   "name": "clip_shape",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6476,
   "name": "b_194C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6498,
   "name": "b_1962",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6501,
   "name": "b_1965",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6518,
   "name": "b_1976",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6522,
   "name": "b_197A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6527,
   "name": "b_197F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6532,
   "name": "j_1984",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6565,
   "name": "b_19A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6580,
   "name": "b_19B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6602,
   "name": "b_19CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6608,
   "name": "b_19D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6617,
   "name": "b_19D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6630,
   "name": "a_19E6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6631,
   "name": "a_19E7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6648,
   "name": "b_19F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6661,
   "name": "b_1A05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6665,
   "name": "j_1A09",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6667,
   "name": "b_1A0B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6681,
   "name": "b_1A19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6691,
   "name": "b_1A23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6703,
   "name": "j_1A2F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6708,
   "name": "left_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6715,
   "name": "right_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6722,
   "name": "j_1A42",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6731,
   "name": "j_1A4B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6753,
   "name": "shape_header",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6787,
   "name": "r_1A83",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6788,
   "name": "shift_dots",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6821,
   "name": "b_1AA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6826,
   "name": "b_1AAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6841,
   "name": "b_1AB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6856,
   "name": "b_1AC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6870,
   "name": "b_1AD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6881,
   "name": "b_1AE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6891,
   "name": "restore_shape",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 6900,
   "name": "draw_reversed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6917,
   "name": "b_1B05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6919,
   "name": "b_1B07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6960,
   "name": "b_1B30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6995,
   "name": "b_1B53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6998,
   "name": "b_1B56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7015,
   "name": "b_1B67",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7019,
   "name": "b_1B6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7024,
   "name": "b_1B70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7029,
   "name": "j_1B75",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7068,
   "name": "b_1B9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7079,
   "name": "b_1BA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7115,
   "name": "b_1BCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7130,
   "name": "j_1BDA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7154,
   "name": "a_1BF2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 7155,
   "name": "a_1BF3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 7169,
   "name": "b_1C01",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7194,
   "name": "b_1C1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7204,
   "name": "j_1C24",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7206,
   "name": "b_1C26",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7220,
   "name": "b_1C34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7230,
   "name": "b_1C3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7248,
   "name": "j_1C50",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7259,
   "name": "j_1C5B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7268,
   "name": "j_1C64",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7364,
   "name": "mariko_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7380,
   "name": "mariko_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7424,
   "name": "mariko_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7478,
   "name": "mariko_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7514,
   "name": "mariko_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7550,
   "name": "mariko_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7586,
   "name": "mariko_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7639,
   "name": "mariko_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40960,
   "name": "stairs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41984,
   "name": "feathers_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42154,
   "name": "feathers_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42324,
   "name": "feathers_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42496,
   "name": "hawk_mask_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42578,
   "name": "hawk_mask_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42625,
   "name": "hawk_mask_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42702,
   "name": "hawk_mask_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42779,
   "name": "hawk_mask_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42907,
   "name": "hawk_mask_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43008,
   "name": "hawk_vectors",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43011,
   "name": "s_A803",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 43014,
   "name": "hawk_move",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43021,
   "name": "b_A80D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43038,
   "name": "b_A81E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43081,
   "name": "b_A849",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43119,
   "name": "b_A86F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43126,
   "name": "b_A876",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43135,
   "name": "b_A87F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43146,
   "name": "b_A88A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43149,
   "name": "b_A88D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43181,
   "name": "b_A8AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43191,
   "name": "j_A8B7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43206,
   "name": "j_A8C6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43221,
   "name": "b_A8D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43237,
   "name": "j_A8E5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43245,
   "name": "r_A8ED",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43246,
   "name": "hawk_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43250,
   "name": "s_A8F2",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 43257,
   "name": "hawk_send",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43298,
   "name": "r_A922",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43392,
   "name": "hawk_draw_vectors",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43395,
   "name": "hawk_cover",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43469,
   "name": "b_A9CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43478,
   "name": "r_A9D6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43479,
   "name": "hawk_draw",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43523,
   "name": "b_AA03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43527,
   "name": "b_AA07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43533,
   "name": "b_AA0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43557,
   "name": "b_AA25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43563,
   "name": "b_AA2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43601,
   "name": "b_AA51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43616,
   "name": "s_AA60",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 43637,
   "name": "b_AA75",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43640,
   "name": "hawk_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43655,
   "name": "hawk_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43670,
   "name": "hawk_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43717,
   "name": "hawk_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43819,
   "name": "hawk_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43876,
   "name": "hawk_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43953,
   "name": "hawk_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44045,
   "name": "hawk_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44173,
   "name": "hawk_shadow_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44200,
   "name": "hawk_shadow_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44247,
   "name": "hawk_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45056,
   "name": "stairs_vectors",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45059,
   "name": "s_B003",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 45062,
   "name": "j_B006",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45074,
   "name": "b_B012",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45098,
   "name": "r_B02A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45099,
   "name": "b_B02B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45126,
   "name": "j_B046",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45142,
   "name": "b_B056",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45150,
   "name": "r_B05E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45151,
   "name": "b_B05F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45176,
   "name": "b_B078",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45312,
   "name": "room0_vectors",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45315,
   "name": "s_B103",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 45318,
   "name": "s_B106",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 45321,
   "name": "s_B109",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 45324,
   "name": "j_B10C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45352,
   "name": "j_B128",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45378,
   "name": "b_B142",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45391,
   "name": "r_B14F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45392,
   "name": "j_B150",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45404,
   "name": "b_B15C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45412,
   "name": "b_B164",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45477,
   "name": "r_B1A5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45478,
   "name": "j_B1A6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45571,
   "name": "keep_vectors",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45574,
   "name": "s_B206",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 45578,
   "name": "keep_frame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45627,
   "name": "mariko_cell",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45675,
   "name": "s_B26B",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 45824,
   "name": "rooms_vectors",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45827,
   "name": "s_B303",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 45830,
   "name": "rooms",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45856,
   "name": "b_B320",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45864,
   "name": "b_B328",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45875,
   "name": "b_B333",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45878,
   "name": "b_B336",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45883,
   "name": "b_B33B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45891,
   "name": "b_B343",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45899,
   "name": "b_B34B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45909,
   "name": "b_B355",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45917,
   "name": "b_B35D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45922,
   "name": "b_B362",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45932,
   "name": "b_B36C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45944,
   "name": "b_B378",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45952,
   "name": "b_B380",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45956,
   "name": "b_B384",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45972,
   "name": "b_B394",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45977,
   "name": "j_B399",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45997,
   "name": "b_B3AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46015,
   "name": "b_B3BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46020,
   "name": "b_B3C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46036,
   "name": "b_B3D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46044,
   "name": "b_B3DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46068,
   "name": "b_B3F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46090,
   "name": "r_B40A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46091,
   "name": "j_B40B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46109,
   "name": "b_B41D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46114,
   "name": "b_B422",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46125,
   "name": "b_B42D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46135,
   "name": "b_B437",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46159,
   "name": "b_B44F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46169,
   "name": "r_B459",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46170,
   "name": "j_B45A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46194,
   "name": "new_guard",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46230,
   "name": "f_B496",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 46233,
   "name": "chance_kick",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46234,
   "name": "f_B49A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 46237,
   "name": "chance_punch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46238,
   "name": "f_B49E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 46241,
   "name": "chance_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46848,
   "name": "dungeon_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46947,
   "name": "s_B763",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 47046,
   "name": "j_B7C6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47055,
   "name": "dungeon_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47075,
   "name": "b_B7E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47109,
   "name": "b_B805",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47115,
   "name": "b_B80B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47136,
   "name": "b_B820",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47184,
   "name": "b_B850",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47198,
   "name": "b_B85E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47216,
   "name": "b_B870",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47220,
   "name": "b_B874",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47253,
   "name": "b_B895",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47269,
   "name": "b_B8A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47282,
   "name": "b_B8B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47288,
   "name": "b_B8B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47310,
   "name": "b_B8CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47326,
   "name": "b_B8DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47372,
   "name": "b_B90C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47374,
   "name": "b_B90E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47394,
   "name": "b_B922",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47410,
   "name": "b_B932",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47427,
   "name": "b_B943",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47437,
   "name": "b_B94D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47455,
   "name": "b_B95F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47459,
   "name": "b_B963",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47473,
   "name": "b_B971",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47497,
   "name": "b_B989",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47523,
   "name": "b_B9A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47537,
   "name": "b_B9B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47576,
   "name": "b_B9D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47585,
   "name": "b_B9E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47591,
   "name": "hero_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47622,
   "name": "b_BA06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47635,
   "name": "b_BA13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47647,
   "name": "b_BA1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47650,
   "name": "j_BA22",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47664,
   "name": "b_BA30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47667,
   "name": "s_BA33",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 47674,
   "name": "s_BA3A",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 47687,
   "name": "s_BA47",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 47713,
   "name": "r_BA61",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47714,
   "name": "hawk_comes",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47729,
   "name": "s_BA71",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 47742,
   "name": "b_BA7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47752,
   "name": "b_BA88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47755,
   "name": "j_BA8B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47778,
   "name": "b_BAA2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47789,
   "name": "b_BAAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47792,
   "name": "b_BAB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47831,
   "name": "b_BAD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47840,
   "name": "b_BAE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47846,
   "name": "b_BAE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47849,
   "name": "b_BAE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47865,
   "name": "b_BAF9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47875,
   "name": "b_BB03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47885,
   "name": "b_BB0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47888,
   "name": "j_BB10",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47892,
   "name": "dungeon_end",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48128,
   "name": "j_BC00",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 48640,
   "name": "hat1_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48672,
   "name": "hat1_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48707,
   "name": "hat1_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48736,
   "name": "hat2_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48768,
   "name": "hat2_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48803,
   "name": "hat2_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48832,
   "name": "hat3_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48864,
   "name": "hat3_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48899,
   "name": "hat3_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48928,
   "name": "hat4_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48960,
   "name": "hat4_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48995,
   "name": "hat4_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49024,
   "name": "hat5_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49056,
   "name": "hat5_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49091,
   "name": "hat5_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49121,
   "name": "brain_t1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49126,
   "name": "brain_t2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49131,
   "name": "brain_t3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49138,
   "name": "brain_t4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49146,
   "name": "dungeon_entry",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 49149,
   "name": "stage_number",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49150,
   "name": "stage_check1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49151,
   "name": "stage_check2",
   "type": "AbsoluteAddress",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 4096,
   "type": "line",
   "text": "The stage's tunes, six JMPs, each to an entry that sets A and X to its tune and goes on to the player at $1012: $1000 the four notes as Akuma's chamber is shown ($79C6), $1003 the hero's death, $1006 a guard beaten (also at the stage's end), $1009 and $100F Mariko's first two tunes in her cell, $100C the tune as Akuma raises his arm ($7A10) and at the end of the cell scene ($B267)."
  },
  {
   "address": 4099,
   "type": "line",
   "text": "JMP: the hero's death tune ($104A)."
  },
  {
   "address": 4102,
   "type": "line",
   "text": "JMP: the tune of a guard beaten ($107E)."
  },
  {
   "address": 4105,
   "type": "line",
   "text": "JMP: Mariko's first tune in her cell ($10A3)."
  },
  {
   "address": 4108,
   "type": "line",
   "text": "JMP: the tune as Akuma raises his arm, and at the end of Mariko's cell scene ($10D9)."
  },
  {
   "address": 4111,
   "type": "line",
   "text": "JMP: Mariko's second tune in her cell ($10BA)."
  },
  {
   "address": 4114,
   "type": "line",
   "text": "Play the tune at A (low) and X (high) with the engine's player ($0D00), unless the music or the sound is off ($4F AND $86)."
  },
  {
   "address": 4117,
   "type": "line",
   "text": "The engine's scene in Akuma's chamber calls $1015 ($7BBC), where the title stage has a JMP to its tune; that scene runs only in the title, and here $1015 is the middle of the STX at $1014."
  },
  {
   "address": 4128,
   "type": "line",
   "text": "The tunes' entries: $1020 the death ($104A), $1027 a guard beaten ($107E), $102E Mariko's first ($10A3), $1035 her second ($10BA), $103C Akuma's arm ($10D9), $1043 the four notes ($1101)."
  },
  {
   "address": 4170,
   "type": "line",
   "text": "The hero's death ($1003): tempo 6, the second voice on the speaker ($C0), 16 notes of three bytes (a length and the pitch as a coarse and a fine count), $FF at the end."
  },
  {
   "address": 4222,
   "type": "line",
   "text": "A guard beaten ($1006): tempo 5, 11 notes."
  },
  {
   "address": 4259,
   "type": "line",
   "text": "Mariko's first tune in her cell ($1009): tempo 8, a $FD 2 command, six notes."
  },
  {
   "address": 4282,
   "type": "line",
   "text": "Her second ($100F): tempo 8, eight notes, with $FD 2 and $FD $41 commands."
  },
  {
   "address": 4313,
   "type": "line",
   "text": "Akuma raising his arm and the end of the cell scene ($100C): tempo 6, eleven notes, with $FD 4 and $FD 2 commands."
  },
  {
   "address": 4353,
   "type": "line",
   "text": "Akuma's chamber shown ($1000): tempo 7, four notes."
  },
  {
   "address": 4369,
   "type": "line",
   "text": "The ends of tunes in the same form that nothing plays, to $112F."
  },
  {
   "address": 4400,
   "type": "line",
   "text": "Code that nothing in the game runs: it reads and writes bytes at $B39D-$B5F1 and calls $AF10, $AFF7, $B011, $B244 and $B7D6, addresses that hold this stage's own code and data, so it was not written for this memory. Left in the stage's image when it was saved."
  },
  {
   "address": 4608,
   "type": "line",
   "text": "The engine's room scenery piece 6 ($7815): with pieces 6-9 the engine draws the wall of Mariko's cell ($7929), with piece 10 its doorway ($796A); the same bytes in every stage. 9 rows of 22 bytes."
  },
  {
   "address": 4808,
   "type": "line",
   "text": "The engine's room scenery piece 7 ($7815): with pieces 6-9 the engine draws the wall of Mariko's cell ($7929), with piece 10 its doorway ($796A); the same bytes in every stage. 50 rows of 10 bytes."
  },
  {
   "address": 5310,
   "type": "line",
   "text": "The engine's room scenery piece 8 ($7815): with pieces 6-9 the engine draws the wall of Mariko's cell ($7929), with piece 10 its doorway ($796A); the same bytes in every stage. 5 rows of 20 bytes."
  },
  {
   "address": 5412,
   "type": "line",
   "text": "12 bytes of $80 after room_piece_8, black dots that no table or instruction points at."
  },
  {
   "address": 5424,
   "type": "line",
   "text": "Mariko's part or pose 8 for the engine's tables ($7E3F). The same picture serves as mariko_9, mariko_26. 43 rows of 3 bytes."
  },
  {
   "address": 5555,
   "type": "line",
   "text": "77 bytes after mariko_8, the same as the palace's and Akuma's chamber's at these addresses, in the form of picture rows; nothing in the dungeon points at them."
  },
  {
   "address": 5632,
   "type": "line",
   "text": "Mariko's part or pose 20 for the engine's tables ($7E3F). 20 rows of 3 bytes."
  },
  {
   "address": 5694,
   "type": "line",
   "text": "Mariko's part or pose 21 for the engine's tables ($7E3F). 15 rows of 3 bytes."
  },
  {
   "address": 5741,
   "type": "line",
   "text": "Mariko's part or pose 22 for the engine's tables ($7E3F). 17 rows of 2 bytes."
  },
  {
   "address": 5777,
   "type": "line",
   "text": "Mariko's part or pose 23 for the engine's tables ($7E3F). 9 rows of 3 bytes."
  },
  {
   "address": 5806,
   "type": "line",
   "text": "Mariko's part or pose 24 for the engine's tables ($7E3F). 26 rows of 3 bytes."
  },
  {
   "address": 5886,
   "type": "line",
   "text": "Mariko's part or pose 25 for the engine's tables ($7E3F). 38 rows of 3 bytes."
  },
  {
   "address": 6002,
   "type": "line",
   "text": "97 bytes the same as the palace's at these addresses, which nothing in the dungeon points at: from $1773 the last 96 bytes of Mariko's pose 16 as the title and the cliff stages hold it at $175E, whose start mariko_25 covers here."
  },
  {
   "address": 6099,
   "type": "line",
   "text": "Mariko's part or pose 17 for the engine's tables ($7E3F). 14 rows of 6 bytes."
  },
  {
   "address": 6185,
   "type": "line",
   "text": "Mariko's part or pose 18 for the engine's tables ($7E3F). 10 rows of 6 bytes."
  },
  {
   "address": 6247,
   "type": "line",
   "text": "Mariko's part or pose 19 for the engine's tables ($7E3F). 43 rows of 2 bytes."
  },
  {
   "address": 6335,
   "type": "line",
   "text": "The engine's room scenery piece 9 ($7815): with pieces 6-9 the engine draws the wall of Mariko's cell ($7929), with piece 10 its doorway ($796A); the same bytes in every stage. 5 rows of 3 bytes."
  },
  {
   "address": 6352,
   "type": "line",
   "text": "The engine's room scenery piece 10 ($7815): with pieces 6-9 the engine draws the wall of Mariko's cell ($7929), with piece 10 its doorway ($796A); the same bytes in every stage. 3 rows of 2 bytes."
  },
  {
   "address": 6360,
   "type": "line",
   "text": "40 bytes after room_piece_10 that no table or instruction in this stage points at, in the form of picture rows."
  },
  {
   "address": 6400,
   "type": "line",
   "text": "Five entry points: $1900 clears the draw page, $1903 draws a shape, $1906 draws it with its right edge at the column, $1909 draws it mirrored, $190C mirrored with its right edge at the column."
  },
  {
   "address": 6403,
   "type": "line",
   "text": "JMP: draw the shape at ($03) on the draw page, at byte column $05, row $06, dot offset $10, in mode $0F ($1A42)."
  },
  {
   "address": 6406,
   "type": "line",
   "text": "JMP: the same with the shape's right edge at column $05 ($1A4B)."
  },
  {
   "address": 6409,
   "type": "line",
   "text": "JMP: draw the shape mirrored, facing the other way ($1C5B)."
  },
  {
   "address": 6412,
   "type": "line",
   "text": "JMP: mirrored, with its right edge at column $05 ($1C64)."
  },
  {
   "address": 6415,
   "type": "line",
   "text": "Clear the draw page: fill the 32 pages from $07 ($20 or $40) with $80, black."
  },
  {
   "address": 6439,
   "type": "line",
   "text": "Clip a shape to the screen's 40 byte columns: $15 keeps its width, $14 is the first column drawn, $16 the bytes cut off at the left, and $0E becomes the bytes drawn on each row. A negative column, the shape starting left of the screen, cuts it at the left edge, a shape that would run past column 39 is cut at the right, and one wholly off the screen is not drawn ($1A2F). Then the mode ($0F) is written into the instruction at $19E6: ORA ($00),Y for 0, AND ($00),Y for a negative mode, two NOPs for a positive one, so that the STA after it ORs, masks or stores."
  },
  {
   "address": 6506,
   "type": "line",
   "text": "The same LDA $0F twice."
  },
  {
   "address": 6532,
   "type": "line",
   "text": "Draw the rows: for each of the $0D rows, the row's address on the draw page from the row tables ($0800, $08C0 plus $07) and $14. When bytes were cut at the left, the last one cut is read only for the dots it carries into the first byte drawn. The first byte keeps the screen's dots to the left of the shape ($1A34), each byte is the shape's dots shifted by $10 ($1A84) with the dots carried from the byte before, and the dots carried out of the last byte go into the next screen byte ($19F8) unless it is past column 39."
  },
  {
   "address": 6630,
   "type": "line",
   "text": "The instruction the mode writes: ORA ($00),Y, AND ($00),Y, or two NOPs, before the STA ($00),Y that follows."
  },
  {
   "address": 6631,
   "type": "line",
   "text": "The second byte of the instruction at $19E6: $00 for ORA and AND ($00),Y, or a NOP in store mode."
  },
  {
   "address": 6648,
   "type": "line",
   "text": "The dots carried past the shape's last byte: ORed onto the screen in mode 0; in store mode the screen keeps its own dots to the right of them ($1A3B); in AND mode the mask's carried dots are set to the right ($1A3B) and ANDed."
  },
  {
   "address": 6703,
   "type": "line",
   "text": "Done: X and Y back from $18 and $17."
  },
  {
   "address": 6708,
   "type": "line",
   "text": "For a dot offset of 0-6, the screen's dots kept to the left of a shape's first dot, with bit 7 set: none, then one to six."
  },
  {
   "address": 6715,
   "type": "line",
   "text": "For a dot offset of 0-6, the screen's dots kept to the right of the dots carried out of a shape's last byte."
  },
  {
   "address": 6722,
   "type": "line",
   "text": "Draw a shape: read its header ($1A61), clip it and draw it ($1927), and put the pointer back ($1AEB)."
  },
  {
   "address": 6731,
   "type": "line",
   "text": "Draw a shape with its right edge at column $05: the column less the width, plus one, for the drawing, then $05 back."
  },
  {
   "address": 6753,
   "type": "line",
   "text": "Read a shape's header: keep its pointer in $1B/$1C, X in $18 and Y in $17, its height in rows in $0D and its width in bytes in $0E, and move ($03) on to the first row."
  },
  {
   "address": 6788,
   "type": "line",
   "text": "Shift the seven dots of the shape byte in A right by $10 dots (0-6): returns the dots that stay in this byte, moved along, and puts in $1A the dots pushed out into the next byte. A dot moves right on the screen as it moves up a bit, since bit 0 is the leftmost dot."
  },
  {
   "address": 6891,
   "type": "line",
   "text": "Put the shape pointer back from $1B/$1C."
  },
  {
   "address": 6900,
   "type": "line",
   "text": "Draw a shape mirrored. The dot offset becomes 7 less $10 (or, at 0, the column one less), so that the mirrored shape ends where the shape would have started. The shape is clipped as $1927 does, $1D saying which side was cut (1 the left, $FF the right), and each row is read from its last byte back to its first, every byte through the reversal table at $0980 (read as $0900 + X with bit 7 set) so that its dots come out in reverse order. The mode works as for $1903, through the instruction at $1BF2. $05 and $10 come back at the end ($1C50)."
  },
  {
   "address": 7154,
   "type": "line",
   "text": "The instruction the mode writes for the mirrored drawing, as at $19E6."
  },
  {
   "address": 7155,
   "type": "line",
   "text": "The second byte of the instruction at $1BF2, written as at $19E7."
  },
  {
   "address": 7248,
   "type": "line",
   "text": "Done: X and Y back, and the dot offset and the column restored."
  },
  {
   "address": 7259,
   "type": "line",
   "text": "Draw a shape mirrored: the header, the drawing ($1AF4), the pointer back."
  },
  {
   "address": 7268,
   "type": "line",
   "text": "Draw a shape mirrored with its right edge at column $05."
  },
  {
   "address": 7290,
   "type": "line",
   "text": "74 bytes ($1C7A-$1CC3) that no table or instruction in this stage points at, in the form of picture rows."
  },
  {
   "address": 7364,
   "type": "line",
   "text": "Mariko's part or pose 7 for the engine's tables ($7E3F). 2 rows of 7 bytes."
  },
  {
   "address": 7380,
   "type": "line",
   "text": "Mariko's part or pose 6 for the engine's tables ($7E3F). 21 rows of 2 bytes."
  },
  {
   "address": 7424,
   "type": "line",
   "text": "Mariko's part or pose 5 for the engine's tables ($7E3F). 26 rows of 2 bytes."
  },
  {
   "address": 7478,
   "type": "line",
   "text": "Mariko's part or pose 1 for the engine's tables ($7E3F). 17 rows of 2 bytes."
  },
  {
   "address": 7514,
   "type": "line",
   "text": "Mariko's part or pose 2 for the engine's tables ($7E3F). 17 rows of 2 bytes."
  },
  {
   "address": 7550,
   "type": "line",
   "text": "Mariko's part or pose 3 for the engine's tables ($7E3F). 17 rows of 2 bytes."
  },
  {
   "address": 7586,
   "type": "line",
   "text": "Mariko's part or pose 4 for the engine's tables ($7E3F). 17 rows of 3 bytes."
  },
  {
   "address": 7639,
   "type": "line",
   "text": "Mariko's part or pose 0 for the engine's tables ($7E3F). 17 rows of 2 bytes."
  },
  {
   "address": 7675,
   "type": "line",
   "text": "5 zeros after mariko_0."
  },
  {
   "address": 7680,
   "type": "line",
   "text": "The hero falling from the cliff, the cliff stage's four pictures at the same addresses with five bytes changed ($1E1F-$1E23, $1ECB-$1ECD), as in the palace; nothing in the dungeon draws them."
  },
  {
   "address": 7945,
   "type": "line",
   "text": "247 bytes the same as the palace's at these addresses, in the form of picture rows; nothing in the dungeon points at them."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "The stairs down into the dungeon, at the left end of its first screen, drawn in store mode at the scroll's column, row $56 ($B006). 92 rows of 10 bytes."
  },
  {
   "address": 41882,
   "type": "line",
   "text": "102 bytes after the stairs, the same as part of the palace's gatehouse picture at these addresses; nothing in the dungeon reads them."
  },
  {
   "address": 41984,
   "type": "line",
   "text": "The hawk struck down, picture 12 of its table ($AA78): a burst of feathers, drawn as it falls ($AA51). 28 rows of 6 bytes."
  },
  {
   "address": 42154,
   "type": "line",
   "text": "Picture 13: the feathers scattering. 28 rows of 6 bytes."
  },
  {
   "address": 42324,
   "type": "line",
   "text": "Picture 14: the last few feathers. 28 rows of 6 bytes."
  },
  {
   "address": 42494,
   "type": "line",
   "text": "2 bytes after feathers_2 that no table or instruction in this stage points at, in the form of picture rows."
  },
  {
   "address": 42496,
   "type": "line",
   "text": "The mask for hawk picture 0, entry 0 of the hawk's table ($AA78): drawn with AND before the hawk, clearing the wall behind the bird's shape so that its dots show ($AA40). 16 rows of 5 bytes."
  },
  {
   "address": 42578,
   "type": "line",
   "text": "The mask for hawk picture 1. 9 rows of 5 bytes."
  },
  {
   "address": 42625,
   "type": "line",
   "text": "The mask for hawk picture 2. 15 rows of 5 bytes."
  },
  {
   "address": 42702,
   "type": "line",
   "text": "The mask for hawk picture 3. 15 rows of 5 bytes."
  },
  {
   "address": 42779,
   "type": "line",
   "text": "The mask for hawk picture 5. 21 rows of 6 bytes."
  },
  {
   "address": 42907,
   "type": "line",
   "text": "The mask for hawk picture 4. 20 rows of 4 bytes."
  },
  {
   "address": 42989,
   "type": "line",
   "text": "19 bytes after hawk_mask_4, the same as the palace's at these addresses; nothing in the dungeon reads them."
  },
  {
   "address": 43008,
   "type": "line",
   "text": "JMP: the hawk's flight ($A806); JMP: send it ($A8F9)."
  },
  {
   "address": 43011,
   "type": "line",
   "text": "JMP: send the hawk ($A8F9)."
  },
  {
   "address": 43014,
   "type": "line",
   "text": "The hawk's flight, each frame while its countdown ($90) is out. Struck down (its arrows gone, $5E clear), it falls as a burst of feathers: pictures 12-14 ($95), a column back; after the third, no hawk is left ($98 = 0), the room is drawn whole ($83 = 2) and the stage can end. Struck or done ($96), it turns and flies off to the right four columns a frame. Otherwise it moves by $94. Three to five columns from the hero, flying at him, a kick (legs 2-4) or a punch at full stretch (legs $16) at the height of its row ($A8EE by the hero's height $6A) strikes it: $97, $96 and the hit's sound ($43) set, the sampled sound at speed 6, and it loses an arrow ($0B0C); the last one lost, the sampled sound at speed $1E. One column from him or less it pecks: the sampled sound at speed 4, a blow on the hero ($40 = 2), its star ($97 = 2), two columns on; after $A5 pecks ($A4 counts them; one when the hero is dead) it leaves. While it has pecked and flies left, the sampled sound at speed 5. Off the right of the screen (column $2C) it comes back at once ($90 = 1) while the hero lives; otherwise $90 = 30 and $89 = $19."
  },
  {
   "address": 43119,
   "type": "line",
   "text": "The hawk has lost its last arrow: a column back and the feathers' first picture ($95 = $0C)."
  },
  {
   "address": 43126,
   "type": "line",
   "text": "The feathers: pictures 12 to 14, one a frame; then the hawk is gone ($98 = 0) and the room is drawn whole ($83 = 2)."
  },
  {
   "address": 43146,
   "type": "line",
   "text": "On to $A8C6."
  },
  {
   "address": 43149,
   "type": "line",
   "text": "One column from the hero or less, the hawk pecks."
  },
  {
   "address": 43191,
   "type": "line",
   "text": "Struck or done: the hawk turns and flies off to the right, four columns a frame ($94 = 4), starting four columns on, $96 cleared."
  },
  {
   "address": 43206,
   "type": "line",
   "text": "While the hawk has pecked ($A4 below $A5) and flies left, the sampled sound at speed 5. Past column $2C it is off the screen."
  },
  {
   "address": 43237,
   "type": "line",
   "text": "No hawk for 30 frames ($90) and $89 = $19."
  },
  {
   "address": 43246,
   "type": "line",
   "text": "The hawk's rows by the height of the hero's blow ($6A + 1): $6C high, $79 middle, $82 low; and $6C again, for the random choice of 0-3 ($A907)."
  },
  {
   "address": 43250,
   "type": "line",
   "text": "Set off the sampled sound ($4E) at the speed in A ($BA)."
  },
  {
   "address": 43257,
   "type": "line",
   "text": "Send the hawk: at the right edge (column $29, or $2A with an odd dot offset), at a random one of the rows ($93, $A8EE), flying left two columns a frame ($94 = $FE), its wings' picture and $96 cleared, its pecks at $A5; and $92 one less, down to 9."
  },
  {
   "address": 43299,
   "type": "line",
   "text": "The end of an earlier build of the routine before ($A91A), then 87 bytes the same as part of the palace's doors picture at these addresses. Nothing reads them."
  },
  {
   "address": 43392,
   "type": "line",
   "text": "JMP: draw the hawk ($A9D7); then, at $A983, cover it where it was."
  },
  {
   "address": 43395,
   "type": "line",
   "text": "Cover the hawk where it was drawn two frames before ($EB, $EF), when it was flying: black over its columns from row $6C to $98; then its shadow's rows, $99-$A6, in the floor's colours. The routine checks $D2 for the palace, whose floor has the colours the other way round, as the palace's copy at $BD03 does."
  },
  {
   "address": 43478,
   "type": "line",
   "text": "Done."
  },
  {
   "address": 43479,
   "type": "line",
   "text": "Draw the hawk while it flies ($90 = 0). Struck down ($95 at 12 or more), the feathers' picture $95 at its column, three rows up, with OR ($AA51). Otherwise its wings beat through pictures 0-2; flying at the hero within seven columns of him (and $55 clear, as it always is in this stage), it swoops, picture 3 and then 4 and 5 in turn. First its shadow on the floor with AND (row $9F, or $9D for pictures 1 and 5); then the picture's mask with AND and the hawk itself with OR, at its row ($93) plus the picture's own ($AA96), mirrored when it flies right."
  },
  {
   "address": 43523,
   "type": "line",
   "text": "Swooping from the wings' beat: picture 3."
  },
  {
   "address": 43527,
   "type": "line",
   "text": "The wings' beat: 0, 1, 2 and round again."
  },
  {
   "address": 43533,
   "type": "line",
   "text": "Keep the picture ($95) and draw the shadow: $ACA8 at row $9D for pictures 1 and 5, $AC8D at row $9F for the rest, with AND."
  },
  {
   "address": 43587,
   "type": "line",
   "text": "The hawk's picture is entry X + 6 of the table, drawn with OR over its mask."
  },
  {
   "address": 43599,
   "type": "line",
   "text": "Two bytes, $F0 $0F, that nothing runs."
  },
  {
   "address": 43601,
   "type": "line",
   "text": "The feathers: picture $95 (12-14) at the hawk's column ($91) and its row less 3, with OR."
  },
  {
   "address": 43616,
   "type": "line",
   "text": "Draw entry X of the table ($AA78, $AA87) at column $05, row $06 and the dot offset; mirrored when the hawk flies right ($94 positive)."
  },
  {
   "address": 43637,
   "type": "line",
   "text": "Mirrored ($1909)."
  },
  {
   "address": 43640,
   "type": "line",
   "text": "The hawk's fifteen pictures, low bytes: 0-5 the masks, 6-11 the hawk (its wings' beat 0-2, swooping 3-5), 12-14 the feathers it falls as."
  },
  {
   "address": 43655,
   "type": "line",
   "text": "The pictures' high bytes."
  },
  {
   "address": 43670,
   "type": "line",
   "text": "Each picture's row below the hawk's ($93), for pictures 0-5 and their masks: 0, 9, 9, 2, 4, 0."
  },
  {
   "address": 43676,
   "type": "line",
   "text": "41 bytes the same as the palace's at these addresses, in the form of picture rows; nothing reads them."
  },
  {
   "address": 43717,
   "type": "line",
   "text": "The hawk in flight, picture 0 of 0-5, entry 6 of its table ($AA78): 0-2 the wings' beat as it flies, 3-5 as it swoops on the hero. 20 rows of 5 bytes."
  },
  {
   "address": 43819,
   "type": "line",
   "text": "The hawk in flight, picture 1 (entry 7). 11 rows of 5 bytes."
  },
  {
   "address": 43876,
   "type": "line",
   "text": "The hawk in flight, picture 2 (entry 8). 15 rows of 5 bytes."
  },
  {
   "address": 43953,
   "type": "line",
   "text": "The hawk swooping, picture 3 (entry 9). 18 rows of 5 bytes."
  },
  {
   "address": 44045,
   "type": "line",
   "text": "The hawk swooping, picture 5 (entry 11). 21 rows of 6 bytes."
  },
  {
   "address": 44173,
   "type": "line",
   "text": "The hawk's shadow on the floor, drawn with AND before the hawk ($AA1D). 5 rows of 5 bytes."
  },
  {
   "address": 44200,
   "type": "line",
   "text": "Its shadow for pictures 1 and 5, two rows higher ($AA25). 9 rows of 5 bytes."
  },
  {
   "address": 44247,
   "type": "line",
   "text": "The hawk swooping, picture 4 (entry 10). 20 rows of 4 bytes."
  },
  {
   "address": 44329,
   "type": "line",
   "text": "Code left from an earlier build: the cut to the next guard as the palace has it ($AD8F there), calling an earlier engine's routines ($6880, $6600, $6480, $6E80); then earlier builds of the hawk's routines, and $80s to the end of the page. Nothing runs them."
  },
  {
   "address": 45056,
   "type": "line",
   "text": "JMP: draw the stairs ($B006); JMP: cover them where they were ($B046)."
  },
  {
   "address": 45059,
   "type": "line",
   "text": "JMP: cover the stairs where they were ($B046)."
  },
  {
   "address": 45062,
   "type": "line",
   "text": "Draw the stairs on the first screen ($44 = 0) while they are in sight (the scroll $52 at 0 or from $F4, -12, on), unless nothing has moved and both fighters are clear of them (the hero at column $11 or more, the opponent at $14 or more): the stairs ($A000) at the scroll's column, row $56, stored over the page."
  },
  {
   "address": 45098,
   "type": "line",
   "text": "Done."
  },
  {
   "address": 45126,
   "type": "line",
   "text": "Cover the stairs where they were drawn two frames before ($E1), on the first screen, when anything has moved and they were in sight: black over the columns from $E1 + 7 (made even, and 0 at least) to five on, rows $56-$98; then the floor's colours over rows $99-$B1."
  },
  {
   "address": 45150,
   "type": "line",
   "text": "Done."
  },
  {
   "address": 45151,
   "type": "line",
   "text": "Black over the stairs' right side, then the floor."
  },
  {
   "address": 45211,
   "type": "line",
   "text": "Black ($80), with a few scraps of picture rows, to the end of the page; the same bytes as Akuma's chamber's at these addresses. Nothing reads them."
  },
  {
   "address": 45312,
   "type": "line",
   "text": "The first screen's scenery, which scrolls: $B100 the wall behind the figures, $B103 the cover where the scenery was, $B106 the doorway over the figures, $B109 the whole background."
  },
  {
   "address": 45315,
   "type": "line",
   "text": "JMP: cover the first screen's scenery where it was ($B150)."
  },
  {
   "address": 45318,
   "type": "line",
   "text": "JMP: the doorway over the figures ($B128)."
  },
  {
   "address": 45321,
   "type": "line",
   "text": "JMP: the whole background of the first screen ($B1A6)."
  },
  {
   "address": 45324,
   "type": "line",
   "text": "The first screen's wall, in store mode at the dot offset, each piece moved by the scroll ($780F): the beam (0), the pillar (1) and the two small pieces at the floor (3, 4)."
  },
  {
   "address": 45352,
   "type": "line",
   "text": "Over the figures: the doorpost (2), stored, moved by the scroll; with OR the door (piece 5) while it is shut ($84 = 5); and at the scroll's right end ($52 = $E0, dot 0) the black band at the right edge ($7812)."
  },
  {
   "address": 45391,
   "type": "line",
   "text": "Done."
  },
  {
   "address": 45392,
   "type": "line",
   "text": "Cover the first screen's scenery where it was drawn two frames before ($E1), unless nothing has moved, while the scroll was at 0 or within 8 of its right end ($E0-$E7): black over columns $20-$27, rows $53-$97; the floor's colours over rows $98-$B1; then black over the floor at columns $52 + $45 to $52 + $48, near the right edge. That last fill writes $80 to $03 where $11 would set its second colour; $11 is black already."
  },
  {
   "address": 45477,
   "type": "line",
   "text": "Done."
  },
  {
   "address": 45478,
   "type": "line",
   "text": "The first screen's whole background: the page cleared ($1900) and the floor's colours, $D5 and $AA on alternate rows with black between, over rows $99-$B5 across the screen."
  },
  {
   "address": 45514,
   "type": "line",
   "text": "The end of the routine before, then an earlier build's copy of the palace's teeth routine ($B214 there): the same bytes as Akuma's chamber's at these addresses. Nothing runs them."
  },
  {
   "address": 45571,
   "type": "line",
   "text": "JMP: keep the frame's positions ($B20A); JMP: Mariko in her cell ($B23B); then an RTS at $B209."
  },
  {
   "address": 45574,
   "type": "line",
   "text": "JMP: Mariko in her cell, at the stage's start ($B23B)."
  },
  {
   "address": 45577,
   "type": "line",
   "text": "An RTS nothing calls."
  },
  {
   "address": 45578,
   "type": "line",
   "text": "Keep this frame's positions for the page drawn two frames from now: the dot offset ($50 into $AD, $AE), the scroll ($52 into $E0, $E1), the hero ($62 into $E2, $E3), the opponent ($72 into $E4, $E5), the hawk's column ($91 into $EA, $EB) and its countdown ($90 into $EE, $EF)."
  },
  {
   "address": 45626,
   "type": "line",
   "text": "Done."
  },
  {
   "address": 45627,
   "type": "line",
   "text": "Mariko in her cell at the stage's start: its door shut ($84 = 5), the whole room ($83 = 2), and six frames of the cell scene ($B26B): pose $15 and her first tune ($1009), pose $16 and her second ($100F), poses $17-$1A, and the tune of Akuma's arm ($100C)."
  },
  {
   "address": 45675,
   "type": "line",
   "text": "One frame of the cell: Mariko in pose X ($7E3C), the cell's doorway ($7809), the special keys and the frame's end."
  },
  {
   "address": 45687,
   "type": "line",
   "text": "Bytes left from an earlier build: delay loops and an earlier hawk's flight; nothing runs them."
  },
  {
   "address": 45824,
   "type": "line",
   "text": "JMP: the rooms and the scroll ($B306); JMP: a new guard ($B472)."
  },
  {
   "address": 45827,
   "type": "line",
   "text": "JMP: set up a new guard ($B472)."
  },
  {
   "address": 45830,
   "type": "line",
   "text": "Once a frame, the hero's way through the stage. The first screen ($44 = 0) scrolls; the rooms after it, 1 onwards, are single screens. A hero at column 2 or less (or past the left edge) goes back a room ($B34B); at column $21 or more, on into the next ($B362). Otherwise, on the first screen, the scene scrolls to bring him to column $0F, between the stairs at the left end (the scroll $52 at 0) and the right end ($E0, 32 columns on): from the right of $0F it scrolls left ($B399), from the left of it right ($B40B). In the rooms it does not scroll."
  },
  {
   "address": 45878,
   "type": "line",
   "text": "Stop the scroll: $53 = 0."
  },
  {
   "address": 45883,
   "type": "line",
   "text": "At the scroll's right end, it scrolls only to bring back a hero left of column $0F."
  },
  {
   "address": 45891,
   "type": "line",
   "text": "At its left end, only for a hero right of $0F."
  },
  {
   "address": 45899,
   "type": "line",
   "text": "Back a room: $44 one less. If this room's doorway was shut, or the room reached is the first screen, the doorway is opened ($84 = 0) and the room drawn whole ($83 = 2). The hero, the opponent and the hawk move 30 columns right ($B45A)."
  },
  {
   "address": 45922,
   "type": "line",
   "text": "On into the next room, except from room 4 while the hawk is there ($98). $44 one more; a room not yet opened ($44 at or above $C5, the rooms opened) has its doorway shut ($84 = 5). Rooms 1 and 2 are drawn whole ($83 = 2): the first leaves the stairs' screen, the second leaves room 1, whose door behind the hero is drawn on the left. A room entered for the first time (its number + 2 above the headgear $3E, and not room 6) brings a new guard ($B472). The hero, the opponent and the hawk move 30 columns left."
  },
  {
   "address": 45972,
   "type": "line",
   "text": "Thirty columns left."
  },
  {
   "address": 45977,
   "type": "line",
   "text": "Scroll towards the left: the speed $53 is brought two dots a frame towards -4 (in the stance), -6 (standing) or -10 (running, legs sequence $42-$49)."
  },
  {
   "address": 46020,
   "type": "line",
   "text": "Move the scene by $53 dots, at most six at a time: the dot offset $50 goes down, and each time it passes 0 every figure ($62, $72), the scroll ($52) and the hawk's column ($91) move a column left, and $51 too (coming round from -9 to 49). Reaching $DF, everything is put back a column and the scroll stops at $E0, the right end."
  },
  {
   "address": 46036,
   "type": "line",
   "text": "Add A dots to the scene's offset."
  },
  {
   "address": 46091,
   "type": "line",
   "text": "Scroll towards the right: the speed $53 is brought two dots a frame towards +4; the scroll stops at 0, the stairs, with dot 0."
  },
  {
   "address": 46170,
   "type": "line",
   "text": "Move the hero ($62), the opponent ($72) and the hawk ($91) by A columns: +30 into the room on the left, -30 into the room on the right."
  },
  {
   "address": 46194,
   "type": "line",
   "text": "Set up a new guard: the opponent's record ($7003) at column $3D, off the right of the screen; alive ($5E); his arrows at his most ($B7 = $B1); $82 cleared; the next headgear ($3E + 1) and its chances: of a kick ($D7), a punch ($D8) and a step forward ($D9), read as $B496 + X, $B49A + X and $B49E + X."
  },
  {
   "address": 46230,
   "type": "line",
   "text": "STA $D9, then RTS. The kick table is read from here as $B496 + X, with X the headgear 3-6: its entries are at $B499-$B49C."
  },
  {
   "address": 46233,
   "type": "line",
   "text": "The chance of a kick ($D7) for headgear 3-6: $E0 $F0 $FF $FF."
  },
  {
   "address": 46234,
   "type": "line",
   "text": "The punch table is read from here as $B49A + X: its entries, for headgear 3-6, are at $B49D-$B4A0."
  },
  {
   "address": 46237,
   "type": "line",
   "text": "The chance of a punch ($D8) for headgear 3-6: $E0 $F0 $F0 $FF."
  },
  {
   "address": 46238,
   "type": "line",
   "text": "The step table is read from here as $B49E + X: its entries are at $B4A1-$B4A4."
  },
  {
   "address": 46241,
   "type": "line",
   "text": "The chance of a step forward ($D9) for headgear 3-6: $E0 $A0 $70 $40."
  },
  {
   "address": 46245,
   "type": "line",
   "text": "Code and data left from an earlier build: the hawk's flight as an earlier engine had it ($6F0C), and more. Nothing runs them."
  },
  {
   "address": 46848,
   "type": "line",
   "text": "Stage 3 begins: $D0 and $D2 = 3; the fighters' records ($7000) with the hero a column left; the arrows' recovery intervals ($B8, $B9) and the sampled sound's speed ($BA) at 30; no door behind the hero ($ED); the dot offset 0; both alive; the scroll and its copies at 0, the stairs; the sounds and requests cleared; one room open ($C5 = 1); 10 arrows for the hero ($B0, $B6) and 18 for the guards ($B1, $B7); headgear 2, which the first guard's setup makes 3; the hawk's countdown ($90 and its copies) 5, its column and speed ($91, $94) $50; $92 = $10; a hawk in the stage ($98 = 1); the opponent a guard ($4D = 0); the guard coming on ($30 = 2) at column $41; Mariko in her cell ($B206) with the door then open ($84 = 0) and the room to be drawn whole; the first frame ($B7CF) and the wipe onto the screen ($7606). Then the main loop: a frame and its end ($7600), for ever."
  },
  {
   "address": 46947,
   "type": "line",
   "text": "The engine calls $B763 at the end of each cutscene frame ($7C47) only in the title stage ($D0 = 0). Here it is the middle of the stage's start, reached only from $B700: the arrows, the headgear, the hawk's countdown, the first guard and Mariko's cell."
  },
  {
   "address": 47046,
   "type": "line",
   "text": "The main loop."
  },
  {
   "address": 47055,
   "type": "line",
   "text": "One frame of the dungeon. A new random number ($BA3A). With the hawk gone ($98 = 0), no tune asked for ($88) and the frame drawn on page 2: the stage's end ($BB14)."
  },
  {
   "address": 47075,
   "type": "line",
   "text": "With the hero lying dead (legs $13) and the hawk not flying ($90 set): the death tune and THE END ($0203), once the guard lies dead or stands (legs $13 or 7), or at once when the opponent is the hawk ($4D = 5)."
  },
  {
   "address": 47109,
   "type": "line",
   "text": "The death tune ($1003) and THE END ($0203)."
  },
  {
   "address": 47115,
   "type": "line",
   "text": "The hawk's countdown, while it is the opponent ($4D = 5) and in the stage ($98): $90 counts down, and at 0 the hawk is sent ($A803)."
  },
  {
   "address": 47136,
   "type": "line",
   "text": "The first frame the opponent lies dead with the hero's legs in pose 6: $82 set; with the hero alive, his arrows back quickly ($B8 = 2), and after the guard in headgear 6, the last, the hero's most arrows 23 ($B0) and 5 for the hawk ($B1), whose arrows never recover ($B9 = $FF); after the others, one fewer for the hero and one more for the next guard, the hero's arrows cut to his new most. Then the beaten tune ($88 = 1); an opponent of type 1 instead sets $4D = 2, $88 = 2 and $A0 = 0, but none comes in this stage."
  },
  {
   "address": 47184,
   "type": "line",
   "text": "One arrow fewer for the hero, one more for the next guard."
  },
  {
   "address": 47216,
   "type": "line",
   "text": "The beaten tune."
  },
  {
   "address": 47220,
   "type": "line",
   "text": "The hero's move ($B9E7). In room 1, once he is seven columns in, a door shuts behind him ($ED = 5, drawn on the left by $7885) with the struck sound ($42) and the opponent two columns further left; after that, a hero left of column 6 is put back at column 7 ($BA47). On the first screen, a hero in the stance left of column 8 is put back at 9."
  },
  {
   "address": 47253,
   "type": "line",
   "text": "The door is shut: no further left than column 7."
  },
  {
   "address": 47269,
   "type": "line",
   "text": "On the first screen, keep a hero in the stance at column 8 or more ($BA47)."
  },
  {
   "address": 47282,
   "type": "line",
   "text": "A test of room 6 whose branch goes on either way."
  },
  {
   "address": 47288,
   "type": "line",
   "text": "The guard's move, unless the opponent is the hawk ($4D 5 or more): on frames drawn on page 2 he only moves when his legs' sequence is past $0D or stopped; the brain chooses ($6B00) and he steps ($6400), with $34 = $FE."
  },
  {
   "address": 47326,
   "type": "line",
   "text": "The hits, reading the buttons first ($6D03), with the hero alive and the opponent not the hawk: the hero's blow is tested every frame ($7366); a doorway kicked open ($FF) in room 4 brings the hawk ($BA62). The guard's blow on the hero is tested on frames drawn on page 1."
  },
  {
   "address": 47372,
   "type": "line",
   "text": "A doorway kicked open counts as a kick (3)."
  },
  {
   "address": 47374,
   "type": "line",
   "text": "The result of the hero's blow into $41, while the opponent is a guard ($4D below 2)."
  },
  {
   "address": 47394,
   "type": "line",
   "text": "The guard's blow on the hero ($A3 = 1), into $40."
  },
  {
   "address": 47410,
   "type": "line",
   "text": "The hawk ($A800). A hero at column $1F or more bounces off a shut doorway ($40 = $88). $9A at $FE, Mariko's kick in the last stage, would set $40 = $FF; it is never set here."
  },
  {
   "address": 47437,
   "type": "line",
   "text": "$5A set, so that the opponent takes no recoil from a hit ($72AB), while he is at column $20 or more on the first screen or before a shut doorway."
  },
  {
   "address": 47459,
   "type": "line",
   "text": "The hits applied ($701E) and the arrows back ($0B0F). On the first screen or before a shut doorway, a guard falling dead at columns $1E-$27 is held at $1E until he lies on the floor."
  },
  {
   "address": 47497,
   "type": "line",
   "text": "The dead hero: the hawk leaves ($96 = 1); he is kept at column 9 or more in room 1, behind its door, and $0B or more on the first screen."
  },
  {
   "address": 47537,
   "type": "line",
   "text": "The rooms and the scroll ($B300), the special keys, the arrows' strip; then the covers: the hawk where it was ($A983), the bands behind the hero and the opponent ($678C, $6780); on the first screen, while $83 counts, the whole background ($B109), and otherwise its scenery and the stairs covered where they were ($B103, $B003). Then the drawing ($BA71) and the positions kept ($B203)."
  },
  {
   "address": 47576,
   "type": "line",
   "text": "The first screen's scenery and the stairs covered where they were."
  },
  {
   "address": 47585,
   "type": "line",
   "text": "Draw the frame and keep its positions."
  },
  {
   "address": 47591,
   "type": "line",
   "text": "The hero's move. With no opponent alive: while the beaten tune is asked for ($88) or the opponent does not yet lie dead, the hero stays and changes his arms ($D1); once he lies dead, arms held in guard (torso $1C, $1D) drop (torso 6) and the buttons are cleared. Otherwise the player moves him ($6E00). Then his step ($6400); when his legs' sequence reaches position $15, the end of taking the stance, the sampled sound at speed $1E."
  },
  {
   "address": 47635,
   "type": "line",
   "text": "The arms ($D1), standing still."
  },
  {
   "address": 47647,
   "type": "line",
   "text": "The player's choice ($6E00)."
  },
  {
   "address": 47650,
   "type": "line",
   "text": "The hero's step, and his record saved ($700C)."
  },
  {
   "address": 47667,
   "type": "line",
   "text": "The sampled sound ($4E) set off at the speed in A ($BA), from the hero's move."
  },
  {
   "address": 47674,
   "type": "line",
   "text": "The dungeon's random numbers: $48 = $48 times 5 plus $0D, in A."
  },
  {
   "address": 47687,
   "type": "line",
   "text": "A hero in the stance ($6F clear) is put back at column 9 in the stance, legs and torso 6, their sequences at $0D and stepping 1."
  },
  {
   "address": 47714,
   "type": "line",
   "text": "The doorway of room 4 kicked open: the opponent becomes the hawk ($4D = 5), alive ($5E), coming at once ($90 = 1), with $B1 arrows ($B7)."
  },
  {
   "address": 47729,
   "type": "line",
   "text": "Draw the frame, reading the buttons between steps ($6D03): the scenery behind the figures (the first screen's stairs and wall, in room 6 the cell's wall, otherwise the room's walls, $7800); the feet masks, the hero's always and the opponent's while he is on the screen; the hawk ($A980); the hero's arrows; the hero; the opponent while he is on the screen, with his feet mask when he lies dead, and his arrows, which the hawk's are shown by even off the screen; the stars of blows on the opponent and on the hero ($74C0); then the scenery in front (the first screen's doorpost and door, the cell's doorway, or the room's doorways, $7803). $9A at 2, in the last stage, would leave out the figures; it is never set here."
  },
  {
   "address": 47792,
   "type": "line",
   "text": "The hawk, the hero's arrows and the figures."
  },
  {
   "address": 47846,
   "type": "line",
   "text": "The opponent's arrows."
  },
  {
   "address": 47849,
   "type": "line",
   "text": "The stars of the blows."
  },
  {
   "address": 47865,
   "type": "line",
   "text": "The scenery in front of the figures."
  },
  {
   "address": 47892,
   "type": "line",
   "text": "The stage's end: the beaten tune ($1006), the hero's most arrows 8 ($B0), and stage 4 loaded ($D0 = 4, $0200)."
  },
  {
   "address": 47906,
   "type": "line",
   "text": "Code left from an earlier build, its stage's end jumping to $1100; then more earlier routines and pictures. Nothing runs them."
  },
  {
   "address": 48640,
   "type": "line",
   "text": "Headgear type 1 ($3E), drawing 1 of 3 for the engine's tables ($62E8); the dungeon's guards wear types 3-6, so types 1 and 2 are not drawn here. 10 rows of 3 bytes."
  },
  {
   "address": 48672,
   "type": "line",
   "text": "Headgear type 1 ($3E), drawing 2 of 3 for the engine's tables ($62E8). 11 rows of 3 bytes."
  },
  {
   "address": 48707,
   "type": "line",
   "text": "Headgear type 1 ($3E), drawing 3 of 3 for the engine's tables ($62E8). 9 rows of 3 bytes."
  },
  {
   "address": 48736,
   "type": "line",
   "text": "Headgear type 2 ($3E), drawing 1 of 3 for the engine's tables ($62EE). 10 rows of 3 bytes."
  },
  {
   "address": 48768,
   "type": "line",
   "text": "Headgear type 2 ($3E), drawing 2 of 3 for the engine's tables ($62EE). 11 rows of 3 bytes."
  },
  {
   "address": 48803,
   "type": "line",
   "text": "Headgear type 2 ($3E), drawing 3 of 3 for the engine's tables ($62EE). 9 rows of 3 bytes."
  },
  {
   "address": 48832,
   "type": "line",
   "text": "Headgear type 3 ($3E), drawing 1 of 3 for the engine's tables ($62F4). 10 rows of 3 bytes."
  },
  {
   "address": 48864,
   "type": "line",
   "text": "Headgear type 3 ($3E), drawing 2 of 3 for the engine's tables ($62F4). 11 rows of 3 bytes."
  },
  {
   "address": 48899,
   "type": "line",
   "text": "Headgear type 3 ($3E), drawing 3 of 3 for the engine's tables ($62F4). 9 rows of 3 bytes."
  },
  {
   "address": 48928,
   "type": "line",
   "text": "Headgear type 4 ($3E), drawing 1 of 3 for the engine's tables ($62FA). 10 rows of 3 bytes."
  },
  {
   "address": 48960,
   "type": "line",
   "text": "Headgear type 4 ($3E), drawing 2 of 3 for the engine's tables ($62FA). 11 rows of 3 bytes."
  },
  {
   "address": 48995,
   "type": "line",
   "text": "Headgear type 4 ($3E), drawing 3 of 3 for the engine's tables ($62FA). 9 rows of 3 bytes."
  },
  {
   "address": 49024,
   "type": "line",
   "text": "Headgear type 5 ($3E), drawing 1 of 3 for the engine's tables ($6AEA). 10 rows of 3 bytes."
  },
  {
   "address": 49056,
   "type": "line",
   "text": "Headgear type 5 ($3E), drawing 2 of 3 for the engine's tables ($6AEA). 11 rows of 3 bytes."
  },
  {
   "address": 49091,
   "type": "line",
   "text": "Headgear type 5 ($3E), drawing 3 of 3 for the engine's tables ($6AEA). 9 rows of 3 bytes."
  },
  {
   "address": 49120,
   "type": "line",
   "text": "The end of the last headgear picture's row."
  },
  {
   "address": 49121,
   "type": "line",
   "text": "The opponents' brain ($6B00) reads four tables of thresholds here, each as its base + X with X the distance between the fighters held to 7-11. This one ($6BBB, $6BD1) is read at $BFE8-$BFEC: $FF $FF $FF $40 $40; a random byte at or above it throws no blow."
  },
  {
   "address": 49126,
   "type": "line",
   "text": "The second ($6BD6), read at $BFED-$BFF1: $C0 $A0 $40 $20 $20; a random byte at or above it, below the first, tries a kick ($D7)."
  },
  {
   "address": 49131,
   "type": "line",
   "text": "The third ($6BC0, $6BDB), read at $BFF2-$BFF6: $00 $00 $20 $20 $20; at or above it, below the second, a punch ($D8); below it, a step forward ($D9)."
  },
  {
   "address": 49138,
   "type": "line",
   "text": "The fourth ($6C38), read at $BFF9-$BFFD: $80, then the JMP below and the stage number; with no blow, at the legs' sequence position 3, a random byte below it steps forward and any other halts."
  },
  {
   "address": 49146,
   "type": "line",
   "text": "The stage's entry, where the engine jumps after loading it ($022C): JMP $B700."
  },
  {
   "address": 49149,
   "type": "line",
   "text": "The stage's number, 3, checked by the engine's loader ($020C) with the next two."
  },
  {
   "address": 49150,
   "type": "line",
   "text": "The stage number EOR $3B."
  },
  {
   "address": 49151,
   "type": "line",
   "text": "The stage number EOR $49."
  }
 ]
}