{
 "schema": 1,
 "platform": "c64",
 "game": "gauntlet",
 "build": "",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    17408,
    18431,
    "screen RAM"
   ],
   [
    0,
    1023,
    "runtime: zero page, stack and pages 2-3 (the game's pointers and work bytes, the KERNAL's vectors), set by the start-up and the routines that use them"
   ],
   [
    1024,
    2047,
    "runtime: the monster table (X $0400, Y $04C0, kind $0580, flags $0640, Death's drain $0700), built from each level by objects_place; pinn232 would also use $0400-$040D as work bytes"
   ],
   [
    2048,
    2559,
    "never written: the emulator's power-on pattern; no file loads here"
   ],
   [
    2641,
    3071,
    "the level buffer beyond level 1's file: the power-on pattern, which a longer level file overwrites"
   ],
   [
    3072,
    4095,
    "runtime: the 32 x 32 tile grid, built from the level file by level_build and changed in play"
   ],
   [
    4604,
    4999,
    "never written: the power-on pattern between DATATITLE and PINN232"
   ],
   [
    5632,
    6143,
    "never written: the power-on pattern"
   ],
   [
    6144,
    8191,
    "runtime: copies made at load by heroes_load_shapes: $1800-$1BFF the heroes' shot shapes, which each level start puts back at $7600 and $7E00, and $1C00-$1FFF the PLYRS.SPR shapes they replaced, which nothing reads"
   ],
   [
    8192,
    16383,
    "runtime: the 64 x 64 colour map ($2000) and character map ($3000), drawn from the tile grid by grid_draw and changed in play (PLYRS.SPR loads here first and is copied away)"
   ],
   [
    16384,
    18431,
    "runtime: the two screens and their sprite pointers, drawn by maze_draw and the panel routines"
   ],
   [
    59105,
    59391,
    "never written: the power-on pattern after PLAYER-$E000"
   ],
   [
    59838,
    59903,
    "never written: the power-on pattern after DATATREASURE"
   ],
   [
    60057,
    61439,
    "never written: the power-on pattern after DITTIDATA"
   ],
   [
    63488,
    65529,
    "never written: the power-on pattern above OBJDIS"
   ]
  ],
  "extra": [
   [
    18432,
    20479,
    "character set"
   ],
   [
    18432,
    32767,
    "the fonts and sprite shapes: GAUNT CHR $4800 and the PLYRS.SPR shapes copied to $7000"
   ],
   [
    62464,
    63487,
    "the tile tables in OBJDIS"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 2559,
   "type": "Undefined"
  },
  {
   "start": 2560,
   "end": 2640,
   "type": "Byte"
  },
  {
   "start": 2641,
   "end": 4095,
   "type": "Undefined"
  },
  {
   "start": 4096,
   "end": 4603,
   "type": "Byte"
  },
  {
   "start": 4604,
   "end": 4999,
   "type": "Undefined"
  },
  {
   "start": 5000,
   "end": 5490,
   "type": "Code"
  },
  {
   "start": 5491,
   "end": 5631,
   "type": "Byte"
  },
  {
   "start": 5632,
   "end": 18431,
   "type": "Undefined"
  },
  {
   "start": 18432,
   "end": 32767,
   "type": "Byte"
  },
  {
   "start": 32768,
   "end": 32770,
   "type": "Code"
  },
  {
   "start": 32771,
   "end": 32786,
   "type": "Byte"
  },
  {
   "start": 32787,
   "end": 33350,
   "type": "Code"
  },
  {
   "start": 33351,
   "end": 33380,
   "type": "Undefined"
  },
  {
   "start": 33381,
   "end": 33381,
   "type": "Byte"
  },
  {
   "start": 33382,
   "end": 33383,
   "type": "Undefined"
  },
  {
   "start": 33384,
   "end": 33578,
   "type": "Code"
  },
  {
   "start": 33579,
   "end": 33580,
   "type": "Undefined"
  },
  {
   "start": 33581,
   "end": 33840,
   "type": "Byte"
  },
  {
   "start": 33841,
   "end": 34083,
   "type": "Code"
  },
  {
   "start": 34084,
   "end": 34093,
   "type": "Undefined"
  },
  {
   "start": 34094,
   "end": 34379,
   "type": "Code"
  },
  {
   "start": 34380,
   "end": 34380,
   "type": "Undefined"
  },
  {
   "start": 34381,
   "end": 34530,
   "type": "Code"
  },
  {
   "start": 34531,
   "end": 34536,
   "type": "Byte"
  },
  {
   "start": 34537,
   "end": 34802,
   "type": "Code"
  },
  {
   "start": 34803,
   "end": 34861,
   "type": "Byte"
  },
  {
   "start": 34862,
   "end": 34868,
   "type": "Undefined"
  },
  {
   "start": 34869,
   "end": 34870,
   "type": "Byte"
  },
  {
   "start": 34871,
   "end": 34873,
   "type": "Undefined"
  },
  {
   "start": 34874,
   "end": 35330,
   "type": "Code"
  },
  {
   "start": 35331,
   "end": 35338,
   "type": "Byte"
  },
  {
   "start": 35339,
   "end": 35786,
   "type": "Code"
  },
  {
   "start": 35787,
   "end": 35806,
   "type": "Byte"
  },
  {
   "start": 35807,
   "end": 36028,
   "type": "Code"
  },
  {
   "start": 36029,
   "end": 36036,
   "type": "Byte"
  },
  {
   "start": 36037,
   "end": 36102,
   "type": "Code"
  },
  {
   "start": 36103,
   "end": 36118,
   "type": "Byte"
  },
  {
   "start": 36119,
   "end": 36146,
   "type": "Code"
  },
  {
   "start": 36147,
   "end": 36527,
   "type": "Byte"
  },
  {
   "start": 36528,
   "end": 36531,
   "type": "Undefined"
  },
  {
   "start": 36532,
   "end": 36925,
   "type": "Code"
  },
  {
   "start": 36926,
   "end": 36928,
   "type": "Undefined"
  },
  {
   "start": 36929,
   "end": 36978,
   "type": "Byte"
  },
  {
   "start": 36979,
   "end": 36979,
   "type": "Undefined"
  },
  {
   "start": 36980,
   "end": 37108,
   "type": "Code"
  },
  {
   "start": 37109,
   "end": 37117,
   "type": "Byte"
  },
  {
   "start": 37118,
   "end": 37119,
   "type": "Undefined"
  },
  {
   "start": 37120,
   "end": 37127,
   "type": "Byte"
  },
  {
   "start": 37128,
   "end": 37129,
   "type": "Undefined"
  },
  {
   "start": 37130,
   "end": 37131,
   "type": "Byte"
  },
  {
   "start": 37132,
   "end": 37133,
   "type": "Undefined"
  },
  {
   "start": 37134,
   "end": 37134,
   "type": "Byte"
  },
  {
   "start": 37135,
   "end": 37137,
   "type": "Undefined"
  },
  {
   "start": 37138,
   "end": 37147,
   "type": "Byte"
  },
  {
   "start": 37148,
   "end": 37153,
   "type": "Undefined"
  },
  {
   "start": 37154,
   "end": 37163,
   "type": "Byte"
  },
  {
   "start": 37164,
   "end": 37165,
   "type": "Undefined"
  },
  {
   "start": 37166,
   "end": 37181,
   "type": "Byte"
  },
  {
   "start": 37182,
   "end": 37182,
   "type": "Undefined"
  },
  {
   "start": 37183,
   "end": 37209,
   "type": "Byte"
  },
  {
   "start": 37210,
   "end": 37211,
   "type": "Undefined"
  },
  {
   "start": 37212,
   "end": 37562,
   "type": "Code"
  },
  {
   "start": 37563,
   "end": 37566,
   "type": "Byte"
  },
  {
   "start": 37567,
   "end": 38073,
   "type": "Code"
  },
  {
   "start": 38074,
   "end": 38074,
   "type": "Undefined"
  },
  {
   "start": 38075,
   "end": 38142,
   "type": "Code"
  },
  {
   "start": 38143,
   "end": 38166,
   "type": "Byte"
  },
  {
   "start": 38167,
   "end": 38242,
   "type": "Code"
  },
  {
   "start": 38243,
   "end": 38276,
   "type": "Byte"
  },
  {
   "start": 38277,
   "end": 38843,
   "type": "Code"
  },
  {
   "start": 38844,
   "end": 38875,
   "type": "Byte"
  },
  {
   "start": 38876,
   "end": 38877,
   "type": "Undefined"
  },
  {
   "start": 38878,
   "end": 38909,
   "type": "Byte"
  },
  {
   "start": 38910,
   "end": 39130,
   "type": "Code"
  },
  {
   "start": 39131,
   "end": 39138,
   "type": "Byte"
  },
  {
   "start": 39139,
   "end": 39141,
   "type": "Undefined"
  },
  {
   "start": 39142,
   "end": 39248,
   "type": "Byte"
  },
  {
   "start": 39249,
   "end": 39249,
   "type": "Undefined"
  },
  {
   "start": 39250,
   "end": 39267,
   "type": "Address"
  },
  {
   "start": 39268,
   "end": 39338,
   "type": "Code"
  },
  {
   "start": 39339,
   "end": 39339,
   "type": "Undefined"
  },
  {
   "start": 39340,
   "end": 39371,
   "type": "Byte"
  },
  {
   "start": 39372,
   "end": 39374,
   "type": "Undefined"
  },
  {
   "start": 39375,
   "end": 39465,
   "type": "Code"
  },
  {
   "start": 39466,
   "end": 39467,
   "type": "Address"
  },
  {
   "start": 39468,
   "end": 39470,
   "type": "Code"
  },
  {
   "start": 39471,
   "end": 39472,
   "type": "Address"
  },
  {
   "start": 39473,
   "end": 39502,
   "type": "Code"
  },
  {
   "start": 39503,
   "end": 39504,
   "type": "Address"
  },
  {
   "start": 39505,
   "end": 39514,
   "type": "Code"
  },
  {
   "start": 39515,
   "end": 39516,
   "type": "Address"
  },
  {
   "start": 39517,
   "end": 39517,
   "type": "Code"
  },
  {
   "start": 39518,
   "end": 39619,
   "type": "Byte"
  },
  {
   "start": 39620,
   "end": 39847,
   "type": "Code"
  },
  {
   "start": 39848,
   "end": 39848,
   "type": "Undefined"
  },
  {
   "start": 39849,
   "end": 39849,
   "type": "Byte"
  },
  {
   "start": 39850,
   "end": 39850,
   "type": "Undefined"
  },
  {
   "start": 39851,
   "end": 40022,
   "type": "Code"
  },
  {
   "start": 40023,
   "end": 40028,
   "type": "Byte"
  },
  {
   "start": 40029,
   "end": 40065,
   "type": "Code"
  },
  {
   "start": 40066,
   "end": 40071,
   "type": "Byte"
  },
  {
   "start": 40072,
   "end": 40149,
   "type": "Code"
  },
  {
   "start": 40150,
   "end": 40150,
   "type": "Byte"
  },
  {
   "start": 40151,
   "end": 40438,
   "type": "Code"
  },
  {
   "start": 40439,
   "end": 40544,
   "type": "Byte"
  },
  {
   "start": 40545,
   "end": 40545,
   "type": "Undefined"
  },
  {
   "start": 40546,
   "end": 40582,
   "type": "Code"
  },
  {
   "start": 40583,
   "end": 40584,
   "type": "Address"
  },
  {
   "start": 40585,
   "end": 40590,
   "type": "Code"
  },
  {
   "start": 40591,
   "end": 40592,
   "type": "Address"
  },
  {
   "start": 40593,
   "end": 40604,
   "type": "Code"
  },
  {
   "start": 40605,
   "end": 40616,
   "type": "Address"
  },
  {
   "start": 40617,
   "end": 40737,
   "type": "Byte"
  },
  {
   "start": 40738,
   "end": 40814,
   "type": "Code"
  },
  {
   "start": 40815,
   "end": 40828,
   "type": "Byte"
  },
  {
   "start": 40829,
   "end": 40853,
   "type": "Code"
  },
  {
   "start": 40854,
   "end": 40865,
   "type": "Address"
  },
  {
   "start": 40866,
   "end": 40953,
   "type": "Code"
  },
  {
   "start": 40954,
   "end": 40977,
   "type": "Byte"
  },
  {
   "start": 40978,
   "end": 41019,
   "type": "Code"
  },
  {
   "start": 41020,
   "end": 41020,
   "type": "Undefined"
  },
  {
   "start": 41021,
   "end": 41051,
   "type": "Byte"
  },
  {
   "start": 41052,
   "end": 41568,
   "type": "Code"
  },
  {
   "start": 41569,
   "end": 41569,
   "type": "Byte"
  },
  {
   "start": 41570,
   "end": 41577,
   "type": "Code"
  },
  {
   "start": 41578,
   "end": 41578,
   "type": "Byte"
  },
  {
   "start": 41579,
   "end": 41629,
   "type": "Code"
  },
  {
   "start": 41630,
   "end": 41821,
   "type": "Byte"
  },
  {
   "start": 41822,
   "end": 41946,
   "type": "Code"
  },
  {
   "start": 41947,
   "end": 41948,
   "type": "Undefined"
  },
  {
   "start": 41949,
   "end": 42041,
   "type": "Code"
  },
  {
   "start": 42042,
   "end": 42042,
   "type": "Undefined"
  },
  {
   "start": 42043,
   "end": 42044,
   "type": "Byte"
  },
  {
   "start": 42045,
   "end": 42102,
   "type": "Code"
  },
  {
   "start": 42103,
   "end": 42104,
   "type": "Address"
  },
  {
   "start": 42105,
   "end": 42105,
   "type": "Code"
  },
  {
   "start": 42106,
   "end": 42129,
   "type": "Byte"
  },
  {
   "start": 42130,
   "end": 42531,
   "type": "Code"
  },
  {
   "start": 42532,
   "end": 42536,
   "type": "Byte"
  },
  {
   "start": 42537,
   "end": 42642,
   "type": "Code"
  },
  {
   "start": 42643,
   "end": 42650,
   "type": "Byte"
  },
  {
   "start": 42651,
   "end": 42652,
   "type": "Address"
  },
  {
   "start": 42653,
   "end": 42658,
   "type": "Byte"
  },
  {
   "start": 42659,
   "end": 42660,
   "type": "Address"
  },
  {
   "start": 42661,
   "end": 42666,
   "type": "Byte"
  },
  {
   "start": 42667,
   "end": 42668,
   "type": "Address"
  },
  {
   "start": 42669,
   "end": 42764,
   "type": "Byte"
  },
  {
   "start": 42765,
   "end": 43091,
   "type": "Code"
  },
  {
   "start": 43092,
   "end": 43092,
   "type": "Undefined"
  },
  {
   "start": 43093,
   "end": 43139,
   "type": "Byte"
  },
  {
   "start": 43140,
   "end": 43324,
   "type": "Code"
  },
  {
   "start": 43325,
   "end": 43332,
   "type": "Byte"
  },
  {
   "start": 43333,
   "end": 43533,
   "type": "Code"
  },
  {
   "start": 43534,
   "end": 43535,
   "type": "Undefined"
  },
  {
   "start": 43536,
   "end": 43707,
   "type": "Code"
  },
  {
   "start": 43708,
   "end": 43708,
   "type": "Undefined"
  },
  {
   "start": 43709,
   "end": 43709,
   "type": "Byte"
  },
  {
   "start": 43710,
   "end": 43711,
   "type": "Undefined"
  },
  {
   "start": 43712,
   "end": 44000,
   "type": "Code"
  },
  {
   "start": 44001,
   "end": 44015,
   "type": "Byte"
  },
  {
   "start": 44016,
   "end": 44202,
   "type": "Code"
  },
  {
   "start": 44203,
   "end": 44237,
   "type": "Byte"
  },
  {
   "start": 44238,
   "end": 44306,
   "type": "Code"
  },
  {
   "start": 44307,
   "end": 44309,
   "type": "Byte"
  },
  {
   "start": 44310,
   "end": 44325,
   "type": "Code"
  },
  {
   "start": 44326,
   "end": 44327,
   "type": "Undefined"
  },
  {
   "start": 44328,
   "end": 44335,
   "type": "Byte"
  },
  {
   "start": 44336,
   "end": 44466,
   "type": "Code"
  },
  {
   "start": 44467,
   "end": 44468,
   "type": "Undefined"
  },
  {
   "start": 44469,
   "end": 44493,
   "type": "Code"
  },
  {
   "start": 44494,
   "end": 44541,
   "type": "Byte"
  },
  {
   "start": 44542,
   "end": 44635,
   "type": "Code"
  },
  {
   "start": 44636,
   "end": 44637,
   "type": "Address"
  },
  {
   "start": 44638,
   "end": 44643,
   "type": "Code"
  },
  {
   "start": 44644,
   "end": 44645,
   "type": "Address"
  },
  {
   "start": 44646,
   "end": 44731,
   "type": "Code"
  },
  {
   "start": 44732,
   "end": 44733,
   "type": "Address"
  },
  {
   "start": 44734,
   "end": 44739,
   "type": "Code"
  },
  {
   "start": 44740,
   "end": 44741,
   "type": "Address"
  },
  {
   "start": 44742,
   "end": 44751,
   "type": "Code"
  },
  {
   "start": 44752,
   "end": 44759,
   "type": "Address"
  },
  {
   "start": 44760,
   "end": 44855,
   "type": "Byte"
  },
  {
   "start": 44856,
   "end": 44856,
   "type": "Undefined"
  },
  {
   "start": 44857,
   "end": 44857,
   "type": "Byte"
  },
  {
   "start": 44858,
   "end": 44858,
   "type": "Undefined"
  },
  {
   "start": 44859,
   "end": 44859,
   "type": "Byte"
  },
  {
   "start": 44860,
   "end": 44860,
   "type": "Undefined"
  },
  {
   "start": 44861,
   "end": 44868,
   "type": "Byte"
  },
  {
   "start": 44869,
   "end": 45194,
   "type": "Code"
  },
  {
   "start": 45195,
   "end": 45195,
   "type": "Undefined"
  },
  {
   "start": 45196,
   "end": 45237,
   "type": "Code"
  },
  {
   "start": 45238,
   "end": 45239,
   "type": "Address"
  },
  {
   "start": 45240,
   "end": 45245,
   "type": "Code"
  },
  {
   "start": 45246,
   "end": 45247,
   "type": "Address"
  },
  {
   "start": 45248,
   "end": 45250,
   "type": "Code"
  },
  {
   "start": 45251,
   "end": 45252,
   "type": "Address"
  },
  {
   "start": 45253,
   "end": 45309,
   "type": "Code"
  },
  {
   "start": 45310,
   "end": 45310,
   "type": "Undefined"
  },
  {
   "start": 45311,
   "end": 45384,
   "type": "Byte"
  },
  {
   "start": 45385,
   "end": 45411,
   "type": "Code"
  },
  {
   "start": 45412,
   "end": 45413,
   "type": "Address"
  },
  {
   "start": 45414,
   "end": 45689,
   "type": "Code"
  },
  {
   "start": 45690,
   "end": 45720,
   "type": "Byte"
  },
  {
   "start": 45721,
   "end": 45725,
   "type": "Undefined"
  },
  {
   "start": 45726,
   "end": 45726,
   "type": "Byte"
  },
  {
   "start": 45727,
   "end": 45930,
   "type": "Code"
  },
  {
   "start": 45931,
   "end": 45934,
   "type": "Byte"
  },
  {
   "start": 45935,
   "end": 46306,
   "type": "Code"
  },
  {
   "start": 46307,
   "end": 46312,
   "type": "Byte"
  },
  {
   "start": 46313,
   "end": 46313,
   "type": "Undefined"
  },
  {
   "start": 46314,
   "end": 46678,
   "type": "Code"
  },
  {
   "start": 46679,
   "end": 46685,
   "type": "Undefined"
  },
  {
   "start": 46686,
   "end": 46686,
   "type": "Byte"
  },
  {
   "start": 46687,
   "end": 46694,
   "type": "Undefined"
  },
  {
   "start": 46695,
   "end": 46698,
   "type": "Byte"
  },
  {
   "start": 46699,
   "end": 46700,
   "type": "Undefined"
  },
  {
   "start": 46701,
   "end": 46704,
   "type": "Byte"
  },
  {
   "start": 46705,
   "end": 47043,
   "type": "Code"
  },
  {
   "start": 47044,
   "end": 47045,
   "type": "Address"
  },
  {
   "start": 47046,
   "end": 47051,
   "type": "Code"
  },
  {
   "start": 47052,
   "end": 47053,
   "type": "Address"
  },
  {
   "start": 47054,
   "end": 47059,
   "type": "Code"
  },
  {
   "start": 47060,
   "end": 47061,
   "type": "Address"
  },
  {
   "start": 47062,
   "end": 47076,
   "type": "Code"
  },
  {
   "start": 47077,
   "end": 47113,
   "type": "Byte"
  },
  {
   "start": 47114,
   "end": 47155,
   "type": "Code"
  },
  {
   "start": 47156,
   "end": 47156,
   "type": "Undefined"
  },
  {
   "start": 47157,
   "end": 47186,
   "type": "Address"
  },
  {
   "start": 47187,
   "end": 47201,
   "type": "Byte"
  },
  {
   "start": 47202,
   "end": 47321,
   "type": "Code"
  },
  {
   "start": 47322,
   "end": 47345,
   "type": "Byte"
  },
  {
   "start": 47346,
   "end": 47400,
   "type": "Code"
  },
  {
   "start": 47401,
   "end": 47410,
   "type": "Undefined"
  },
  {
   "start": 47411,
   "end": 47717,
   "type": "Code"
  },
  {
   "start": 47718,
   "end": 47718,
   "type": "Undefined"
  },
  {
   "start": 47719,
   "end": 47820,
   "type": "Code"
  },
  {
   "start": 47821,
   "end": 47821,
   "type": "Undefined"
  },
  {
   "start": 47822,
   "end": 47909,
   "type": "Code"
  },
  {
   "start": 47910,
   "end": 47917,
   "type": "Byte"
  },
  {
   "start": 47918,
   "end": 48009,
   "type": "Code"
  },
  {
   "start": 48010,
   "end": 48010,
   "type": "Undefined"
  },
  {
   "start": 48011,
   "end": 48118,
   "type": "Code"
  },
  {
   "start": 48119,
   "end": 48119,
   "type": "Byte"
  },
  {
   "start": 48120,
   "end": 48564,
   "type": "Code"
  },
  {
   "start": 48565,
   "end": 48574,
   "type": "Byte"
  },
  {
   "start": 48575,
   "end": 48748,
   "type": "Code"
  },
  {
   "start": 48749,
   "end": 48751,
   "type": "Undefined"
  },
  {
   "start": 48752,
   "end": 48783,
   "type": "Byte"
  },
  {
   "start": 48784,
   "end": 49021,
   "type": "Code"
  },
  {
   "start": 49022,
   "end": 49024,
   "type": "Byte"
  },
  {
   "start": 49025,
   "end": 49026,
   "type": "Undefined"
  },
  {
   "start": 49027,
   "end": 49030,
   "type": "Byte"
  },
  {
   "start": 49031,
   "end": 49034,
   "type": "Undefined"
  },
  {
   "start": 49035,
   "end": 49065,
   "type": "Byte"
  },
  {
   "start": 49066,
   "end": 49066,
   "type": "Undefined"
  },
  {
   "start": 49067,
   "end": 49136,
   "type": "Code"
  },
  {
   "start": 49137,
   "end": 49137,
   "type": "Undefined"
  },
  {
   "start": 49138,
   "end": 49145,
   "type": "Address"
  },
  {
   "start": 49146,
   "end": 49165,
   "type": "Byte"
  },
  {
   "start": 49166,
   "end": 49411,
   "type": "Code"
  },
  {
   "start": 49412,
   "end": 49412,
   "type": "Undefined"
  },
  {
   "start": 49413,
   "end": 49602,
   "type": "Code"
  },
  {
   "start": 49603,
   "end": 49603,
   "type": "Undefined"
  },
  {
   "start": 49604,
   "end": 49788,
   "type": "Code"
  },
  {
   "start": 49789,
   "end": 49789,
   "type": "Undefined"
  },
  {
   "start": 49790,
   "end": 49971,
   "type": "Code"
  },
  {
   "start": 49972,
   "end": 49972,
   "type": "Undefined"
  },
  {
   "start": 49973,
   "end": 50005,
   "type": "Code"
  },
  {
   "start": 50006,
   "end": 50006,
   "type": "Byte"
  },
  {
   "start": 50007,
   "end": 50009,
   "type": "Undefined"
  },
  {
   "start": 50010,
   "end": 50164,
   "type": "Code"
  },
  {
   "start": 50165,
   "end": 50187,
   "type": "Byte"
  },
  {
   "start": 50188,
   "end": 50189,
   "type": "Undefined"
  },
  {
   "start": 50190,
   "end": 50216,
   "type": "Byte"
  },
  {
   "start": 50217,
   "end": 50402,
   "type": "Code"
  },
  {
   "start": 50403,
   "end": 50403,
   "type": "Undefined"
  },
  {
   "start": 50404,
   "end": 50555,
   "type": "Code"
  },
  {
   "start": 50556,
   "end": 50563,
   "type": "Byte"
  },
  {
   "start": 50564,
   "end": 50715,
   "type": "Code"
  },
  {
   "start": 50716,
   "end": 50724,
   "type": "Byte"
  },
  {
   "start": 50725,
   "end": 51686,
   "type": "Code"
  },
  {
   "start": 51687,
   "end": 51710,
   "type": "Byte"
  },
  {
   "start": 51711,
   "end": 51718,
   "type": "Undefined"
  },
  {
   "start": 51719,
   "end": 51730,
   "type": "Byte"
  },
  {
   "start": 51731,
   "end": 51734,
   "type": "Undefined"
  },
  {
   "start": 51735,
   "end": 52421,
   "type": "Code"
  },
  {
   "start": 52422,
   "end": 52424,
   "type": "Byte"
  },
  {
   "start": 52425,
   "end": 52427,
   "type": "Undefined"
  },
  {
   "start": 52428,
   "end": 52430,
   "type": "Byte"
  },
  {
   "start": 52431,
   "end": 52433,
   "type": "Undefined"
  },
  {
   "start": 52434,
   "end": 52434,
   "type": "Byte"
  },
  {
   "start": 52435,
   "end": 52630,
   "type": "Code"
  },
  {
   "start": 52631,
   "end": 52698,
   "type": "Byte"
  },
  {
   "start": 52699,
   "end": 52868,
   "type": "Code"
  },
  {
   "start": 52869,
   "end": 52891,
   "type": "Byte"
  },
  {
   "start": 52892,
   "end": 52919,
   "type": "Code"
  },
  {
   "start": 52920,
   "end": 53244,
   "type": "Byte"
  },
  {
   "start": 53245,
   "end": 53245,
   "type": "Undefined"
  },
  {
   "start": 53246,
   "end": 53247,
   "type": "Byte"
  },
  {
   "start": 53248,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 57344,
   "end": 58754,
   "type": "Code"
  },
  {
   "start": 58755,
   "end": 58755,
   "type": "Byte"
  },
  {
   "start": 58756,
   "end": 58946,
   "type": "Undefined"
  },
  {
   "start": 58947,
   "end": 59012,
   "type": "Address"
  },
  {
   "start": 59013,
   "end": 59038,
   "type": "Undefined"
  },
  {
   "start": 59039,
   "end": 59104,
   "type": "Byte"
  },
  {
   "start": 59105,
   "end": 59391,
   "type": "Undefined"
  },
  {
   "start": 59392,
   "end": 59837,
   "type": "Byte"
  },
  {
   "start": 59838,
   "end": 59903,
   "type": "Undefined"
  },
  {
   "start": 59904,
   "end": 60056,
   "type": "Byte"
  },
  {
   "start": 60057,
   "end": 61439,
   "type": "Undefined"
  },
  {
   "start": 61440,
   "end": 63487,
   "type": "Byte"
  },
  {
   "start": 63488,
   "end": 65529,
   "type": "Undefined"
  },
  {
   "start": 65530,
   "end": 65535,
   "type": "Byte"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "zpa_01",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2,
   "name": "zpa_02",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3,
   "name": "zpa_03",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 4,
   "name": "zpa_04",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 5,
   "name": "zpa_05",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38,
   "name": "zpa_26",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 42,
   "name": "zpf_2A",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 43,
   "name": "zpa_2B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 100,
   "name": "zpa_64",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 101,
   "name": "zpa_65",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 128,
   "name": "zpa_80",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 129,
   "name": "zpa_81",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 130,
   "name": "zpa_82",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 131,
   "name": "zpa_83",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 132,
   "name": "zpa_84",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 133,
   "name": "zpa_85",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 140,
   "name": "zpa_8C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 141,
   "name": "zpa_8D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 142,
   "name": "zpa_8E",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 143,
   "name": "zpa_8F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 144,
   "name": "zpa_90",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 145,
   "name": "zpa_91",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 146,
   "name": "zpa_92",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 147,
   "name": "zpa_93",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 148,
   "name": "zpa_94",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 149,
   "name": "zpa_95",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 150,
   "name": "zpa_96",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 151,
   "name": "zpa_97",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 152,
   "name": "zpa_98",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 153,
   "name": "zpa_99",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 160,
   "name": "a_00A0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 162,
   "name": "a_00A2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 166,
   "name": "zpp_A6",
   "type": "ZeroPagePointer",
   "kind": "auto"
  },
  {
   "address": 167,
   "name": "zpa_A7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 168,
   "name": "zpp_A8",
   "type": "ZeroPagePointer",
   "kind": "auto"
  },
  {
   "address": 169,
   "name": "zpa_A9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 170,
   "name": "zpp_AA",
   "type": "ZeroPagePointer",
   "kind": "auto"
  },
  {
   "address": 171,
   "name": "zpa_AB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 176,
   "name": "zpp_B0",
   "type": "ZeroPagePointer",
   "kind": "auto"
  },
  {
   "address": 177,
   "name": "zpf_B1",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 192,
   "name": "zpf_C0",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 193,
   "name": "zpf_C1",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 194,
   "name": "zpa_C2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 195,
   "name": "zpa_C3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 247,
   "name": "zpa_F7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 248,
   "name": "zpa_F8",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 249,
   "name": "zpa_F9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 250,
   "name": "zpa_FA",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 251,
   "name": "zpa_FB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 252,
   "name": "zpa_FC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 253,
   "name": "zpa_FD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 254,
   "name": "zpa_FE",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 255,
   "name": "zpa_FF",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 681,
   "name": "a_02A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 788,
   "name": "p_0314",
   "type": "Pointer",
   "kind": "auto"
  },
  {
   "address": 789,
   "name": "a_0315",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 937,
   "name": "a_03A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1024,
   "name": "a_0400",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1025,
   "name": "a_0401",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1026,
   "name": "a_0402",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1027,
   "name": "a_0403",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1028,
   "name": "a_0404",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1029,
   "name": "a_0405",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1030,
   "name": "a_0406",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1035,
   "name": "a_040B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1036,
   "name": "a_040C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1037,
   "name": "a_040D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1184,
   "name": "a_04A0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1193,
   "name": "a_04A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1216,
   "name": "f_04C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1408,
   "name": "f_0580",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1600,
   "name": "f_0640",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1792,
   "name": "f_0700",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1961,
   "name": "a_07A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2208,
   "name": "a_08A0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2217,
   "name": "a_08A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2560,
   "name": "level_length",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2561,
   "name": "level_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2562,
   "name": "level_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2563,
   "name": "level_wall_bytes",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2564,
   "name": "level_walls",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2565,
   "name": "level_walls_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2574,
   "name": "level_objects",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3072,
   "name": "f_0C00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3328,
   "name": "f_0D00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3497,
   "name": "a_0DA9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3584,
   "name": "f_0E00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3840,
   "name": "f_0F00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 4096,
   "name": "datatitle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4265,
   "name": "datatitle_bit_operand",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5000,
   "name": "pinn_jumps",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5009,
   "name": "pinn_receive_many",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5016,
   "name": "b_1398",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5029,
   "name": "r_13A5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 5030,
   "name": "pinn_send",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5090,
   "name": "b_13E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5112,
   "name": "b_13F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5123,
   "name": "b_1403",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5134,
   "name": "j_140E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5148,
   "name": "b_141C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5162,
   "name": "pinn_send_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5199,
   "name": "b_144F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5212,
   "name": "b_145C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5256,
   "name": "pinn_delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5258,
   "name": "b_148A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5262,
   "name": "pinn_arg",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5273,
   "name": "pinn_receive",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5276,
   "name": "pinn_receive_to",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5310,
   "name": "b_14BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5344,
   "name": "b_14E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5356,
   "name": "b_14EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5367,
   "name": "b_14F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5378,
   "name": "j_1502",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5395,
   "name": "b_1513",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5409,
   "name": "pinn_receive_byte",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5424,
   "name": "b_1530",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5431,
   "name": "j_1537",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 5446,
   "name": "b_1546",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5476,
   "name": "pinn_delay_rx",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5478,
   "name": "b_1566",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5482,
   "name": "pinn_delay_long",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5484,
   "name": "b_156C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5491,
   "name": "pinn_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6144,
   "name": "f_1800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 6400,
   "name": "f_1900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 6656,
   "name": "f_1A00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 6912,
   "name": "f_1B00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 7168,
   "name": "f_1C00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 7424,
   "name": "f_1D00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 7680,
   "name": "f_1E00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 7936,
   "name": "f_1F00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8192,
   "name": "f_2000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8256,
   "name": "f_2040",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8320,
   "name": "f_2080",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8361,
   "name": "a_20A9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 8384,
   "name": "f_20C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8448,
   "name": "f_2100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8512,
   "name": "f_2140",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8576,
   "name": "f_2180",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8640,
   "name": "f_21C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8704,
   "name": "f_2200",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8768,
   "name": "f_2240",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8832,
   "name": "f_2280",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8896,
   "name": "f_22C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 8960,
   "name": "f_2300",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9024,
   "name": "f_2340",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9088,
   "name": "f_2380",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9152,
   "name": "f_23C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9216,
   "name": "f_2400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9280,
   "name": "f_2440",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9344,
   "name": "f_2480",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9408,
   "name": "f_24C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12288,
   "name": "f_3000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12352,
   "name": "f_3040",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12416,
   "name": "f_3080",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12480,
   "name": "f_30C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12544,
   "name": "f_3100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12608,
   "name": "f_3140",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12672,
   "name": "f_3180",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12736,
   "name": "f_31C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12800,
   "name": "f_3200",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12864,
   "name": "f_3240",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12928,
   "name": "f_3280",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 12992,
   "name": "f_32C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13056,
   "name": "f_3300",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13120,
   "name": "f_3340",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13184,
   "name": "f_3380",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13248,
   "name": "f_33C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13312,
   "name": "f_3400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13376,
   "name": "f_3440",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13440,
   "name": "f_3480",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13504,
   "name": "f_34C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16384,
   "name": "f_4000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16387,
   "name": "f_4003",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16427,
   "name": "f_402B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16467,
   "name": "f_4053",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16507,
   "name": "f_407B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16547,
   "name": "f_40A3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16587,
   "name": "f_40CB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16627,
   "name": "f_40F3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16640,
   "name": "f_4100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16667,
   "name": "f_411B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16707,
   "name": "f_4143",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16747,
   "name": "f_416B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16787,
   "name": "f_4193",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16827,
   "name": "f_41BB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16867,
   "name": "f_41E3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16896,
   "name": "f_4200",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16907,
   "name": "f_420B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16947,
   "name": "f_4233",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16987,
   "name": "f_425B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17027,
   "name": "f_4283",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17067,
   "name": "f_42AB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17107,
   "name": "f_42D3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17147,
   "name": "f_42FB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17152,
   "name": "f_4300",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17188,
   "name": "f_4324",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17189,
   "name": "f_4325",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17190,
   "name": "f_4326",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17201,
   "name": "f_4331",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17202,
   "name": "f_4332",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17203,
   "name": "f_4333",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17228,
   "name": "f_434C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17268,
   "name": "f_4374",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17269,
   "name": "f_4375",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17270,
   "name": "f_4376",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17271,
   "name": "f_4377",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17272,
   "name": "f_4378",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17273,
   "name": "f_4379",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17274,
   "name": "f_437A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17278,
   "name": "f_437E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17279,
   "name": "f_437F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17280,
   "name": "f_4380",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17281,
   "name": "f_4381",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17308,
   "name": "f_439C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17400,
   "name": "a_43F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17401,
   "name": "a_43F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17402,
   "name": "a_43FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17403,
   "name": "a_43FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17404,
   "name": "a_43FC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17405,
   "name": "a_43FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17406,
   "name": "a_43FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17407,
   "name": "a_43FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 17408,
   "name": "f_4400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17411,
   "name": "f_4403",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17451,
   "name": "f_442B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17491,
   "name": "f_4453",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17531,
   "name": "f_447B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17571,
   "name": "f_44A3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17611,
   "name": "f_44CB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17651,
   "name": "f_44F3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17664,
   "name": "f_4500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17691,
   "name": "f_451B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17731,
   "name": "f_4543",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17771,
   "name": "f_456B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17811,
   "name": "f_4593",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17851,
   "name": "f_45BB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17891,
   "name": "f_45E3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17920,
   "name": "f_4600",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17931,
   "name": "f_460B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17971,
   "name": "f_4633",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18011,
   "name": "f_465B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18051,
   "name": "f_4683",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18091,
   "name": "f_46AB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18131,
   "name": "f_46D3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18171,
   "name": "f_46FB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18176,
   "name": "f_4700",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18424,
   "name": "a_47F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18425,
   "name": "a_47F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 18426,
   "name": "f_47FA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18430,
   "name": "f_47FE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18432,
   "name": "font_maze_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 18440,
   "name": "font_maze_a_walls",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18800,
   "name": "font_maze_a_hidden",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19456,
   "name": "font_maze_a_monsters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20480,
   "name": "font_maze_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20488,
   "name": "font_maze_b_walls",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20848,
   "name": "font_maze_b_hidden",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21504,
   "name": "font_maze_b_monsters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22528,
   "name": "font_maze_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22536,
   "name": "font_maze_c_walls",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22896,
   "name": "font_maze_c_hidden",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 23552,
   "name": "font_maze_c_monsters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24576,
   "name": "font_panel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25600,
   "name": "font_panel_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25704,
   "name": "style_block_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 25984,
   "name": "potion_pictures",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26624,
   "name": "sprite_shapes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27648,
   "name": "sprite_shapes_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28160,
   "name": "fireball_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28416,
   "name": "fireball_shapes_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28672,
   "name": "player1_shapes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28704,
   "name": "player1_shapes_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29696,
   "name": "player1_frames_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29952,
   "name": "player1_frames_3b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30208,
   "name": "player1_shots",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30464,
   "name": "player1_shots_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30720,
   "name": "player2_sprites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31744,
   "name": "player2_shapes_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32256,
   "name": "player2_shots",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32512,
   "name": "player2_shots_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "game_entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32771,
   "name": "entry_pad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32787,
   "name": "startup",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32827,
   "name": "b_803B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32913,
   "name": "game_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32933,
   "name": "level_begin",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33056,
   "name": "treasure_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33102,
   "name": "b_814E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33125,
   "name": "b_8165",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33134,
   "name": "b_816E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33143,
   "name": "b_8177",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33154,
   "name": "b_8182",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33163,
   "name": "play_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33186,
   "name": "loop_scroll_check",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33233,
   "name": "b_81D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33242,
   "name": "b_81DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33251,
   "name": "b_81E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33262,
   "name": "b_81EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33268,
   "name": "wait_frame_40",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33284,
   "name": "level_reset_vars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33351,
   "name": "frame_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33352,
   "name": "frame_count_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33353,
   "name": "tune_wanted",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33354,
   "name": "monster_cur",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33355,
   "name": "pass_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33356,
   "name": "mask_dummy_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33357,
   "name": "mask_dummy_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33358,
   "name": "monster_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33360,
   "name": "screen_front",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33361,
   "name": "font_select",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33362,
   "name": "d011_copy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33363,
   "name": "font_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33364,
   "name": "font_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33365,
   "name": "font_cycle",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33370,
   "name": "d022_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33371,
   "name": "scratch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33372,
   "name": "scratch_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33373,
   "name": "scratch_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33374,
   "name": "blocked_dirs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33375,
   "name": "redraw_due",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33376,
   "name": "redraw_due_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33377,
   "name": "freeze_copy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33378,
   "name": "scroll_done",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33379,
   "name": "idle_scroll_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33380,
   "name": "main_go",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33381,
   "name": "pad_8265",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33382,
   "name": "scroll_x_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33383,
   "name": "scroll_y_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33384,
   "name": "irq_entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33401,
   "name": "irq_exit",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33407,
   "name": "nmi_rti",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33408,
   "name": "irq_install",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33467,
   "name": "irq_kernal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33536,
   "name": "clear_screens",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33539,
   "name": "b_8303",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33579,
   "name": "panel_columns",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33581,
   "name": "panel_misc",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33583,
   "name": "panel_potion_end",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33585,
   "name": "hero_names",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33649,
   "name": "panel_legend",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33665,
   "name": "panel_start_digits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33681,
   "name": "panel_blank_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33697,
   "name": "panel_press_fire",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33713,
   "name": "panel_press_fire_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33729,
   "name": "panel_press_fire_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33745,
   "name": "panel_press_fire_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33761,
   "name": "panel_press_fire_alt",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33841,
   "name": "panel_draw_players",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33846,
   "name": "b_8436",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33888,
   "name": "b_8460",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33889,
   "name": "hero_name_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33890,
   "name": "hero_name_ptr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33928,
   "name": "b_8488",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33954,
   "name": "panel_press_fire_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33959,
   "name": "b_84A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33973,
   "name": "b_84B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34001,
   "name": "b_84D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34007,
   "name": "panel_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34024,
   "name": "b_84E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34047,
   "name": "b_84FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34070,
   "name": "b_8516",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34084,
   "name": "mask_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34088,
   "name": "mask_first_line",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34089,
   "name": "mask_lines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34093,
   "name": "mask_band",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34094,
   "name": "sprites_init_masks",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34169,
   "name": "raster_frame",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34181,
   "name": "b_8585",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34218,
   "name": "b_85AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34221,
   "name": "b_85AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34254,
   "name": "b_85CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34293,
   "name": "b_85F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34299,
   "name": "b_85FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34301,
   "name": "b_85FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34346,
   "name": "b_862A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34353,
   "name": "b_8631",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34380,
   "name": "raster_toggle",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34381,
   "name": "frame_tasks",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34403,
   "name": "raster_masks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34415,
   "name": "b_866F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34451,
   "name": "b_8693",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34475,
   "name": "raster_arm",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34531,
   "name": "unused_wait",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34537,
   "name": "scroll_limit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34560,
   "name": "b_8700",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34575,
   "name": "b_870F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34590,
   "name": "b_871E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34605,
   "name": "r_872D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34606,
   "name": "scroll_decide",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34626,
   "name": "b_8742",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34639,
   "name": "b_874F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34644,
   "name": "r_8754",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34645,
   "name": "b_8755",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34656,
   "name": "b_8760",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34667,
   "name": "j_876B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34707,
   "name": "b_8793",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34729,
   "name": "b_87A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34774,
   "name": "r_87D6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34775,
   "name": "keys_scan",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34787,
   "name": "b_87E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34803,
   "name": "unused_keys_any",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34833,
   "name": "key_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34849,
   "name": "keys_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34850,
   "name": "keys_row6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34855,
   "name": "keys_row1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34856,
   "name": "keys_row0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34862,
   "name": "scroll_fine_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34863,
   "name": "scroll_fine_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34864,
   "name": "scroll_steps",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34865,
   "name": "map_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34866,
   "name": "map_x_prev",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34867,
   "name": "map_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34868,
   "name": "map_y_prev",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34871,
   "name": "scroll_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34872,
   "name": "scroll_dir_extra",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34873,
   "name": "scroll_dir_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34874,
   "name": "scroll_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34888,
   "name": "b_8848",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34897,
   "name": "b_8851",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34906,
   "name": "b_885A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34915,
   "name": "b_8863",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34924,
   "name": "b_886C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34933,
   "name": "b_8875",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34942,
   "name": "b_887E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34950,
   "name": "b_8886",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34959,
   "name": "scroll_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34976,
   "name": "b_88A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34996,
   "name": "r_88B4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34997,
   "name": "scroll_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35014,
   "name": "b_88C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35034,
   "name": "r_88DA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35035,
   "name": "scroll_down_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35061,
   "name": "b_88F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35087,
   "name": "r_890F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35088,
   "name": "scroll_up_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35114,
   "name": "b_892A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35144,
   "name": "r_8948",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35145,
   "name": "scroll_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35162,
   "name": "b_895A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35182,
   "name": "r_896E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35183,
   "name": "scroll_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35200,
   "name": "b_8980",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35220,
   "name": "r_8994",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35221,
   "name": "scroll_up_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35247,
   "name": "b_89AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35273,
   "name": "r_89C9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35274,
   "name": "scroll_down_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35300,
   "name": "b_89E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35330,
   "name": "r_8A02",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35331,
   "name": "diag_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35339,
   "name": "maze_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35363,
   "name": "b_8A23",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35409,
   "name": "b_8A51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35435,
   "name": "b_8A6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35448,
   "name": "b_8A78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35449,
   "name": "copy_col_wrap",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35452,
   "name": "copy_src_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35453,
   "name": "copy_src_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35458,
   "name": "copy_src2_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35459,
   "name": "copy_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35575,
   "name": "maze_draw_4400",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35621,
   "name": "b_8B25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35647,
   "name": "b_8B3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35660,
   "name": "b_8B4C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35661,
   "name": "copy_col_wrap_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35664,
   "name": "copy_src_lo_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35665,
   "name": "copy_src_hi_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35670,
   "name": "copy_src2_lo_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35671,
   "name": "copy_rows_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35787,
   "name": "maze_row_ops",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35807,
   "name": "wait_raster",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35808,
   "name": "b_8BE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35819,
   "name": "b_8BEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35824,
   "name": "b_8BF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35829,
   "name": "b_8BF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35835,
   "name": "maze_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35837,
   "name": "b_8BFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35838,
   "name": "colour_col_wrap",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35841,
   "name": "colour_src_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35842,
   "name": "colour_src_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35847,
   "name": "colour_src2_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35848,
   "name": "colour_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35964,
   "name": "panel_flash",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35996,
   "name": "b_8C9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36005,
   "name": "b_8CA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36025,
   "name": "b_8CB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36028,
   "name": "r_8CBC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36029,
   "name": "unused_wait_fire",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36037,
   "name": "maze_style",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36059,
   "name": "b_8CDB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36060,
   "name": "style_src_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36061,
   "name": "style_src_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36088,
   "name": "b_8CF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36096,
   "name": "b_8D00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36103,
   "name": "maze_style_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36109,
   "name": "maze_style_src",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36110,
   "name": "maze_style_src_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36119,
   "name": "cia_timers_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36147,
   "name": "unused_zero_8D33",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36352,
   "name": "map_wrap_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36353,
   "name": "map_wrap_x_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36354,
   "name": "map_wrap_x_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36464,
   "name": "map_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36496,
   "name": "map_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36526,
   "name": "stick_index_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36528,
   "name": "stick_p1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36529,
   "name": "stick_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36530,
   "name": "dir_p1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36531,
   "name": "dir_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36532,
   "name": "maze_restore",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36574,
   "name": "teleport_add",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36602,
   "name": "teleport_use",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36657,
   "name": "b_8F31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36676,
   "name": "b_8F44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36698,
   "name": "b_8F5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36714,
   "name": "b_8F6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36717,
   "name": "b_8F6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36720,
   "name": "teleport_sort",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36723,
   "name": "b_8F73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36733,
   "name": "b_8F7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36753,
   "name": "b_8F91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36758,
   "name": "j_8F96",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 36800,
   "name": "b_8FC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36809,
   "name": "teleport_place",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36811,
   "name": "b_8FCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36834,
   "name": "b_8FE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36849,
   "name": "b_8FF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36858,
   "name": "b_8FFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36926,
   "name": "teleport_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36927,
   "name": "teleport_aim_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36928,
   "name": "teleport_aim_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36929,
   "name": "teleport_dist",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36930,
   "name": "teleport_dist_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36945,
   "name": "teleport_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36946,
   "name": "teleport_x_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36961,
   "name": "teleport_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36962,
   "name": "teleport_y_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36977,
   "name": "player_moved",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36979,
   "name": "sort_swapped",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36980,
   "name": "teleport_free",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37056,
   "name": "b_90C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37059,
   "name": "b_90C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37109,
   "name": "unused_zero_90F5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37118,
   "name": "tile_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37119,
   "name": "tile_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37120,
   "name": "player_screen_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37121,
   "name": "player2_screen_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37122,
   "name": "player_screen_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37123,
   "name": "player2_screen_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37124,
   "name": "player_world_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37125,
   "name": "player2_world_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37126,
   "name": "player_world_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37127,
   "name": "player2_world_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37128,
   "name": "probe_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37129,
   "name": "probe_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37132,
   "name": "player_loop",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37133,
   "name": "player_cur",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37135,
   "name": "start_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37136,
   "name": "start_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37137,
   "name": "sprites_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37138,
   "name": "player_under",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37140,
   "name": "hero_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37144,
   "name": "hero_sprite_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37146,
   "name": "hero_index_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37148,
   "name": "player_hero",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37149,
   "name": "player2_hero",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37150,
   "name": "exit_wait_p1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37151,
   "name": "exit_wait_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37152,
   "name": "player_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37153,
   "name": "player2_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37154,
   "name": "player_other",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37155,
   "name": "player2_other",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37156,
   "name": "player_anim",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37158,
   "name": "player_facing",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37159,
   "name": "player2_facing",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37160,
   "name": "anim_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37164,
   "name": "player_shapes",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37165,
   "name": "player2_shapes",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37166,
   "name": "facing_of_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37182,
   "name": "sprite_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37183,
   "name": "sprite3_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37184,
   "name": "sprite4_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37185,
   "name": "sprite5_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37186,
   "name": "player_sprite_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37187,
   "name": "player2_sprite_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37188,
   "name": "sprite_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37189,
   "name": "sprite3_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37190,
   "name": "sprite4_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37191,
   "name": "sprite5_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37192,
   "name": "player_sprite_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37193,
   "name": "player2_sprite_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37194,
   "name": "sprite_x_high",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37198,
   "name": "player_x_high",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37200,
   "name": "sprite_x_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37206,
   "name": "sprite_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37207,
   "name": "sprite3_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37208,
   "name": "sprite4_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37212,
   "name": "players_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37217,
   "name": "b_9161",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37232,
   "name": "b_9170",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37250,
   "name": "b_9182",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37261,
   "name": "b_918D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37307,
   "name": "b_91BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37324,
   "name": "sprites_place",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37400,
   "name": "b_9218",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37408,
   "name": "b_9220",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37416,
   "name": "b_9228",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37492,
   "name": "players_walk",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37497,
   "name": "b_9279",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37518,
   "name": "b_928E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37531,
   "name": "b_929B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37544,
   "name": "b_92A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37557,
   "name": "b_92B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37563,
   "name": "unused_92BB",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37567,
   "name": "players_screen_pos",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37569,
   "name": "b_92C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37593,
   "name": "scroll_edges",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37611,
   "name": "b_92EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37626,
   "name": "b_92FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37646,
   "name": "b_930E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37661,
   "name": "r_931D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37662,
   "name": "players_keep_close",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37678,
   "name": "b_932E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37718,
   "name": "b_9356",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37734,
   "name": "b_9366",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37768,
   "name": "b_9388",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37784,
   "name": "b_9398",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37812,
   "name": "b_93B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37828,
   "name": "b_93C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37856,
   "name": "b_93E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37872,
   "name": "b_93F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37880,
   "name": "r_93F8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37881,
   "name": "players_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37886,
   "name": "b_93FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37945,
   "name": "b_9439",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37958,
   "name": "b_9446",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37993,
   "name": "b_9469",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37999,
   "name": "block_dirs",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38013,
   "name": "b_947D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38065,
   "name": "b_94B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38068,
   "name": "b_94B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38074,
   "name": "ring_exit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38075,
   "name": "tile_blocks",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38122,
   "name": "b_94EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38128,
   "name": "b_94F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38133,
   "name": "b_94F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38142,
   "name": "r_94FE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38143,
   "name": "ring_dir_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38151,
   "name": "dir_of_ring",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38159,
   "name": "ring_stick",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38167,
   "name": "tile_ring",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38218,
   "name": "tile_addr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38243,
   "name": "unused_9563",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38277,
   "name": "level_place_players",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38292,
   "name": "b_9594",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38303,
   "name": "b_959F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38330,
   "name": "b_95BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38341,
   "name": "b_95C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38355,
   "name": "b_95D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38372,
   "name": "b_95E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38404,
   "name": "b_9604",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38447,
   "name": "b_962F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38456,
   "name": "scroll_follow",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38461,
   "name": "b_963D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38485,
   "name": "b_9655",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38494,
   "name": "b_965E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38503,
   "name": "b_9667",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38511,
   "name": "b_966F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38517,
   "name": "follow_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38539,
   "name": "r_968B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38540,
   "name": "b_968C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38549,
   "name": "follow_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38571,
   "name": "r_96AB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38572,
   "name": "b_96AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38581,
   "name": "follow_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38603,
   "name": "r_96CB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38604,
   "name": "b_96CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38613,
   "name": "follow_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38635,
   "name": "r_96EB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38636,
   "name": "b_96EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38645,
   "name": "cell_addr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38670,
   "name": "player_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38719,
   "name": "b_973F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38746,
   "name": "b_975A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38755,
   "name": "b_9763",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38787,
   "name": "cells_free",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38809,
   "name": "r_9799",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38810,
   "name": "cell_mark",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38827,
   "name": "cell_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38844,
   "name": "dir_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38860,
   "name": "dir_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38876,
   "name": "teleport_cell_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38877,
   "name": "teleport_cell_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38878,
   "name": "unused_97DE",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38894,
   "name": "power_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38900,
   "name": "bits_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38902,
   "name": "clear_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38908,
   "name": "bits_table_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38910,
   "name": "player_leaves",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38950,
   "name": "drop_tile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38991,
   "name": "b_984F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39080,
   "name": "exit_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39130,
   "name": "r_98DA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39131,
   "name": "level_name",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39133,
   "name": "level_name_text",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39139,
   "name": "level_digit_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39140,
   "name": "level_digit_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39141,
   "name": "level_digit_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39142,
   "name": "file_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39154,
   "name": "name_plyrs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39163,
   "name": "name_objdis",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39169,
   "name": "name_dittidata",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39182,
   "name": "name_datatreasure",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39198,
   "name": "name_player",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39210,
   "name": "name_gaunt_chr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39225,
   "name": "file_loads",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39226,
   "name": "file_loads_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39241,
   "name": "file_name_lengths",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39249,
   "name": "file_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39250,
   "name": "file_name_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39251,
   "name": "file_name_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39268,
   "name": "load_files",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39272,
   "name": "load_level_file",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39274,
   "name": "b_996A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39339,
   "name": "load_status",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39340,
   "name": "unused_99AC",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39372,
   "name": "level_file",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39373,
   "name": "level_number",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39374,
   "name": "level8_file",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39375,
   "name": "level_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39378,
   "name": "b_99D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39391,
   "name": "b_99DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39452,
   "name": "b_9A1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39466,
   "name": "arg_9A2A",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39468,
   "name": "level_start_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39471,
   "name": "arg_9A2F",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39473,
   "name": "level_start_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39483,
   "name": "level_messages",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39503,
   "name": "arg_9A4F",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39505,
   "name": "level_messages_2",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 39515,
   "name": "arg_9A5B",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39517,
   "name": "level_messages_end",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 39518,
   "name": "str_level",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39519,
   "name": "str_level_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39539,
   "name": "str_level_lower",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39540,
   "name": "str_level_lower_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39560,
   "name": "str_shots_hurt",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39590,
   "name": "str_shots_stun",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39620,
   "name": "level_pick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39635,
   "name": "b_9AD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39650,
   "name": "b_9AE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39661,
   "name": "b_9AED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39678,
   "name": "level_name_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39696,
   "name": "level_digits_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39788,
   "name": "exit_targets",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39800,
   "name": "b_9B78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39813,
   "name": "b_9B85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39823,
   "name": "j_9B8F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39834,
   "name": "b_9B9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39844,
   "name": "b_9BA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39848,
   "name": "exit_choice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39850,
   "name": "exit_choice_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39851,
   "name": "exit_choice_l4",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39869,
   "name": "b_9BBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39876,
   "name": "exit_choice_l1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39894,
   "name": "b_9BD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39912,
   "name": "b_9BE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39919,
   "name": "level_intro",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39934,
   "name": "b_9BFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39946,
   "name": "heroes_load_shapes",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39952,
   "name": "b_9C10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39982,
   "name": "hero_copy_shapes",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40008,
   "name": "b_9C48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40023,
   "name": "hero_shape_pages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40027,
   "name": "player_shape_pages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40029,
   "name": "hero_copy_chars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40051,
   "name": "b_9C73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40066,
   "name": "hero_gfx_pages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40070,
   "name": "player_gfx_pages",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40072,
   "name": "shapes_to_1C00",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40074,
   "name": "b_9C8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40102,
   "name": "shapes_from_1800",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40104,
   "name": "b_9CA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40132,
   "name": "shapes_7400_to_6E00",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40134,
   "name": "b_9CC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40150,
   "name": "pad_9CD6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40151,
   "name": "power_armour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40154,
   "name": "power_carry",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40157,
   "name": "power_magic",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40160,
   "name": "power_shot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40163,
   "name": "power_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40166,
   "name": "power_fight",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40192,
   "name": "b_9D00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40207,
   "name": "r_9D0F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40208,
   "name": "power_apply",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40273,
   "name": "b_9D51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40302,
   "name": "b_9D6E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40338,
   "name": "b_9D92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40374,
   "name": "b_9DB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40403,
   "name": "b_9DD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40438,
   "name": "r_9DF6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40439,
   "name": "power_tables",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40443,
   "name": "power_shot_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40447,
   "name": "power_fight_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40451,
   "name": "power_fight_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40455,
   "name": "base_shot_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40459,
   "name": "base_shot_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40463,
   "name": "base_fight_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40467,
   "name": "base_fight_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40471,
   "name": "armoured_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40475,
   "name": "armoured_damage_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40479,
   "name": "armoured_damage_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40483,
   "name": "armoured_damage_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40487,
   "name": "armoured_damage_5",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40491,
   "name": "armoured_damage_6",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40495,
   "name": "base_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40499,
   "name": "base_damage_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40503,
   "name": "base_damage_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40507,
   "name": "base_damage_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40511,
   "name": "base_damage_5",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40515,
   "name": "base_damage_6",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40521,
   "name": "damage_taken",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40525,
   "name": "damage_taken_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40527,
   "name": "damage_taken_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40533,
   "name": "damage_taken_4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40537,
   "name": "damage_taken_5",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40541,
   "name": "damage_taken_6",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40543,
   "name": "player_powers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40545,
   "name": "power_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40546,
   "name": "power_message",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40583,
   "name": "arg_9E87",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40585,
   "name": "power_message_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40591,
   "name": "arg_9E8F",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40592,
   "name": "power_name_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40593,
   "name": "power_message_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40605,
   "name": "power_names",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40606,
   "name": "power_names_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40617,
   "name": "str_powers",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40631,
   "name": "str_extra_carry",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40655,
   "name": "str_extra_magic",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40674,
   "name": "str_extra_shot_power",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40692,
   "name": "str_extra_shot_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40710,
   "name": "str_extra_fight",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40729,
   "name": "str_now_has",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40738,
   "name": "poison",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40746,
   "name": "b_9F2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40754,
   "name": "b_9F32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40758,
   "name": "j_9F36",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 40802,
   "name": "poison_health",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40815,
   "name": "poison_pick",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40823,
   "name": "power_icon_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40829,
   "name": "power_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40848,
   "name": "power_reset_call",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40849,
   "name": "power_reset_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40850,
   "name": "power_reset_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40854,
   "name": "power_resets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40855,
   "name": "power_resets_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40866,
   "name": "power_reset_armour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40903,
   "name": "power_reset_carry",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40909,
   "name": "power_reset_magic",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40922,
   "name": "power_reset_shot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40935,
   "name": "power_reset_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40941,
   "name": "power_reset_fight",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40954,
   "name": "magic_tables",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40958,
   "name": "magic_power_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40960,
   "name": "magic_tables_a000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40962,
   "name": "magic_base_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40966,
   "name": "magic_base_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40970,
   "name": "magic_vs_generators",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40972,
   "name": "magic_value",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40974,
   "name": "magic_vs_monsters",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40976,
   "name": "magic_value_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40978,
   "name": "player_powers_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41014,
   "name": "tune_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41017,
   "name": "tune_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41020,
   "name": "tune_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41021,
   "name": "tune_voices",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41022,
   "name": "tune_voice1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41024,
   "name": "tune_voice1_rest",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41030,
   "name": "tune_voice1_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41031,
   "name": "tune_voice2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41032,
   "name": "tune_voice2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41034,
   "name": "tune_voice2_rest",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41040,
   "name": "tune_voice2_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41041,
   "name": "tune_voice3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41042,
   "name": "tune_voice3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41044,
   "name": "tune_voice3_rest",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41050,
   "name": "tune_voice3_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41051,
   "name": "tune_volume",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41052,
   "name": "tune_init",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41060,
   "name": "b_A064",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41149,
   "name": "tune_skip",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41163,
   "name": "r_A0CB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41164,
   "name": "tune_play",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41170,
   "name": "b_A0D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41190,
   "name": "b_A0E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41225,
   "name": "b_A109",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41243,
   "name": "b_A11B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41280,
   "name": "b_A140",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41300,
   "name": "b_A154",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41335,
   "name": "r_A177",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41336,
   "name": "tune_command",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41349,
   "name": "b_A185",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41354,
   "name": "j_A18A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41366,
   "name": "b_A196",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41383,
   "name": "b_A1A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41393,
   "name": "b_A1B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41407,
   "name": "b_A1BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41417,
   "name": "b_A1C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41427,
   "name": "b_A1D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41446,
   "name": "b_A1E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41468,
   "name": "b_A1FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41497,
   "name": "b_A219",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41517,
   "name": "b_A22D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41521,
   "name": "j_A231",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41542,
   "name": "b_A246",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41548,
   "name": "b_A24C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41563,
   "name": "b_A25B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41569,
   "name": "tune_pad_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41570,
   "name": "tune_reg_write",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41578,
   "name": "tune_pad_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41579,
   "name": "tune_note",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41618,
   "name": "stream_next",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41629,
   "name": "r_A29D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41630,
   "name": "note_freqs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41631,
   "name": "note_freqs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41822,
   "name": "hidden_potion_place",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41844,
   "name": "b_A374",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41845,
   "name": "hidden_glyph_src",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41871,
   "name": "r_A38F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41872,
   "name": "extras_place",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41897,
   "name": "b_A3A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41911,
   "name": "b_A3B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41914,
   "name": "b_A3BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41925,
   "name": "b_A3C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41935,
   "name": "b_A3CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41946,
   "name": "r_A3DA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41947,
   "name": "extras_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41948,
   "name": "extras_chance",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41949,
   "name": "random_place",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42042,
   "name": "hidden_kind",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42045,
   "name": "random",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42054,
   "name": "b_A446",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42071,
   "name": "hidden_potion_roll",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42103,
   "name": "arg_A477",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42105,
   "name": "hidden_potion_end",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 42106,
   "name": "str_hidden_potion",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42130,
   "name": "game_over_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42151,
   "name": "b_A4A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42156,
   "name": "game_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42272,
   "name": "wait_first_player",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42278,
   "name": "j_A526",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42280,
   "name": "b_A528",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42293,
   "name": "b_A535",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42346,
   "name": "players_join",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42356,
   "name": "b_A574",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42368,
   "name": "b_A580",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42371,
   "name": "r_A583",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42372,
   "name": "join_beside",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 42398,
   "name": "b_A59E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42460,
   "name": "join_spot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42466,
   "name": "b_A5E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42481,
   "name": "b_A5F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42486,
   "name": "join_test",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42532,
   "name": "join_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42533,
   "name": "join_offsets_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42537,
   "name": "player_mark",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42556,
   "name": "leave_timers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42558,
   "name": "b_A63E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42639,
   "name": "b_A68F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42643,
   "name": "unused_side2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42651,
   "name": "arg_A69B",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42659,
   "name": "arg_A6A3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42667,
   "name": "arg_A6AB",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42669,
   "name": "unused_side2_wait",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42702,
   "name": "str_insert_side2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42725,
   "name": "str_press_space",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42747,
   "name": "str_to_continue",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42765,
   "name": "shots_fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42776,
   "name": "shot_fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42808,
   "name": "b_A738",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42855,
   "name": "r_A767",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42856,
   "name": "shots_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42858,
   "name": "b_A76A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42875,
   "name": "b_A77B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42904,
   "name": "b_A798",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42932,
   "name": "b_A7B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42936,
   "name": "b_A7B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42943,
   "name": "rock_fly",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42981,
   "name": "r_A7E5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42982,
   "name": "b_A7E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43007,
   "name": "b_A7FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43014,
   "name": "b_A806",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43028,
   "name": "b_A814",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43035,
   "name": "shot_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43077,
   "name": "b_A845",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43092,
   "name": "shot_type",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43093,
   "name": "shot_type_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43094,
   "name": "shot_type_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43095,
   "name": "shot_type_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43096,
   "name": "shot_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43100,
   "name": "shot_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43104,
   "name": "shot_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43108,
   "name": "shot_owner",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43128,
   "name": "shot_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43132,
   "name": "axe_spin",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43140,
   "name": "shots_hit_tiles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43142,
   "name": "b_A886",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43190,
   "name": "b_A8B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43194,
   "name": "shot_tile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43236,
   "name": "r_A8E4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43237,
   "name": "b_A8E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43240,
   "name": "b_A8E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43250,
   "name": "b_A8F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43254,
   "name": "b_A8F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43278,
   "name": "j_A90E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43296,
   "name": "b_A920",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43299,
   "name": "b_A923",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43310,
   "name": "shot_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43325,
   "name": "shot_cell_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43329,
   "name": "shot_cell_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 43333,
   "name": "shot_hits_monster",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43356,
   "name": "b_A95C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43376,
   "name": "b_A970",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43404,
   "name": "b_A98C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43407,
   "name": "b_A98F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43409,
   "name": "b_A991",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43433,
   "name": "b_A9A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43492,
   "name": "b_A9E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43528,
   "name": "b_AA08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43532,
   "name": "b_AA0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43534,
   "name": "monster_cell_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43535,
   "name": "monster_cell_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43536,
   "name": "shots_hit_monsters",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43545,
   "name": "b_AA19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43551,
   "name": "b_AA1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43565,
   "name": "r_AA2D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 43566,
   "name": "fireball_fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43579,
   "name": "b_AA3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43635,
   "name": "b_AA73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43639,
   "name": "rock_throw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43704,
   "name": "b_AAB8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43708,
   "name": "shot_colours",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43709,
   "name": "shot_colour_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43710,
   "name": "shot_colour_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43711,
   "name": "shot_colour_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43712,
   "name": "shots_hit_players",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43714,
   "name": "b_AAC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43716,
   "name": "b_AAC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43739,
   "name": "b_AADB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43781,
   "name": "b_AB05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43788,
   "name": "rock_path",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 43806,
   "name": "b_AB1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43823,
   "name": "b_AB2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43842,
   "name": "b_AB42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43864,
   "name": "b_AB58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43866,
   "name": "b_AB5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43892,
   "name": "j_AB74",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43905,
   "name": "b_AB81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43911,
   "name": "b_AB87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43925,
   "name": "j_AB95",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43938,
   "name": "b_ABA2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43961,
   "name": "b_ABB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43983,
   "name": "b_ABCF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43999,
   "name": "b_ABDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44001,
   "name": "rock_work",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44002,
   "name": "rock_dx_half",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44003,
   "name": "rock_dy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44004,
   "name": "rock_dy_half",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44005,
   "name": "rock_long",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44006,
   "name": "rock_short",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44007,
   "name": "rock_steps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44009,
   "name": "rock_half",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44011,
   "name": "rock_step_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44013,
   "name": "rock_step_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44015,
   "name": "rock_swapped",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44016,
   "name": "shot_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44050,
   "name": "b_AC12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44055,
   "name": "score_generator",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44089,
   "name": "b_AC39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44094,
   "name": "shot_hits_player",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44121,
   "name": "b_AC59",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44134,
   "name": "b_AC66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44137,
   "name": "b_AC69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44168,
   "name": "b_AC88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44177,
   "name": "b_AC91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44182,
   "name": "players_frozen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44184,
   "name": "b_AC98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44199,
   "name": "b_ACA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44203,
   "name": "shot_power_gen",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44205,
   "name": "shot_power",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44207,
   "name": "gen_thresholds",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44222,
   "name": "shot_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44224,
   "name": "shot_damage_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44226,
   "name": "shot_speed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44228,
   "name": "shot_speed_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44232,
   "name": "fight_power",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44234,
   "name": "fight_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44236,
   "name": "fight_damage_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44238,
   "name": "fight_generator",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44282,
   "name": "b_ACFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44301,
   "name": "b_AD0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44307,
   "name": "fight_rate",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44310,
   "name": "death_points",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44326,
   "name": "death_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44327,
   "name": "death_score",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44328,
   "name": "death_scores",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44336,
   "name": "potion_shot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44348,
   "name": "b_AD3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44366,
   "name": "r_AD4E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44367,
   "name": "magic_generator",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44400,
   "name": "b_AD70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44402,
   "name": "b_AD72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44423,
   "name": "treasure_clock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44458,
   "name": "b_ADAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44463,
   "name": "b_ADAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44466,
   "name": "r_ADB2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44467,
   "name": "treasure_tick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44468,
   "name": "treasure_time",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44469,
   "name": "treasure_clock_set",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44494,
   "name": "treasure_units",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44510,
   "name": "treasure_tens",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44526,
   "name": "treasure_times",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44542,
   "name": "treasure_end",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44549,
   "name": "b_AE05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44559,
   "name": "b_AE0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44604,
   "name": "treasure_result",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44613,
   "name": "b_AE45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44636,
   "name": "arg_AE5C",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44638,
   "name": "treasure_result_none",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44644,
   "name": "arg_AE64",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44646,
   "name": "treasure_result_rows",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44656,
   "name": "b_AE70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44678,
   "name": "treasure_result_bcd",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44732,
   "name": "arg_AEBC",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44734,
   "name": "treasure_result_got",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44740,
   "name": "arg_AEC4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44742,
   "name": "treasure_result_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44752,
   "name": "hero_name_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44753,
   "name": "hero_name_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44760,
   "name": "str_hero_names",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44770,
   "name": "str_valkyrie",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44780,
   "name": "str_wizard",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44788,
   "name": "str_elf",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44794,
   "name": "str_treasures",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44795,
   "name": "str_treasures_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44808,
   "name": "treasures_digit_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44809,
   "name": "treasures_digit_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44810,
   "name": "str_bonus",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44811,
   "name": "str_bonus_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44820,
   "name": "bonus_digit_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44821,
   "name": "bonus_digit_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44824,
   "name": "str_no_bonus",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44825,
   "name": "str_no_bonus_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44834,
   "name": "str_you_lose",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44835,
   "name": "str_you_lose_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44856,
   "name": "escaped",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44857,
   "name": "escaped_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44858,
   "name": "treasures_got",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44859,
   "name": "treasures_got_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44860,
   "name": "rooms_countdown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44861,
   "name": "text_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44862,
   "name": "text_rows_colour_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44865,
   "name": "text_rows_screen",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44866,
   "name": "text_rows_screen_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44869,
   "name": "wait_64_frames",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44874,
   "name": "b_AF4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44880,
   "name": "sprites_hide_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44901,
   "name": "screen_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44914,
   "name": "text_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44965,
   "name": "b_AFA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44974,
   "name": "b_AFAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44999,
   "name": "b_AFC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45033,
   "name": "text_row_players",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45043,
   "name": "text_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45064,
   "name": "print_centred",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45148,
   "name": "b_B05C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45168,
   "name": "text_next_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45195,
   "name": "print_colour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45196,
   "name": "to_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45203,
   "name": "b_B093",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45212,
   "name": "b_B09C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45221,
   "name": "b_B0A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45224,
   "name": "treasure_intro",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45238,
   "name": "arg_B0B6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45240,
   "name": "treasure_intro_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45246,
   "name": "arg_B0BE",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45248,
   "name": "treasure_intro_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45251,
   "name": "arg_B0C3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45253,
   "name": "treasure_intro_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45265,
   "name": "treasure_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45309,
   "name": "r_B0FD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45310,
   "name": "treasure_tune_due",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45311,
   "name": "str_treasure_room",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45329,
   "name": "str_treasure_room_top",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45357,
   "name": "str_treasure_room_bottom",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45385,
   "name": "text_rows_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45392,
   "name": "print_hero_name",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45412,
   "name": "arg_B164",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45413,
   "name": "hero_name_arg_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45414,
   "name": "print_hero_name_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45418,
   "name": "generators_run",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45438,
   "name": "b_B17E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45457,
   "name": "r_B191",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45458,
   "name": "b_B192",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45470,
   "name": "b_B19E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45482,
   "name": "b_B1AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45522,
   "name": "b_B1D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45538,
   "name": "b_B1E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45564,
   "name": "b_B1FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45581,
   "name": "gen_spot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45616,
   "name": "monster_spawn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45627,
   "name": "b_B23B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45689,
   "name": "r_B279",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45690,
   "name": "monster_kinds",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45705,
   "name": "gen_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45713,
   "name": "gen_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45721,
   "name": "gen_kind",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45722,
   "name": "tile_cur_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45723,
   "name": "tile_cur_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45724,
   "name": "gen_cols_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45725,
   "name": "gen_rows_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45726,
   "name": "pad_B29E",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45727,
   "name": "trap_spring",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45737,
   "name": "b_B2A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45750,
   "name": "b_B2B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45757,
   "name": "b_B2BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45763,
   "name": "b_B2C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45770,
   "name": "trap_wall_gone",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45804,
   "name": "b_B2EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45838,
   "name": "b_B30E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45866,
   "name": "b_B32A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45900,
   "name": "b_B34C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45908,
   "name": "wall_unjoin",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45925,
   "name": "b_B365",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45930,
   "name": "r_B36A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45931,
   "name": "wall_join_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45935,
   "name": "doors_open_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45948,
   "name": "door_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45971,
   "name": "r_B393",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45972,
   "name": "b_B394",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45975,
   "name": "b_B397",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45978,
   "name": "b_B39A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45981,
   "name": "b_B39D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46000,
   "name": "b_B3B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46011,
   "name": "b_B3BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46018,
   "name": "b_B3C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46024,
   "name": "j_B3C8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46043,
   "name": "b_B3DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46054,
   "name": "b_B3E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46061,
   "name": "b_B3ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46067,
   "name": "j_B3F3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46086,
   "name": "b_B406",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46097,
   "name": "b_B411",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46104,
   "name": "b_B418",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46110,
   "name": "j_B41E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46129,
   "name": "b_B431",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46140,
   "name": "b_B43C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46147,
   "name": "b_B443",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46153,
   "name": "door_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46180,
   "name": "door_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46207,
   "name": "door_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46226,
   "name": "b_B492",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46229,
   "name": "door_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46248,
   "name": "b_B4A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46251,
   "name": "door_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46296,
   "name": "door_is_door",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46306,
   "name": "r_B4E2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46307,
   "name": "door_pos",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46308,
   "name": "door_pos_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46309,
   "name": "door_pos_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46310,
   "name": "door_pos_2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46311,
   "name": "door_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46313,
   "name": "door_state_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46314,
   "name": "cell_blank",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46359,
   "name": "tile_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46423,
   "name": "idle_timer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46452,
   "name": "b_B574",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46464,
   "name": "r_B580",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46465,
   "name": "idle_doors_open",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46492,
   "name": "idle_walls_exit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46515,
   "name": "tiles_replace",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46527,
   "name": "b_B5BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46552,
   "name": "b_B5D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46562,
   "name": "b_B5E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46570,
   "name": "b_B5EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46579,
   "name": "tile_redraw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46679,
   "name": "idle_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46680,
   "name": "idle_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46681,
   "name": "idle_new",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46682,
   "name": "idle_stage",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46683,
   "name": "idle_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46684,
   "name": "idle_reload",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46685,
   "name": "idle_second",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46687,
   "name": "panel_dirty",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46688,
   "name": "wall_limit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46689,
   "name": "hands_full",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46690,
   "name": "tile_touched",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46691,
   "name": "keys_held",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46692,
   "name": "keys_held_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46693,
   "name": "potions_held",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46694,
   "name": "potions_held_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46695,
   "name": "carry_limit",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46697,
   "name": "amulet_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46699,
   "name": "freeze_p1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46700,
   "name": "freeze_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46701,
   "name": "facing_hold",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46702,
   "name": "facing_hold_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46703,
   "name": "exit_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46705,
   "name": "touch_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46709,
   "name": "b_B675",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46737,
   "name": "b_B691",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46750,
   "name": "b_B69E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46756,
   "name": "touch_note",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46778,
   "name": "pickups",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46783,
   "name": "b_B6BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46829,
   "name": "b_B6ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46835,
   "name": "b_B6F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46839,
   "name": "b_B6F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46842,
   "name": "b_B6FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46848,
   "name": "teleport_try",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46864,
   "name": "r_B710",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46865,
   "name": "pickup_take",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46951,
   "name": "pickup_jump",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46952,
   "name": "pickup_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46953,
   "name": "pickup_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46954,
   "name": "exit_enter",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 46993,
   "name": "r_B791",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46994,
   "name": "trap_set",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 47013,
   "name": "poison_eaten",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 47044,
   "name": "arg_B7C4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47045,
   "name": "poison_name_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47046,
   "name": "poison_eaten_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47052,
   "name": "arg_B7CC",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47054,
   "name": "poison_eaten_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47060,
   "name": "arg_B7D4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47062,
   "name": "poison_eaten_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47077,
   "name": "str_poisoned",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47098,
   "name": "str_poisoned_food",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47114,
   "name": "exits_animate",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47124,
   "name": "trap_wait",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47155,
   "name": "r_B833",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47156,
   "name": "trap_pending",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47157,
   "name": "pickup_routines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47158,
   "name": "pickup_routines_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47187,
   "name": "pickup_sounds",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47202,
   "name": "door_unlock",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47249,
   "name": "score_100",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47250,
   "name": "j_B892",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47272,
   "name": "food_eat",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47285,
   "name": "potion_take",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47309,
   "name": "amulet_take",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47322,
   "name": "unused_potion_take",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47346,
   "name": "key_take",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47370,
   "name": "potion_drop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47387,
   "name": "chest_take",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47399,
   "name": "score_index_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47400,
   "name": "r_B928",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47401,
   "name": "score_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47402,
   "name": "score_lo_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47403,
   "name": "score_mid",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47404,
   "name": "score_mid_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47405,
   "name": "score_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47406,
   "name": "score_hi_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47407,
   "name": "health_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47408,
   "name": "health_lo_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47409,
   "name": "health_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47410,
   "name": "health_hi_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47411,
   "name": "health_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47413,
   "name": "b_B935",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47428,
   "name": "b_B944",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47463,
   "name": "b_B967",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47478,
   "name": "r_B976",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47479,
   "name": "deaths",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47481,
   "name": "b_B979",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47500,
   "name": "b_B98C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47507,
   "name": "amulet_flash",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47509,
   "name": "b_B995",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47538,
   "name": "b_B9B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47550,
   "name": "b_B9BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47564,
   "name": "b_B9CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47568,
   "name": "panel_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47586,
   "name": "r_B9E2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47587,
   "name": "panel_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47593,
   "name": "b_B9E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47718,
   "name": "magic_debounce",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47719,
   "name": "magic_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47750,
   "name": "b_BA86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47780,
   "name": "r_BAA4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47781,
   "name": "magic_use",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47814,
   "name": "r_BAC6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47815,
   "name": "b_BAC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47821,
   "name": "blast_owner",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47822,
   "name": "exit_spin",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47893,
   "name": "b_BB15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47909,
   "name": "r_BB25",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47910,
   "name": "spin_facings",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47918,
   "name": "monsters_run",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47973,
   "name": "b_BB65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48001,
   "name": "b_BB81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48006,
   "name": "b_BB86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48009,
   "name": "r_BB89",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48010,
   "name": "monsters_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48011,
   "name": "monster_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48024,
   "name": "b_BB98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48026,
   "name": "r_BB9A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 48027,
   "name": "blast_hit",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 48044,
   "name": "b_BBAC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48057,
   "name": "b_BBB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48058,
   "name": "b_BBBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48072,
   "name": "b_BBC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48083,
   "name": "monster_on_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48119,
   "name": "unused_sec",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48120,
   "name": "monster_on_screen_out",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 48121,
   "name": "monster_attack",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48141,
   "name": "b_BC0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48152,
   "name": "b_BC18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48172,
   "name": "b_BC2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48174,
   "name": "b_BC2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48187,
   "name": "b_BC3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48201,
   "name": "b_BC49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48222,
   "name": "b_BC5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48265,
   "name": "b_BC89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48283,
   "name": "death_drain",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48310,
   "name": "b_BCB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48327,
   "name": "monster_remove",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 48362,
   "name": "ghost_diagonal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48374,
   "name": "b_BCF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48376,
   "name": "b_BCF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48388,
   "name": "b_BD04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48390,
   "name": "monster_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48431,
   "name": "b_BD2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48465,
   "name": "b_BD51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48493,
   "name": "b_BD6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48520,
   "name": "b_BD88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48539,
   "name": "j_BD9B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 48545,
   "name": "j_BDA1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 48565,
   "name": "unused_clear_flag",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48575,
   "name": "cell_ptrs",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48606,
   "name": "monster_tile_ptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48620,
   "name": "monster_next",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48651,
   "name": "monster_cells_free",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48666,
   "name": "cells_empty",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48684,
   "name": "b_BE2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48726,
   "name": "b_BE56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48749,
   "name": "monster_next_slot",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48750,
   "name": "cell_pos_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48751,
   "name": "cell_pos_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48752,
   "name": "mon_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48768,
   "name": "mon_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48784,
   "name": "monster_aim",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48786,
   "name": "b_BE92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48824,
   "name": "b_BEB8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48854,
   "name": "b_BED6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48861,
   "name": "b_BEDD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48893,
   "name": "b_BEFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48908,
   "name": "b_BF0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48916,
   "name": "b_BF14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48926,
   "name": "b_BF1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48934,
   "name": "b_BF26",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48975,
   "name": "b_BF4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 48979,
   "name": "monster_target",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48995,
   "name": "b_BF63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49005,
   "name": "b_BF6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49014,
   "name": "b_BF76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49022,
   "name": "target_of",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49025,
   "name": "target_far",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49026,
   "name": "target_player",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49027,
   "name": "target_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49029,
   "name": "target_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49031,
   "name": "target_dist",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49032,
   "name": "target_dist_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49033,
   "name": "target_stick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49034,
   "name": "flee_flip",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49035,
   "name": "stick_dirs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49051,
   "name": "monster_facings",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49066,
   "name": "monster_facing_new",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49067,
   "name": "wrap_delta",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49075,
   "name": "r_BFB3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49076,
   "name": "b_BFB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49083,
   "name": "monster_turn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49105,
   "name": "turn_call",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49106,
   "name": "turn_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49107,
   "name": "turn_target_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49119,
   "name": "b_BFDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49122,
   "name": "j_BFE2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 49137,
   "name": "attack_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49138,
   "name": "turn_routines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49139,
   "name": "turn_routines_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 49146,
   "name": "pad_BFFA",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49152,
   "name": "unused_C000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49166,
   "name": "monsters_draw_all",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 49181,
   "name": "b_C01D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49218,
   "name": "r_C042",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 49219,
   "name": "turn_up_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49259,
   "name": "b_C06B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49275,
   "name": "b_C07B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49297,
   "name": "b_C091",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49300,
   "name": "b_C094",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49334,
   "name": "b_C0B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49353,
   "name": "b_C0C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49378,
   "name": "b_C0E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49389,
   "name": "b_C0ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49409,
   "name": "b_C101",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49412,
   "name": "turn_alt_ul",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49413,
   "name": "turn_up_right",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49450,
   "name": "b_C12A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49466,
   "name": "b_C13A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49488,
   "name": "b_C150",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49491,
   "name": "b_C153",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49518,
   "name": "b_C16E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49544,
   "name": "b_C188",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49569,
   "name": "b_C1A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49580,
   "name": "b_C1AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49600,
   "name": "b_C1C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49603,
   "name": "turn_alt_ur",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49604,
   "name": "turn_down_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49642,
   "name": "b_C1EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49657,
   "name": "b_C1F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49678,
   "name": "b_C20E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49681,
   "name": "b_C211",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49717,
   "name": "b_C235",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49726,
   "name": "b_C23E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49745,
   "name": "b_C251",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49763,
   "name": "b_C263",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49786,
   "name": "b_C27A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49789,
   "name": "turn_alt_dl",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49790,
   "name": "turn_down_right",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49825,
   "name": "b_C2A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49840,
   "name": "b_C2B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49861,
   "name": "b_C2C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49864,
   "name": "b_C2C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49900,
   "name": "b_C2EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49909,
   "name": "b_C2F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49928,
   "name": "b_C308",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49946,
   "name": "b_C31A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49969,
   "name": "b_C331",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 49972,
   "name": "turn_alt_dr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49973,
   "name": "turn_probe",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50005,
   "name": "r_C355",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50006,
   "name": "pad_C356",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50007,
   "name": "probe_cell_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50008,
   "name": "probe_cell_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50009,
   "name": "monster_facing",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50010,
   "name": "monster_unplot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50025,
   "name": "cell_unplot",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 50041,
   "name": "b_C379",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50092,
   "name": "monster_hits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50152,
   "name": "b_C3E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50156,
   "name": "b_C3EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50165,
   "name": "monster_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50171,
   "name": "ghost_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50177,
   "name": "unused_C401",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50188,
   "name": "dead_p1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50189,
   "name": "dead_p2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50190,
   "name": "unused_C40E",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50217,
   "name": "blast_monster",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50248,
   "name": "b_C448",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50251,
   "name": "monster_kill",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 50304,
   "name": "b_C480",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50334,
   "name": "monster_shoot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50351,
   "name": "b_C4AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50381,
   "name": "b_C4CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50394,
   "name": "b_C4DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50399,
   "name": "b_C4DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50402,
   "name": "r_C4E2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50403,
   "name": "fire_dist",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50404,
   "name": "lobber_shoot",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 50425,
   "name": "r_C4F9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50426,
   "name": "fight_back",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50481,
   "name": "b_C531",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50484,
   "name": "b_C534",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50486,
   "name": "b_C536",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50490,
   "name": "j_C53A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50510,
   "name": "b_C54E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50521,
   "name": "fight_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50551,
   "name": "b_C577",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50556,
   "name": "facing_stick",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 50564,
   "name": "ghost_touch",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50609,
   "name": "b_C5B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50616,
   "name": "display_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50633,
   "name": "display_on",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50650,
   "name": "vic_bank",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50677,
   "name": "vic_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50698,
   "name": "vic_font",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50716,
   "name": "unused_bitmap_on",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50725,
   "name": "level_build",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50748,
   "name": "j_C63C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 50758,
   "name": "b_C646",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50786,
   "name": "b_C662",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50806,
   "name": "b_C676",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50812,
   "name": "b_C67C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50818,
   "name": "grid_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50821,
   "name": "b_C685",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50837,
   "name": "grid_top_wall",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50841,
   "name": "b_C699",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50848,
   "name": "grid_left_wall",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50867,
   "name": "b_C6B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50887,
   "name": "r_C6C7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 50888,
   "name": "wall_same_kind",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50905,
   "name": "wall_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50954,
   "name": "wall_run",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 50981,
   "name": "b_C725",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50987,
   "name": "b_C72B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 50991,
   "name": "b_C72F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51023,
   "name": "wall_plot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51063,
   "name": "wall_join",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51066,
   "name": "wall_join_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51069,
   "name": "wall_join_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51072,
   "name": "wall_join_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51088,
   "name": "b_C790",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51117,
   "name": "b_C7AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51122,
   "name": "r_C7B2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51123,
   "name": "b_C7B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51130,
   "name": "b_C7BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51153,
   "name": "b_C7D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51163,
   "name": "r_C7DB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51164,
   "name": "wall_neighbour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51210,
   "name": "b_C80A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51239,
   "name": "b_C827",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51257,
   "name": "b_C839",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51259,
   "name": "objects_place",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51327,
   "name": "b_C87F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51347,
   "name": "b_C893",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51367,
   "name": "b_C8A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51372,
   "name": "b_C8AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51381,
   "name": "b_C8B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51396,
   "name": "b_C8C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51399,
   "name": "b_C8C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51407,
   "name": "j_C8CF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 51415,
   "name": "b_C8D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51427,
   "name": "r_C8E3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51428,
   "name": "objects_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51434,
   "name": "b_C8EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51437,
   "name": "place_tile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51466,
   "name": "b_C90A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51473,
   "name": "b_C911",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51480,
   "name": "b_C918",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51488,
   "name": "b_C920",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51494,
   "name": "monster_from_level",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51562,
   "name": "b_C96A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51594,
   "name": "start_here",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51633,
   "name": "wall_unjoin_side",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51636,
   "name": "wall_unjoin_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51639,
   "name": "wall_unjoin_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51642,
   "name": "wall_unjoin_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51650,
   "name": "b_C9C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51681,
   "name": "b_C9E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51686,
   "name": "r_C9E6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 51687,
   "name": "wall_steps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51688,
   "name": "wall_steps_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51703,
   "name": "wall_join_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51704,
   "name": "wall_join_bits_opp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51711,
   "name": "wall_bytes_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51712,
   "name": "level_exits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51713,
   "name": "tiles_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51714,
   "name": "tiles_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51715,
   "name": "wall_kind",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51716,
   "name": "wall_hidden",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51717,
   "name": "wall_neighbour_hidden",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51718,
   "name": "wall_side_hidden",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51719,
   "name": "wall_tiles",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51727,
   "name": "wall_kind_by_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 51731,
   "name": "repeat_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51732,
   "name": "object_tile",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51733,
   "name": "tile_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51734,
   "name": "tile_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51735,
   "name": "tile_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51778,
   "name": "tile_ptrs",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51839,
   "name": "monster_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51851,
   "name": "b_CA8B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51910,
   "name": "b_CAC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 51923,
   "name": "tile_plot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51950,
   "name": "monster_colour_wrapped",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 51962,
   "name": "b_CAFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52021,
   "name": "b_CB35",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52034,
   "name": "colour_plot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52061,
   "name": "monster_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52073,
   "name": "b_CB69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52116,
   "name": "b_CB94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52128,
   "name": "b_CBA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52145,
   "name": "sorcerer_hide",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52162,
   "name": "grid_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52170,
   "name": "b_CBCA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52198,
   "name": "exits_pick_one",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52206,
   "name": "b_CBEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52244,
   "name": "b_CC14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52265,
   "name": "b_CC29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52274,
   "name": "exits_special",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52285,
   "name": "b_CC3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52297,
   "name": "b_CC49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52307,
   "name": "b_CC53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52311,
   "name": "b_CC57",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52319,
   "name": "r_CC5F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52320,
   "name": "deaths_first",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52331,
   "name": "j_CC6B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52338,
   "name": "b_CC72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52346,
   "name": "b_CC7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52350,
   "name": "r_CC7E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52351,
   "name": "is_death",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52359,
   "name": "death_to_front",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52422,
   "name": "unused_jmp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52425,
   "name": "sfx_voice1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52426,
   "name": "sfx_voice2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52427,
   "name": "sfx_voice3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52428,
   "name": "sfx_playing",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52431,
   "name": "sfx_step_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52432,
   "name": "sfx_step_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52433,
   "name": "sfx_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52434,
   "name": "pad_CCD2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52435,
   "name": "sfx_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52462,
   "name": "b_CCEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52487,
   "name": "b_CD07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52490,
   "name": "b_CD0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52516,
   "name": "b_CD24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52541,
   "name": "b_CD3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52544,
   "name": "b_CD40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52570,
   "name": "b_CD5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52595,
   "name": "b_CD73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52598,
   "name": "r_CD76",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 52599,
   "name": "sfx_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52614,
   "name": "b_CD86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52621,
   "name": "b_CD8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52631,
   "name": "unused_sid_setup",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52674,
   "name": "sid_init",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 52699,
   "name": "sfx_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52723,
   "name": "b_CDF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52735,
   "name": "b_CDFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52749,
   "name": "b_CE0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52760,
   "name": "b_CE18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52766,
   "name": "j_CE1E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 52807,
   "name": "sfx_note",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52841,
   "name": "b_CE69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52869,
   "name": "unused_border",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52892,
   "name": "sound_wait",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52895,
   "name": "b_CE9F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 52906,
   "name": "sfx_wait",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 52920,
   "name": "leftover_CEB8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53245,
   "name": "heroes_loaded",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53246,
   "name": "selected_heroes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55299,
   "name": "f_D803",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55339,
   "name": "f_D82B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55379,
   "name": "f_D853",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55419,
   "name": "f_D87B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55459,
   "name": "f_D8A3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55499,
   "name": "f_D8CB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55539,
   "name": "f_D8F3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55552,
   "name": "f_D900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55579,
   "name": "f_D91B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55619,
   "name": "f_D943",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55659,
   "name": "f_D96B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55699,
   "name": "f_D993",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55739,
   "name": "f_D9BB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55779,
   "name": "f_D9E3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55808,
   "name": "f_DA00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55819,
   "name": "f_DA0B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55859,
   "name": "f_DA33",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55899,
   "name": "f_DA5B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55939,
   "name": "f_DA83",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55979,
   "name": "f_DAAB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56019,
   "name": "f_DAD3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56059,
   "name": "f_DAFB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56064,
   "name": "f_DB00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56096,
   "name": "f_DB20",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56100,
   "name": "f_DB24",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56101,
   "name": "f_DB25",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56102,
   "name": "f_DB26",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56113,
   "name": "f_DB31",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56114,
   "name": "f_DB32",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56115,
   "name": "f_DB33",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56116,
   "name": "f_DB34",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56136,
   "name": "f_DB48",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56156,
   "name": "f_DB5C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56176,
   "name": "f_DB70",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56196,
   "name": "f_DB84",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56216,
   "name": "f_DB98",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56220,
   "name": "f_DB9C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56236,
   "name": "f_DBAC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "music_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57347,
   "name": "music_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57354,
   "name": "j_E00A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57364,
   "name": "b_E014",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57373,
   "name": "r_E01D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 57374,
   "name": "music_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57394,
   "name": "b_E032",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57405,
   "name": "j_E03D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57438,
   "name": "b_E05E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57443,
   "name": "b_E063",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57459,
   "name": "j_E073",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57493,
   "name": "music_cmd_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57494,
   "name": "music_cmd_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57501,
   "name": "b_E09D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57518,
   "name": "b_E0AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57526,
   "name": "b_E0B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57534,
   "name": "b_E0BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57542,
   "name": "b_E0C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57550,
   "name": "b_E0CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57573,
   "name": "r_E0E5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 57574,
   "name": "music_note_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57615,
   "name": "b_E10F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57618,
   "name": "b_E112",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57664,
   "name": "b_E140",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57682,
   "name": "j_E152",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57699,
   "name": "b_E163",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57734,
   "name": "b_E186",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57758,
   "name": "b_E19E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57764,
   "name": "j_E1A4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 57818,
   "name": "b_E1DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57827,
   "name": "r_E1E3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 57828,
   "name": "music_setup",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 57835,
   "name": "b_E1EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57852,
   "name": "b_E1FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57882,
   "name": "b_E21A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57915,
   "name": "music_stop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57920,
   "name": "music_silence",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 57922,
   "name": "b_E242",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57936,
   "name": "music_cmd_volume",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57940,
   "name": "music_cmd_ctrl",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57944,
   "name": "music_cmd_ad",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57948,
   "name": "music_cmd_sr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57952,
   "name": "music_cmd_repeat_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57969,
   "name": "b_E271",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57988,
   "name": "b_E284",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 57992,
   "name": "music_cmd_mark_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58003,
   "name": "music_cmd_repeat_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58020,
   "name": "b_E2A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58039,
   "name": "b_E2B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58043,
   "name": "music_cmd_mark_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58054,
   "name": "music_cmd_transpose",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58058,
   "name": "music_cmd_vib_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58062,
   "name": "music_cmd_slide_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58066,
   "name": "music_cmd_slide_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58070,
   "name": "music_cmd_pulse",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58074,
   "name": "music_cmd_gate_time",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58085,
   "name": "b_E2E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58089,
   "name": "music_cmd_arp_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58093,
   "name": "music_cmd_wave",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58104,
   "name": "b_E2F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58108,
   "name": "music_cmd_effect",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58112,
   "name": "music_cmd_slide",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58116,
   "name": "music_cmd_pulse_sweep",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58120,
   "name": "music_cmd_slide_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58124,
   "name": "music_cmd_vib_depth",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58141,
   "name": "music_cmd_sweep_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58145,
   "name": "music_cmd_resonance",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58149,
   "name": "music_cmd_tempo_reset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58153,
   "name": "music_cmd_transpose_add",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58161,
   "name": "music_cmd_volume_add",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58169,
   "name": "music_cmd_arp_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58173,
   "name": "music_cmd_tempo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58189,
   "name": "music_cmd_arp_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58193,
   "name": "music_cmd_fine",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58197,
   "name": "music_cmd_sweep_rate",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58201,
   "name": "music_cmd_length_add",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58209,
   "name": "music_slide_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58223,
   "name": "r_E36F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 58224,
   "name": "music_vibrato",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58266,
   "name": "b_E39A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58279,
   "name": "b_E3A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58283,
   "name": "b_E3AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58298,
   "name": "r_E3BA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 58299,
   "name": "music_waveform",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58318,
   "name": "b_E3CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58335,
   "name": "b_E3DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58338,
   "name": "b_E3E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58344,
   "name": "b_E3E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58347,
   "name": "b_E3EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58353,
   "name": "music_arpeggio",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58364,
   "name": "b_E3FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58379,
   "name": "b_E40B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58397,
   "name": "j_E41D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58401,
   "name": "b_E421",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58404,
   "name": "music_pulse_sweep",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58415,
   "name": "b_E42F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58432,
   "name": "b_E440",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58447,
   "name": "b_E44F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58450,
   "name": "b_E452",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58453,
   "name": "j_E455",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58477,
   "name": "b_E46D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58481,
   "name": "music_pulse_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58502,
   "name": "music_pulse_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58520,
   "name": "j_E498",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58526,
   "name": "r_E49E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 58527,
   "name": "music_slide",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 58551,
   "name": "b_E4B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58566,
   "name": "b_E4C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58574,
   "name": "b_E4CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58589,
   "name": "b_E4DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58604,
   "name": "b_E4EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58614,
   "name": "music_slide_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58633,
   "name": "music_slide_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58649,
   "name": "j_E519",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58655,
   "name": "b_E51F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58664,
   "name": "music_freq_out",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 58677,
   "name": "music_freq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58679,
   "name": "j_E537",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 58689,
   "name": "b_E541",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58709,
   "name": "b_E555",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58737,
   "name": "r_E571",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 58738,
   "name": "b_E572",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 58743,
   "name": "music_next",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 58754,
   "name": "r_E582",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 58755,
   "name": "music_pad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58756,
   "name": "music_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58757,
   "name": "music_tempo_voice",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58758,
   "name": "music_voice_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58759,
   "name": "music_voice_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58760,
   "name": "music_voice_ctrl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58761,
   "name": "music_voice_arp_limit",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58762,
   "name": "music_voice_arp_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58763,
   "name": "music_voice_wave",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58764,
   "name": "music_voice_effect",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58778,
   "name": "music_stream_base_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58779,
   "name": "music_tempo_frac",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58780,
   "name": "music_tempo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58781,
   "name": "music_tempo_reset",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58782,
   "name": "music_slide_mode",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58785,
   "name": "music_target_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58788,
   "name": "music_target_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58791,
   "name": "music_slide_delay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58794,
   "name": "music_note_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58797,
   "name": "music_sweep_max",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58800,
   "name": "music_sweep_step",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58803,
   "name": "music_arp_phase",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58806,
   "name": "music_arp_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58809,
   "name": "music_arp_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58812,
   "name": "music_arp2_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58815,
   "name": "music_arp2_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58818,
   "name": "music_tick",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58821,
   "name": "music_ticks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58824,
   "name": "music_fine",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58827,
   "name": "music_sweep_rate",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58830,
   "name": "music_note_long",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58833,
   "name": "music_sweep_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58836,
   "name": "music_sweep_phase",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58839,
   "name": "music_vib_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58842,
   "name": "music_vib_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58845,
   "name": "music_vib_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58848,
   "name": "music_repeat_a_on",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58851,
   "name": "music_repeat_b_on",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58854,
   "name": "music_transpose",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58857,
   "name": "music_slide_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58860,
   "name": "music_slide_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58863,
   "name": "music_sr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58866,
   "name": "music_ctrl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58869,
   "name": "music_pulse",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58872,
   "name": "music_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58875,
   "name": "music_vib_step",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58878,
   "name": "music_repeat_a_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58881,
   "name": "music_repeat_b_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58884,
   "name": "music_mark_a_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58887,
   "name": "music_mark_a_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58890,
   "name": "music_mark_b_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58893,
   "name": "music_mark_b_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58896,
   "name": "music_work",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58898,
   "name": "music_freq_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58899,
   "name": "music_freq_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58900,
   "name": "music_note_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58903,
   "name": "music_stream_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58906,
   "name": "music_stream_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58909,
   "name": "music_sweep_len",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58912,
   "name": "music_voice_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58914,
   "name": "music_wave_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58920,
   "name": "music_freq_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58921,
   "name": "music_freq_table_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58944,
   "name": "music_gate_time",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58945,
   "name": "music_gate_time_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58946,
   "name": "music_gate_time_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58947,
   "name": "music_commands",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 58948,
   "name": "music_commands_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59013,
   "name": "sid_shadow",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59014,
   "name": "sid_shadow_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59015,
   "name": "sid_shadow_pw_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59016,
   "name": "sid_shadow_pw_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59017,
   "name": "sid_shadow_ctrl",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59018,
   "name": "sid_shadow_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59019,
   "name": "sid_shadow_sr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 59034,
   "name": "music_tempo_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59035,
   "name": "music_tempo_whole",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59036,
   "name": "sid_shadow_res",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59037,
   "name": "sid_shadow_vol",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59038,
   "name": "music_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59039,
   "name": "music_file_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59392,
   "name": "tune_treasure",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59648,
   "name": "tune_treasure_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59904,
   "name": "tune_jingle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61440,
   "name": "sfx_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61441,
   "name": "sfx_table_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61476,
   "name": "sfx_streams",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61696,
   "name": "sfx_streams_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61952,
   "name": "sfx_streams_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62208,
   "name": "sfx_streams_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62443,
   "name": "sfx_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62464,
   "name": "tile_chars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62720,
   "name": "tile_chars_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62976,
   "name": "tile_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62980,
   "name": "tile_colours_walls",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 63180,
   "name": "tile_colours_cracked",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 63232,
   "name": "tile_colours_monsters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65466,
   "name": "KERNAL_SETLFS",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65469,
   "name": "KERNAL_SETNAM",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65475,
   "name": "KERNAL_CLOSE",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65493,
   "name": "KERNAL_LOAD",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65520,
   "name": "KERNAL_PLOT",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65530,
   "name": "hw_vectors",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 2560,
   "type": "line",
   "text": "Level 1's file as it loads into the level buffer ($0A00, file LEVEL 001): the file's length less 2 ($4F), with bit 7 of $0A02 as its ninth bit. A longer level file fills more of the buffer."
  },
  {
   "address": 2561,
   "type": "line",
   "text": "The level header's flags: bit 7 the maze wraps left and right, bit 6 top and bottom, bit 0 shots hurt the other player, bit 1 they stun, bit 2 only one exit (at random), bits 3-5 the maze's look (maze_style). Level 1 has none."
  },
  {
   "address": 2562,
   "type": "line",
   "text": "The level header's wall colour in bits 3-5 (maze_style_colours) and the length's ninth bit in bit 7."
  },
  {
   "address": 2563,
   "type": "line",
   "text": "How many bytes of wall commands follow the header ($0A in level 1)."
  },
  {
   "address": 2564,
   "type": "line",
   "text": "Level 1's wall commands ($0A04-$0A0D): a pair starts a line at a tile (kind in the first byte's top three bits, column and row in the low five), each byte after it extends the line (direction in the top three bits, length - 1 in the low five)."
  },
  {
   "address": 2565,
   "type": "line",
   "text": "The second byte of the wall commands, which wall_same_kind and wall_start read as a pair with the first."
  },
  {
   "address": 2574,
   "type": "line",
   "text": "Level 1's objects ($0A0E-$0A50): run-length coded tiles from the top-left of the grid (a byte from $80 skips tiles, a smaller one is a tile, repeated when the byte after it is below $13); tiles from $40 are monsters, $3F the players' start."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "The file DATATITLE 244, left at $1000 by the title and selection programs (which load it at $6400 and move it): tune data for the music player at $E000, the title music, 18 seconds long. The play program never plays it; the BIT instructions at $9CE2 (power_shot) and $AC65, which hide a load from the code before them, read its byte at $10A9 and the value goes unused."
  },
  {
   "address": 4265,
   "type": "line",
   "text": "A byte inside DATATITLE whose address is also the operand of the BITs at $9CE2 and $AC65, which hide an instruction; those BITs read it and nothing uses the result. The tune data goes on."
  },
  {
   "address": 5000,
   "type": "line",
   "text": "The file PINN232 5000: a cable link for moving memory between this machine and another through the user port, called from BASIC (SYS 5000 receives a block, SYS 5003 receives several, SYS 5006 sends one). The game loads it with its other files and never calls it; it looks like a tool the developers used and left on the disk. Three JMPs: 5000, 5003, 5006."
  },
  {
   "address": 5009,
   "type": "line",
   "text": "SYS 5003,n: receives n blocks, each to the address its own header gives."
  },
  {
   "address": 5030,
   "type": "line",
   "text": "SYS 5006,address,length: sends the block: a nine-byte header from $0402 (its first byte 3, then the length and the address), then the bytes, with the screen blanked and interrupts off; the border colour changes with each byte."
  },
  {
   "address": 5162,
   "type": "line",
   "text": "Sends one byte, inverted, as a frame of bits: each bit is put on CIA 2 port A bit 2 (user port PA2) after the other side has signalled on port B bit 6, with a short delay between bits; the border colour steps on."
  },
  {
   "address": 5256,
   "type": "line",
   "text": "A short delay (12 loops) between bits."
  },
  {
   "address": 5262,
   "type": "line",
   "text": "Takes a number from the BASIC statement into A (low byte, from $65) and Y (high, from $64), by calling two BASIC ROM routines, $AE86 and $BC9B. What those do was not checked here: the snapshot holds the RAM beneath the ROM, where the game has its own code."
  },
  {
   "address": 5273,
   "type": "line",
   "text": "SYS 5000,address: receives a block. The nine-byte header comes first, into $0402; a non-zero address from the statement replaces the header's; then the bytes, to that address, with the screen blanked and interrupts off."
  },
  {
   "address": 5276,
   "type": "line",
   "text": "The block receive for an address in A/Y (pinn_receive_many calls it with 0, the header's own address)."
  },
  {
   "address": 5409,
   "type": "line",
   "text": "Receives one byte: raises the handshake on port B bit 1, waits for the start bit on port B bit 0, then shifts in the bits from port B bit 0 into $040B, and inverts the result; the border colour steps on."
  },
  {
   "address": 5476,
   "type": "line",
   "text": "A short delay (13 loops) between received bits."
  },
  {
   "address": 5482,
   "type": "line",
   "text": "A longer delay (256 short ones) before a block is sent."
  },
  {
   "address": 5491,
   "type": "line",
   "text": "The rest of the file PINN232 5000 after its code: 141 bytes in the pattern of unwritten memory, saved with it."
  },
  {
   "address": 18432,
   "type": "line",
   "text": "The first of the three maze fonts (font select 2, from the file GAUNT CHR $4800): 256 multicolour glyphs. $00 is the floor and $01-$5A the maze's other pieces (the walls' brick joins, doors, treasure, food, potions, keys, generators, the trap, the transporter, the exits), four glyphs to a tile (tile_chars). $5B looks like floor and marks a cell as occupied (cell_mark). The rest are the monsters, four glyphs to a facing: the lobber $5C-$5F (one picture for every facing), ghosts $60-$7F, grunts $80-$9F, demons $A0-$BF, sorcerers $C0-$DF, Death $E0-$FF. panel_flash cycles the three fonts, which differ in the monsters' glyphs and in the transporter ($34-$37), the trap ($38-$3B) and two of the treasure chest's glyphs ($1A, $1B), so all of these animate at once."
  },
  {
   "address": 18440,
   "type": "line",
   "text": "Glyphs 1-12 of the first maze font, which maze_style rewrites per level from one of the style blocks at $6408-$6567 (the walls' look)."
  },
  {
   "address": 18800,
   "type": "line",
   "text": "Glyphs $2E and $2F of the first maze font, which hidden_potion_place rewrites with the hidden potion's picture."
  },
  {
   "address": 19456,
   "type": "line",
   "text": "The first maze font's glyphs $80-$FF: grunts, demons, sorcerers and Death, frame one."
  },
  {
   "address": 20480,
   "type": "line",
   "text": "The second maze font (font select 4): the same walls and floor, with the monsters, the transporter, the trap and the chest's glyphs $1A-$1B in their second frame."
  },
  {
   "address": 20488,
   "type": "line",
   "text": "Glyphs 1-12 of the second maze font, rewritten by maze_style."
  },
  {
   "address": 20848,
   "type": "line",
   "text": "The hidden potion's glyphs in the second maze font."
  },
  {
   "address": 21504,
   "type": "line",
   "text": "The second maze font's glyphs $80-$FF: grunts, demons, sorcerers and Death, frame two."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "The third maze font (font select 6): the monsters, the transporter, the trap and the chest's glyphs $1A-$1B in their third frame."
  },
  {
   "address": 22536,
   "type": "line",
   "text": "Glyphs 1-12 of the third maze font, rewritten by maze_style."
  },
  {
   "address": 22896,
   "type": "line",
   "text": "The hidden potion's glyphs in the third maze font."
  },
  {
   "address": 23552,
   "type": "line",
   "text": "The third maze font's glyphs $80-$FF: grunts, demons, sorcerers and Death, frame three."
  },
  {
   "address": 24576,
   "type": "line",
   "text": "The panel and message font (font select 8 at $6000, hires): glyph n draws ASCII n + $20 for letters and digits; its own glyphs are the inventory icons ($01-$0F), SCORE ($1A-$1F), ELF ($3B-$3E), the GAUNTLET logo ($40-$6F), WARRIOR ($70-$77), and the big letters of the LEVEL and TREASURE ROOM titles (top halves from $C1, bottom halves from $E1)."
  },
  {
   "address": 25600,
   "type": "line",
   "text": "The panel font's glyphs $80-$FF; maze_style takes its wall styles from here ($6408, $6468, $6508) and hidden_potion_place its potion pictures ($6580)."
  },
  {
   "address": 25704,
   "type": "line",
   "text": "One of maze_style's 96-byte wall styles."
  },
  {
   "address": 25984,
   "type": "line",
   "text": "The six special potions' pictures, 16 bytes (two glyphs) each, for hidden_potion_place."
  },
  {
   "address": 26624,
   "type": "line",
   "text": "Sprite shapes $A0-$BF (in video bank 1): $A0 the solid block the side masks use, $A1 a short bar, $A2-$AB the digits 0-9 (the level number and the treasure clock), $AC-$AF a lobbed rock rising, $B0-$B5 growing clouds, $B6-$B7 striped bars, $B8-$BF a fireball in eight directions."
  },
  {
   "address": 27648,
   "type": "line",
   "text": "Shapes $B0-$BF: the clouds, the bars and (from $6E00) the fireball, which the start-up copied there from $7400."
  },
  {
   "address": 28160,
   "type": "line",
   "text": "The fireball's eight shapes ($B8-$BF), copied here from the font file at load (shapes_7400_to_6E00)."
  },
  {
   "address": 28416,
   "type": "line",
   "text": "The last four fireball shapes."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "Player one's hero's sprite shapes $C0-$DF, copied from PLYRS.SPR at load (hero_copy_chars): $C0-$D7 walking, eight facings in three frames (anim_frames 0, 8, 16), and $D8-$DF the hero's shot in eight directions (put back from $1800 at each level start)."
  },
  {
   "address": 28704,
   "type": "line",
   "text": "The hero's shapes from $C0 + 32 bytes on: the rest of the first walking frames."
  },
  {
   "address": 29696,
   "type": "line",
   "text": "Shapes $D0-$D7, the hero's third walking frame."
  },
  {
   "address": 29952,
   "type": "line",
   "text": "Shapes $D4-$D7."
  },
  {
   "address": 30208,
   "type": "line",
   "text": "Shapes $D8-$DF: player one's hero's shot in eight directions, put here from $1800 at each level start (shapes_from_1800); the end of exit_spin shows them as the player shrinking into the exit."
  },
  {
   "address": 30464,
   "type": "line",
   "text": "The last four of player one's shot shapes."
  },
  {
   "address": 30720,
   "type": "line",
   "text": "Player two's hero's sprite shapes $E0-$FF, laid out like player one's: $E0-$F7 walking, $F8-$FF the shot."
  },
  {
   "address": 31744,
   "type": "line",
   "text": "Shapes $F0-$F7: player two's third walking frame."
  },
  {
   "address": 32256,
   "type": "line",
   "text": "Shapes $F8-$FF: player two's shot in eight directions."
  },
  {
   "address": 32512,
   "type": "line",
   "text": "The last four of player two's shot shapes."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "The game's entry, where the selection program's JMP $8000 lands: a jump over thirteen zero bytes to the start-up at $8013."
  },
  {
   "address": 32771,
   "type": "line",
   "text": "Thirteen zero bytes between the entry jump and the start-up; nothing in the game reads them."
  },
  {
   "address": 32787,
   "type": "line",
   "text": "The start-up, run once after the hand-over. Turns the music player off, sets level_number to 1 and installs the interrupts. Unless the files are already in (heroes_loaded), hands the interrupts to the KERNAL, blanks the screen, loads all eight files (load_files), takes the interrupts back and picks level 8's file at random. Then starts CIA 1's timers, blanks the screen, copies the heroes' graphics (heroes_load_shapes), clears the screens, starts the tune player, resets the sound effects, starts the side masks, resets the game (game_reset), waits, sets multicolour text, video bank 1 and screen $4000, calls vic_font with 8 (which its AND #$07 turns into character base 0, $4000: the panel's font, $6000, is set each frame by the raster interrupt at $8623), colours the panel, sets the treasure-room countdown to 5, shows the screen, and falls into game_start."
  },
  {
   "address": 32913,
   "type": "line",
   "text": "A new game: clears the screens, counts from level 1, waits for a first player to press fire (wait_first_player), draws the panel and its digits, and goes on to the first level (level_begin). game_over_check comes back here when every player is gone."
  },
  {
   "address": 32933,
   "type": "line",
   "text": "Starts a level: no scroll, the pass counter cleared, the screen cleared; loads the level (level_start), builds it (level_build), picks the exits (exits_pick_one), moves Death to the front (deaths_first), draws the grid, sets the special exits, draws the monsters, hides a potion and scatters the extras, places the screen and players (level_place_players), restores the heroes' shapes (shapes_from_1800), sets the fine scrolls and the screens, draws the maze, moves the monsters once, waits for line $70 and plays sound 3; then runs the treasure-room loop ($8120) for a treasure room or the play loop ($818B) for any other level."
  },
  {
   "address": 33056,
   "type": "line",
   "text": "One pass of a treasure room: waits for line $40, redraws the maze and its colours, counts the pass ($824B), fires and moves the shots against tiles, players and monsters, and on a pass with no change of scroll starts the room's tune (treasure_start), the pickups and the panel; then joins, the amulet, the clock (treasure_clock) and the leave timers. When the clock runs out the room ends (treasure_end); when every player in it has left by its exit, the next level begins."
  },
  {
   "address": 33163,
   "type": "line",
   "text": "One pass of an ordinary level: waits for line $40, redraws the maze and its colours, counts the pass ($824B), fires the players' shots, and on a pass with no change of scroll: the shots against tiles, players and monsters, the magic keys, the generators, the monsters, a pending trap, the pickups, the doors, the panel, the amulet, the idle timer, joining players and the leave timers. While a player in the game has not left, it loops; then game_over_check, and the next level."
  },
  {
   "address": 33186,
   "type": "line",
   "text": "Part of the play loop (the scroll test). Its address is also the operand of a BIT at $CE68 that hides an instruction, which is why it carries a symbol."
  },
  {
   "address": 33268,
   "type": "line",
   "text": "Sets the frame flag $8264 and waits for raster line $40 (wait_raster); clears $8248. Used between steps of the start-up and screen changes to let a frame pass."
  },
  {
   "address": 33284,
   "type": "line",
   "text": "Resets per-level state before play starts: all sprites enabled in the copy $9111, the two players' status bytes $9120/$9121 cleared of bits 6 and 7, $912C/$912D set to $C0/$E0, and the counters at $B66B/$B66C, $AF38-$AF3B, $B4E7, $B4E9 and $B65A cleared; $B65B is reloaded from $B65C."
  },
  {
   "address": 33351,
   "type": "line",
   "text": "Counted up by the raster interrupt every frame; wait_64_frames waits on it, and routines use it to run every fourth or 64th frame."
  },
  {
   "address": 33352,
   "type": "line",
   "text": "A second frame counter, cleared by wait_frame_40."
  },
  {
   "address": 33353,
   "type": "line",
   "text": "Set while the tune player should run from the raster interrupt (level_intro, treasure_start)."
  },
  {
   "address": 33354,
   "type": "line",
   "text": "The monster slot being handled."
  },
  {
   "address": 33355,
   "type": "line",
   "text": "Counts the main loop's passes in a level; monsters_run, generators_run and others use its low bits to spread their work over passes."
  },
  {
   "address": 33356,
   "type": "line",
   "text": "Counted up every frame by the raster interrupt; exit_enter clears $824C,x (this and the next byte) for a player going into an exit."
  },
  {
   "address": 33357,
   "type": "line",
   "text": "Counted up every frame with $824C."
  },
  {
   "address": 33358,
   "type": "line",
   "text": "The index of the last monster in the table ($FF for none): up to $BF, 192 monsters."
  },
  {
   "address": 33360,
   "type": "line",
   "text": "The screen being shown, as $D018's high nibble: $00 for $4000, $10 for $4400."
  },
  {
   "address": 33361,
   "type": "line",
   "text": "The maze font, as $D018's bits 1-3: 2, 4 or 6 ($4800, $5000, $5800), cycled by panel_flash; 8 for the panel font at $6000 on the message screens."
  },
  {
   "address": 33362,
   "type": "line",
   "text": "The value raster_arm writes to $D011 (with the fine scroll ORed in); display_on and display_off set its bit 4."
  },
  {
   "address": 33363,
   "type": "line",
   "text": "panel_flash's countdown between font changes."
  },
  {
   "address": 33364,
   "type": "line",
   "text": "panel_flash's step through the font cycle."
  },
  {
   "address": 33365,
   "type": "line",
   "text": "The maze font selects panel_flash cycles through: 2 4 2 6 (then a spare 0)."
  },
  {
   "address": 33370,
   "type": "line",
   "text": "The maze's second colour ($D022), dark grey $0B, white during a potion's blast."
  },
  {
   "address": 33371,
   "type": "line",
   "text": "A work byte many routines use."
  },
  {
   "address": 33372,
   "type": "line",
   "text": "A second work byte."
  },
  {
   "address": 33373,
   "type": "line",
   "text": "A third work byte (direction bits in the scroll and wall tests)."
  },
  {
   "address": 33374,
   "type": "line",
   "text": "The directions the walls block for the player being moved (block_dirs)."
  },
  {
   "address": 33375,
   "type": "line",
   "text": "Raised when the screen has scrolled a whole cell; the raster interrupt then lets the main loop redraw ($8264)."
  },
  {
   "address": 33376,
   "type": "line",
   "text": "Read and cleared with redraw_due by the raster interrupt; nothing in the traced code sets it."
  },
  {
   "address": 33377,
   "type": "line",
   "text": "A copy of freeze_p1 taken when the players are read."
  },
  {
   "address": 33378,
   "type": "line",
   "text": "Set when a coarse scroll step has finished; scroll_decide waits on it."
  },
  {
   "address": 33379,
   "type": "line",
   "text": "scroll_decide's countdown while nothing scrolls."
  },
  {
   "address": 33380,
   "type": "line",
   "text": "The raster interrupt's go-ahead for the main loop (wait_raster waits on it)."
  },
  {
   "address": 33381,
   "type": "line",
   "text": "A spare byte after main_go."
  },
  {
   "address": 33382,
   "type": "line",
   "text": "The scroll's X in 2-pixel units: the world X of the screen's left edge."
  },
  {
   "address": 33383,
   "type": "line",
   "text": "The scroll's Y in 2-pixel units."
  },
  {
   "address": 33384,
   "type": "line",
   "text": "The hardware IRQ handler ($FFFE). Saves A, X and Y; when the video chip reports a raster interrupt it jumps through $0314 to whichever raster handler the chain has installed (raster_masks, raster_frame); any other interrupt returns at once through irq_exit."
  },
  {
   "address": 33401,
   "type": "line",
   "text": "Common exit of every interrupt handler: restores Y, X and A and returns from the interrupt."
  },
  {
   "address": 33407,
   "type": "line",
   "text": "The NMI handler ($FFFA): a bare RTI, so RESTORE does nothing during play."
  },
  {
   "address": 33408,
   "type": "line",
   "text": "Installs the game's own interrupt handling: masks both CIAs' interrupts and acknowledges them, points the hardware IRQ vector $FFFE at irq_entry ($8268) and the NMI vector $FFFA at nmi_rti ($827F), sets the processor port to $35 (RAM at $A000 and $E000, I/O at $D000), enables the raster interrupt, starts the mask-sprite chain (sprites_init_masks), re-enables interrupts and restarts CIA 1's timers (cia_timers_start). Called twice by the start-up and from $99FD."
  },
  {
   "address": 33467,
   "type": "line",
   "text": "Hands interrupts back to the KERNAL before a disk load: masks both CIAs, stops their timers, sets CIA 1's timer A latch to $4025, disables the raster interrupt and every sprite, clears the sprite-enable copy $9111, points $0314 at the KERNAL's $EA31 and banks the KERNAL ROM in ($01 = $36). irq_install undoes it."
  },
  {
   "address": 33536,
   "type": "line",
   "text": "Fills colour RAM ($D800-$DBFF) and both screens ($4000-$47FF) with zero."
  },
  {
   "address": 33579,
   "type": "line",
   "text": "The last column of each player's panel block in the panel rows: $0F for player one, $1F for player two."
  },
  {
   "address": 33581,
   "type": "line",
   "text": "Four bytes beside panel_columns: $00 $10 $0F $1F. $832D,x is read by $A655 and $B9E9, and $832F by $B90D."
  },
  {
   "address": 33583,
   "type": "line",
   "text": "The column of the first potion icon in each player's block ($0F and $1F): potion_take puts a new potion's icon at $439C + this less the potions already held, so icons fill leftwards from here, and potion_drop clears the last one."
  },
  {
   "address": 33585,
   "type": "line",
   "text": "The status panel's text, ASCII with the panel font's own glyphs: four sixteen-byte rows of hero names, in hero order 0 Warrior (glyphs $90-$97, drawn as one word), 1 Valkyrie, 2 Wizard, 3 Elf (glyphs $5B-$5E). panel_draw_players picks the row with the hero number times sixteen."
  },
  {
   "address": 33649,
   "type": "line",
   "text": "\" SCORE  HEALTH \": the SCORE word is the panel font's glyphs $3A-$3F."
  },
  {
   "address": 33665,
   "type": "line",
   "text": "\" 000000   2000 \": the score and health a player starts with, as the panel shows them."
  },
  {
   "address": 33681,
   "type": "line",
   "text": "Sixteen spaces, the panel's fourth row."
  },
  {
   "address": 33697,
   "type": "line",
   "text": "The four rows panel_press_fire_draw puts in an empty player's block, as glyph numbers: the GAUNTLET logo (glyphs $41-$5F) and \"PRESS FIRE\" ($30 $32 $25 $33 $33, $26 $29 $32 $25)."
  },
  {
   "address": 33713,
   "type": "line",
   "text": "The second row of panel_press_fire: the logo's lower half."
  },
  {
   "address": 33729,
   "type": "line",
   "text": "The third row of panel_press_fire: the logo's tail."
  },
  {
   "address": 33745,
   "type": "line",
   "text": "The fourth row of panel_press_fire: \"PRESS FIRE\"."
  },
  {
   "address": 33761,
   "type": "line",
   "text": "Eighty bytes after panel_press_fire: the same logo and PRESS FIRE rows again, with $40 in place of $00 and $20. Nothing in the traced code reads them."
  },
  {
   "address": 33841,
   "type": "line",
   "text": "Draws the status panel for each player who is in the game ($9120,x not zero) and whose pair $B663,x/$B665,x is zero: four rows of sixteen characters from the hero's name row (hero_names, sixteen bytes per hero, chosen by $911C,x), the SCORE/HEALTH legend, the starting digits and a blank row, each byte less $20 (the panel font draws ASCII less $20), into the panel at $4324 + the player's column ($832B,x: $0F for player one, $1F for player two). Then points sprites 2-7 at shape $A1 ($43FA-$43FF)."
  },
  {
   "address": 33889,
   "type": "line",
   "text": "The low byte of the hero_names address in panel_draw_players' first LDA, rewritten with the hero's row."
  },
  {
   "address": 33890,
   "type": "line",
   "text": "The high byte of that address, rewritten too; the rest of panel_draw_players' copy loop follows."
  },
  {
   "address": 33954,
   "type": "line",
   "text": "For each player not in the game ($9120,x zero), copies panel_press_fire's four rows of sixteen glyphs into that player's block of the panel (column from panel_columns)."
  },
  {
   "address": 34007,
   "type": "line",
   "text": "Sets the maze's background colours ($D021 black, $D022 dark grey $0B, $D023 white) and colours each active player's panel block with the hero's colour (hero_colours, $9114) in colour RAM $DB20-$DBBF; sets the sprite multicolours ($D025 light red $0A, $D026 white)."
  },
  {
   "address": 34084,
   "type": "line",
   "text": "The Y position of the two side-mask sprites in each of the four raster bands: $2E, $58, $82, $AC."
  },
  {
   "address": 34088,
   "type": "line",
   "text": "The raster line of the first mask band, $2A."
  },
  {
   "address": 34089,
   "type": "line",
   "text": "The raster line of each next mask band's interrupt: $54, $7E, $A0, $CB; the last is where raster_frame takes over."
  },
  {
   "address": 34093,
   "type": "line",
   "text": "Which of the four mask bands raster_masks is on (0-3)."
  },
  {
   "address": 34094,
   "type": "line",
   "text": "Sets up the two black side masks: sprites 0 and 1 in colour 0 at X $1F and $138, stretched vertically, both pointing at the solid shape $A0 ($6800) in either screen ($43F8/$43F9, $47F8/$47F9); enables the sprites in $9111; arms CIA 1's interrupts, waits for a frame and starts the raster chain (raster_arm)."
  },
  {
   "address": 34169,
   "type": "line",
   "text": "The raster handler that follows the mask bands, entered on alternate interrupts through $864C. On one: acknowledges, steps the frame counters $8247/$8248, calls $B933 on every 64th frame or whenever $C40C/$C40D is not zero, then $B977 and frame_tasks; raises the main loop's flag $8264 and resets $D022 from $825A when a coarse scroll step has finished ($825F/$8260); re-arms the chain (raster_arm); calls $92BF, $915C and $91CC; restores the colours $D021/$D023; calls $A036 when $8249 is set, and $CCD3. On the other (b_85FB): waits for line $CF, blanks the display, turns off the sprites and their colours, switches $D018 to the panel ($08: screen $4000, font $6000), and at line $D6 sets 25-row text mode and 40-column hires ($D016 $18) for the status panel; then asks for line $F8."
  },
  {
   "address": 34380,
   "type": "line",
   "text": "Toggled by raster_frame on each entry: 0 runs the frame work, 1 the panel split."
  },
  {
   "address": 34381,
   "type": "line",
   "text": "The work done once a frame from the raster interrupt: panel_flash $8C7C, $9274, $A768, $92D9, scroll_step, scroll_decide, scroll_limit."
  },
  {
   "address": 34403,
   "type": "line",
   "text": "Raster handler for the side masks: moves sprites 0 and 1 to the next band's Y (mask_y) and asks for the next band's line (mask_lines); after the fourth band points $0314 at raster_frame."
  },
  {
   "address": 34475,
   "type": "line",
   "text": "Starts the frame's raster chain: points $0314 at raster_masks, asks for line mask_first_line, sets $D011 from $8252 and the vertical scroll $882E, $D016 to multicolour with the horizontal scroll $882F, enables the raster interrupt, and sets $D018 from the screen in front ($8250) and the maze font ($8251)."
  },
  {
   "address": 34531,
   "type": "line",
   "text": "Six bytes no traced code reaches: SEI, JSR wait_frame_40, CLI, RTS."
  },
  {
   "address": 34537,
   "type": "line",
   "text": "Stops the screen scrolling in a direction the two players disagree on: with both sticks' direction bits ($8EB2, $8EB3) XORed, a vertical (or horizontal) pair that differs in both bits marks that axis as not to scroll in scroll_dir ($8837 bits 0-1 or 2-3 set)."
  },
  {
   "address": 34606,
   "type": "line",
   "text": "Decides this frame's scrolling and reads the players. With no scroll asked (scroll_dir $0F) it counts $8263 down, raising $825F every fourth frame, and reads the players every eighth. With a scroll asked it returns until the coarse step in progress is done ($8262), adjusts the vertical fine scroll on the diagonals 9 and 6, then reads the players: notes the map position ($8831/$8833 into $8832/$8834), scans the keyboard (keys_scan), takes player one's stick from $8821 and player two's from $DC00 into $8EB0/$8EB1, and their direction into $8EB2/$8EB3 ($0F while fire is held, ORed with $B66B/$B66C); then calls $AC96, $931E, $93F9 and $9638 with scroll_dir reset to $0F. $8262 is cleared while either player pushes a direction."
  },
  {
   "address": 34775,
   "type": "line",
   "text": "Reads the whole keyboard matrix: each of the eight rows (key_rows) is driven low on CIA 1 port A and its columns read from port B into keys_state ($8821-$8828)."
  },
  {
   "address": 34803,
   "type": "line",
   "text": "Thirty bytes no traced code reaches: LDA $8821, ORA each of the next seven rows, AND #$1F, STA $8EB1, RTS."
  },
  {
   "address": 34833,
   "type": "line",
   "text": "The row-select bytes for keys_scan ($7F to $FE), then the eight single-bit masks $01-$80."
  },
  {
   "address": 34849,
   "type": "line",
   "text": "The keyboard matrix as keys_scan last read it, one byte per row (row 7 first, $8821 = the row with SPACE; $8828 = row 0 with F1). The player-one joystick also shows in $8821."
  },
  {
   "address": 34850,
   "type": "line",
   "text": "keys_state's byte for keyboard row 6 (right SHIFT among them), the magic test's check against joystick one."
  },
  {
   "address": 34855,
   "type": "line",
   "text": "keys_state's byte for keyboard row 1 (the 4 and Z keys), the check against joystick one for player two's magic keys."
  },
  {
   "address": 34856,
   "type": "line",
   "text": "keys_state's byte for keyboard row 0: F1, F3, F5, F7, player two's magic keys."
  },
  {
   "address": 34862,
   "type": "line",
   "text": "The vertical fine scroll, even values 0-6, ORed into $D011."
  },
  {
   "address": 34863,
   "type": "line",
   "text": "The horizontal fine scroll, even values 0-6, ORed into $D016."
  },
  {
   "address": 34864,
   "type": "line",
   "text": "Counts the 2-pixel steps of the scroll in progress; at zero the coarse step is done ($8262 raised)."
  },
  {
   "address": 34865,
   "type": "line",
   "text": "The maze map column at the screen's left edge (0-63)."
  },
  {
   "address": 34866,
   "type": "line",
   "text": "map_x as it was when the scroll began."
  },
  {
   "address": 34867,
   "type": "line",
   "text": "The maze map row at the screen's top (0-63)."
  },
  {
   "address": 34868,
   "type": "line",
   "text": "map_y as it was when the scroll began."
  },
  {
   "address": 34869,
   "type": "line",
   "text": "Two bytes between map_y_prev and scroll_dir that no instruction refers to: $24 $14, as gauntprog loads them."
  },
  {
   "address": 34871,
   "type": "line",
   "text": "The direction the screen scrolls in this frame, as joystick bits (active low): $0F is none."
  },
  {
   "address": 34872,
   "type": "line",
   "text": "ORed into scroll_dir by scroll_step; cleared each time the players are read."
  },
  {
   "address": 34873,
   "type": "line",
   "text": "scroll_dir as the main loop last saw it; the loop skips the slower work on a frame whose direction changed."
  },
  {
   "address": 34874,
   "type": "line",
   "text": "Moves the screen 2 pixels in the direction scroll_dir gives: one of eight routines (up, down, left, right and the diagonals) adjusts the fine scrolls, the counters $8266/$8267 and the steps left; when a fine scroll wraps it moves map_x or map_y by one and raises $825F so that the main loop redraws the maze."
  },
  {
   "address": 34959,
   "type": "line",
   "text": "Fine scroll X up by 2; when it wraps to 6 the map moves one column (map_x down)."
  },
  {
   "address": 34997,
   "type": "line",
   "text": "Fine scroll X down by 2; when it wraps to 0 the map moves one column (map_x up)."
  },
  {
   "address": 35035,
   "type": "line",
   "text": "Both fine scrolls down by 2; at 0 the map moves right and down."
  },
  {
   "address": 35088,
   "type": "line",
   "text": "X fine scroll down and Y up; at 0 the map moves right and up (Y from diag_y)."
  },
  {
   "address": 35145,
   "type": "line",
   "text": "Fine scroll Y up by 2; at 6 the map moves up a row."
  },
  {
   "address": 35183,
   "type": "line",
   "text": "Fine scroll Y down by 2; at 0 the map moves down a row."
  },
  {
   "address": 35221,
   "type": "line",
   "text": "Both fine scrolls up by 2; at 6 the map moves left and up."
  },
  {
   "address": 35274,
   "type": "line",
   "text": "X fine scroll up and Y down; at 6 the map moves left and down (Y from diag_y)."
  },
  {
   "address": 35331,
   "type": "line",
   "text": "The vertical fine scroll that goes with each horizontal one on a diagonal step: 7 7 5 5 3 3 1 1."
  },
  {
   "address": 35339,
   "type": "line",
   "text": "Redraws the maze into the screen behind the one on show and swaps them: works out the map address of the top-left cell ($2000 + map_y x 64 + map_x), rewrites the operands of twenty LDA/STA pairs (one per screen row, offsets from maze_row_ops), and copies 33 columns of 20 rows from the 64 x 64 map to the screen at column 3; the map wraps at its edges through map_wrap_x. Draws into $4000 or $4400 by $FF, flipping it, and sets $8250 so that the raster chain shows the new screen."
  },
  {
   "address": 35449,
   "type": "line",
   "text": "The operand of maze_draw's LDY map_wrap_x,X, rewritten with map_x so that the copy starts at the screen's left column."
  },
  {
   "address": 35452,
   "type": "line",
   "text": "The low byte of the first row's source in maze_draw's copy loop (the character map at $3000)."
  },
  {
   "address": 35453,
   "type": "line",
   "text": "The high byte of that source, then the first row's STA."
  },
  {
   "address": 35458,
   "type": "line",
   "text": "The second row's source operand, low byte; each row's pair of operands is rewritten by maze_draw through maze_row_ops."
  },
  {
   "address": 35459,
   "type": "line",
   "text": "The rest of maze_draw's unrolled copy into the screen at $4000: twenty rows of LDA/STA pairs."
  },
  {
   "address": 35575,
   "type": "line",
   "text": "The second half of maze_draw: the same copy into the screen at $4400."
  },
  {
   "address": 35661,
   "type": "line",
   "text": "The same column operand in the copy into the screen at $4400."
  },
  {
   "address": 35664,
   "type": "line",
   "text": "The first row's source, low byte, for the $4400 copy."
  },
  {
   "address": 35665,
   "type": "line",
   "text": "Its high byte."
  },
  {
   "address": 35670,
   "type": "line",
   "text": "The second row's source, low byte, for the $4400 copy."
  },
  {
   "address": 35671,
   "type": "line",
   "text": "The rest of the unrolled copy into the screen at $4400."
  },
  {
   "address": 35787,
   "type": "line",
   "text": "The offset of each row's LDA/STA pair inside the copy loops, $72 down to $00 in sixes; maze_draw rewrites each pair's operands through it."
  },
  {
   "address": 35807,
   "type": "line",
   "text": "Waits for the raster interrupt's flag $8264, clears it, then waits until the beam is on the line in A (in the top 256 lines)."
  },
  {
   "address": 35835,
   "type": "line",
   "text": "Copies the colour of each visible maze cell into colour RAM: the same 33 x 20 window as maze_draw, read from the colour map at $2000 + offset (the operands are set by maze_draw) into $D803 onward."
  },
  {
   "address": 35838,
   "type": "line",
   "text": "The column operand in maze_colours' LDY map_wrap_x,X."
  },
  {
   "address": 35841,
   "type": "line",
   "text": "The low byte of the first row's source in maze_colours (the colour map at $2000)."
  },
  {
   "address": 35842,
   "type": "line",
   "text": "The high byte of maze_colours' first source address, in the colour map."
  },
  {
   "address": 35847,
   "type": "line",
   "text": "The second row's source operand, low byte."
  },
  {
   "address": 35848,
   "type": "line",
   "text": "The rest of maze_colours' unrolled copy into colour RAM: twenty rows."
  },
  {
   "address": 35964,
   "type": "line",
   "text": "While the maze font select $8251 is below 8: every eighth call steps $8254 and sets $8251 from panel_font_cycle ($8255: 2 4 2 6), so the maze's characters change font in a four-step cycle; and every fourth frame ($8247) advances the animation step $9124,x (0-3) of each player whose direction bits are not $0F."
  },
  {
   "address": 36029,
   "type": "line",
   "text": "Eight bytes no traced code reaches: wait while bit 4 of $DC01 (player one's fire) is high."
  },
  {
   "address": 36037,
   "type": "line",
   "text": "Chooses the maze's look from the level header: bits 3-5 of $0A01 pick a 96-byte block of glyphs (from maze_style_src: $6468, $6408 or $6508) copied into the three fonts at $4808, $5008 and $5808; bits 3-5 of $0A02 pick a colour (maze_style_colours) written over $F604-$F643 and $F6CC-$F6D7."
  },
  {
   "address": 36060,
   "type": "line",
   "text": "The low byte of maze_style's glyph source, rewritten from maze_style_src."
  },
  {
   "address": 36061,
   "type": "line",
   "text": "Its high byte; the rest of maze_style follows."
  },
  {
   "address": 36103,
   "type": "line",
   "text": "Six colours for maze_style: $0A $0D $0E $0C $0F $0B."
  },
  {
   "address": 36109,
   "type": "line",
   "text": "Five addresses for maze_style's glyph copy: $6468, $6408, $6508, $6408, $6508."
  },
  {
   "address": 36110,
   "type": "line",
   "text": "The high bytes of maze_style_src's addresses (read as the second of each pair)."
  },
  {
   "address": 36119,
   "type": "line",
   "text": "Starts CIA 1's timers as a free-running pair: timer A loaded from the frame counter $8247 (both bytes) and run continuously ($DC0E = $01), timer B counting timer A's underflows ($DC0F = $41); writing $03 to $DC0D turns both timers' interrupts off. Several routines read the timers as a source of random numbers ($AA77, $ADB5, $B1E2, $C4F1, $C970, $C97B, $CBEE)."
  },
  {
   "address": 36147,
   "type": "line",
   "text": "205 zero bytes before map_wrap_x."
  },
  {
   "address": 36352,
   "type": "line",
   "text": "0 to 63 then 0 to 47: a map column plus an offset, wrapped to the map's width, for maze_draw, maze_colours and the routines that look up map cells."
  },
  {
   "address": 36353,
   "type": "line",
   "text": "map_wrap_x read one column on."
  },
  {
   "address": 36354,
   "type": "line",
   "text": "map_wrap_x read two columns on."
  },
  {
   "address": 36464,
   "type": "line",
   "text": "The low byte of the address of row n (0-31) of a 32 x 32 grid at $0C00-$0FFF: $00 $20 ... $E0, four times."
  },
  {
   "address": 36496,
   "type": "line",
   "text": "The high byte to go with map_row_lo: $0C for rows 0-7, $0D, $0E, $0F."
  },
  {
   "address": 36526,
   "type": "line",
   "text": "Two bytes read as stick_p1/stick_p2 by code that indexes with the shot slot (2 or 3): $8EAE + 2 is stick_p1."
  },
  {
   "address": 36528,
   "type": "line",
   "text": "Player one's stick and fire as last read: the low five bits of keys_state's first byte ($8821, keyboard row 7, where port 1's stick also shows), $1F when nothing is pressed."
  },
  {
   "address": 36529,
   "type": "line",
   "text": "Player two's stick and fire, from $DC00."
  },
  {
   "address": 36530,
   "type": "line",
   "text": "Player one's direction bits (low four, active low) ORed with $B66B; $0F while fire is held, so a player firing does not move."
  },
  {
   "address": 36531,
   "type": "line",
   "text": "Player two's direction bits, ORed with $B66C; $0F while fire is held."
  },
  {
   "address": 36532,
   "type": "line",
   "text": "Puts the maze back after a message screen (power_message, poison_eaten): shows the screen at $4000 and the maze font, lets both players move, sets $D011's scroll to 7, redraws the maze and its colours, and enables every sprite."
  },
  {
   "address": 36574,
   "type": "line",
   "text": "Adds a transporter to the list of those on screen: its map cell ($B29A, $B29B) times four, kept below $80, into teleport_x/teleport_y at the next free slot (teleport_count, which it increments). Called from $B1CC."
  },
  {
   "address": 36602,
   "type": "line",
   "text": "Sends player X ($910D) through a transporter. A stick held still, or a direction whose facing (facing_of_dir) is odd, returns 1 and does nothing; otherwise the point eight units ahead of the player in the pushed direction (dir_dx/dir_dy) is the aim, which is how the stick steers the jump. With fewer than two transporters on screen it returns 2. Otherwise it measures each transporter's distance from the aim (the sum of the two differences, through $BFAB), sorts the list nearest first (teleport_sort), and tries them in order (teleport_place), returning 3 if none had room."
  },
  {
   "address": 36720,
   "type": "line",
   "text": "Bubble-sorts the transporter list by distance (teleport_dist), keeping each entry's X and Y with it; two at the same distance are swapped when bit 0 of $B92F,x is set, which breaks ties by chance."
  },
  {
   "address": 36809,
   "type": "line",
   "text": "Tries the sorted transporters from the list's second entry on, skipping any at distance 0, and for each tries the eight cells around it, starting from the player's facing (teleport_free): the first free one gets the player. The player's map position is moved there (the old cells cleared and the new marked, through cell_addr), the pointer pair $C0/$C1 + 2X set from $8E/$8F, and sound $0B started ($CDDB)."
  },
  {
   "address": 36926,
   "type": "line",
   "text": "How many transporters teleport_add has listed this pass (at most sixteen)."
  },
  {
   "address": 36927,
   "type": "line",
   "text": "The aim point's X for teleport_use."
  },
  {
   "address": 36928,
   "type": "line",
   "text": "The aim point's Y."
  },
  {
   "address": 36929,
   "type": "line",
   "text": "The distance of each listed transporter from the aim, sixteen bytes ($9041 is the slot before the first, set to $FF)."
  },
  {
   "address": 36930,
   "type": "line",
   "text": "teleport_dist from its second slot, as the sort reads it."
  },
  {
   "address": 36945,
   "type": "line",
   "text": "Each listed transporter's map X times four."
  },
  {
   "address": 36946,
   "type": "line",
   "text": "teleport_x from its second slot, as the sort reads it."
  },
  {
   "address": 36961,
   "type": "line",
   "text": "Each listed transporter's map Y times four."
  },
  {
   "address": 36962,
   "type": "line",
   "text": "teleport_y from its second slot."
  },
  {
   "address": 36977,
   "type": "line",
   "text": "Cleared for each player when its move is checked (player_move); read by $98D7 and $B708."
  },
  {
   "address": 36979,
   "type": "line",
   "text": "Set by teleport_sort when a pass swapped two entries."
  },
  {
   "address": 36980,
   "type": "line",
   "text": "Checks the cell in direction X around transporter Y ($B289,x and $B291,x give the offsets): returns $FF when the cell is off the screen (not two or more columns in, or not below column $40 / row $28 on screen), otherwise the byte of the tile grid there (through map_row_lo/map_row_hi), with $8E/$8F pointing at it; zero is free."
  },
  {
   "address": 37109,
   "type": "line",
   "text": "Nine zero bytes before the player table."
  },
  {
   "address": 37118,
   "type": "line",
   "text": "Work: the tile column (map X / 8) of the player being checked."
  },
  {
   "address": 37119,
   "type": "line",
   "text": "Work: the tile row."
  },
  {
   "address": 37120,
   "type": "line",
   "text": "Each player's X on screen, in 2-pixel units (0 at the play area's left, $78 at its right): the world X less the scroll ($8266)."
  },
  {
   "address": 37121,
   "type": "line",
   "text": "Player two's screen X."
  },
  {
   "address": 37122,
   "type": "line",
   "text": "Each player's Y on screen, in 2-pixel units (0 to $48)."
  },
  {
   "address": 37123,
   "type": "line",
   "text": "Player two's screen Y."
  },
  {
   "address": 37124,
   "type": "line",
   "text": "Each player's X in the maze, in 2-pixel units (a maze cell is four)."
  },
  {
   "address": 37125,
   "type": "line",
   "text": "Player two's maze X."
  },
  {
   "address": 37126,
   "type": "line",
   "text": "Each player's Y in the maze."
  },
  {
   "address": 37127,
   "type": "line",
   "text": "Player two's maze Y."
  },
  {
   "address": 37128,
   "type": "line",
   "text": "Work: a world X for cell_addr."
  },
  {
   "address": 37129,
   "type": "line",
   "text": "Work: a world Y for cell_addr."
  },
  {
   "address": 37130,
   "type": "line",
   "text": "Two bytes between probe_y and player_loop that no instruction refers to; zero as loaded."
  },
  {
   "address": 37132,
   "type": "line",
   "text": "Loop counter over the two players, 1 then 0."
  },
  {
   "address": 37133,
   "type": "line",
   "text": "The player being handled."
  },
  {
   "address": 37134,
   "type": "line",
   "text": "A byte between player_cur and start_x that no instruction refers to; zero as loaded."
  },
  {
   "address": 37135,
   "type": "line",
   "text": "The players' starting tile column, from the level."
  },
  {
   "address": 37136,
   "type": "line",
   "text": "The players' starting tile row."
  },
  {
   "address": 37137,
   "type": "line",
   "text": "The sprite-enable byte the raster handler writes to $D015."
  },
  {
   "address": 37138,
   "type": "line",
   "text": "What each player's cells held before the player stood on them; $36 is checked by player_step."
  },
  {
   "address": 37140,
   "type": "line",
   "text": "The panel colour of each hero: red, cyan, yellow, green (Warrior, Valkyrie, Wizard, Elf)."
  },
  {
   "address": 37144,
   "type": "line",
   "text": "Each hero's sprite colour, the same four."
  },
  {
   "address": 37146,
   "type": "line",
   "text": "Two bytes read as player_hero by code that indexes with the shot slot (2 or 3)."
  },
  {
   "address": 37148,
   "type": "line",
   "text": "Player one's hero (0 Warrior, 1 Valkyrie, 2 Wizard, 3 Elf); $911D is player two's."
  },
  {
   "address": 37149,
   "type": "line",
   "text": "Player two's hero."
  },
  {
   "address": 37150,
   "type": "line",
   "text": "While this or $911F is non-zero the main loop keeps running the level, even when every player in the game has bit 6 of its state set."
  },
  {
   "address": 37151,
   "type": "line",
   "text": "See exit_wait_p1."
  },
  {
   "address": 37152,
   "type": "line",
   "text": "Player one's state: 0 not in the game. The main loop runs the level while a player in the game has bit 6 clear. With bit 7 set, players_sprites holds the walking step still and players_move and scroll_follow skip the player."
  },
  {
   "address": 37153,
   "type": "line",
   "text": "Player two's state."
  },
  {
   "address": 37154,
   "type": "line",
   "text": "For each player, the index of the other player (or itself in a one-player game), set by level_place_players."
  },
  {
   "address": 37155,
   "type": "line",
   "text": "Player two's other-player link."
  },
  {
   "address": 37156,
   "type": "line",
   "text": "Each player's walking animation step, 0-3 (panel_flash advances it)."
  },
  {
   "address": 37158,
   "type": "line",
   "text": "Each player's facing, 0-7."
  },
  {
   "address": 37159,
   "type": "line",
   "text": "Player two's facing."
  },
  {
   "address": 37160,
   "type": "line",
   "text": "The shape offset of each walking step: 0, 8, 0, 16."
  },
  {
   "address": 37164,
   "type": "line",
   "text": "The first sprite shape of player one's hero ($C0, at $7000); $912D is player two's ($E0, $7800)."
  },
  {
   "address": 37165,
   "type": "line",
   "text": "Player two's first shape."
  },
  {
   "address": 37166,
   "type": "line",
   "text": "The facing (0-7) for each value of the direction bits; $80 for the impossible ones and none, which keep the old facing."
  },
  {
   "address": 37182,
   "type": "line",
   "text": "Shadow of sprite X positions for sprites 2-7, written to the chip by sprites_place."
  },
  {
   "address": 37183,
   "type": "line",
   "text": "Sprite 3's X (a shot slot, or a digit)."
  },
  {
   "address": 37184,
   "type": "line",
   "text": "Sprite 4's X."
  },
  {
   "address": 37185,
   "type": "line",
   "text": "Sprite 5's X."
  },
  {
   "address": 37186,
   "type": "line",
   "text": "Sprites 6 and 7's X: the players, from player_screen_x."
  },
  {
   "address": 37187,
   "type": "line",
   "text": "Sprite 7's X: player two."
  },
  {
   "address": 37188,
   "type": "line",
   "text": "Shadow Y positions for sprites 2-7."
  },
  {
   "address": 37189,
   "type": "line",
   "text": "Sprite 3's Y."
  },
  {
   "address": 37190,
   "type": "line",
   "text": "Sprite 4's Y."
  },
  {
   "address": 37191,
   "type": "line",
   "text": "Sprite 5's Y."
  },
  {
   "address": 37192,
   "type": "line",
   "text": "The players' sprite Y."
  },
  {
   "address": 37193,
   "type": "line",
   "text": "Sprite 7's Y."
  },
  {
   "address": 37194,
   "type": "line",
   "text": "The X high bit of sprites 2-7, one byte each (non-zero for set)."
  },
  {
   "address": 37198,
   "type": "line",
   "text": "The players' X high bits (sprites 6 and 7)."
  },
  {
   "address": 37200,
   "type": "line",
   "text": "The $D010 bit of sprites 2-7: $04 to $80."
  },
  {
   "address": 37206,
   "type": "line",
   "text": "The shape numbers of sprites 2-5."
  },
  {
   "address": 37207,
   "type": "line",
   "text": "Sprite 3's shape (the treasure clock's units digit, or the shot in slot 1)."
  },
  {
   "address": 37208,
   "type": "line",
   "text": "Sprite 4's shape; $9159 is sprite 5's."
  },
  {
   "address": 37212,
   "type": "line",
   "text": "For each player in the game: picks the shape (hero base player_shapes + walking step through anim_frames, the step held still when bit 7 of the state is set, + the facing, which is updated from the stick unless $B66D,x holds a direction of its own), writes it to sprite pointer 6 or 7 in both screens, and works out the sprite's X ($34 + 2 x screen X, with the high bit) and Y ($33 + 2 x screen Y). A player not in the game gets X and Y 0."
  },
  {
   "address": 37324,
   "type": "line",
   "text": "Writes the shadow positions of sprites 2-7 to the video chip with their X high bits, the pointers of sprites 2-5, clears the X expansion of sprites 2-7, sets them multicolour, enables the sprites from sprites_on, colours sprites 4 and 6 with player one's hero colour and 5 and 7 with player two's, sprites 2 and 3 from $AABC/$AABD, and sets the sprite multicolour $D026 white."
  },
  {
   "address": 37492,
   "type": "line",
   "text": "Moves each player in the game one unit along each axis its direction bits ask for, in the maze and on the screen together."
  },
  {
   "address": 37563,
   "type": "line",
   "text": "Four bytes no traced code reaches: 2 1 0 3."
  },
  {
   "address": 37567,
   "type": "line",
   "text": "Each player's screen position is its maze position less the scroll offsets $8266/$8267."
  },
  {
   "address": 37593,
   "type": "line",
   "text": "Stops the screen scrolling past the map's edges: unless bit 7 of the level header $0A01 is set (the maze wraps left and right), no scrolling left at column 0 or right at column $20; unless bit 6 is set (it wraps top and bottom), none up at row 0 or down at row $2E."
  },
  {
   "address": 37662,
   "type": "line",
   "text": "Keeps the two players on one screen and the screen inside its edges: a player $78 units right or left of the other may not move further away, nor $48 above or below; a player at the play area's left or right edge (screen X 0 or $78) or top or bottom (Y 0 or $48) may not move further, and the screen stops scrolling that way."
  },
  {
   "address": 37881,
   "type": "line",
   "text": "For each player in the game with bit 7 of its state clear: notes its tile, chooses the wall rules for tile_blocks (the limit $B660 is $13, or $11 when $B663,x is non-zero and neither $B4E7 nor $B4E9 is set; $B661 is set when $B663,x + $B665,x reaches $B667,x), gathers the eight tiles around it (tile_ring), takes the blocked directions out of the stick (block_dirs), then runs $B671, player_step and $98A8."
  },
  {
   "address": 37999,
   "type": "line",
   "text": "Works out which directions the walls around the player block: for each of the eight neighbours whose direction matches the stick (dir_of_ring), and for a diagonal its two sides too, ORs the direction's bit into $825E when tile_blocks says so; the result is added to the player's direction bits."
  },
  {
   "address": 38074,
   "type": "line",
   "text": "The ring index of the last neighbouring tile from $20-$2E or $30 that tile_blocks met, or $FF."
  },
  {
   "address": 38075,
   "type": "line",
   "text": "Tests the neighbour tile at ($B0,X), bit 7 ignored, and ORs its direction into $825E when it blocks: 0, $2F, $31 and $36 never block; a tile below the limit $B660 blocks; $16, $17 and $1F block only while $B661 is set; $30 and above block; $13-$1F (but those three) do not; $20-$2E and $30 block and have their ring index noted in ring_exit."
  },
  {
   "address": 38143,
   "type": "line",
   "text": "The direction bit each neighbour blocks."
  },
  {
   "address": 38151,
   "type": "line",
   "text": "The stick value each diagonal neighbour answers (0 for the straight ones)."
  },
  {
   "address": 38159,
   "type": "line",
   "text": "The stick value (active low) pointing at each of the eight neighbours."
  },
  {
   "address": 38167,
   "type": "line",
   "text": "Fills the pointers $B0-$BF with the addresses in the tile grid of the eight tiles around (tile_x, tile_y), clockwise from below."
  },
  {
   "address": 38218,
   "type": "line",
   "text": "Stores the tile grid address of (tile_x, tile_y), wrapped to 32, at $B0,X and steps X by two."
  },
  {
   "address": 38243,
   "type": "line",
   "text": "34 bytes no traced code reaches: sets player one's maze position from the scroll (map_x x 8 + $80, map_y x 8 + $38) for both players."
  },
  {
   "address": 38277,
   "type": "line",
   "text": "Places the screen and the players at the level's start: the scroll from the starting tile (start_x less 8, start_y less 5, held inside the map unless the header lets it wrap), each player in the game at the start tile (in 2-pixel units, and on screen), the other-player links (player_other), $C40C/$C40D cleared and both facings 4. With both players in the game, player one is placed by $A584 instead."
  },
  {
   "address": 38456,
   "type": "line",
   "text": "For each player alive: lets the screen scroll left only while the player is in the left part of the play area (X below $41) and the other is not near the right edge ($71), right only while X is $38 or more and the other is not at the left (9); likewise up (Y below $29, the other below $39) and down (Y $20 or more, the other 8 or more)."
  },
  {
   "address": 38517,
   "type": "line",
   "text": "scroll_follow's test for a player pushing left."
  },
  {
   "address": 38549,
   "type": "line",
   "text": "scroll_follow's test for a player pushing right."
  },
  {
   "address": 38581,
   "type": "line",
   "text": "scroll_follow's test for a player pushing up."
  },
  {
   "address": 38613,
   "type": "line",
   "text": "scroll_follow's test for a player pushing down."
  },
  {
   "address": 38645,
   "type": "line",
   "text": "Points $94/$95 at the character map cell under (probe_x, probe_y): $3000 + (Y / 4) x 64 + X / 4."
  },
  {
   "address": 38670,
   "type": "line",
   "text": "Moves player X by its direction if the four character cells it would cover are free (cells_free): the new cells are marked (unless player_under is $36), the old ones cleared and player_under reset; a blocked move sets the direction to none. A player standing still has its cells marked again while $824B is non-zero."
  },
  {
   "address": 38787,
   "type": "line",
   "text": "Carry set when all four character map cells at ($94) (two across, two down) are $5A or less, which nothing solid uses."
  },
  {
   "address": 38810,
   "type": "line",
   "text": "Writes $5B into the four character map cells at ($94), marking them occupied."
  },
  {
   "address": 38827,
   "type": "line",
   "text": "Writes zero into the four character map cells at ($94)."
  },
  {
   "address": 38844,
   "type": "line",
   "text": "The X step of each direction value: 8 for right, $F8 for left."
  },
  {
   "address": 38860,
   "type": "line",
   "text": "The Y step of each direction value."
  },
  {
   "address": 38876,
   "type": "line",
   "text": "Work: the screen column teleport_free computed."
  },
  {
   "address": 38877,
   "type": "line",
   "text": "Work: the screen row."
  },
  {
   "address": 38878,
   "type": "line",
   "text": "Sixteen bytes, $10-$19 and $21-$26; nothing in the traced code reads them, by name or through an index of up to 16."
  },
  {
   "address": 38894,
   "type": "line",
   "text": "The bytes with one bit set, $01 $02 $04 $08 $10 $20, then $40 $80 (bits_table): poison reads the bit of the power it tries from here ($9F40, Y from poison_pick), and clear_masks beside it takes the power away."
  },
  {
   "address": 38900,
   "type": "line",
   "text": "$40 $80 then the bytes with one bit clear ($FE ... $DF), read by $B9A6 and $B9BE."
  },
  {
   "address": 38902,
   "type": "line",
   "text": "The bytes with one bit clear for bits 0-5, used to take a power away (poison)."
  },
  {
   "address": 38908,
   "type": "line",
   "text": "$BF and $7F, the last two one-bit-clear bytes."
  },
  {
   "address": 38910,
   "type": "line",
   "text": "Takes player X out of play: its state is cleared, its leave timer ($911E,x) set to 60 frames, the two players unlinked (player_other), a tile dropped where it stood (drop_tile), $B65F raised and sound $0F started. Called from $B964, $B989 and $BCB3."
  },
  {
   "address": 38950,
   "type": "line",
   "text": "Puts a tile in the tile grid at player X's tile, and its four characters and colours into the maps: tile $1F when $B663,x is non-zero, otherwise $22, or $13 on a treasure-room level ($99CC $76 or more). The characters come from tile_chars ($F400 + tile x 4), the colour from $F600 + tile x 4."
  },
  {
   "address": 39080,
   "type": "line",
   "text": "Sets player_moved for player X when the neighbour tile_blocks noted (ring_exit) is in the direction the stick points and the tile there is $30."
  },
  {
   "address": 39131,
   "type": "line",
   "text": "The file name the level loader asks for: two bytes, then \"LEVEL nnn\" with the three digits at $98E3-$98E5 (set by level_name_digits)."
  },
  {
   "address": 39133,
   "type": "line",
   "text": "\"LEVEL \" before the three digits."
  },
  {
   "address": 39139,
   "type": "line",
   "text": "The level file's hundreds digit, as ASCII."
  },
  {
   "address": 39140,
   "type": "line",
   "text": "The tens digit."
  },
  {
   "address": 39141,
   "type": "line",
   "text": "The units digit."
  },
  {
   "address": 39142,
   "type": "line",
   "text": "The other seven file names, one after another without separators: PINN232 5000, PLYRS.SPR, OBJDIS, DITTIDATA 146, DATATREASURE 446, PLAYER-$E000, GAUNT CHR $4800."
  },
  {
   "address": 39154,
   "type": "line",
   "text": "\"PLYRS.SPR\"."
  },
  {
   "address": 39163,
   "type": "line",
   "text": "\"OBJDIS\"."
  },
  {
   "address": 39169,
   "type": "line",
   "text": "\"DITTIDATA 146\"."
  },
  {
   "address": 39182,
   "type": "line",
   "text": "\"DATATREASURE 446\"."
  },
  {
   "address": 39198,
   "type": "line",
   "text": "\"PLAYER-$E000\"."
  },
  {
   "address": 39210,
   "type": "line",
   "text": "\"GAUNT CHR $4800\"."
  },
  {
   "address": 39225,
   "type": "line",
   "text": "Where each of the eight files is loaded, low byte then high: $0A00 (the level), $1388, $2000, $F000, $EA00, $E800, $E000, $4800."
  },
  {
   "address": 39226,
   "type": "line",
   "text": "The high bytes of file_loads, read as the second byte of each pair."
  },
  {
   "address": 39241,
   "type": "line",
   "text": "The length of each file's name: 9, 12, 9, 6, 13, 16, 12, 15."
  },
  {
   "address": 39249,
   "type": "line",
   "text": "The number of the last file load_files loads: 7, all eight."
  },
  {
   "address": 39250,
   "type": "line",
   "text": "The address of each file's name, the level's first ($98DD)."
  },
  {
   "address": 39251,
   "type": "line",
   "text": "The high bytes of file_name_ptrs."
  },
  {
   "address": 39268,
   "type": "line",
   "text": "Loads files 7 down to 0 of the table (file_names) from disk with the KERNAL: SETLFS (file $20, device 8, secondary 0, so each file goes to the address the table gives), SETNAM, LOAD to file_loads, CLOSE; the status of the last load (the carry) is kept in load_status. The BIT at $9967 hides the LDX #$00 of the second entry, load_level_file ($9968), which loads file 0, the level, alone."
  },
  {
   "address": 39272,
   "type": "line",
   "text": "Loads file 0, the level, alone: load_files from its second entry."
  },
  {
   "address": 39339,
   "type": "line",
   "text": "The processor status after the last LOAD; level_start reloads while its carry (an error) is set."
  },
  {
   "address": 39340,
   "type": "line",
   "text": "32 bytes no traced code reaches: stores \"BOB \" at $033C-$033F, then a fire-button test on $DC00 returning the carry."
  },
  {
   "address": 39372,
   "type": "line",
   "text": "The number of the level file in play (1-128): the first seven levels are files 1-7, later ones a file picked at random (level_pick); files from $76 (118) up are treasure rooms."
  },
  {
   "address": 39373,
   "type": "line",
   "text": "The level counter the player sees, one ahead of the level in play once it has loaded; level_pick uses it."
  },
  {
   "address": 39374,
   "type": "line",
   "text": "The file level 8 uses, chosen at random at start-up ($0A + a random 0-63)."
  },
  {
   "address": 39375,
   "type": "line",
   "text": "Starts the next level: runs $CE9C, picks the file (level_number below 8: the same number; else level_pick, which can give a treasure room), applies the exits that skip levels (exit_targets), writes the file name's digits, hands interrupts to the KERNAL, loads the level file (again until no error), takes the interrupts back, stops the music, counts the level and runs $ADB5. For a treasure room it then runs $B0A8, $A457 and level_intro; otherwise it clears the screen ($AF65), shows \"LEVEL\" and the number in sprites (level_digits_sprites), prints the level's messages (level_messages), and runs $A457 and level_intro."
  },
  {
   "address": 39466,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_level at $9A5E, the top half of the big LEVEL title."
  },
  {
   "address": 39468,
   "type": "line",
   "text": "level_start goes on after the first string's argument: prints the bottom half of LEVEL, the level's messages, then $A457 and level_intro."
  },
  {
   "address": 39471,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_level_lower at $9A73, the bottom half of the big LEVEL title."
  },
  {
   "address": 39473,
   "type": "line",
   "text": "level_start goes on after the bottom half of LEVEL: the level's messages, $A457 and level_intro."
  },
  {
   "address": 39483,
   "type": "line",
   "text": "Prints the level's messages from row 10 of the text screen: \"SHOTS NOW HURT OTHER PLAYERS\" when bit 0 of the level header $0A01 is set, \"SHOTS NOW STUN OTHER PLAYERS\" when bit 1 is."
  },
  {
   "address": 39503,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_shots_hurt at $9A88, \"SHOTS NOW HURT OTHER PLAYERS\"."
  },
  {
   "address": 39505,
   "type": "line",
   "text": "level_messages goes on after its first string: the \"stun\" test and message."
  },
  {
   "address": 39515,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_shots_stun at $9AA6, \"SHOTS NOW STUN OTHER PLAYERS\"."
  },
  {
   "address": 39517,
   "type": "line",
   "text": "level_messages' return."
  },
  {
   "address": 39518,
   "type": "line",
   "text": "The level screen's two lines, each a length, a colour and the characters ($13 long, colour $0A): \"LEVEL :\" in the big glyphs $E1-$E6 for the top half and $01-$06 for the bottom; the number beside it is drawn with sprites."
  },
  {
   "address": 39519,
   "type": "line",
   "text": "The LEVEL title's colour byte, rewritten with player one's hero colour."
  },
  {
   "address": 39539,
   "type": "line",
   "text": "The bottom half of the LEVEL title."
  },
  {
   "address": 39540,
   "type": "line",
   "text": "The bottom half's colour byte, rewritten the same way."
  },
  {
   "address": 39560,
   "type": "line",
   "text": "\"SHOTS NOW HURT OTHER PLAYERS\" ($1C long, colour 1)."
  },
  {
   "address": 39590,
   "type": "line",
   "text": "\"SHOTS NOW STUN OTHER PLAYERS\"."
  },
  {
   "address": 39620,
   "type": "line",
   "text": "Picks the level file for a level from 8 on. A countdown ($AF3C) runs out every four to seven levels; then a treasure room is chosen at random ($76-$80) and level_number is put back by one, so the treasure room does not count as a level. Otherwise level 8 is level8_file and every later level a random file from 8 to $75."
  },
  {
   "address": 39678,
   "type": "line",
   "text": "Writes level_file as three ASCII digits into the file name (level_digit_1-3)."
  },
  {
   "address": 39696,
   "type": "line",
   "text": "Shows the level number (level_number less one) as three sprites: sprites 2-4 at X $D0, $E4, $F8, Y $6E, with the digit shapes $A2-$AB; colours them and the LEVEL title in player one's hero colour."
  },
  {
   "address": 39788,
   "type": "line",
   "text": "The exits that jump ahead: after level 1 (level_number 2), an exit at tile grid address $0C3F leads to level 8 and one at $0FFF to level 4; after level 4 (level_number 5) one at $0E3F leads to level 8. The exit each player took is in $C0/$C1 and $C2/$C3, and the level goes to the higher of the two choices."
  },
  {
   "address": 39848,
   "type": "line",
   "text": "The level each player's exit chose (two bytes, $9BA8 and $9BAA)."
  },
  {
   "address": 39849,
   "type": "line",
   "text": "The byte between the two players' choices, never used: exit_choice,X is written with X 0 or 2, the player's offset into the positions at $C0."
  },
  {
   "address": 39850,
   "type": "line",
   "text": "Player two's choice."
  },
  {
   "address": 39851,
   "type": "line",
   "text": "Player X's choice after level 4: 8 for the exit at $0E3F, otherwise the next level."
  },
  {
   "address": 39876,
   "type": "line",
   "text": "Player X's choice after level 1: 8 for the exit at $0C3F, 4 for the one at $0FFF, otherwise the next level."
  },
  {
   "address": 39919,
   "type": "line",
   "text": "Plays the level jingle: starts tune 0 of the music data at $EA00 with the player at $E000 (music_init), sets the music flags ($8249, $E69E), then calls the player once a frame (wait_frame_40, music_play) until the tune clears $E69E."
  },
  {
   "address": 39946,
   "type": "line",
   "text": "Once per game ($CFFD): sets up each player's hero graphics for the heroes chosen on the selection screen ($CFFE/$CFFF): copies 512 bytes per player from the hero's block at $7000-$77FF to $1800/$1A00 (hero_copy_shapes), $7400-$75FF to $6E00 (shapes_7400_to_6E00), 2 KB per player from the hero's block of PLYRS.SPR at $2000-$3FFF to $7000/$7800 (hero_copy_chars: the players' sprite shapes, which player_shapes points at), and four pages to $1C00 (shapes_to_1C00)."
  },
  {
   "address": 39982,
   "type": "line",
   "text": "Copies 512 bytes for player X from its hero's block ($7000, $7200, $7400 or $7600) to $1800 or $1A00; sets player_hero,x from the selection."
  },
  {
   "address": 40023,
   "type": "line",
   "text": "The page of each hero's shapes: $70, $72, $74, $76."
  },
  {
   "address": 40027,
   "type": "line",
   "text": "Where each player's copy goes: $18, $1A."
  },
  {
   "address": 40029,
   "type": "line",
   "text": "Copies 2 KB for player X from its hero's block of PLYRS.SPR ($2000, $2800, $3000 or $3800) to $7000 or $7800, where the player's sprite shapes are read ($912C)."
  },
  {
   "address": 40066,
   "type": "line",
   "text": "The page of each hero's 2 KB block: $20, $28, $30, $38."
  },
  {
   "address": 40070,
   "type": "line",
   "text": "Each player's destination: $70, $78."
  },
  {
   "address": 40072,
   "type": "line",
   "text": "Copies $7600-$76FF, $7700-$77FF, $7E00-$7EFF and $7F00-$7FFF to $1C00-$1FFF."
  },
  {
   "address": 40102,
   "type": "line",
   "text": "Copies $1800-$1BFF back to $7600, $7700, $7E00 and $7F00."
  },
  {
   "address": 40132,
   "type": "line",
   "text": "Copies $7400-$75FF to $6E00-$6FFF."
  },
  {
   "address": 40150,
   "type": "line",
   "text": "A zero byte before the special potions' entries."
  },
  {
   "address": 40151,
   "type": "line",
   "text": "The six special potions' entry points, reached through the pickup table ($B835): each loads its power's bit (1 armour, 2 carrying, 4 magic, 8 shot power, $10 shot speed, $20 fight power), the BIT instructions hiding the other loads. A power the player lacks is added to its powers (player_powers), applied (power_apply) and announced (power_message); one it already has is picked up as an ordinary potion when there is room ($B8B5)."
  },
  {
   "address": 40154,
   "type": "line",
   "text": "Entry for the carrying potion (bit 2)."
  },
  {
   "address": 40157,
   "type": "line",
   "text": "Entry for the magic potion (bit 4)."
  },
  {
   "address": 40160,
   "type": "line",
   "text": "Entry for the shot-power potion (bit 8)."
  },
  {
   "address": 40163,
   "type": "line",
   "text": "Entry for the shot-speed potion (bit $10)."
  },
  {
   "address": 40166,
   "type": "line",
   "text": "Entry for the fight-power potion (bit $20)."
  },
  {
   "address": 40208,
   "type": "line",
   "text": "Gives player X the power in $825B, by hero, and draws its icon in the panel: armour lowers the six damage values (damage_taken) to armoured_damage's; carrying sets the carry limit ($B667,x) to 15; magic raises the potion strength ($A010/$A00C) from $9FFE/$9FFA; shot power and fight power raise $ACAD/$ACC0 and $ACC8/$ACCC; shot speed sets $ACC4 to 8. Notes the power's number in power_index for the message."
  },
  {
   "address": 40439,
   "type": "line",
   "text": "The per-hero values the powers set, four bytes (one per hero) each: shot power $9DF7/$9DFB, fight power $9DFF/$9E03, base shot $9E07/$9E0B, base fight $9E0F/$9E13, armoured damage $9E17-$9E2B."
  },
  {
   "address": 40443,
   "type": "line",
   "text": "The shot-power potion's second value by hero ($ACC0)."
  },
  {
   "address": 40447,
   "type": "line",
   "text": "The fight-power potion's values by hero ($ACC8)."
  },
  {
   "address": 40451,
   "type": "line",
   "text": "Its second values ($ACCC)."
  },
  {
   "address": 40455,
   "type": "line",
   "text": "The heroes' base shot power ($ACAD)."
  },
  {
   "address": 40459,
   "type": "line",
   "text": "The heroes' base shot damage ($ACC0)."
  },
  {
   "address": 40463,
   "type": "line",
   "text": "The heroes' base fight power ($ACC8)."
  },
  {
   "address": 40467,
   "type": "line",
   "text": "The heroes' base fight damage ($ACCC)."
  },
  {
   "address": 40471,
   "type": "line",
   "text": "The damage each monster kind does to an armoured hero, six tables of four (one value per hero) at $9E17, $9E1B, $9E1F, $9E23, $9E27, $9E2B."
  },
  {
   "address": 40475,
   "type": "line",
   "text": "The second armoured damage table, by hero."
  },
  {
   "address": 40479,
   "type": "line",
   "text": "The third armoured damage table, by hero."
  },
  {
   "address": 40483,
   "type": "line",
   "text": "The fourth armoured damage table, by hero."
  },
  {
   "address": 40487,
   "type": "line",
   "text": "The fifth armoured damage table, by hero."
  },
  {
   "address": 40491,
   "type": "line",
   "text": "The sixth."
  },
  {
   "address": 40495,
   "type": "line",
   "text": "The damage each of six monster kinds does to each hero without armour: six tables of four at $9E2F, $9E33, $9E37, $9E3B, $9E3F, $9E43 (for the first: Warrior 4, Valkyrie 3, Wizard 5, Elf 5)."
  },
  {
   "address": 40499,
   "type": "line",
   "text": "The second base damage table, by hero."
  },
  {
   "address": 40503,
   "type": "line",
   "text": "The third base damage table, by hero."
  },
  {
   "address": 40507,
   "type": "line",
   "text": "The fourth base damage table, by hero."
  },
  {
   "address": 40511,
   "type": "line",
   "text": "The fifth base damage table, by hero."
  },
  {
   "address": 40515,
   "type": "line",
   "text": "The sixth, then two spare bytes."
  },
  {
   "address": 40521,
   "type": "line",
   "text": "The damage each of six monster kinds does to each player, copied from base_damage by hero at the start (power_reset_armour) and from armoured_damage by the armour potion: pairs at $9E49, $9E4D, $9E4F, $9E55, $9E59, $9E5D."
  },
  {
   "address": 40525,
   "type": "line",
   "text": "The second damage_taken pair."
  },
  {
   "address": 40527,
   "type": "line",
   "text": "The third pair, then four spare bytes."
  },
  {
   "address": 40533,
   "type": "line",
   "text": "The fourth pair."
  },
  {
   "address": 40537,
   "type": "line",
   "text": "The fifth pair."
  },
  {
   "address": 40541,
   "type": "line",
   "text": "The sixth pair."
  },
  {
   "address": 40543,
   "type": "line",
   "text": "Each player's special powers, one bit each (1 armour, 2 carrying, 4 magic, 8 shot power, $10 shot speed, $20 fight power)."
  },
  {
   "address": 40545,
   "type": "line",
   "text": "Which power power_apply gave (0-5), for power_message."
  },
  {
   "address": 40546,
   "type": "line",
   "text": "Announces a special potion: clears the text screen ($AF72), prints the hero's name and \"NOW HAS\" and the power's name (its inline pointer set from power_names), plays sound $10, waits ($AF45) and puts the maze back ($8EB4)."
  },
  {
   "address": 40583,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_powers + 112 at $9F19, \"NOW HAS\"."
  },
  {
   "address": 40585,
   "type": "line",
   "text": "power_message goes on after printing \"NOW HAS\": the next row, the power's name."
  },
  {
   "address": 40591,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument); the code rewrites it before the call."
  },
  {
   "address": 40592,
   "type": "line",
   "text": "The high byte of the power's name in the argument, rewritten from power_names."
  },
  {
   "address": 40593,
   "type": "line",
   "text": "power_message goes on after the power's name: the sound, the wait and the maze."
  },
  {
   "address": 40605,
   "type": "line",
   "text": "The address of each power's message."
  },
  {
   "address": 40606,
   "type": "line",
   "text": "The high bytes of power_names."
  },
  {
   "address": 40617,
   "type": "line",
   "text": "The six messages, each a length, a colour and the text: EXTRA ARMOUR, EXTRA CARRYING ABILITY, EXTRA MAGIC POWER, EXTRA SHOT POWER, EXTRA SHOT SPEED, EXTRA FIGHT POWER; then \"NOW HAS\" ($9F1A)."
  },
  {
   "address": 40631,
   "type": "line",
   "text": "\"EXTRA CARRYING ABILITY\"."
  },
  {
   "address": 40655,
   "type": "line",
   "text": "\"EXTRA MAGIC POWER\"."
  },
  {
   "address": 40674,
   "type": "line",
   "text": "\"EXTRA SHOT POWER\"."
  },
  {
   "address": 40692,
   "type": "line",
   "text": "\"EXTRA SHOT SPEED\"."
  },
  {
   "address": 40710,
   "type": "line",
   "text": "\"EXTRA FIGHT POWER\"."
  },
  {
   "address": 40729,
   "type": "line",
   "text": "\"NOW HAS\"."
  },
  {
   "address": 40738,
   "type": "line",
   "text": "The poison's effect on player X. A player with no special power loses a potion if it carries any (potion_drop, when potions_held is not zero) and 100 health (poison_health). A player with powers loses one, picked at random among those it has (its bit cleared, its base value restored with power_reset, its icon wiped from the panel), and nothing else here."
  },
  {
   "address": 40802,
   "type": "line",
   "text": "Takes one from the hundreds byte of player X's health ($B931,x) with decimal mode off and no test for a borrow, and raises $B65F: from $20 it leaves $1F, from $00 it leaves $FF."
  },
  {
   "address": 40815,
   "type": "line",
   "text": "The power poison tries for each random 0-7: 0 1 2 3 4 5 2 4."
  },
  {
   "address": 40823,
   "type": "line",
   "text": "Each power's icon column in the panel block: 0 1 2 13 14 15."
  },
  {
   "address": 40829,
   "type": "line",
   "text": "Puts power Y of player X back to the hero's base value through the routine power_resets names (its JSR at $9F90 rewritten)."
  },
  {
   "address": 40848,
   "type": "line",
   "text": "The JSR power_reset rewrites with the routine for the power."
  },
  {
   "address": 40849,
   "type": "line",
   "text": "Its target, low byte."
  },
  {
   "address": 40850,
   "type": "line",
   "text": "Its target, high byte; then power_reset's return."
  },
  {
   "address": 40854,
   "type": "line",
   "text": "The six routines that set a power to its base value."
  },
  {
   "address": 40855,
   "type": "line",
   "text": "The high bytes of power_resets."
  },
  {
   "address": 40866,
   "type": "line",
   "text": "Copies the hero's six base damage values into damage_taken for player X."
  },
  {
   "address": 40903,
   "type": "line",
   "text": "Sets player X's carry limit to 10."
  },
  {
   "address": 40909,
   "type": "line",
   "text": "Sets the potion strength $A010/$A00C from the hero's base ($A006/$A002)."
  },
  {
   "address": 40922,
   "type": "line",
   "text": "Sets shot power $ACAD/$ACC0 from $9E07/$9E0B."
  },
  {
   "address": 40935,
   "type": "line",
   "text": "Sets $ACC4 to 0."
  },
  {
   "address": 40941,
   "type": "line",
   "text": "Sets fight power $ACC8/$ACCC from $9E0F/$9E13."
  },
  {
   "address": 40954,
   "type": "line",
   "text": "The magic values by hero: with the power $9FFA/$9FFE, without it $A002/$A006; then $A00A, the potion strengths $A00C and $A010, and $A00E, per player."
  },
  {
   "address": 40958,
   "type": "line",
   "text": "The magic potion's second value by hero."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "The last two bytes of the magic tables ($C0 $80, part of $9FFE), then the per-player values from $A002."
  },
  {
   "address": 40962,
   "type": "line",
   "text": "The heroes' base magic, first value ($A00C)."
  },
  {
   "address": 40966,
   "type": "line",
   "text": "The heroes' base magic, second value ($A010)."
  },
  {
   "address": 40970,
   "type": "line",
   "text": "Each player's magic against generators ($A00A,x, used by magic_generator)."
  },
  {
   "address": 40972,
   "type": "line",
   "text": "Each player's magic value (set by hero and the magic potion)."
  },
  {
   "address": 40974,
   "type": "line",
   "text": "Each player's magic damage to monsters (blast_monster)."
  },
  {
   "address": 40976,
   "type": "line",
   "text": "Each player's second magic value."
  },
  {
   "address": 40978,
   "type": "line",
   "text": "Sets every power of player X to its hero's base (the six power_reset routines) and clears $C40C,x, $B663,x, $B665,x and player_powers."
  },
  {
   "address": 41014,
   "type": "line",
   "text": "Entry for the raster interrupt's call when $8249 is set: jumps to tune_play."
  },
  {
   "address": 41017,
   "type": "line",
   "text": "Entry that starts a tune: jumps to tune_init."
  },
  {
   "address": 41020,
   "type": "line",
   "text": "Non-zero while the tune player has a tune to play; command $1E clears it."
  },
  {
   "address": 41021,
   "type": "line",
   "text": "The tune player's state, ten bytes per voice at $A03D, $A047 and $A051: the stream pointer (bytes 0-1), the high byte of a long count (3), the loop mark (4-5), the loop count (6), the voice's control byte (7), the loop flag (8, bit 7) and the frames left on the note or rest (9)."
  },
  {
   "address": 41022,
   "type": "line",
   "text": "Voice 1's stream pointer, high byte."
  },
  {
   "address": 41024,
   "type": "line",
   "text": "Voice 1's long-count byte, loop mark, loop count and control byte."
  },
  {
   "address": 41030,
   "type": "line",
   "text": "Voice 1's frames left on its note."
  },
  {
   "address": 41031,
   "type": "line",
   "text": "Voice 2's stream pointer."
  },
  {
   "address": 41032,
   "type": "line",
   "text": "Voice 2's stream pointer, high byte."
  },
  {
   "address": 41034,
   "type": "line",
   "text": "Voice 2's other state bytes."
  },
  {
   "address": 41040,
   "type": "line",
   "text": "Voice 2's frames left."
  },
  {
   "address": 41041,
   "type": "line",
   "text": "Voice 3's stream pointer."
  },
  {
   "address": 41042,
   "type": "line",
   "text": "Voice 3's stream pointer, high byte."
  },
  {
   "address": 41044,
   "type": "line",
   "text": "Voice 3's other state bytes."
  },
  {
   "address": 41050,
   "type": "line",
   "text": "Voice 3's frames left."
  },
  {
   "address": 41051,
   "type": "line",
   "text": "The volume and filter byte last written to $D418, for command $1B."
  },
  {
   "address": 41052,
   "type": "line",
   "text": "Starts a tune whose header is at A (low) and X (high): clears the 30 bytes of voice state, takes the three voices' stream addresses from the header's three offsets (each added to the header's address), steps each pointer past its first command, sets each voice's countdown to 1, clears tune_on (its caller sets it to start the tune: treasure_start at $B0E8) and points $84/$85 at the SID ($D400)."
  },
  {
   "address": 41149,
   "type": "line",
   "text": "Adds two to voice X's stream pointer."
  },
  {
   "address": 41164,
   "type": "line",
   "text": "Plays one frame of the tune when tune_on is set: for each of the three voices counts its note down ($A046, $A050, $A05A, with a second byte for long notes) and, when it runs out, reads the voice's next commands (tune_command) with $82/$83 at its state and $84 at its SID registers (0, 7, $0E)."
  },
  {
   "address": 41336,
   "type": "line",
   "text": "Reads one two-byte command from the voice's stream at ($80) and acts on it. A first byte with bit 7 set is a note: its number less $80 picks the frequency (note_freqs), the second byte is its length in frames, and the gate is cleared and set again from the voice's control byte. 0: a rest of the given length, the gate cleared. 1: volume and filter ($D418). 2, 3, 4, $0A: the value goes to the voice's register 5 (attack/decay), its control byte (kept, and written to register 4), register 3 (pulse width high) or register 6 (sustain/release). $19: a long rest, the value less one into the high count byte. $1E: the end, every gate off and tune_on cleared. $11: marks a loop start. $10: loops back to the mark the given number of times. $1B: adds the value to the volume. Commands that set a register go straight on to the next; a note or a rest ends the voice's work for the frame."
  },
  {
   "address": 41569,
   "type": "line",
   "text": "An RTS byte no code reaches."
  },
  {
   "address": 41570,
   "type": "line",
   "text": "tune_command's common tail for the commands that set a register: writes the value, steps on and reads the next command."
  },
  {
   "address": 41578,
   "type": "line",
   "text": "A second RTS byte, after tune_reg_write, that no code reaches."
  },
  {
   "address": 41579,
   "type": "line",
   "text": "Plays a note: sets the voice's frequency from note_freqs, keeps its length, clears the gate and then writes the control byte."
  },
  {
   "address": 41618,
   "type": "line",
   "text": "Steps the stream pointer $80/$81 past one two-byte command."
  },
  {
   "address": 41630,
   "type": "line",
   "text": "The tune player's note table: 96 SID frequencies, two bytes each (low first), from $010C up a semitone a step."
  },
  {
   "address": 41631,
   "type": "line",
   "text": "note_freqs read from its second byte (the high bytes)."
  },
  {
   "address": 41822,
   "type": "line",
   "text": "For a level that has a hidden potion (hidden_kind 0-5 but not 4): copies its 16-byte graphic from $6580 + 16 x kind into the three maze fonts at $4970, $5170 and $5970, turns the kind into its tile ($19 + kind) and puts it in a random free place (random_place)."
  },
  {
   "address": 41845,
   "type": "line",
   "text": "The low byte of hidden_potion_place's LDA $6580,Y, rewritten with the potion's 16-byte block."
  },
  {
   "address": 41872,
   "type": "line",
   "text": "From level 8 on (and not in a treasure room): puts a random 1 to N extra objects in random free places, N being 4 for levels 8-31, 8 for 32-63, 12 for 64-95 and 16 from 96 (bits 2-3 of level_number / 8, plus 4). Each is tile $14, or $15 when the count left is a multiple of four, or $31 when a random byte is below extras_chance ($19, about one in ten)."
  },
  {
   "address": 41947,
   "type": "line",
   "text": "The most extra objects extras_place puts in this level."
  },
  {
   "address": 41948,
   "type": "line",
   "text": "$19: the random number below which an extra object is $31."
  },
  {
   "address": 41949,
   "type": "line",
   "text": "Puts the object in hidden_kind somewhere free: picks random cell positions ($BE6E, $BE6F) until the place is free ($BDBF, $BE1A), flashing the border while it looks, then draws the object's characters and colours into the maps from tile_chars (via $CAD3 and $CB42) and writes the object into the tile grid."
  },
  {
   "address": 42042,
   "type": "line",
   "text": "The object being placed: the hidden potion's kind (0-5), or the tile of an extra object; $FF for none."
  },
  {
   "address": 42043,
   "type": "line",
   "text": "Two bytes between hidden_kind and random that no instruction refers to; zero as loaded."
  },
  {
   "address": 42045,
   "type": "line",
   "text": "A random byte in A: an additive generator over the four zero-page bytes $26-$29, each having the previous byte's old value added with the carry (the first gets $29), returning $26. Seeded from the raster line when a player joins (wait_first_player)."
  },
  {
   "address": 42071,
   "type": "line",
   "text": "At the start of a level from file 8 on: a random 0-15 into hidden_kind; below 6, the level gets a hidden potion of that kind and \"FIND THE HIDDEN POTION\" is printed. The placing routine skips kind 4, which keeps the message."
  },
  {
   "address": 42103,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_hidden_potion at $A47A, \"FIND THE HIDDEN POTION\"."
  },
  {
   "address": 42105,
   "type": "line",
   "text": "hidden_potion_roll's return."
  },
  {
   "address": 42106,
   "type": "line",
   "text": "\"FIND THE HIDDEN POTION\", length $16, colour 1."
  },
  {
   "address": 42130,
   "type": "line",
   "text": "Raises $B65F and runs $B9D0; when no player is in the game and both leave timers have run out, drops the main loop's return address and goes back to the start-up's wait for players (j_8091): the game is over."
  },
  {
   "address": 42156,
   "type": "line",
   "text": "Clears what a new game starts without: the border, both players' $B663-$B666 and $B66D/$B66E, the four shot slots, both players' states, the counters $B929-$B930 and $B65A, and the players' position bytes ($9100-$9107); sets $B65B to $1E, $B931/$B932 to $20 and both freeze masks ($B66B/$B66C) to $0F."
  },
  {
   "address": 42272,
   "type": "line",
   "text": "The start of a game: draws the empty panels and their colours, then waits until a fire button is pressed (stick_p1/stick_p2), seeds the random generator from the raster line, puts that player in the game at the start tile (player_join), sets its powers (player_powers_reset) and marks its cells."
  },
  {
   "address": 42346,
   "type": "line",
   "text": "During play, a player not in the game who presses fire joins (join_beside), as long as somebody is playing."
  },
  {
   "address": 42372,
   "type": "line",
   "text": "Puts player X in beside the other player: tries the four places next to it (join_spot); with none free, plays sound $0D and leaves; otherwise places X there, links the two (player_other), marks its cells, redraws the panel and clears both freeze masks."
  },
  {
   "address": 42460,
   "type": "line",
   "text": "Tries the four places next to the other player, above, left, below and right (join_offsets, y = 3 down to 0): carry clear for the first free one, its position in $B29A/$B29B."
  },
  {
   "address": 42486,
   "type": "line",
   "text": "Looks at the tile grid beside the other player in direction Y; carry clear when that tile is 0."
  },
  {
   "address": 42532,
   "type": "line",
   "text": "Five bytes read as overlapping pairs, Y offset from $A624,y and X from $A625,y: y = 3 above ($F8, 0), 2 left (0, $F8), 1 below (8, 0), 0 right (0, 8)."
  },
  {
   "address": 42533,
   "type": "line",
   "text": "join_offsets read as X offsets."
  },
  {
   "address": 42537,
   "type": "line",
   "text": "Marks player X's four character cells occupied."
  },
  {
   "address": 42556,
   "type": "line",
   "text": "For each player not in the game with its leave timer running: raises $B65F, zeroes the panel's health ($B92F, $B931) and puts glyph $10 over its digits; when the timer runs out, resets the player's counters, health $B931 to $20 and powers, and puts \"PRESS FIRE\" in its panel."
  },
  {
   "address": 42643,
   "type": "line",
   "text": "Code and text no traced code reaches: prints \"INSERT SIDE 2 OF DISK\", \"THEN PRESS SPACE BAR\", \"TO CONTINUE GAME\", clears bit 5 of $01 (the cassette motor line), waits for $DC01 bit 4 to be pressed and released, sets the bit again and redraws. A leftover of a two-sided release; the strings are at $A6CE, $A6E5 and $A6FB."
  },
  {
   "address": 42651,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): unused_side2 + 59 at $A6CE, \"INSERT SIDE 2 OF DISK\"."
  },
  {
   "address": 42653,
   "type": "line",
   "text": "jsr text_next_row ($B070), then jsr print_centred ($B008) with the second string's address after it (arg_A6A3)."
  },
  {
   "address": 42659,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): unused_side2 + 82 at $A6E5, \"THEN PRESS SPACE BAR\"."
  },
  {
   "address": 42661,
   "type": "line",
   "text": "jsr text_next_row, then jsr print_centred with the third string's address after it (arg_A6AB)."
  },
  {
   "address": 42667,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): unused_side2 + 104 at $A6FB, \"TO CONTINUE GAME\"."
  },
  {
   "address": 42669,
   "type": "line",
   "text": "The rest of unused_side2's code: clears bit 5 of $01, waits for $DC01 bit 4 to be pressed and released, sets the bit again, clears the screen and waits; no traced code reaches it."
  },
  {
   "address": 42702,
   "type": "line",
   "text": "\"INSERT SIDE 2 OF DISK\"."
  },
  {
   "address": 42725,
   "type": "line",
   "text": "\"THEN PRESS SPACE BAR\"."
  },
  {
   "address": 42747,
   "type": "line",
   "text": "\"TO CONTINUE GAME\"."
  },
  {
   "address": 42765,
   "type": "line",
   "text": "Fires the players' shots: shot slots 3 and 2 (player two's and player one's) through shot_fire."
  },
  {
   "address": 42776,
   "type": "line",
   "text": "Fires shot slot X (2 or 3, the player X - 2) when the slot is free, the player is in the game with a state below 4, and its fire bit is pressed (stick_p1/p2 below $10): the shot's direction is the stick's facing, or the walking step when the stick is centred, its sprite shape the direction plus the hero's base ($A878,x), its position the player's; the slot is set to the hero's shot type + 1 ($911A,x + 1), the sprite placed (shot_sprite), sound 4 started, and $B65B reloaded from $B65C."
  },
  {
   "address": 42856,
   "type": "line",
   "text": "Moves the four shot slots each frame: a slot holding 6 goes to $A7BF; others step along their direction (X by $BE80,y at $A7A1, Y by $BE70,y at $A7AB, the index raised by shot_speed $ACC2,x for a fast shot), with the shape turning every fourth frame for type 1, and their sprite is placed again; a slot with bit 7 set goes to $A92E."
  },
  {
   "address": 42943,
   "type": "line",
   "text": "Moves a lobbed rock (shot type 6) every fourth frame: steps its position by its per-step offsets ($ABEB, $ABED), counts its steps down ($ABE7) and ends it at zero (shot_clear); in the first half of the flight it rises (Y up two units a step, its shape stepping towards $AF), in the second it falls (Y down two units, the shape $AD-$AF by height)."
  },
  {
   "address": 43035,
   "type": "line",
   "text": "Places shot slot X's sprite from its maze position: X on screen = (shot X - scroll) x 2 + $38 with the high bit, Y = (shot Y - scroll) x 2 + $37. A shot off the left of the screen or below row $50 is ended instead."
  },
  {
   "address": 43092,
   "type": "line",
   "text": "Each of the four shot slots' contents: 0 empty; 1-4 a player's shot (the hero + 1; slots 2 and 3); 5 a monster's fireball and 6 a lobbed rock (slots 0 and 1); bit 7 set ends it."
  },
  {
   "address": 43093,
   "type": "line",
   "text": "Shot slot 1's contents."
  },
  {
   "address": 43094,
   "type": "line",
   "text": "Shot slot 2's contents (player one's shot)."
  },
  {
   "address": 43095,
   "type": "line",
   "text": "Shot slot 3's contents (player two's shot)."
  },
  {
   "address": 43096,
   "type": "line",
   "text": "Each shot's direction (0-7)."
  },
  {
   "address": 43100,
   "type": "line",
   "text": "Each shot's maze X."
  },
  {
   "address": 43104,
   "type": "line",
   "text": "Each shot's maze Y."
  },
  {
   "address": 43108,
   "type": "line",
   "text": "For a monster's shot (slots 0 and 1), the monster's slot in the monster table; $A866/$A867 are $FF for the players' slots. Then sixteen bytes no traced code reads by name, a pattern of direction steps: 0 4 4 4 0 $FC $FC $FC $FC $FC 0 4 4 4 0 $FC."
  },
  {
   "address": 43128,
   "type": "line",
   "text": "The first sprite shape of each slot's shots: $B8, $B8 (monsters), $D8, $F8 (players: within each player's block of shapes)."
  },
  {
   "address": 43132,
   "type": "line",
   "text": "How the Warrior's thrown axe turns every fourth frame, by direction: -1 or +1 to its shape."
  },
  {
   "address": 43140,
   "type": "line",
   "text": "For each shot in flight (not a rock): works out its tile and its 4-unit cell ($A93D, $A941) and what the shot does to the tile there (shot_tile)."
  },
  {
   "address": 43194,
   "type": "line",
   "text": "What a shot does to the tile it reaches. Floor: nothing. Tiles $14 (the jug) and $16 (the blue potion), the special potions $19-$1E and the jug $31 are destroyed with the shot ($AD30, the tile cleared, $B4EA). Walls, doors, the chest, $15, $17 and $32 stop the shot. $18, $1F, $2F, $30 and the exit $36 let it fly on. A generator ($20-$2E) loses the shot's power ($ACAB,x) from its value; below the threshold for its kind ($ACAF) it is destroyed ($AC17 scores, then as above); otherwise it is redrawn ($B517) and a player's shot scores ($AC17). A crumbling wall ($33-$35) moves one stage on, and the stage after $35 is cleared away."
  },
  {
   "address": 43310,
   "type": "line",
   "text": "Empties shot slot X and hides its sprite."
  },
  {
   "address": 43325,
   "type": "line",
   "text": "Each shot's X in 4-unit cells, for the monster test."
  },
  {
   "address": 43329,
   "type": "line",
   "text": "Each shot's Y in cells."
  },
  {
   "address": 43333,
   "type": "line",
   "text": "Tests monster Y (unless bit 3 of its flags, $0640, is set) against every shot in flight but its own and a rock still rising: a shot within one cell either way hits it and ends. A monster with strength ($0580) $C0 or more, Death, is not hurt: a player's shot adds 1 to the low byte of the score (decimal) and shows it ($AD16). Otherwise the strength drops by the shot's power ($ACBE,x) and the shot scores (shot_score); a monster left with less than nothing is taken off the map ($BDBF, $C35A with its position) and out of the table, the last monster moving into its slot and the count ($824E) going down; carry set."
  },
  {
   "address": 43534,
   "type": "line",
   "text": "Work: the tested monster's X / 2."
  },
  {
   "address": 43535,
   "type": "line",
   "text": "Work: the tested monster's Y / 2."
  },
  {
   "address": 43536,
   "type": "line",
   "text": "Runs shot_hits_monster for every monster in the table (0 to $824E, while it has any), not stepping on after a removal."
  },
  {
   "address": 43566,
   "type": "line",
   "text": "A demon (monster Y) shoots: with slot 1 or 0 free, puts a fireball (type 5) in it at the demon's place, heading the demon's facing (its strength's low three bits), shape $B8 + the direction, colour 7; marks the demon as having shot (bit 5 of its flags)."
  },
  {
   "address": 43639,
   "type": "line",
   "text": "A lobber (monster $824A) throws a rock about one time in eight (CIA 1 timer A's low bits): when the rock's path to its target works out (rock_path), a rock (type 6, shape $AD, colour 7) starts at the lobber, which is marked as having thrown (bit 5 of its flags), and sound $0C plays."
  },
  {
   "address": 43708,
   "type": "line",
   "text": "The colour of sprites 2-5: the shots in slots 0-3, and the level digits."
  },
  {
   "address": 43709,
   "type": "line",
   "text": "Slot 1's colour."
  },
  {
   "address": 43710,
   "type": "line",
   "text": "Slot 2's colour."
  },
  {
   "address": 43711,
   "type": "line",
   "text": "Slot 3's colour."
  },
  {
   "address": 43712,
   "type": "line",
   "text": "For each player and each shot in flight that is not the player's own: a shot in the same 8-unit square as the player hits it ($AC3E) and ends."
  },
  {
   "address": 43788,
   "type": "line",
   "text": "Works out a lobbed rock's flight for slot X from its distance to the target ($BF83, $BF85): the longer axis decides the number of steps (1-7, at most 15 for the height count), the step on each axis in two-unit moves with the signs put back, and the half-way count for the arc; carry set when both monster slots are busy or the target is too far."
  },
  {
   "address": 44001,
   "type": "line",
   "text": "rock_path's work bytes: the two distances with their signs ($ABE1-$ABE6), the step count and its half for each slot ($ABE7, $ABE9), the per-step X and Y moves ($ABEB, $ABED), and whether the axes were swapped ($ABEF)."
  },
  {
   "address": 44002,
   "type": "line",
   "text": "rock_path's X distance, halved."
  },
  {
   "address": 44003,
   "type": "line",
   "text": "rock_path's Y distance, signed."
  },
  {
   "address": 44004,
   "type": "line",
   "text": "The Y distance, halved."
  },
  {
   "address": 44005,
   "type": "line",
   "text": "The longer of the two, doubled."
  },
  {
   "address": 44006,
   "type": "line",
   "text": "The shorter, doubled."
  },
  {
   "address": 44007,
   "type": "line",
   "text": "Each rock slot's steps left."
  },
  {
   "address": 44009,
   "type": "line",
   "text": "Each rock slot's half-way step."
  },
  {
   "address": 44011,
   "type": "line",
   "text": "Each rock slot's X move per step."
  },
  {
   "address": 44013,
   "type": "line",
   "text": "Each rock slot's Y move per step."
  },
  {
   "address": 44015,
   "type": "line",
   "text": "Set when the X and Y axes were swapped."
  },
  {
   "address": 44016,
   "type": "line",
   "text": "Adds 5 (decimal) to the score of the player whose shot slot X is (2 or 3; monsters' shots score nothing), carrying through the three score bytes ($B929/$B92B/$B92D, $B92A/$B92C/$B92E), and raises $B65F to redraw the panel."
  },
  {
   "address": 44055,
   "type": "line",
   "text": "Adds 10 (decimal) to the score of the player whose shot or blow slot X is (2 or 3; nothing for X below 2), carrying through the score bytes, and raises $B65F to redraw the panel."
  },
  {
   "address": 44094,
   "type": "line",
   "text": "What a shot does to player Y it hits. A fireball (type 5) takes 10 health and a rock (type 6) 3, subtracted in decimal from the player's health ($B92F/$B931). A player's shot: on a level whose header sets bit 1 (\"shots now stun\") the player is frozen ($911E,y = 5); with bit 0 (\"shots now hurt\") it loses the shot's damage ($ACBE,x) / 4. A player whose health goes below zero gets $C40C,x raised. Raises $B65F and plays sound 8."
  },
  {
   "address": 44182,
   "type": "line",
   "text": "While a player's leave timer ($911E,x) runs, its stick reads as nothing pressed and its direction as none."
  },
  {
   "address": 44203,
   "type": "line",
   "text": "The power of a shot against generators, by shot slot: slots 0 and 1 (monsters' shots) 1; slots 2 and 3 are the players' ($ACAD)."
  },
  {
   "address": 44205,
   "type": "line",
   "text": "Each player's shot power against generators (shot slots 2 and 3), set by hero and by the shot-power potion."
  },
  {
   "address": 44207,
   "type": "line",
   "text": "For each generator tile ($20-$2E, three per kind, the strongest last), the value below which a hit destroys it: $20 $20 $20 $23 $23 $23 ... $2C $2C $2C. A hit lowers the tile's value, so a strong generator is first knocked down to a weaker one."
  },
  {
   "address": 44222,
   "type": "line",
   "text": "A shot's damage to monsters by shot slot: $40 for the monsters' slots 0 and 1; slots 2 and 3 are the players' ($ACC0)."
  },
  {
   "address": 44224,
   "type": "line",
   "text": "Each player's shot damage to monsters, set by hero and by the shot-power potion."
  },
  {
   "address": 44226,
   "type": "line",
   "text": "A shot's speed by slot, added to its direction to pick its step from $BE70/$BE80: 0 for slots 0 and 1; slots 2 and 3 are the players' ($ACC4)."
  },
  {
   "address": 44228,
   "type": "line",
   "text": "Each player's shot speed: 0, or 8 with the shot-speed potion; then two bytes of 1."
  },
  {
   "address": 44232,
   "type": "line",
   "text": "Each player's hand-to-hand power against generators."
  },
  {
   "address": 44234,
   "type": "line",
   "text": "Hand-to-hand damage to monsters by slot ($40, $40); the players' are at $ACCC."
  },
  {
   "address": 44236,
   "type": "line",
   "text": "Each player's hand-to-hand damage, set by hero and by the fight-power potion."
  },
  {
   "address": 44238,
   "type": "line",
   "text": "A player pushing into a generator (tile in A, $20-$2E) fights it: on every fourth call (fight_rate), the generator's value drops by the player's fight power ($ACC8); below its threshold it is cleared. Either way it is redrawn ($B517) and the player scores (score_generator)."
  },
  {
   "address": 44307,
   "type": "line",
   "text": "The countdown fight_generator uses per player, from 4."
  },
  {
   "address": 44310,
   "type": "line",
   "text": "After a hit on Death, takes the next value of death_scores (cycling through eight) into $AD27, which $C489 reads."
  },
  {
   "address": 44326,
   "type": "line",
   "text": "Counts Death hits, for death_points."
  },
  {
   "address": 44327,
   "type": "line",
   "text": "The value death_points last chose."
  },
  {
   "address": 44328,
   "type": "line",
   "text": "Eight values death_points cycles through: $40 $80 $60 $50 $70 $30 $20 $10."
  },
  {
   "address": 44336,
   "type": "line",
   "text": "A shot destroyed tile A: for tile $16 or $18-$1E it sets $BACD, which sets off a potion's effect ($BACE), and plays sound 5."
  },
  {
   "address": 44367,
   "type": "line",
   "text": "A potion's blast on the generator at ($8E),y (kind in A): its value drops by the player's magic ($A00A,x); below the threshold it is destroyed (scored, cleared, $B4EA), otherwise redrawn ($B517) and scored."
  },
  {
   "address": 44423,
   "type": "line",
   "text": "In a treasure room, every twelfth call takes a second off the clock ($ADB4) and the units digit sprite ($9157, shapes $A2-$AB) down by one, the tens digit ($9156) too when the units pass 0."
  },
  {
   "address": 44467,
   "type": "line",
   "text": "Counts the calls to treasure_clock between seconds, from $0B."
  },
  {
   "address": 44468,
   "type": "line",
   "text": "The seconds left in a treasure room; at zero the room ends (the main loop's test at $815A)."
  },
  {
   "address": 44469,
   "type": "line",
   "text": "Picks a treasure room's time at random (CIA 1 timer A's low bits): from treasure_times, 20 to 30 seconds, with the two digit sprites to match."
  },
  {
   "address": 44494,
   "type": "line",
   "text": "The units digit's sprite shape for each of the sixteen random times."
  },
  {
   "address": 44510,
   "type": "line",
   "text": "The tens digit's shape."
  },
  {
   "address": 44526,
   "type": "line",
   "text": "The sixteen times: 20 22 24 26 28 30 21 23 25 27 29 20 21 22 23 24."
  },
  {
   "address": 44542,
   "type": "line",
   "text": "The end of a treasure room: plays sound $10 and waits for it (sfx_wait), clears the takings of a player who did not escape ($AF38/$AF3A), clears the screen, prints each player's result (treasure_result), turns the tune player off (tune_on, tune_wanted $8249 and treasure_tune_due $B0FE cleared) and rewinds the treasure tune at $E800 (tune_init, which leaves it off until treasure_start turns it on), runs $CD77 and waits."
  },
  {
   "address": 44604,
   "type": "line",
   "text": "Prints player X's result in its hero colour: with nothing collected, \"NO BONUS\" and \"LOOKS LIKE YOU LOSE!\"; otherwise \"TREASURES nn\" and \"BONUS nn00\", the count ($AF3A) added in decimal to the score's middle byte, a hundred points a treasure."
  },
  {
   "address": 44636,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_treasures + 30 at $AF18, \"NO BONUS\"."
  },
  {
   "address": 44638,
   "type": "line",
   "text": "treasure_result goes on after \"NO BONUS\": \"LOOKS LIKE YOU LOSE!\" and the rows below."
  },
  {
   "address": 44644,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_treasures + 40 at $AF22, \"LOOKS LIKE YOU LOSE!\"."
  },
  {
   "address": 44646,
   "type": "line",
   "text": "treasure_result's rows after its strings."
  },
  {
   "address": 44678,
   "type": "line",
   "text": "Part of treasure_result: turns the treasure count's digits into one decimal byte and adds it to the score. Its address is also where pinn232 calls the BASIC ROM ($AE86), which the snapshot shows as this RAM beneath."
  },
  {
   "address": 44732,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_treasures at $AEFA, \"TREASURES\" and the count."
  },
  {
   "address": 44734,
   "type": "line",
   "text": "treasure_result goes on after \"TREASURES nn\": the BONUS line."
  },
  {
   "address": 44740,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): the BONUS line at $AF0A, \"BONUS\" and the bonus."
  },
  {
   "address": 44742,
   "type": "line",
   "text": "treasure_result's last rows."
  },
  {
   "address": 44752,
   "type": "line",
   "text": "The address of each hero's name for the message screens."
  },
  {
   "address": 44753,
   "type": "line",
   "text": "The high bytes of hero_name_ptrs."
  },
  {
   "address": 44760,
   "type": "line",
   "text": "The four heroes' names for the message screens, each a length, a colour and the glyphs: WARRIOR ($90-$97), VALKYRIE, WIZARD, ELF ($5B-$5E)."
  },
  {
   "address": 44770,
   "type": "line",
   "text": "\"VALKYRIE\" for the message screens."
  },
  {
   "address": 44780,
   "type": "line",
   "text": "\"WIZARD\"."
  },
  {
   "address": 44788,
   "type": "line",
   "text": "\"ELF\", in the panel font's own glyphs."
  },
  {
   "address": 44794,
   "type": "line",
   "text": "\"TREASURES \" and two digits ($AF08/$AF09), then \"BONUS \" and digits ($AF14), \"NO BONUS\" ($AF18) and \"LOOKS LIKE YOU LOSE!\" ($AF22): each a length, a colour and the text."
  },
  {
   "address": 44795,
   "type": "line",
   "text": "The TREASURES line's colour byte, set to the hero's colour."
  },
  {
   "address": 44808,
   "type": "line",
   "text": "The count's tens digit."
  },
  {
   "address": 44809,
   "type": "line",
   "text": "The count's units digit."
  },
  {
   "address": 44810,
   "type": "line",
   "text": "The BONUS line: length and colour."
  },
  {
   "address": 44811,
   "type": "line",
   "text": "Its colour byte, set to the hero's colour, then \"BONUS\"."
  },
  {
   "address": 44820,
   "type": "line",
   "text": "The bonus's first digit."
  },
  {
   "address": 44821,
   "type": "line",
   "text": "The bonus's second digit, then \"00\"."
  },
  {
   "address": 44824,
   "type": "line",
   "text": "\"NO BONUS\": length and colour."
  },
  {
   "address": 44825,
   "type": "line",
   "text": "Its colour byte, then the text."
  },
  {
   "address": 44834,
   "type": "line",
   "text": "\"LOOKS LIKE YOU LOSE!\": length and colour."
  },
  {
   "address": 44835,
   "type": "line",
   "text": "The colour byte of \"LOOKS LIKE YOU LOSE!\", set to the hero's colour, then its text."
  },
  {
   "address": 44856,
   "type": "line",
   "text": "Set for a player who leaves a treasure room through its exit, from the time left ($ADB4)."
  },
  {
   "address": 44857,
   "type": "line",
   "text": "Player two's escape flag."
  },
  {
   "address": 44858,
   "type": "line",
   "text": "The treasures each player picked up in a treasure room."
  },
  {
   "address": 44859,
   "type": "line",
   "text": "Player two's treasures."
  },
  {
   "address": 44860,
   "type": "line",
   "text": "Levels left before the next treasure room (level_pick)."
  },
  {
   "address": 44861,
   "type": "line",
   "text": "The rows text_row can choose for the message screens, colour RAM then screen: X = 0 colour $D918 and screen $4118, X = 2 colour $D878 and screen $4078."
  },
  {
   "address": 44862,
   "type": "line",
   "text": "The colour row addresses' high bytes."
  },
  {
   "address": 44865,
   "type": "line",
   "text": "The screen row addresses, low byte first."
  },
  {
   "address": 44866,
   "type": "line",
   "text": "Their high bytes."
  },
  {
   "address": 44869,
   "type": "line",
   "text": "Sets the frame counter $8247 to $C0 and waits until it comes round to zero: 64 frames."
  },
  {
   "address": 44880,
   "type": "line",
   "text": "Puts sprites 2-4 at X and Y 0."
  },
  {
   "address": 44901,
   "type": "line",
   "text": "Puts the scroll back to its rest position (fine Y 7, X 0), hides the digit sprites, then text_screen."
  },
  {
   "address": 44914,
   "type": "line",
   "text": "Turns the screen over to text: freezes both players, empties the four shot slots, hides sprites 4-7, colours sprites 2-5 blue (6), waits for the scrolling to stop, clears the screen at $4000 and its colour, shows it with no sprites, and sets the panel font (font select 8, $C60A)."
  },
  {
   "address": 45033,
   "type": "line",
   "text": "Picks the message screen's first row by the number of players in the game (two players start higher), then text_row."
  },
  {
   "address": 45043,
   "type": "line",
   "text": "Points $8C/$8D at a row of the message screen and $8E/$8F at its colour (text_rows, entry X)."
  },
  {
   "address": 45064,
   "type": "line",
   "text": "Prints a string centred on the row at $8C/$8D (colour at $8E/$8F). The string's address is the two bytes after the JSR, which this routine skips on return. A string is a length, a colour and the characters; each character is written less $20 (the font's own order) and its colour beside it; the row pointers then move down a row (text_next_row)."
  },
  {
   "address": 45168,
   "type": "line",
   "text": "Moves the text row pointers $8C/$8D and $8E/$8F down one row (40 bytes)."
  },
  {
   "address": 45195,
   "type": "line",
   "text": "The colour print_centred is writing in."
  },
  {
   "address": 45196,
   "type": "line",
   "text": "Turns the number in A (0-255) into three ASCII digits: hundreds in X, tens in Y, units in A."
  },
  {
   "address": 45224,
   "type": "line",
   "text": "The start of a treasure room: clears the screen, prints \"YOU HAVE FOUND A\" and the two rows of big letters \"TREASURE ROOM\", sets the clock (treasure_clock_set), prints the level's messages and asks for the treasure tune (treasure_tune_due)."
  },
  {
   "address": 45238,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_treasure_room at $B0FF, \"YOU HAVE FOUND A\"."
  },
  {
   "address": 45240,
   "type": "line",
   "text": "treasure_intro goes on after its first string: the big letters."
  },
  {
   "address": 45246,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): the top half of the big TREASURE ROOM at $B111."
  },
  {
   "address": 45248,
   "type": "line",
   "text": "After the top half of the big letters: the bottom half."
  },
  {
   "address": 45251,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): the bottom half of the big TREASURE ROOM at $B12D."
  },
  {
   "address": 45253,
   "type": "line",
   "text": "After the strings: the clock, the messages and the tune flag."
  },
  {
   "address": 45265,
   "type": "line",
   "text": "On the first pass of a treasure room: starts the tune at $E800 with the tune player (tune_start), runs $CD77, turns the tune on, and puts the clock's two digit sprites at X $A8 and $BC, Y $36."
  },
  {
   "address": 45310,
   "type": "line",
   "text": "Set by treasure_intro; treasure_start clears it once it has started the tune."
  },
  {
   "address": 45311,
   "type": "line",
   "text": "\"YOU HAVE FOUND A\" ($10 long, colour 1), then the big \"TREASURE ROOM\" in two rows of the font's large-letter glyphs ($E3-$F4 for the top halves at $B111, $03-$14 for the bottom at $B12D), $1A long, colour $0E."
  },
  {
   "address": 45329,
   "type": "line",
   "text": "The top half of the big \"TREASURE ROOM\"."
  },
  {
   "address": 45357,
   "type": "line",
   "text": "The bottom half."
  },
  {
   "address": 45385,
   "type": "line",
   "text": "Moves the text row pointers down X + 1 rows."
  },
  {
   "address": 45392,
   "type": "line",
   "text": "Prints player X's hero's name (from hero_name_ptrs, by writing the address into its own call's argument at $B164) and moves down a row."
  },
  {
   "address": 45412,
   "type": "line",
   "text": "print_hero_name's argument: the address of the hero's name, rewritten from hero_name_ptrs before the call."
  },
  {
   "address": 45413,
   "type": "line",
   "text": "The high byte of print_hero_name's argument."
  },
  {
   "address": 45414,
   "type": "line",
   "text": "print_hero_name goes on after its string: next row and return."
  },
  {
   "address": 45418,
   "type": "line",
   "text": "Every eighth pass (while somebody plays, or at once while a potion's blast is under way, $BACD), with fewer than 192 monsters: looks at the 16 x 10 tiles on screen (from map_x / 2, map_y / 2). A transporter ($30) is added to the list (teleport_add). A generator ($20-$2E) is hit by the blast if there is one (magic_generator), and picks a random direction (the CIA 1 timers mixed): if the cell that way is free (gen_spot), a monster of its kind comes out there (monster_spawn)."
  },
  {
   "address": 45581,
   "type": "line",
   "text": "Works out the cell beside the generator in direction X (gen_dx, gen_dy) as a position in $BE6E/$BE6F and asks whether it is free ($BDBF, $BE1A)."
  },
  {
   "address": 45616,
   "type": "line",
   "text": "Adds a monster to the table (unless it holds 192): its position from the generator's tile and the direction, its kind byte (monster_kinds for the generator's tile, ORed with the direction as its facing) in $0580, its flags cleared; then marks it in the maps ($BDDE) and draws it ($CAD3, $CB42)."
  },
  {
   "address": 45690,
   "type": "line",
   "text": "The monster byte for each generator tile $20-$2E: the level in bits 6-7 ($00, $40, $80) and the kind in bits 3-5, so three tiles to a kind: ghosts $20-$22, then four more kinds."
  },
  {
   "address": 45705,
   "type": "line",
   "text": "The X step for each of the eight directions: 0 1 1 1 0 -1 -1 -1."
  },
  {
   "address": 45713,
   "type": "line",
   "text": "The Y step: -1 -1 0 1 1 1 0 -1."
  },
  {
   "address": 45721,
   "type": "line",
   "text": "The generator being run, its tile less $20."
  },
  {
   "address": 45722,
   "type": "line",
   "text": "The tile column being looked at (generators_run, teleport_add, join_beside)."
  },
  {
   "address": 45723,
   "type": "line",
   "text": "The tile row being looked at."
  },
  {
   "address": 45724,
   "type": "line",
   "text": "generators_run's column counter."
  },
  {
   "address": 45725,
   "type": "line",
   "text": "generators_run's row counter."
  },
  {
   "address": 45726,
   "type": "line",
   "text": "A zero byte after the generator scan's counters."
  },
  {
   "address": 45727,
   "type": "line",
   "text": "A trap's effect: goes through the whole tile grid ($0C00-$0FFF), clearing every trap tile ($2F) and every tile with bit 7 set (the walls a trap takes away), each with its neighbours' brick joins put right (trap_wall_gone), and blanking their cells (cell_blank)."
  },
  {
   "address": 45770,
   "type": "line",
   "text": "Removes the wall at ($8C) whose low bits say which sides it joins (bit 0 above, 1 right, 2 below, 3 left): the wall on each of those sides has the matching join taken out of its shape (wall_unjoin), then the tile is cleared and its cells blanked."
  },
  {
   "address": 45908,
   "type": "line",
   "text": "Takes the join Y (wall_join_masks) out of the wall tile at ($8E), if it is a plain wall ($01-$0F); a wall left with no joins becomes $10; then redraws it (tile_draw)."
  },
  {
   "address": 45931,
   "type": "line",
   "text": "The masks wall_unjoin uses for the four sides: $0B $07 $0E $0D."
  },
  {
   "address": 45935,
   "type": "line",
   "text": "Runs the two door-opening processes (door_state $B4E7 and $B4E9, here as X 0 and 2), one step each per pass. A key starts both from the same door (door_unlock), spreading in different directions."
  },
  {
   "address": 45948,
   "type": "line",
   "text": "One step of a door opening: the state (8-11) says which way the opening is spreading; the door tile next to it that way (or across) is cleared and drawn as floor (door_clear), and the process moves on to it; with no door left that way it turns or stops. Bit 7 alternates the two directions it tries."
  },
  {
   "address": 46153,
   "type": "line",
   "text": "Points $8E/$8F at the tile left of the door process's tile ($B4E3)."
  },
  {
   "address": 46180,
   "type": "line",
   "text": "Points $8E/$8F at the tile to the right."
  },
  {
   "address": 46207,
   "type": "line",
   "text": "Points $8E/$8F at the tile above, wrapping within the grid."
  },
  {
   "address": 46229,
   "type": "line",
   "text": "Points $8E/$8F at the tile below."
  },
  {
   "address": 46251,
   "type": "line",
   "text": "Clears the tile at ($8E) (writes Y, 0), makes it the process's position and blanks its four character cells ($C369)."
  },
  {
   "address": 46296,
   "type": "line",
   "text": "Zero flag set when the tile at ($8E) is a door ($11 or $12)."
  },
  {
   "address": 46307,
   "type": "line",
   "text": "The tile address each door process has reached (two bytes for each)."
  },
  {
   "address": 46308,
   "type": "line",
   "text": "The first door process's tile address, high byte."
  },
  {
   "address": 46309,
   "type": "line",
   "text": "The second door process's tile address."
  },
  {
   "address": 46310,
   "type": "line",
   "text": "The high byte of the second door process's tile address."
  },
  {
   "address": 46311,
   "type": "line",
   "text": "The first door process: 0 none, 8-11 the direction it is spreading in, bit 7 which of two it tries next."
  },
  {
   "address": 46313,
   "type": "line",
   "text": "The second door process."
  },
  {
   "address": 46314,
   "type": "line",
   "text": "Writes zero into the four character map cells of the tile at ($8C) in the tile grid: the tile's graphics are gone."
  },
  {
   "address": 46359,
   "type": "line",
   "text": "Draws tile A at tile grid address ($8E) into the character map: its four characters from tile_chars ($F400 + tile x 4)."
  },
  {
   "address": 46423,
   "type": "line",
   "text": "Every twelfth pass (a game second) counts down $B65B. In stage 0, when it runs out, the doors open (idle_doors_open). In stage 1, after the next count, every wall becomes an exit (idle_walls_exit). A player firing puts the count back ($A75E), so it measures time without shooting."
  },
  {
   "address": 46465,
   "type": "line",
   "text": "The first stage: tiles from $11 to $12 (the doors) and every key become floor; plays sound $0E."
  },
  {
   "address": 46492,
   "type": "line",
   "text": "The second stage: tiles from $01 to $10 (the walls), the crumbling walls $33-$35 and the keys become exits ($36); plays sound $10."
  },
  {
   "address": 46515,
   "type": "line",
   "text": "Replaces every tile in the grid in the range idle_lo to idle_hi less one, and every key, by idle_new, and draws each one (tile_redraw); when idle_new is not zero the crumbling walls too."
  },
  {
   "address": 46579,
   "type": "line",
   "text": "Draws tile A at grid position Y of the page at $8F into the character map ($3000) and the colour map ($2000), characters from $F400 and colours from $F600 + tile x 4."
  },
  {
   "address": 46679,
   "type": "line",
   "text": "The lowest tile tiles_replace replaces."
  },
  {
   "address": 46680,
   "type": "line",
   "text": "One above the highest."
  },
  {
   "address": 46681,
   "type": "line",
   "text": "What it puts in their place."
  },
  {
   "address": 46682,
   "type": "line",
   "text": "The idle timer's stage: 0, 1, then 2 when both have happened."
  },
  {
   "address": 46683,
   "type": "line",
   "text": "The idle timer's count, in game seconds."
  },
  {
   "address": 46684,
   "type": "line",
   "text": "The count a shot puts back ($1E, 30 seconds)."
  },
  {
   "address": 46685,
   "type": "line",
   "text": "The count for the second stage ($96, 150)."
  },
  {
   "address": 46686,
   "type": "line",
   "text": "The count a shot puts back once the walls have become exits (idle_stage 2): $FF, though nothing counts down in that stage."
  },
  {
   "address": 46687,
   "type": "line",
   "text": "Raised by anything that changes what the panel shows; the panel is redrawn while it is non-zero."
  },
  {
   "address": 46688,
   "type": "line",
   "text": "The tile below which tile_blocks treats a tile as a wall: $13, or $11 for a player with keys."
  },
  {
   "address": 46689,
   "type": "line",
   "text": "Set when the player's keys and potions together reach the carrying limit: tile_blocks then lets keys and potions block the way like walls."
  },
  {
   "address": 46690,
   "type": "line",
   "text": "The tile the player is picking up."
  },
  {
   "address": 46691,
   "type": "line",
   "text": "The keys each player carries."
  },
  {
   "address": 46692,
   "type": "line",
   "text": "Player two's keys."
  },
  {
   "address": 46693,
   "type": "line",
   "text": "The potions each player carries."
  },
  {
   "address": 46694,
   "type": "line",
   "text": "Player two's potions."
  },
  {
   "address": 46695,
   "type": "line",
   "text": "Each player's limit of keys and potions together: 10, 15 with the carrying potion."
  },
  {
   "address": 46697,
   "type": "line",
   "text": "Each player's amulet countdown: set to $FF when it picks one up (amulet_take); while it runs the player's sprite flashes and its state is 3 (amulet_flash)."
  },
  {
   "address": 46699,
   "type": "line",
   "text": "ORed into player one's direction: $0F holds the player still (message screens, traps), 0 lets it move."
  },
  {
   "address": 46700,
   "type": "line",
   "text": "Player two's."
  },
  {
   "address": 46701,
   "type": "line",
   "text": "A joystick direction that overrides the stick's for each player, a direction code as the stick gives it (not a facing 0-7): exit_spin stores its spin_facings values here ($BAE3, from $BB26), and players_sprites reads it at $917A in place of the stick and turns it into a facing through facing_of_dir."
  },
  {
   "address": 46702,
   "type": "line",
   "text": "Player two's facing override."
  },
  {
   "address": 46703,
   "type": "line",
   "text": "Set to $30 for a player who steps into an exit ($B784); read by $BAD7."
  },
  {
   "address": 46705,
   "type": "line",
   "text": "Notes what player X is about to touch: of the eight tiles around it (pointers $B0-$BF), the one in the direction it pushes, if it is $11 or above, or $2F, $31 or $36; the tile goes into player_under and level_name,y, and its grid address into $C0/$C1 + 2X (touch_note)."
  },
  {
   "address": 46756,
   "type": "line",
   "text": "Copies the grid address of neighbour X into the player's $C0/$C1 pair."
  },
  {
   "address": 46778,
   "type": "line",
   "text": "For each player in the game, acts on the tile it touched: a transporter ($30) goes to teleport_try, a generator ($20-$2E) to fight_generator, the exit ($36) to pickup_take; anything else (below $20, or $2F and above) is cleared from the grid and goes to pickup_take."
  },
  {
   "address": 46848,
   "type": "line",
   "text": "Uses the transporter when the player is in the game and pushed into it this pass (player_moved)."
  },
  {
   "address": 46865,
   "type": "line",
   "text": "Picks up the tile in tile_touched for player X/2. The exit ($36) takes the player out of the level (exit_enter); otherwise the tile's cells are blanked and: a trap ($2F) springs (trap_set); the jug $31 is poison (poison_eaten); anything else from $11 runs the routine pickup_routines gives for it (its JMP at $B767 rewritten) after the sound pickup_sounds gives."
  },
  {
   "address": 46951,
   "type": "line",
   "text": "The JMP rewritten by pickup_take with the pickup's routine."
  },
  {
   "address": 46952,
   "type": "line",
   "text": "The low byte of pickup_jump's JMP, rewritten with the pickup's routine."
  },
  {
   "address": 46953,
   "type": "line",
   "text": "The high byte of pickup_jump's target."
  },
  {
   "address": 46954,
   "type": "line",
   "text": "Player X steps into an exit: its state gets bit 7 (leaving), its escape time is noted ($AF38 = treasure_time), it is frozen, exit_count set to $30 for the spin into the exit, $824C cleared and sound 6 started."
  },
  {
   "address": 46994,
   "type": "line",
   "text": "A trap: sets trap_pending, freezes both players and plays sound $10; the trap springs (trap_spring) when both sticks are let go (trap_wait)."
  },
  {
   "address": 47013,
   "type": "line",
   "text": "The poison: clears the screen, prints the hero's name, \"HAS JUST EATEN SOME\" and \"POISONED FOOD!\", applies the poison (poison), plays sound $10, waits and puts the maze back."
  },
  {
   "address": 47044,
   "type": "line",
   "text": "poison_eaten's first argument: the address of the hero's name, rewritten from hero_name_ptrs before the call."
  },
  {
   "address": 47045,
   "type": "line",
   "text": "The high byte of poison_eaten's first argument, the hero's name."
  },
  {
   "address": 47046,
   "type": "line",
   "text": "poison_eaten goes on after the hero's name: \"HAS JUST EATEN SOME\"."
  },
  {
   "address": 47052,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_poisoned at $B7E5, \"HAS JUST EATEN SOME\"."
  },
  {
   "address": 47054,
   "type": "line",
   "text": "After it: \"POISONED FOOD!\"."
  },
  {
   "address": 47060,
   "type": "line",
   "text": "The address of the string the call before prints (print_centred's argument): str_poisoned + 21 at $B7FA, \"POISONED FOOD\"."
  },
  {
   "address": 47062,
   "type": "line",
   "text": "After the strings: the poison's effect, the sound, the wait and the maze."
  },
  {
   "address": 47077,
   "type": "line",
   "text": "\"HAS JUST EATEN SOME\" ($13 long, colour 1) and \"POISONED FOOD!\" ($0D, at $B7FA)."
  },
  {
   "address": 47098,
   "type": "line",
   "text": "\"POISONED FOOD!\"."
  },
  {
   "address": 47114,
   "type": "line",
   "text": "Runs exit_spin for both players."
  },
  {
   "address": 47124,
   "type": "line",
   "text": "When a trap is pending and neither player pushes a direction: springs it (trap_spring), lets both players move again and clears the trap."
  },
  {
   "address": 47156,
   "type": "line",
   "text": "Set by trap_set until the trap springs."
  },
  {
   "address": 47157,
   "type": "line",
   "text": "The routine for each pickup tile from $11: doors $11 and $12 (door_unlock), chest $13 (chest_take), food $14 and $15 (food_eat), potions $16 and $17 (potion_take), the amulet $18 (amulet_take), the six special potions $19-$1E, the key $1F (key_take)."
  },
  {
   "address": 47158,
   "type": "line",
   "text": "pickup_routines read from its second byte."
  },
  {
   "address": 47187,
   "type": "line",
   "text": "The sound each pickup tile from $11 plays: $0E for the doors, $11 for most, 9 for the amulet, 7 for the key."
  },
  {
   "address": 47202,
   "type": "line",
   "text": "Opens a door with a key: starts both door processes from it, spreading in two directions (door_state $89 and $8B), takes a key and its icon from the panel, and scores 100 (score_100)."
  },
  {
   "address": 47249,
   "type": "line",
   "text": "Adds 1 to the middle byte of player X's score in decimal (100 points), carrying into the high byte, and raises panel_dirty."
  },
  {
   "address": 47272,
   "type": "line",
   "text": "Food: adds 100 to player X's health (in decimal, to the hundreds byte $B931) and scores 100."
  },
  {
   "address": 47285,
   "type": "line",
   "text": "A potion: draws its icon (glyph 4) in the panel, counting down from the block's right ($832F,x less the potions held), adds it to potions_held and scores 100."
  },
  {
   "address": 47309,
   "type": "line",
   "text": "The amulet: sets the amulet countdown to $FF and the player's state to 3, and scores 100."
  },
  {
   "address": 47322,
   "type": "line",
   "text": "24 bytes no traced code reaches: the same as potion_take but for the colour row ($DB98 in place of $DB9C)."
  },
  {
   "address": 47346,
   "type": "line",
   "text": "A key: draws its icon (glyph 3, colour 7) in the panel, adds it to keys_held and scores 100."
  },
  {
   "address": 47370,
   "type": "line",
   "text": "Takes one potion from player X and wipes its icon from the panel."
  },
  {
   "address": 47387,
   "type": "line",
   "text": "A treasure chest: counts it for the treasure room (treasures_got) and, on an ordinary level, scores 100."
  },
  {
   "address": 47399,
   "type": "line",
   "text": "The last two bytes of chest_take (its JMP's high byte and RTS), which the score routines name as a base: indexed with a shot slot (2 or 3), $B927 + X is score_lo."
  },
  {
   "address": 47401,
   "type": "line",
   "text": "The low byte of each player's score in decimal ($B929, $B92A); the middle bytes are at $B92B, the high at $B92D."
  },
  {
   "address": 47402,
   "type": "line",
   "text": "Player two's low score byte."
  },
  {
   "address": 47403,
   "type": "line",
   "text": "Player one's middle score byte (hundreds and thousands)."
  },
  {
   "address": 47404,
   "type": "line",
   "text": "Player two's middle score byte (hundreds and thousands)."
  },
  {
   "address": 47405,
   "type": "line",
   "text": "Player one's high score byte."
  },
  {
   "address": 47406,
   "type": "line",
   "text": "Player two's high score byte."
  },
  {
   "address": 47407,
   "type": "line",
   "text": "The low byte of each player's health, in decimal ($B92F, $B930): the tens and units."
  },
  {
   "address": 47408,
   "type": "line",
   "text": "Player two's health, tens and units, in decimal."
  },
  {
   "address": 47409,
   "type": "line",
   "text": "The high byte of each player's health in decimal, the thousands and hundreds: $20 is 2000."
  },
  {
   "address": 47410,
   "type": "line",
   "text": "Player two's health, thousands and hundreds, in decimal."
  },
  {
   "address": 47411,
   "type": "line",
   "text": "For each player in the game and not leaving: counts its freeze timer ($911E,x) down and takes one from its health in decimal; a player whose health goes below zero gets $C40C,x raised, its health set to zero, and leaves the game (player_leaves). Raises panel_dirty and counts magic_debounce down. The raster interrupt calls it every 64th frame, and every frame while $C40C/$C40D is set."
  },
  {
   "address": 47479,
   "type": "line",
   "text": "Takes out of the game each player whose $C40C,x is set (its health zeroed, player_leaves)."
  },
  {
   "address": 47507,
   "type": "line",
   "text": "For each player: one that has left the level (bit 6) has its sprite turned off; one with the amulet's countdown running has its sprite toggled every pass (the flicker of invisibility) and, when the countdown ends, its sprite back on and its state back to 1."
  },
  {
   "address": 47568,
   "type": "line",
   "text": "When panel_dirty is set: clears it and redraws both players' score and health digits (panel_digits)."
  },
  {
   "address": 47587,
   "type": "line",
   "text": "Writes player X's score (six digits from $B92D, $B92B, $B929) and health (four from $B931, $B92F) into the panel's third row, each digit as glyph $10 + its value."
  },
  {
   "address": 47718,
   "type": "line",
   "text": "Stops a held magic key from using a second potion: set to 2 when one is used, counted down by health_tick."
  },
  {
   "address": 47719,
   "type": "line",
   "text": "Reads the magic keys. Player one's is SPACE: its bit low in keyboard row 7 ($8821) but not in row 6 ($8822), which tells it from joystick one's fire button (low in every row). Player two's is any of F1, F3, F5, F7 (row 0, $8828) with row 1's bits 3 and 4 ($8827) high, the same test against the joystick. A player in the game and not leaving uses a potion (magic_use)."
  },
  {
   "address": 47781,
   "type": "line",
   "text": "Uses one of player X's potions when no blast is under way: starts the blast (blast_owner = X + 3), takes the potion (potion_drop), and plays sound 5; with no potion, sound $0D."
  },
  {
   "address": 47821,
   "type": "line",
   "text": "Non-zero while a potion's blast is under way: 1 for a shot potion, 3 or 4 for player one's or two's (the player + 3); the blast hits the generators (generators_run) and the monsters on screen (monsters_run)."
  },
  {
   "address": 47822,
   "type": "line",
   "text": "The spin of player X into an exit, while its state has bit 7 and not bit 6: the facing steps round (spin_facings) as exit_count runs down; at $0F the shapes switch to a smaller set ($18 on), and when the count is done the shapes go back, the state gets bit 6 (left the level), the sprite goes off and the players are unlinked."
  },
  {
   "address": 47910,
   "type": "line",
   "text": "The facings a player turns through going into an exit."
  },
  {
   "address": 47918,
   "type": "line",
   "text": "Moves the monsters on screen. With a potion's blast under way it goes to blast_hit. Otherwise, on three passes in four (bits 1-2 of pass_count $824B not both clear), it visits half the table and one more (monsters_left, from monster_count / 2), every second slot (monster_step), from where it stopped last time ($BE6D); past the last monster it starts again at slot 0 or slot 1, by bit 0 of pass_count, so each monster comes up on every second working pass. It stops early when the raster interrupt has given the go-ahead for the next pass (main_go, $8264) or there are 192 monsters. Only monsters on screen move (monster_on_screen)."
  },
  {
   "address": 48010,
   "type": "line",
   "text": "How many monsters monsters_run may still move this pass."
  },
  {
   "address": 48011,
   "type": "line",
   "text": "Moves monster Y if it is on screen (monster_on_screen, then monster_move $BD06) and steps Y on by two, to every second slot; when the move removed the monster, Y stays, for the monster moved into its slot."
  },
  {
   "address": 48027,
   "type": "line",
   "text": "A potion's blast: flashes the maze's second colour white ($D022), hits every monster on screen ($C429), clears blast_owner and puts the colour back ($0B)."
  },
  {
   "address": 48083,
   "type": "line",
   "text": "Carry clear when monster Y's position is within the 34 x 22 cells of the screen (map_x/map_y less one)."
  },
  {
   "address": 48119,
   "type": "line",
   "text": "A SEC byte between monster_on_screen's two returns that no code reaches."
  },
  {
   "address": 48120,
   "type": "line",
   "text": "monster_on_screen's return with the carry set (off screen)."
  },
  {
   "address": 48121,
   "type": "line",
   "text": "Monster Y next to player X attacks. Except for a ghost, a monster whose chosen facing is odd (monster_facings) does not. A monster on the player's very spot is removed (monster_remove); one more than four cells off on either axis does nothing. A ghost does not attack from a diagonal (ghost_diagonal). Then monster_hits ($C3AC) takes the health on alternate attempts and lets the player hit back; carry set from it means the player's blow killed the monster, and the routine returns. A ghost hits once and vanishes (taken off the map, $C584, and out of the table, sound 0); Death (kind 5) takes 4 health a touch (in decimal) while its drain count ($0700,y) lasts, the player leaving the game if its health runs out, and is removed when the count is used up; the other kinds play sound $0A. Carry set when the monster was removed."
  },
  {
   "address": 48283,
   "type": "line",
   "text": "Part of monster_attack: Death's touch, 4 health off in decimal and the player out of the game when it runs out. Its address is also where pinn232 calls the BASIC ROM ($BC9B)."
  },
  {
   "address": 48327,
   "type": "line",
   "text": "Takes monster Y out of the table: the last monster's X, Y, kind byte and flags ($0400, $04C0, $0580, $0640) move into its slot and the count goes down. Death's drain count ($0700) does not move with it, so a Death moved into the slot of a Death that drained its last touch takes over that count of 0, and its next touch (death_drain) wraps it to $FF."
  },
  {
   "address": 48362,
   "type": "line",
   "text": "Carry clear when the player is exactly four cells off on both axes, diagonally next to the monster."
  },
  {
   "address": 48390,
   "type": "line",
   "text": "Moves monster Y one step. Its old cells are cleared from the maps ($BDBF, $C35A); it picks a direction towards its target (monster_aim, which also runs the attack); with bit 0 of the result set and no attack it tries another way (monster_turn). Unless an attack happened, it looks one step along its facing (monster_next): if the cells there are free (monster_cells_free) it goes there, a sorcerer (kind 4) changing its visibility as it goes (bit 3 of its flags, with a count in bits 6-7); otherwise it stays and only turns. The monster is drawn where it ends up (character and colour, $CA7F/$CB5D, or $CBB1 for a sorcerer out of sight) and may shoot ($C49E)."
  },
  {
   "address": 48565,
   "type": "line",
   "text": "Ten bytes no traced code reaches: clear bit 5 of monster Y's flags and return with carry clear."
  },
  {
   "address": 48575,
   "type": "line",
   "text": "From the cell position in $BE6E/$BE6F, points $F7/$F8 at its colour map byte ($2000 page) and $F9/$FA at its character map byte ($3000 page)."
  },
  {
   "address": 48606,
   "type": "line",
   "text": "Points $FB and $FD at monster Y's tile graphics: its tile is $40 + its kind and facing ($0580 & $3F), four bytes each in tile_chars and the colour table."
  },
  {
   "address": 48620,
   "type": "line",
   "text": "The cell monster Y's facing leads to: its position plus one step (mon_dx/mon_dy) into $BE6E/$BE6F, kept even."
  },
  {
   "address": 48651,
   "type": "line",
   "text": "Zero when the monster's two-by-two cells at the new position are all empty and no attack has happened ($BFF1); at the map's right or bottom edge ($7E) it reads the wrapped cells."
  },
  {
   "address": 48666,
   "type": "line",
   "text": "Zero when the four character cells at ($F9) are all zero and $BFF1 is clear."
  },
  {
   "address": 48749,
   "type": "line",
   "text": "Where monsters_run starts next time."
  },
  {
   "address": 48750,
   "type": "line",
   "text": "A cell position being looked at (X), in the units of the monster table."
  },
  {
   "address": 48751,
   "type": "line",
   "text": "The Y of that position."
  },
  {
   "address": 48752,
   "type": "line",
   "text": "The Y step for each facing, two cells for monsters ($BE70-$BE77), three for fast shots ($BE78-$BE7F)."
  },
  {
   "address": 48768,
   "type": "line",
   "text": "The X step for each facing, two cells and three."
  },
  {
   "address": 48784,
   "type": "line",
   "text": "Aims monster Y: measures each target player's distance (in X, in Y, and the two added; a player leaving or under the amulet is ignored), picks the nearer (monster_target), and makes a facing towards it from the signs. A lobber (kind 3) nearer than $18 turns the other way, so lobbers keep their distance. Then the attack is tried (monster_attack); when it removed the monster, the caller's return is dropped."
  },
  {
   "address": 48979,
   "type": "line",
   "text": "Picks which player monsters go for: the nearer by the two distances monster_aim added up (target_dist, short across the map's edge, wrap_delta) when both are in the game, otherwise the one that is. The table target_of is indexed by which players are in the game, and its fourth entry is target_far itself."
  },
  {
   "address": 49022,
   "type": "line",
   "text": "The target player for each combination of players in the game."
  },
  {
   "address": 49025,
   "type": "line",
   "text": "Set when player two is the nearer."
  },
  {
   "address": 49026,
   "type": "line",
   "text": "The player being aimed at."
  },
  {
   "address": 49027,
   "type": "line",
   "text": "For each player, the monster's X distance from it, signed."
  },
  {
   "address": 49029,
   "type": "line",
   "text": "The Y distance."
  },
  {
   "address": 49031,
   "type": "line",
   "text": "For each player, the two distances added."
  },
  {
   "address": 49032,
   "type": "line",
   "text": "The monster's distance from player two, the two axes added."
  },
  {
   "address": 49033,
   "type": "line",
   "text": "The direction the monster wants, as stick bits."
  },
  {
   "address": 49034,
   "type": "line",
   "text": "4 when the monster runs away (its facing flipped), 0 otherwise."
  },
  {
   "address": 49035,
   "type": "line",
   "text": "The stick value for each of the sixteen direction-bit combinations a monster can want."
  },
  {
   "address": 49051,
   "type": "line",
   "text": "The facing for each combination."
  },
  {
   "address": 49066,
   "type": "line",
   "text": "The facing monster_aim chose."
  },
  {
   "address": 49067,
   "type": "line",
   "text": "Folds a difference on the 128-unit maze into -64 to 63, the short way round. The value is right; the flags it returns are not the value's: unfolded, they come from its CMP, which monster_aim's BMI reads as \"already positive\" and so takes the length right; folded, they come from the EOR, the value's own sign, and monster_aim then keeps that axis negative. A distance across the map's edge comes out short (the axis subtracted), which can make monster_target pick the farther player."
  },
  {
   "address": 49083,
   "type": "line",
   "text": "A blocked monster tries another way: one of four routines (turn_routines, picked by the facing) is called through the JSR at $BFD1, whose operand is rewritten; the facing chosen from the result goes into the monster's byte."
  },
  {
   "address": 49105,
   "type": "line",
   "text": "The JSR monster_turn rewrites with one of turn_routines."
  },
  {
   "address": 49106,
   "type": "line",
   "text": "The low byte of turn_call's target."
  },
  {
   "address": 49107,
   "type": "line",
   "text": "Its target, high byte; then monster_turn's tail, which turns the routine's answer into a facing."
  },
  {
   "address": 49137,
   "type": "line",
   "text": "Set when a monster has attacked this step (blocks its move)."
  },
  {
   "address": 49138,
   "type": "line",
   "text": "The four turning routines: $C105, $C27E, $C1C4, $C043."
  },
  {
   "address": 49139,
   "type": "line",
   "text": "turn_routines read from its second byte."
  },
  {
   "address": 49146,
   "type": "line",
   "text": "Six bytes after the turning routines' table: 0 0 1 8 0 0."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "Fourteen bytes before monsters_draw_all that no traced code reads by address: 8 2 0 0 2 4 0 0 4 1 0 0 $FF 1."
  },
  {
   "address": 49166,
   "type": "line",
   "text": "Draws every monster in the table into the maps at the start of a level: for each, its tile graphics (monster_tile_ptr) at its cell (cell_ptrs), colours ($CAEE) and characters (monster_draw)."
  },
  {
   "address": 49219,
   "type": "line",
   "text": "One of the four routines a blocked monster tries (turn_routines), each for one quarter of the facings: looks at the cells beside the monster's 2 x 2 block on the two sides that quarter faces (through turn_probe, or the wrapped cells at the map's right and bottom edges) and returns in $2A a bit for each blocked side; when neither side is blocked but the corner is, it gives one of the two, alternating each time (turn_alt_ul)."
  },
  {
   "address": 49412,
   "type": "line",
   "text": "Which side turn_up_left gives when only the corner is blocked; flipped each time."
  },
  {
   "address": 49413,
   "type": "line",
   "text": "The same test for the next quarter of the facings, alternating through turn_alt_ur."
  },
  {
   "address": 49603,
   "type": "line",
   "text": "turn_up_right's alternating choice."
  },
  {
   "address": 49604,
   "type": "line",
   "text": "The same test for another quarter, alternating through turn_alt_dl."
  },
  {
   "address": 49789,
   "type": "line",
   "text": "turn_down_left's alternating choice."
  },
  {
   "address": 49790,
   "type": "line",
   "text": "The same test for the last quarter, alternating through turn_alt_dr."
  },
  {
   "address": 49972,
   "type": "line",
   "text": "turn_down_right's alternating choice."
  },
  {
   "address": 49973,
   "type": "line",
   "text": "Points $F7/$F8 at the character map cell of the position in $C357/$C358 and sets the carry when the position is inside the map's top-left $7B, where no wrapping is needed."
  },
  {
   "address": 50006,
   "type": "line",
   "text": "A zero byte after turn_probe."
  },
  {
   "address": 50007,
   "type": "line",
   "text": "The cell turn_probe looks at (X), one up and left of the monster."
  },
  {
   "address": 50008,
   "type": "line",
   "text": "Its Y."
  },
  {
   "address": 50009,
   "type": "line",
   "text": "The facing monster_aim and monster_turn settled on for this monster."
  },
  {
   "address": 50010,
   "type": "line",
   "text": "Clears the four character cells of the monster at cell_pos_x/cell_pos_y (cell_unplot), with the maze's wrap at the right and bottom edges."
  },
  {
   "address": 50025,
   "type": "line",
   "text": "Zeroes the four character map cells at ($F9)."
  },
  {
   "address": 50092,
   "type": "line",
   "text": "A monster hits player X: on alternate attempts (bit 0 of its flags, toggled), the player loses health by the monster's level (monster_damage: 5, 8 or 10, in decimal), $C40C,x being raised when it runs out. Then the player may hit back (fight_back)."
  },
  {
   "address": 50165,
   "type": "line",
   "text": "The health a monster's blow takes by its level, two bytes each (one per player): 5, 8, 10."
  },
  {
   "address": 50171,
   "type": "line",
   "text": "The health a ghost's touch takes by its level: 10, 20, 30."
  },
  {
   "address": 50177,
   "type": "line",
   "text": "Eleven bytes nothing in the traced code reads by name: 0 1 9 8 $0A 2 6 4 5 0 0 (the code at $C40E would use them)."
  },
  {
   "address": 50188,
   "type": "line",
   "text": "Set when player one's health has run out; deaths takes it out of the game, and while it or dead_p2 is set the raster interrupt runs health_tick every frame."
  },
  {
   "address": 50189,
   "type": "line",
   "text": "Set when player two's health has run out."
  },
  {
   "address": 50190,
   "type": "line",
   "text": "27 bytes no traced code reaches: a routine that, after an attack, would set a bit for monster Y's facing in the table at $C40A."
  },
  {
   "address": 50217,
   "type": "line",
   "text": "A potion's blast on monster Y: the blast's player (blast_owner - 1) does its magic damage ($A00E,x) to the monster's strength; a monster with nothing left is removed and scores 10 (score_generator). Death (kind 5) always goes, scoring the next of death_scores for the player who used the potion."
  },
  {
   "address": 50251,
   "type": "line",
   "text": "Takes monster Y off the map (monster_unplot) and out of the table: the last monster's X, Y, kind byte and flags move into its slot (not Death's drain count at $0700, as in monster_remove) and the count goes down; carry set."
  },
  {
   "address": 50334,
   "type": "line",
   "text": "After its move, a demon (kind 2) may fire (fireball_fire): once in four moves (a count in bits 6-7 of its flags), when the target player is straight in line with it on an axis or a diagonal. A lobber (kind 3) throws a rock at the same rate (rock_throw)."
  },
  {
   "address": 50403,
   "type": "line",
   "text": "Work: the target's Y distance, compared with its X distance for a diagonal."
  },
  {
   "address": 50404,
   "type": "line",
   "text": "monster_shoot's lobber branch: the throw count in bits 6-7 of its flags, and rock_throw once in four moves."
  },
  {
   "address": 50426,
   "type": "line",
   "text": "After a monster's attack on player X, a player whose stick points at the monster (its facing, flipped when fleeing, through facing_stick) hits it: 25 points (fight_score) and the player's hand-to-hand damage ($ACCA,x) off its strength; with nothing left the monster dies (monster_kill). A ghost or Death cannot be fought. A blow that does not kill puts the idle timer back."
  },
  {
   "address": 50510,
   "type": "line",
   "text": "Puts the idle timer back after a blow that does not kill. It loads the stage into Y but indexes idle_reload with X, the player: player one's blow gives 30 and player two's 150 (idle_second), whatever the stage; shot_fire indexes with Y ($A761)."
  },
  {
   "address": 50521,
   "type": "line",
   "text": "Adds 25 (decimal) to player X's score and raises panel_dirty."
  },
  {
   "address": 50556,
   "type": "line",
   "text": "For each facing, the stick bits that point that way, active low."
  },
  {
   "address": 50564,
   "type": "line",
   "text": "A ghost's touch on player X: the health its level takes (ghost_damage, in decimal), $C40C,x being raised when it runs out."
  },
  {
   "address": 50616,
   "type": "line",
   "text": "Blanks the screen: clears bit 4 of $D011 and of its copy $8252."
  },
  {
   "address": 50633,
   "type": "line",
   "text": "Shows the screen again: sets bit 4 of $D011 and $8252."
  },
  {
   "address": 50650,
   "type": "line",
   "text": "Selects the video chip's bank A (0-3) on CIA 2's port A ($DD00, bits 0-1 inverted, made outputs in $DD02)."
  },
  {
   "address": 50677,
   "type": "line",
   "text": "Sets the screen's base in $D018's high nibble to A (in 1 KB steps within the bank)."
  },
  {
   "address": 50698,
   "type": "line",
   "text": "Sets the character base in $D018 (bits 1-3) to A (in 2 KB steps)."
  },
  {
   "address": 50716,
   "type": "line",
   "text": "Nine bytes no traced code reaches: sets bitmap mode (bit 5 of $D011)."
  },
  {
   "address": 50725,
   "type": "line",
   "text": "Builds the level from the file at $0A00: the maze's look (maze_style), an empty tile grid (grid_clear), a wall along the top row (grid_top_wall) and, unless the maze wraps left and right, along the left column (grid_left_wall); then works through the wall commands ($0A03 bytes from $0A04): a pair of bytes starts a line at a tile with a kind (wall_start), and each byte after it draws a run of tiles in one of eight directions (wall_run); then the objects (objects_place). Each wall tile is joined to its neighbours as it goes in."
  },
  {
   "address": 50818,
   "type": "line",
   "text": "Clears the tile grid $0C00-$0FFF."
  },
  {
   "address": 50837,
   "type": "line",
   "text": "Fills the grid's top row with tile $0A, a straight wall."
  },
  {
   "address": 50848,
   "type": "line",
   "text": "Unless bit 7 of the header wraps the maze, puts a wall down the grid's left column: $0F at the top, $05 below."
  },
  {
   "address": 50888,
   "type": "line",
   "text": "Zero when the wall-command bytes at Y and Y + 1 have the same top three bits."
  },
  {
   "address": 50905,
   "type": "line",
   "text": "A two-byte wall command: the kind from the first byte's top three bits (wall_kind), the column from its low five bits, the row from the second's; points $8C/$8D at the tile and puts the first piece there (wall_plot)."
  },
  {
   "address": 50954,
   "type": "line",
   "text": "A one-byte wall command: the top three bits are a direction (wall_steps), the low five one less than the run's length; each step puts a piece (wall_plot). A door or trap-wall line (kind $40 or $80) changes its kind by the direction (wall_kind_by_dir)."
  },
  {
   "address": 51023,
   "type": "line",
   "text": "Puts a piece of the line's kind (wall_tiles: an exit $36, a door $11 or $12, a removable wall $90, a wall $10) at ($8C) and joins it to the wall on each side (wall_join, four times)."
  },
  {
   "address": 51063,
   "type": "line",
   "text": "For side Y (the BIT instructions give the entries for 0, 4, 8 and 12: up, right, down, left): when the tile that way is a wall, each gets the other's join bit, so the brick pattern meets."
  },
  {
   "address": 51066,
   "type": "line",
   "text": "wall_join's entry for side 8 (down); the BIT instructions hide the other entries' loads."
  },
  {
   "address": 51069,
   "type": "line",
   "text": "wall_join's entry for side 4 (right)."
  },
  {
   "address": 51072,
   "type": "line",
   "text": "wall_join's entry for side 0 (up), the start of the shared code."
  },
  {
   "address": 51164,
   "type": "line",
   "text": "Points $8E/$8F at the tile beside ($8C) in direction Y (wall_steps), wrapping at the grid's edges; carry clear when it is empty or a wall."
  },
  {
   "address": 51259,
   "type": "line",
   "text": "Unpacks the object section of the level file (after the wall commands, to the length in $0A00 with bit 7 of $0A02 as its ninth bit) into the tile grid from $0C00. A byte with bit 7 set skips (byte - $80 + 1) tiles. Any other byte is a tile, put once, or, when the next byte is below $13, that many + 2 times (place_tile). The monster count starts empty ($824E = $FF)."
  },
  {
   "address": 51428,
   "type": "line",
   "text": "Counts one byte off the object section's length."
  },
  {
   "address": 51437,
   "type": "line",
   "text": "Puts the object tile (object_tile) at ($8C) and moves on: wall pieces are joined to their neighbours; an exit ($36) is counted (level_exits); a tile from $40 is a monster, added to the table (monster_from_level) and leaving the grid empty; $3F is the players' start (start_here)."
  },
  {
   "address": 51494,
   "type": "line",
   "text": "Adds the monster tile at ($8C) to the monster table: its position from the tile address, its level from the tile's low two bits, its kind from bits 3-5 (Death, kind 5, always $C0), a random facing and random flags (CIA 1 timer A)."
  },
  {
   "address": 51594,
   "type": "line",
   "text": "The players' start: notes the tile's grid address in $C0/$C1 and $C2/$C3, and its column and row in start_x and start_y."
  },
  {
   "address": 51633,
   "type": "line",
   "text": "For side Y (entries for 12, 8, 4, 0 by the BIT instructions): the wall beside loses its join bit for this side."
  },
  {
   "address": 51636,
   "type": "line",
   "text": "wall_unjoin_side's entry for side 8 (down)."
  },
  {
   "address": 51639,
   "type": "line",
   "text": "wall_unjoin_side's entry for side 4 (right)."
  },
  {
   "address": 51642,
   "type": "line",
   "text": "wall_unjoin_side's entry for side 0 (up), the start of the shared code."
  },
  {
   "address": 51687,
   "type": "line",
   "text": "The step in the 32 x 32 tile grid for each of the eight directions: -$20, -$1F, 1, $21, $20, $1F, -1, -$21."
  },
  {
   "address": 51688,
   "type": "line",
   "text": "wall_steps read from its second byte."
  },
  {
   "address": 51703,
   "type": "line",
   "text": "The join bit for each side, and the matching bit of the tile opposite: 4 1 8 2 1 4 2 8."
  },
  {
   "address": 51704,
   "type": "line",
   "text": "wall_join_bits read from its second byte: the opposite tile's bit."
  },
  {
   "address": 51711,
   "type": "line",
   "text": "The wall-command bytes still to read."
  },
  {
   "address": 51712,
   "type": "line",
   "text": "The exits in the level (counted as they are placed), and teleport_place's loop counter."
  },
  {
   "address": 51713,
   "type": "line",
   "text": "A tile column, for tile_at."
  },
  {
   "address": 51714,
   "type": "line",
   "text": "A tile row, for tile_at."
  },
  {
   "address": 51715,
   "type": "line",
   "text": "The kind of wall line being drawn (top three bits of its command)."
  },
  {
   "address": 51716,
   "type": "line",
   "text": "$80 for a wall that a trap takes away, ORed into the pieces."
  },
  {
   "address": 51717,
   "type": "line",
   "text": "Bit 7 of the neighbouring tile."
  },
  {
   "address": 51718,
   "type": "line",
   "text": "Bit 7 of the tile beside, for wall_unjoin_side."
  },
  {
   "address": 51719,
   "type": "line",
   "text": "The tile each wall kind puts down: 0, an exit $36, a vertical door $11, 0, a horizontal door $12, 0, a removable wall $90, a wall $10."
  },
  {
   "address": 51727,
   "type": "line",
   "text": "The kind a door line takes by its direction: $40 $80 $40 $80."
  },
  {
   "address": 51731,
   "type": "line",
   "text": "How many more times place_tile puts the object."
  },
  {
   "address": 51732,
   "type": "line",
   "text": "The tile being placed."
  },
  {
   "address": 51733,
   "type": "line",
   "text": "The tile column of tile_at."
  },
  {
   "address": 51734,
   "type": "line",
   "text": "The tile row of tile_at."
  },
  {
   "address": 51735,
   "type": "line",
   "text": "Reads the tile at (tile_col, tile_row) of the grid into object_tile, without bit 7."
  },
  {
   "address": 51778,
   "type": "line",
   "text": "Points $F7/$F8 at the colour map and $F9/$FA at the character map for the tile at (tile_col, tile_row) (two cells per tile), and $FB/$FC, $FD/$FE at the tile's four characters ($F400 + tile x 4) and colours ($F600 + tile x 4)."
  },
  {
   "address": 51839,
   "type": "line",
   "text": "Draws the monster's four characters at ($F9): straight (tile_plot) when its position is clear of the map's right and bottom edges, otherwise cell by cell through map_wrap_x."
  },
  {
   "address": 51923,
   "type": "line",
   "text": "Copies four characters from ($FB) into the 2 x 2 character map cells at ($F9)."
  },
  {
   "address": 51950,
   "type": "line",
   "text": "Writes the monster's four colours from ($FD) into the colour map at ($F7): straight (colour_plot) unless its position is at the right edge, where the cells wrap. Both of its edge tests compare cell_pos_x; the bottom edge (cell_pos_y) is never tested."
  },
  {
   "address": 52034,
   "type": "line",
   "text": "Copies four colours from ($FD) into the 2 x 2 colour map cells at ($F7)."
  },
  {
   "address": 52061,
   "type": "line",
   "text": "Colours the monster's four cells with one colour: from ($FD),3 cell by cell through map_wrap_x at the right edge, or ($FD),0 straight. Like monster_colour_wrapped, it tests cell_pos_x twice and never cell_pos_y."
  },
  {
   "address": 52145,
   "type": "line",
   "text": "Puts $5B in the monster's four character cells: an invisible sorcerer leaves its cells occupied (a character the maze font draws as floor) without drawing itself."
  },
  {
   "address": 52162,
   "type": "line",
   "text": "Draws the whole 32 x 32 tile grid into the character and colour maps, tile by tile (tile_at, tile_ptrs, tile_plot, colour_plot)."
  },
  {
   "address": 52198,
   "type": "line",
   "text": "When bit 2 of the level header $0A01 is set, keeps one exit at random (a random number below the level's exit count, from the CIA 1 timers) and clears the others from the grid."
  },
  {
   "address": 52274,
   "type": "line",
   "text": "After levels 1 and 4 (level_number 2 or 5), turns the labelled exit tiles $37 and $38 into plain exits ($36); exit_targets then sends each to its level by its place."
  },
  {
   "address": 52320,
   "type": "line",
   "text": "Moves every Death (kind 5) to the front of the monster table, each with a drain count of 50 ($0700: 50 touches of 4, the 200 health the manual names)."
  },
  {
   "address": 52351,
   "type": "line",
   "text": "Zero when monster Y is Death (kind bits $28)."
  },
  {
   "address": 52359,
   "type": "line",
   "text": "Swaps monster Y with the next slot at the front of the table and gives it its drain count."
  },
  {
   "address": 52422,
   "type": "line",
   "text": "A JMP $CD77 no traced code reaches."
  },
  {
   "address": 52425,
   "type": "line",
   "text": "The sound effect on voice 1: $FF for none, otherwise the steps it has played."
  },
  {
   "address": 52426,
   "type": "line",
   "text": "The sound effect on voice 2."
  },
  {
   "address": 52427,
   "type": "line",
   "text": "The sound effect on voice 3."
  },
  {
   "address": 52428,
   "type": "line",
   "text": "The effect number on each voice."
  },
  {
   "address": 52431,
   "type": "line",
   "text": "Work: the step's first byte (the waveform choice in the low nibble, sustain/release in the high)."
  },
  {
   "address": 52432,
   "type": "line",
   "text": "Work: the step's second byte (the pitch)."
  },
  {
   "address": 52433,
   "type": "line",
   "text": "The voice sfx_start picked."
  },
  {
   "address": 52434,
   "type": "line",
   "text": "A zero byte before sfx_play."
  },
  {
   "address": 52435,
   "type": "line",
   "text": "Called from the raster interrupt every frame: for each voice with an effect, plays its next step (two bytes from the stream at $A6/$A7, $A8/$A9, $AA/$AB through sfx_note); a step whose first byte is 0 ends the effect, zeroing the voice's frequency. For voice 3 that zeroing goes to $D414/$D415 (its sustain/release and the filter's cutoff) instead of its frequency at $D40E/$D40F."
  },
  {
   "address": 52599,
   "type": "line",
   "text": "Stops every effect and sets the SID's 25 registers from sid_init."
  },
  {
   "address": 52631,
   "type": "line",
   "text": "43 bytes no traced code reaches: an older SID set-up (writing $D421-$D423 and $D418, gates off, pulse width $08)."
  },
  {
   "address": 52674,
   "type": "line",
   "text": "The 25 values sfx_reset writes to $D400-$D418: pulse widths $08, volume $0F with the filter settings."
  },
  {
   "address": 52699,
   "type": "line",
   "text": "Starts sound effect A: while a tune plays it takes voice 1 (and stops the others' effects); otherwise a voice already playing the same effect, or a free one, or the one furthest through its effect. The effect's stream comes from the pointer table at $F000 (sfx_table, offsets from $F000)."
  },
  {
   "address": 52807,
   "type": "line",
   "text": "Plays one step on the voice at offset Y: the pitch byte, inverted and shifted, into the frequency registers; the gate restarted with attack/decay 0 and a waveform chosen by the first byte's low nibble (noise $81 when it is set, pulse $41 when it is zero); sustain/release from its high nibble; pulse width $08."
  },
  {
   "address": 52869,
   "type": "line",
   "text": "23 bytes no traced code reaches: set or clear the border colour, and wait for the raster line to change."
  },
  {
   "address": 52892,
   "type": "line",
   "text": "Waits until every sound effect has ended and the tune player has stopped; then clears the music flag $8249."
  },
  {
   "address": 52906,
   "type": "line",
   "text": "Waits until no voice has an effect playing."
  },
  {
   "address": 52920,
   "type": "line",
   "text": "325 bytes no traced code reaches: a garbled older copy of the sound-effect code (with addresses in the $CDA5 range), then runs of noise and padding to $CFFC."
  },
  {
   "address": 53245,
   "type": "line",
   "text": "Set once the heroes' graphics have been copied (heroes_load_shapes); the start-up skips the file loading when it is set."
  },
  {
   "address": 53246,
   "type": "line",
   "text": "The heroes chosen on the selection screen, one byte per player (the selection program writes them here)."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "The music player's per-frame entry (file PLAYER-$E000): when music_on is set, runs one frame of the tune (music_frame) and copies the 25 shadow registers (sid_shadow) to the SID at $D400-$D418. level_intro calls it once a frame while the level jingle plays."
  },
  {
   "address": 57347,
   "type": "line",
   "text": "The music player's start entry: A/X give the tune's address (the level jingle is at $EA00), kept in $02/$03; goes to music_setup."
  },
  {
   "address": 57374,
   "type": "line",
   "text": "One frame of the tune: advances the tempo counter (music_tempo_frac + music_tempo, carrying into music_tempo_count), then for each of the three voices runs its commands, counts its note down and applies its effects (vibrato, slides, pulse sweep, arpeggio), keeping each voice's stream pointer in music_stream_lo/hi."
  },
  {
   "address": 57493,
   "type": "line",
   "text": "The low byte of the JSR at $E094, rewritten with the handler of the command being run (music_commands)."
  },
  {
   "address": 57494,
   "type": "line",
   "text": "The high byte of that JSR's target."
  },
  {
   "address": 57574,
   "type": "line",
   "text": "Counts voice X's note down (music_note_count with music_note_long); near its end ($E640,x) it clears the gate bit in the shadow control register; when the note is over it resets the voice's effects and reads the next note: a byte of $80 or more is a pitch (plus the transposition $E5E6,x, turned into a frequency by music_freq, with the voice's other two arpeggio notes worked out the same way), 0 is a rest, and the byte after it is the length ($FF chains a tied note)."
  },
  {
   "address": 57828,
   "type": "line",
   "text": "Starts a tune: clears the player's 126 bytes of state from $E585, sets the gate-off times to 2, each voice's note count and $E61D to 1, takes the three voices' stream addresses from the tune's header (offsets added to the tune's address), silences the shadow registers (music_silence) and turns music_on on."
  },
  {
   "address": 57915,
   "type": "line",
   "text": "Command 29: stops the tune (music_on off) and silences the voices."
  },
  {
   "address": 57920,
   "type": "line",
   "text": "Writes $09 then $00 into each of the 24 shadow registers from $E685: the gates opened and closed with the test bit, silencing the voices."
  },
  {
   "address": 57936,
   "type": "line",
   "text": "Command 0: sets the volume and filter mode byte ($E69D, $D418's shadow)."
  },
  {
   "address": 57940,
   "type": "line",
   "text": "Command 2: sets voice X's waveform and gate byte ($E5F2,x)."
  },
  {
   "address": 57944,
   "type": "line",
   "text": "Command 1: sets voice X's attack/decay ($E5F8,x)."
  },
  {
   "address": 57948,
   "type": "line",
   "text": "Command 9: sets voice X's sustain/release ($E5EF,x)."
  },
  {
   "address": 57952,
   "type": "line",
   "text": "Command 15: repeats the stream from the first loop mark ($E604/$E607) the given number of times (counts in $E5E0/$E5FE)."
  },
  {
   "address": 57992,
   "type": "line",
   "text": "Command 16: sets the first loop mark at the current stream position."
  },
  {
   "address": 58003,
   "type": "line",
   "text": "Command 17: repeats from the second loop mark ($E60A/$E60D), counts in $E5E3/$E601."
  },
  {
   "address": 58043,
   "type": "line",
   "text": "Command 18: sets the second loop mark."
  },
  {
   "address": 58054,
   "type": "line",
   "text": "Command 19: sets voice X's transposition ($E5E6,x), added to every note's number."
  },
  {
   "address": 58058,
   "type": "line",
   "text": "Command 13: sets voice X's vibrato step ($E5FB,x)."
  },
  {
   "address": 58062,
   "type": "line",
   "text": "Command 11: sets the high byte of voice X's slide step ($E5EC,x)."
  },
  {
   "address": 58066,
   "type": "line",
   "text": "Command 12: sets the low byte of voice X's slide step ($E5E9,x)."
  },
  {
   "address": 58070,
   "type": "line",
   "text": "Command 3: sets voice X's pulse width high byte ($E5F5,x)."
  },
  {
   "address": 58074,
   "type": "line",
   "text": "Command 4: a value of 100 or more sets how many frames before a note's end its gate closes (value - 100, $E640,x); a smaller one sets the voice's arpeggio limit ($E589,y)."
  },
  {
   "address": 58089,
   "type": "line",
   "text": "Command 5: sets a per-voice arpeggio byte ($E58A,y)."
  },
  {
   "address": 58093,
   "type": "line",
   "text": "Command 6: a value of 99 or more names the voice whose new notes reset the tempo accumulator (value - 100, $E585); a smaller one sets the voice's waveform-table index ($E58B,y)."
  },
  {
   "address": 58108,
   "type": "line",
   "text": "Command 7: sets the voice's frequency effect ($E58C,y: 1 arpeggio between two notes, 2 a third)."
  },
  {
   "address": 58112,
   "type": "line",
   "text": "Command 14: sets voice X's slide mode ($E59E,x)."
  },
  {
   "address": 58116,
   "type": "line",
   "text": "Command 10: sets voice X's pulse sweep step ($E5AD,x)."
  },
  {
   "address": 58120,
   "type": "line",
   "text": "Command 8: sets the frames before voice X's slide starts ($E5A7,x)."
  },
  {
   "address": 58124,
   "type": "line",
   "text": "Command 20: sets voice X's vibrato limits from the two nibbles ($E5DA high, $E5DD low)."
  },
  {
   "address": 58141,
   "type": "line",
   "text": "Command 21: sets the length of each phase of voice X's pulse sweep ($E61D,x)."
  },
  {
   "address": 58145,
   "type": "line",
   "text": "Command 22: sets the filter's resonance and routing byte ($E69C, $D417's shadow)."
  },
  {
   "address": 58149,
   "type": "line",
   "text": "Command 23: sets the tempo value a resetting voice restores ($E59D)."
  },
  {
   "address": 58153,
   "type": "line",
   "text": "Command 25: adds to voice X's transposition."
  },
  {
   "address": 58161,
   "type": "line",
   "text": "Command 26: adds to the volume byte."
  },
  {
   "address": 58169,
   "type": "line",
   "text": "Command 27: sets the offset of voice X's second arpeggio note ($E5B9,x)."
  },
  {
   "address": 58173,
   "type": "line",
   "text": "Command 28: sets the tempo: the byte's top five bits the whole part ($E59C), the low three the fraction ($E59B)."
  },
  {
   "address": 58189,
   "type": "line",
   "text": "Command 30: sets the offset of voice X's first arpeggio note ($E5B6,x)."
  },
  {
   "address": 58193,
   "type": "line",
   "text": "Command 31: sets voice X's fine tuning, added to each frequency ($E5C8,x)."
  },
  {
   "address": 58197,
   "type": "line",
   "text": "Command 32: sets voice X's pulse sweep rate ($E5CB,x)."
  },
  {
   "address": 58201,
   "type": "line",
   "text": "Command 24: adds to the high byte of voice X's note count ($E5CE,x), lengthening the note."
  },
  {
   "address": 58209,
   "type": "line",
   "text": "Starts voice Y's slide once its delay ($E5A7) has passed."
  },
  {
   "address": 58224,
   "type": "line",
   "text": "Voice Y's vibrato: moves the shadow pulse width or frequency up and down by $E5FB between the limits $E5DA/$E5DD."
  },
  {
   "address": 58299,
   "type": "line",
   "text": "Sets voice X's shadow control byte from the waveform table ($E622, by its index $E58B) or from the voice's own control byte ($E588), depending on how far into the note the voice is ($E5AA) against its limit ($E589) and on the tick count's low bit."
  },
  {
   "address": 58353,
   "type": "line",
   "text": "Voice X's arpeggio: cycles the frequency through the note and its one or two arpeggio notes ($E5A1/$E5A4, $E5BC/$E5BF) on successive frames."
  },
  {
   "address": 58404,
   "type": "line",
   "text": "Voice Y's pulse sweep: steps the pulse width up or down by $E5B0 (which can grow by $E5CB each frame up to $E5AD) in four phases of $E61D frames."
  },
  {
   "address": 58481,
   "type": "line",
   "text": "Adds the sweep step to the voice's frequency/pulse pair ($E587/$E586) and its shadow registers."
  },
  {
   "address": 58502,
   "type": "line",
   "text": "Subtracts the sweep step."
  },
  {
   "address": 58527,
   "type": "line",
   "text": "Slide mode 1: moves the frequency towards the target note ($E5A1/$E5A4) by the slide step, stopping on it; modes 3 and 4 slide down or up without end."
  },
  {
   "address": 58614,
   "type": "line",
   "text": "Adds the slide step ($E5E9/$E5EC) to the voice's frequency."
  },
  {
   "address": 58633,
   "type": "line",
   "text": "Subtracts the slide step."
  },
  {
   "address": 58664,
   "type": "line",
   "text": "Copies the voice's frequency ($E586/$E587) into its shadow registers."
  },
  {
   "address": 58677,
   "type": "line",
   "text": "Turns a note number (from $80) into a SID frequency: takes octaves of 12 off the top until it is within the table's octave (music_freq_table, the top octave), then halves the frequency once for each octave taken off, and adds the voice's fine tuning; the result in $E612/$E613."
  },
  {
   "address": 58743,
   "type": "line",
   "text": "Steps the stream pointer $02/$03 past one two-byte command."
  },
  {
   "address": 58755,
   "type": "line",
   "text": "A zero byte before the player's state."
  },
  {
   "address": 58756,
   "type": "line",
   "text": "The start of the player's 126 bytes of state, which music_setup clears."
  },
  {
   "address": 58757,
   "type": "line",
   "text": "The voice whose new notes reset the tempo accumulator (command 6 with 99 or more)."
  },
  {
   "address": 58758,
   "type": "line",
   "text": "Each voice's frequency, high byte, seven bytes a voice (indexed 0, 7, 14 like the SID's registers, but laid out differently): the high byte comes before the low ($E587), and music_freq_out copies them to the shadow of the voice's SID +1 and +0; the voice's control byte is at +2 ($E588)."
  },
  {
   "address": 58759,
   "type": "line",
   "text": "Each voice's frequency, low byte."
  },
  {
   "address": 58760,
   "type": "line",
   "text": "Each voice's own control byte (waveform and gate)."
  },
  {
   "address": 58761,
   "type": "line",
   "text": "Each voice's arpeggio limit (command 4)."
  },
  {
   "address": 58762,
   "type": "line",
   "text": "Each voice's arpeggio byte (command 5)."
  },
  {
   "address": 58763,
   "type": "line",
   "text": "Each voice's waveform-table index (command 6)."
  },
  {
   "address": 58764,
   "type": "line",
   "text": "Each voice's frequency effect (command 7); the rest of the seven-byte group follows."
  },
  {
   "address": 58778,
   "type": "line",
   "text": "Work for music_setup: the high bytes of the three voices' start addresses."
  },
  {
   "address": 58779,
   "type": "line",
   "text": "The tempo's fractional step (command 28)."
  },
  {
   "address": 58780,
   "type": "line",
   "text": "The tempo's whole step."
  },
  {
   "address": 58781,
   "type": "line",
   "text": "The tempo a resetting voice restores (command 23), and music_setup's work."
  },
  {
   "address": 58782,
   "type": "line",
   "text": "Each voice's slide mode (command 14)."
  },
  {
   "address": 58785,
   "type": "line",
   "text": "Each voice's slide target or arpeggio note, high byte."
  },
  {
   "address": 58788,
   "type": "line",
   "text": "Its low byte."
  },
  {
   "address": 58791,
   "type": "line",
   "text": "Each voice's slide delay (command 8)."
  },
  {
   "address": 58794,
   "type": "line",
   "text": "Each voice's frames into its note."
  },
  {
   "address": 58797,
   "type": "line",
   "text": "Each voice's largest pulse sweep step (command 10)."
  },
  {
   "address": 58800,
   "type": "line",
   "text": "Each voice's pulse sweep step now."
  },
  {
   "address": 58803,
   "type": "line",
   "text": "Each voice's arpeggio phase, 0-2."
  },
  {
   "address": 58806,
   "type": "line",
   "text": "Each voice's first arpeggio offset (command 30)."
  },
  {
   "address": 58809,
   "type": "line",
   "text": "Each voice's second arpeggio offset (command 27)."
  },
  {
   "address": 58812,
   "type": "line",
   "text": "Each voice's second arpeggio note, low byte."
  },
  {
   "address": 58815,
   "type": "line",
   "text": "The high byte of each voice's second arpeggio note."
  },
  {
   "address": 58818,
   "type": "line",
   "text": "Each voice's tempo tick count."
  },
  {
   "address": 58821,
   "type": "line",
   "text": "Each voice's count of tempo ticks into the note."
  },
  {
   "address": 58824,
   "type": "line",
   "text": "Each voice's fine tuning (command 31)."
  },
  {
   "address": 58827,
   "type": "line",
   "text": "Each voice's pulse sweep rate (command 32)."
  },
  {
   "address": 58830,
   "type": "line",
   "text": "The high byte of each voice's note count."
  },
  {
   "address": 58833,
   "type": "line",
   "text": "Each voice's frames into its pulse sweep phase."
  },
  {
   "address": 58836,
   "type": "line",
   "text": "Each voice's pulse sweep phase, 0-3."
  },
  {
   "address": 58839,
   "type": "line",
   "text": "Each voice's vibrato direction."
  },
  {
   "address": 58842,
   "type": "line",
   "text": "Each voice's vibrato upper limit (command 20, high nibble)."
  },
  {
   "address": 58845,
   "type": "line",
   "text": "Each voice's vibrato lower limit (low nibble)."
  },
  {
   "address": 58848,
   "type": "line",
   "text": "Each voice's first repeat is running."
  },
  {
   "address": 58851,
   "type": "line",
   "text": "Each voice's second repeat is running."
  },
  {
   "address": 58854,
   "type": "line",
   "text": "Each voice's transposition (commands 19 and 25)."
  },
  {
   "address": 58857,
   "type": "line",
   "text": "Each voice's slide step, low byte (command 12)."
  },
  {
   "address": 58860,
   "type": "line",
   "text": "Each voice's slide step, high byte (command 11)."
  },
  {
   "address": 58863,
   "type": "line",
   "text": "Each voice's sustain/release (command 9)."
  },
  {
   "address": 58866,
   "type": "line",
   "text": "Each voice's waveform and gate (command 2)."
  },
  {
   "address": 58869,
   "type": "line",
   "text": "Each voice's pulse width high byte (command 3)."
  },
  {
   "address": 58872,
   "type": "line",
   "text": "Each voice's attack/decay (command 1)."
  },
  {
   "address": 58875,
   "type": "line",
   "text": "Each voice's vibrato step (command 13)."
  },
  {
   "address": 58878,
   "type": "line",
   "text": "Each voice's repeats left on the first loop."
  },
  {
   "address": 58881,
   "type": "line",
   "text": "Each voice's repeats left on the second loop."
  },
  {
   "address": 58884,
   "type": "line",
   "text": "Each voice's first loop mark, low byte."
  },
  {
   "address": 58887,
   "type": "line",
   "text": "The high byte of each voice's first loop mark."
  },
  {
   "address": 58890,
   "type": "line",
   "text": "Each voice's second loop mark, low byte."
  },
  {
   "address": 58893,
   "type": "line",
   "text": "The high byte of each voice's second loop mark."
  },
  {
   "address": 58896,
   "type": "line",
   "text": "Work: a note number or a command's value."
  },
  {
   "address": 58898,
   "type": "line",
   "text": "music_freq's result, high byte."
  },
  {
   "address": 58899,
   "type": "line",
   "text": "music_freq's result, low byte."
  },
  {
   "address": 58900,
   "type": "line",
   "text": "Each voice's frames left on its note (low byte)."
  },
  {
   "address": 58903,
   "type": "line",
   "text": "Each voice's stream pointer, high byte."
  },
  {
   "address": 58906,
   "type": "line",
   "text": "Each voice's stream pointer, low byte."
  },
  {
   "address": 58909,
   "type": "line",
   "text": "Each voice's pulse sweep phase length (command 21)."
  },
  {
   "address": 58912,
   "type": "line",
   "text": "Each voice's SID register offset: 0, 7, 14."
  },
  {
   "address": 58914,
   "type": "line",
   "text": "The waveforms command 6 picks, read from index 1: $41 pulse, $21 sawtooth, $11 triangle, $81 noise, $51 (index 0 is the last of the voice offsets, 14)."
  },
  {
   "address": 58920,
   "type": "line",
   "text": "The top octave's twelve frequencies, high byte first: $8368, $8B39 ... $F810, a semitone apart; music_freq halves them for lower octaves."
  },
  {
   "address": 58921,
   "type": "line",
   "text": "music_freq_table read from its second byte."
  },
  {
   "address": 58944,
   "type": "line",
   "text": "Each voice's gate-off time before a note's end (command 4 with 100 or more)."
  },
  {
   "address": 58945,
   "type": "line",
   "text": "The second voice's gate-off time."
  },
  {
   "address": 58946,
   "type": "line",
   "text": "The third voice's gate-off time."
  },
  {
   "address": 58947,
   "type": "line",
   "text": "The handlers of the 33 commands, in command order; a command byte n + 1 picks entry n."
  },
  {
   "address": 58948,
   "type": "line",
   "text": "music_commands read from its second byte."
  },
  {
   "address": 59013,
   "type": "line",
   "text": "The 25 SID registers as the player wants them, copied to $D400-$D418 each frame: voice 1 from $E685."
  },
  {
   "address": 59014,
   "type": "line",
   "text": "The shadow of voice 1's frequency high byte (each voice's at +7, +14)."
  },
  {
   "address": 59015,
   "type": "line",
   "text": "The shadow of voice 1's pulse width, low byte."
  },
  {
   "address": 59016,
   "type": "line",
   "text": "The shadow of voice 1's pulse width, high byte."
  },
  {
   "address": 59017,
   "type": "line",
   "text": "The shadow of voice 1's control register."
  },
  {
   "address": 59018,
   "type": "line",
   "text": "The shadow of voice 1's attack/decay."
  },
  {
   "address": 59019,
   "type": "line",
   "text": "The shadow of voice 1's sustain/release; voices 2 and 3 follow."
  },
  {
   "address": 59034,
   "type": "line",
   "text": "The tempo accumulator's fraction."
  },
  {
   "address": 59035,
   "type": "line",
   "text": "The tempo accumulator's whole part."
  },
  {
   "address": 59036,
   "type": "line",
   "text": "The shadow of $D417, the filter's resonance and routing."
  },
  {
   "address": 59037,
   "type": "line",
   "text": "The shadow of $D418, the filter mode and volume."
  },
  {
   "address": 59038,
   "type": "line",
   "text": "Non-zero while a tune plays; the start-up clears it, music_setup sets it, music_stop clears it."
  },
  {
   "address": 59039,
   "type": "line",
   "text": "The last 66 bytes of the file PLAYER-$E000, after the player's state: leftovers saved with it (the letters \"PINKY\" among them, at $E6AF); nothing reads them."
  },
  {
   "address": 59392,
   "type": "line",
   "text": "The file DATATREASURE 446: the treasure-room tune for the tune player (tune_start with $E800). It starts with a header of offsets ($0E, $80) which tune_init adds to $E800 to find the voices' streams of two-byte commands (tune_command)."
  },
  {
   "address": 59648,
   "type": "line",
   "text": "The rest of the treasure tune's streams."
  },
  {
   "address": 59904,
   "type": "line",
   "text": "The file DITTIDATA 146: the level jingle for the music player at $E000 (music_init with $EA00, from level_intro): a header of the voices' offsets ($3A, $64 ...), then each voice's commands and notes."
  },
  {
   "address": 61440,
   "type": "line",
   "text": "The file OBJDIS from its start: the offset from $F000 of each of the 18 sound effects' streams (0-$11), two bytes each, which sfx_start reads."
  },
  {
   "address": 61441,
   "type": "line",
   "text": "The offsets' high bytes."
  },
  {
   "address": 61476,
   "type": "line",
   "text": "The sound effects' streams: two bytes a frame (the first with sustain/release in its high nibble and the noise choice in its low, the second the pitch), each effect ending with a zero byte."
  },
  {
   "address": 61696,
   "type": "line",
   "text": "The sound effects' streams from $F100 to $F1FF."
  },
  {
   "address": 61952,
   "type": "line",
   "text": "The sound effects' streams from $F200 to $F2FF."
  },
  {
   "address": 62208,
   "type": "line",
   "text": "The last effect streams, to $F3EA."
  },
  {
   "address": 62443,
   "type": "line",
   "text": "Bytes after the last effect, before the tile table: nothing reads them."
  },
  {
   "address": 62464,
   "type": "line",
   "text": "The four characters of each of the 128 tiles (top left, top right, bottom left, bottom right), four bytes a tile: tile_draw, tile_redraw, drop_tile and level drawing read it."
  },
  {
   "address": 62720,
   "type": "line",
   "text": "The characters of tiles $40-$7F: the monsters (six kinds, eight facings)."
  },
  {
   "address": 62976,
   "type": "line",
   "text": "The colour of each tile, four bytes a tile (one per character); maze_style rewrites the walls' colours ($F604-$F643, $F6CC-$F6D7) per level."
  },
  {
   "address": 62980,
   "type": "line",
   "text": "The colours of tiles 1-16, the walls, set by maze_style."
  },
  {
   "address": 63180,
   "type": "line",
   "text": "The colours of tiles $33-$35, the crumbling walls, set by maze_style."
  },
  {
   "address": 63232,
   "type": "line",
   "text": "The colours of tiles $40-$7F, the monsters."
  },
  {
   "address": 65530,
   "type": "line",
   "text": "The hardware vectors in the RAM under the KERNAL: NMI $827F (nmi_rti), reset $0000 (unused: a reset reads the ROM), IRQ $8268 (irq_entry), set by irq_install."
  }
 ]
}