{
 "schema": 1,
 "platform": "spectrum",
 "game": "where-time-stood-still",
 "part": "main",
 "build": "Ocean's original 128K release (TOSEC: Where Time Stood Still (1988)(Ocean)(128K)[aka Land That Time Forgot, The][aka Tibet].tzx), a BASIC loader and SpeedLock 4 turbo blocks: the loading screen, 22,183 bytes of program, five 16 KB banks and 9,472 bytes of bank 7",
 "source": "control file",
 "regions": {
  "exclude": [
   [
    0,
    16383,
    "ROM"
   ],
   [
    16384,
    23295,
    "screen RAM"
   ],
   [
    16384,
    23295,
    "the loading screen, on show while the game loads; play draws over it"
   ]
  ],
  "extra": []
 },
 "blocks": [
  {
   "start": 16384,
   "end": 23295,
   "type": "Byte"
  },
  {
   "start": 23296,
   "end": 24319,
   "type": "Byte"
  },
  {
   "start": 24320,
   "end": 24575,
   "type": "Byte"
  },
  {
   "start": 24576,
   "end": 24807,
   "type": "Byte"
  },
  {
   "start": 24808,
   "end": 24996,
   "type": "Byte"
  },
  {
   "start": 24997,
   "end": 25764,
   "type": "Byte"
  },
  {
   "start": 25765,
   "end": 25860,
   "type": "Byte"
  },
  {
   "start": 25861,
   "end": 26628,
   "type": "Byte"
  },
  {
   "start": 26629,
   "end": 26640,
   "type": "Byte"
  },
  {
   "start": 26641,
   "end": 26711,
   "type": "Byte"
  },
  {
   "start": 26712,
   "end": 26712,
   "type": "Byte"
  },
  {
   "start": 26713,
   "end": 26882,
   "type": "Byte"
  },
  {
   "start": 26883,
   "end": 26972,
   "type": "Code"
  },
  {
   "start": 26973,
   "end": 27059,
   "type": "Byte"
  },
  {
   "start": 27060,
   "end": 28083,
   "type": "Byte"
  },
  {
   "start": 28084,
   "end": 28671,
   "type": "Byte"
  },
  {
   "start": 28672,
   "end": 28673,
   "type": "Code"
  },
  {
   "start": 28674,
   "end": 28674,
   "type": "Byte"
  },
  {
   "start": 28675,
   "end": 28699,
   "type": "Byte"
  },
  {
   "start": 28700,
   "end": 28724,
   "type": "Byte"
  },
  {
   "start": 28725,
   "end": 28749,
   "type": "Byte"
  },
  {
   "start": 28750,
   "end": 28750,
   "type": "Byte"
  },
  {
   "start": 28751,
   "end": 28771,
   "type": "Code"
  },
  {
   "start": 28772,
   "end": 28774,
   "type": "Code"
  },
  {
   "start": 28775,
   "end": 28790,
   "type": "Code"
  },
  {
   "start": 28791,
   "end": 28797,
   "type": "Code"
  },
  {
   "start": 28798,
   "end": 28862,
   "type": "Code"
  },
  {
   "start": 28863,
   "end": 28922,
   "type": "Word"
  },
  {
   "start": 28923,
   "end": 28948,
   "type": "Byte"
  },
  {
   "start": 28949,
   "end": 28950,
   "type": "Byte"
  },
  {
   "start": 28951,
   "end": 28959,
   "type": "Code"
  },
  {
   "start": 28960,
   "end": 28994,
   "type": "Code"
  },
  {
   "start": 28995,
   "end": 29008,
   "type": "Code"
  },
  {
   "start": 29009,
   "end": 29009,
   "type": "Code"
  },
  {
   "start": 29010,
   "end": 29012,
   "type": "Code"
  },
  {
   "start": 29013,
   "end": 29021,
   "type": "Code"
  },
  {
   "start": 29022,
   "end": 29063,
   "type": "Code"
  },
  {
   "start": 29064,
   "end": 29105,
   "type": "Code"
  },
  {
   "start": 29106,
   "end": 29137,
   "type": "Byte"
  },
  {
   "start": 29138,
   "end": 29169,
   "type": "Byte"
  },
  {
   "start": 29170,
   "end": 29201,
   "type": "Byte"
  },
  {
   "start": 29202,
   "end": 29243,
   "type": "Code"
  },
  {
   "start": 29244,
   "end": 29275,
   "type": "Byte"
  },
  {
   "start": 29276,
   "end": 29307,
   "type": "Byte"
  },
  {
   "start": 29308,
   "end": 29339,
   "type": "Byte"
  },
  {
   "start": 29340,
   "end": 29355,
   "type": "Byte"
  },
  {
   "start": 29356,
   "end": 29397,
   "type": "Code"
  },
  {
   "start": 29398,
   "end": 29406,
   "type": "Code"
  },
  {
   "start": 29407,
   "end": 29460,
   "type": "Code"
  },
  {
   "start": 29461,
   "end": 29496,
   "type": "Code"
  },
  {
   "start": 29497,
   "end": 29502,
   "type": "Code"
  },
  {
   "start": 29503,
   "end": 29700,
   "type": "Byte"
  },
  {
   "start": 29701,
   "end": 29898,
   "type": "Byte"
  },
  {
   "start": 29899,
   "end": 30096,
   "type": "Byte"
  },
  {
   "start": 30097,
   "end": 30132,
   "type": "Code"
  },
  {
   "start": 30133,
   "end": 30140,
   "type": "Byte"
  },
  {
   "start": 30141,
   "end": 30159,
   "type": "Code"
  },
  {
   "start": 30160,
   "end": 30162,
   "type": "Code"
  },
  {
   "start": 30163,
   "end": 30166,
   "type": "Code"
  },
  {
   "start": 30167,
   "end": 30168,
   "type": "Code"
  },
  {
   "start": 30169,
   "end": 30235,
   "type": "Code"
  },
  {
   "start": 30236,
   "end": 30316,
   "type": "Code"
  },
  {
   "start": 30317,
   "end": 30354,
   "type": "Code"
  },
  {
   "start": 30355,
   "end": 30418,
   "type": "Code"
  },
  {
   "start": 30419,
   "end": 30515,
   "type": "Code"
  },
  {
   "start": 30516,
   "end": 30555,
   "type": "Code"
  },
  {
   "start": 30556,
   "end": 30588,
   "type": "Code"
  },
  {
   "start": 30589,
   "end": 30612,
   "type": "Byte"
  },
  {
   "start": 30613,
   "end": 30996,
   "type": "Byte"
  },
  {
   "start": 30997,
   "end": 31011,
   "type": "Code"
  },
  {
   "start": 31012,
   "end": 31051,
   "type": "Code"
  },
  {
   "start": 31052,
   "end": 31073,
   "type": "Code"
  },
  {
   "start": 31074,
   "end": 31095,
   "type": "Code"
  },
  {
   "start": 31096,
   "end": 31106,
   "type": "Code"
  },
  {
   "start": 31107,
   "end": 31114,
   "type": "Code"
  },
  {
   "start": 31115,
   "end": 31118,
   "type": "Byte"
  },
  {
   "start": 31119,
   "end": 31124,
   "type": "Byte"
  },
  {
   "start": 31125,
   "end": 31300,
   "type": "Byte"
  },
  {
   "start": 31301,
   "end": 31396,
   "type": "Byte"
  },
  {
   "start": 31397,
   "end": 31492,
   "type": "Byte"
  },
  {
   "start": 31493,
   "end": 31564,
   "type": "Code"
  },
  {
   "start": 31565,
   "end": 31566,
   "type": "Byte"
  },
  {
   "start": 31567,
   "end": 31578,
   "type": "Code"
  },
  {
   "start": 31579,
   "end": 31591,
   "type": "Code"
  },
  {
   "start": 31592,
   "end": 31612,
   "type": "Byte"
  },
  {
   "start": 31613,
   "end": 31686,
   "type": "Word"
  },
  {
   "start": 31687,
   "end": 32218,
   "type": "Byte"
  },
  {
   "start": 32219,
   "end": 32672,
   "type": "Byte"
  },
  {
   "start": 32673,
   "end": 32709,
   "type": "Byte"
  },
  {
   "start": 32710,
   "end": 32738,
   "type": "Byte"
  },
  {
   "start": 32739,
   "end": 32767,
   "type": "Byte"
  },
  {
   "start": 32768,
   "end": 33023,
   "type": "Byte"
  },
  {
   "start": 33024,
   "end": 33279,
   "type": "Byte"
  },
  {
   "start": 33280,
   "end": 33535,
   "type": "Byte"
  },
  {
   "start": 33536,
   "end": 33791,
   "type": "Byte"
  },
  {
   "start": 33792,
   "end": 34048,
   "type": "Byte"
  },
  {
   "start": 34049,
   "end": 34080,
   "type": "Byte"
  },
  {
   "start": 34081,
   "end": 34120,
   "type": "Code"
  },
  {
   "start": 34121,
   "end": 34228,
   "type": "Code"
  },
  {
   "start": 34229,
   "end": 34273,
   "type": "Byte"
  },
  {
   "start": 34274,
   "end": 34465,
   "type": "Code"
  },
  {
   "start": 34466,
   "end": 34579,
   "type": "Code"
  },
  {
   "start": 34580,
   "end": 34594,
   "type": "Code"
  },
  {
   "start": 34595,
   "end": 34629,
   "type": "Code"
  },
  {
   "start": 34630,
   "end": 34662,
   "type": "Code"
  },
  {
   "start": 34663,
   "end": 34677,
   "type": "Code"
  },
  {
   "start": 34678,
   "end": 34692,
   "type": "Code"
  },
  {
   "start": 34693,
   "end": 34766,
   "type": "Code"
  },
  {
   "start": 34767,
   "end": 34936,
   "type": "Code"
  },
  {
   "start": 34937,
   "end": 35226,
   "type": "Code"
  },
  {
   "start": 35227,
   "end": 35482,
   "type": "Code"
  },
  {
   "start": 35483,
   "end": 35632,
   "type": "Code"
  },
  {
   "start": 35633,
   "end": 35694,
   "type": "Code"
  },
  {
   "start": 35695,
   "end": 35712,
   "type": "Code"
  },
  {
   "start": 35713,
   "end": 35880,
   "type": "Code"
  },
  {
   "start": 35881,
   "end": 35910,
   "type": "Code"
  },
  {
   "start": 35911,
   "end": 35930,
   "type": "Code"
  },
  {
   "start": 35931,
   "end": 35956,
   "type": "Code"
  },
  {
   "start": 35957,
   "end": 35961,
   "type": "Code"
  },
  {
   "start": 35962,
   "end": 35966,
   "type": "Code"
  },
  {
   "start": 35967,
   "end": 35970,
   "type": "Code"
  },
  {
   "start": 35971,
   "end": 35975,
   "type": "Code"
  },
  {
   "start": 35976,
   "end": 35980,
   "type": "Code"
  },
  {
   "start": 35981,
   "end": 35985,
   "type": "Code"
  },
  {
   "start": 35986,
   "end": 35988,
   "type": "Code"
  },
  {
   "start": 35989,
   "end": 36004,
   "type": "Code"
  },
  {
   "start": 36005,
   "end": 36018,
   "type": "Code"
  },
  {
   "start": 36019,
   "end": 36021,
   "type": "Code"
  },
  {
   "start": 36022,
   "end": 36047,
   "type": "Code"
  },
  {
   "start": 36048,
   "end": 36065,
   "type": "Code"
  },
  {
   "start": 36066,
   "end": 36084,
   "type": "Code"
  },
  {
   "start": 36085,
   "end": 36098,
   "type": "Byte"
  },
  {
   "start": 36099,
   "end": 36119,
   "type": "Byte"
  },
  {
   "start": 36120,
   "end": 36133,
   "type": "Byte"
  },
  {
   "start": 36134,
   "end": 36154,
   "type": "Byte"
  },
  {
   "start": 36155,
   "end": 36172,
   "type": "Byte"
  },
  {
   "start": 36173,
   "end": 36556,
   "type": "Word"
  },
  {
   "start": 36557,
   "end": 36557,
   "type": "Byte"
  },
  {
   "start": 36558,
   "end": 36567,
   "type": "Byte"
  },
  {
   "start": 36568,
   "end": 36825,
   "type": "Code"
  },
  {
   "start": 36826,
   "end": 36935,
   "type": "Code"
  },
  {
   "start": 36936,
   "end": 36945,
   "type": "Code"
  },
  {
   "start": 36946,
   "end": 36978,
   "type": "Code"
  },
  {
   "start": 36979,
   "end": 36996,
   "type": "Word"
  },
  {
   "start": 36997,
   "end": 37010,
   "type": "Code"
  },
  {
   "start": 37011,
   "end": 37014,
   "type": "Code"
  },
  {
   "start": 37015,
   "end": 37076,
   "type": "Code"
  },
  {
   "start": 37077,
   "end": 37085,
   "type": "Code"
  },
  {
   "start": 37086,
   "end": 37123,
   "type": "Code"
  },
  {
   "start": 37124,
   "end": 37373,
   "type": "Code"
  },
  {
   "start": 37374,
   "end": 37470,
   "type": "Code"
  },
  {
   "start": 37471,
   "end": 37478,
   "type": "Word"
  },
  {
   "start": 37479,
   "end": 37506,
   "type": "Word"
  },
  {
   "start": 37507,
   "end": 37527,
   "type": "Code"
  },
  {
   "start": 37528,
   "end": 37541,
   "type": "Code"
  },
  {
   "start": 37542,
   "end": 37557,
   "type": "Code"
  },
  {
   "start": 37558,
   "end": 37604,
   "type": "Code"
  },
  {
   "start": 37605,
   "end": 37657,
   "type": "Code"
  },
  {
   "start": 37658,
   "end": 37707,
   "type": "Code"
  },
  {
   "start": 37708,
   "end": 37711,
   "type": "Code"
  },
  {
   "start": 37712,
   "end": 37758,
   "type": "Code"
  },
  {
   "start": 37759,
   "end": 37779,
   "type": "Byte"
  },
  {
   "start": 37780,
   "end": 37796,
   "type": "Code"
  },
  {
   "start": 37797,
   "end": 37797,
   "type": "Byte"
  },
  {
   "start": 37798,
   "end": 37858,
   "type": "Code"
  },
  {
   "start": 37859,
   "end": 37866,
   "type": "Code"
  },
  {
   "start": 37867,
   "end": 37874,
   "type": "Code"
  },
  {
   "start": 37875,
   "end": 37906,
   "type": "Code"
  },
  {
   "start": 37907,
   "end": 37951,
   "type": "Code"
  },
  {
   "start": 37952,
   "end": 38180,
   "type": "Code"
  },
  {
   "start": 38181,
   "end": 38213,
   "type": "Code"
  },
  {
   "start": 38214,
   "end": 38335,
   "type": "Code"
  },
  {
   "start": 38336,
   "end": 38418,
   "type": "Code"
  },
  {
   "start": 38419,
   "end": 38434,
   "type": "Code"
  },
  {
   "start": 38435,
   "end": 38444,
   "type": "Code"
  },
  {
   "start": 38445,
   "end": 38447,
   "type": "Byte"
  },
  {
   "start": 38448,
   "end": 38458,
   "type": "Byte"
  },
  {
   "start": 38459,
   "end": 38546,
   "type": "Code"
  },
  {
   "start": 38547,
   "end": 38616,
   "type": "Code"
  },
  {
   "start": 38617,
   "end": 38672,
   "type": "Code"
  },
  {
   "start": 38673,
   "end": 38699,
   "type": "Code"
  },
  {
   "start": 38700,
   "end": 38726,
   "type": "Code"
  },
  {
   "start": 38727,
   "end": 38747,
   "type": "Code"
  },
  {
   "start": 38748,
   "end": 38768,
   "type": "Code"
  },
  {
   "start": 38769,
   "end": 38772,
   "type": "Code"
  },
  {
   "start": 38773,
   "end": 38794,
   "type": "Code"
  },
  {
   "start": 38795,
   "end": 38798,
   "type": "Code"
  },
  {
   "start": 38799,
   "end": 38819,
   "type": "Code"
  },
  {
   "start": 38820,
   "end": 38847,
   "type": "Code"
  },
  {
   "start": 38848,
   "end": 38876,
   "type": "Code"
  },
  {
   "start": 38877,
   "end": 38891,
   "type": "Code"
  },
  {
   "start": 38892,
   "end": 38906,
   "type": "Code"
  },
  {
   "start": 38907,
   "end": 38916,
   "type": "Code"
  },
  {
   "start": 38917,
   "end": 38926,
   "type": "Code"
  },
  {
   "start": 38927,
   "end": 38957,
   "type": "Code"
  },
  {
   "start": 38958,
   "end": 38986,
   "type": "Code"
  },
  {
   "start": 38987,
   "end": 39002,
   "type": "Code"
  },
  {
   "start": 39003,
   "end": 39018,
   "type": "Code"
  },
  {
   "start": 39019,
   "end": 39087,
   "type": "Code"
  },
  {
   "start": 39088,
   "end": 39156,
   "type": "Code"
  },
  {
   "start": 39157,
   "end": 39161,
   "type": "Code"
  },
  {
   "start": 39162,
   "end": 39166,
   "type": "Code"
  },
  {
   "start": 39167,
   "end": 39266,
   "type": "Code"
  },
  {
   "start": 39267,
   "end": 39302,
   "type": "Word"
  },
  {
   "start": 39303,
   "end": 39348,
   "type": "Code"
  },
  {
   "start": 39349,
   "end": 39440,
   "type": "Code"
  },
  {
   "start": 39441,
   "end": 39532,
   "type": "Code"
  },
  {
   "start": 39533,
   "end": 39556,
   "type": "Code"
  },
  {
   "start": 39557,
   "end": 39582,
   "type": "Code"
  },
  {
   "start": 39583,
   "end": 39776,
   "type": "Code"
  },
  {
   "start": 39777,
   "end": 39813,
   "type": "Code"
  },
  {
   "start": 39814,
   "end": 39951,
   "type": "Code"
  },
  {
   "start": 39952,
   "end": 40012,
   "type": "Code"
  },
  {
   "start": 40013,
   "end": 40072,
   "type": "Code"
  },
  {
   "start": 40073,
   "end": 40233,
   "type": "Code"
  },
  {
   "start": 40234,
   "end": 40356,
   "type": "Code"
  },
  {
   "start": 40357,
   "end": 40404,
   "type": "Code"
  },
  {
   "start": 40405,
   "end": 40436,
   "type": "Code"
  },
  {
   "start": 40437,
   "end": 40529,
   "type": "Code"
  },
  {
   "start": 40530,
   "end": 40690,
   "type": "Code"
  },
  {
   "start": 40691,
   "end": 40839,
   "type": "Code"
  },
  {
   "start": 40840,
   "end": 40908,
   "type": "Code"
  },
  {
   "start": 40909,
   "end": 40977,
   "type": "Code"
  },
  {
   "start": 40978,
   "end": 41016,
   "type": "Code"
  },
  {
   "start": 41017,
   "end": 41022,
   "type": "Byte"
  },
  {
   "start": 41023,
   "end": 41043,
   "type": "Byte"
  },
  {
   "start": 41044,
   "end": 41052,
   "type": "Byte"
  },
  {
   "start": 41053,
   "end": 41064,
   "type": "Word"
  },
  {
   "start": 41065,
   "end": 41080,
   "type": "Word"
  },
  {
   "start": 41081,
   "end": 41335,
   "type": "Code"
  },
  {
   "start": 41336,
   "end": 41590,
   "type": "Code"
  },
  {
   "start": 41591,
   "end": 41848,
   "type": "Code"
  },
  {
   "start": 41849,
   "end": 42101,
   "type": "Code"
  },
  {
   "start": 42102,
   "end": 42122,
   "type": "Code"
  },
  {
   "start": 42123,
   "end": 42130,
   "type": "Code"
  },
  {
   "start": 42131,
   "end": 42426,
   "type": "Code"
  },
  {
   "start": 42427,
   "end": 42478,
   "type": "Code"
  },
  {
   "start": 42479,
   "end": 42578,
   "type": "Code"
  },
  {
   "start": 42579,
   "end": 42716,
   "type": "Code"
  },
  {
   "start": 42717,
   "end": 42731,
   "type": "Code"
  },
  {
   "start": 42732,
   "end": 42739,
   "type": "Byte"
  },
  {
   "start": 42740,
   "end": 42788,
   "type": "Code"
  },
  {
   "start": 42789,
   "end": 42988,
   "type": "Code"
  },
  {
   "start": 42989,
   "end": 43009,
   "type": "Code"
  },
  {
   "start": 43010,
   "end": 43128,
   "type": "Code"
  },
  {
   "start": 43129,
   "end": 43250,
   "type": "Code"
  },
  {
   "start": 43251,
   "end": 43612,
   "type": "Code"
  },
  {
   "start": 43613,
   "end": 43627,
   "type": "Code"
  },
  {
   "start": 43628,
   "end": 43644,
   "type": "Byte"
  },
  {
   "start": 43645,
   "end": 43645,
   "type": "Byte"
  },
  {
   "start": 43646,
   "end": 43658,
   "type": "Byte"
  },
  {
   "start": 43659,
   "end": 43667,
   "type": "Code"
  },
  {
   "start": 43668,
   "end": 43736,
   "type": "Code"
  },
  {
   "start": 43737,
   "end": 43769,
   "type": "Code"
  },
  {
   "start": 43770,
   "end": 43780,
   "type": "Code"
  },
  {
   "start": 43781,
   "end": 43858,
   "type": "Code"
  },
  {
   "start": 43859,
   "end": 43876,
   "type": "Code"
  },
  {
   "start": 43877,
   "end": 43898,
   "type": "Code"
  },
  {
   "start": 43899,
   "end": 43917,
   "type": "Code"
  },
  {
   "start": 43918,
   "end": 43962,
   "type": "Code"
  },
  {
   "start": 43963,
   "end": 43999,
   "type": "Code"
  },
  {
   "start": 44000,
   "end": 44267,
   "type": "Code"
  },
  {
   "start": 44268,
   "end": 44446,
   "type": "Code"
  },
  {
   "start": 44447,
   "end": 44553,
   "type": "Code"
  },
  {
   "start": 44554,
   "end": 44559,
   "type": "Byte"
  },
  {
   "start": 44560,
   "end": 44674,
   "type": "Code"
  },
  {
   "start": 44675,
   "end": 44679,
   "type": "Code"
  },
  {
   "start": 44680,
   "end": 44702,
   "type": "Code"
  },
  {
   "start": 44703,
   "end": 44718,
   "type": "Code"
  },
  {
   "start": 44719,
   "end": 44742,
   "type": "Code"
  },
  {
   "start": 44743,
   "end": 44760,
   "type": "Code"
  },
  {
   "start": 44761,
   "end": 44778,
   "type": "Code"
  },
  {
   "start": 44779,
   "end": 44814,
   "type": "Byte"
  },
  {
   "start": 44815,
   "end": 44896,
   "type": "Code"
  },
  {
   "start": 44897,
   "end": 44952,
   "type": "Byte"
  },
  {
   "start": 44953,
   "end": 44961,
   "type": "Byte"
  },
  {
   "start": 44962,
   "end": 44985,
   "type": "Byte"
  },
  {
   "start": 44986,
   "end": 45025,
   "type": "Byte"
  },
  {
   "start": 45026,
   "end": 45035,
   "type": "Word"
  },
  {
   "start": 45036,
   "end": 45214,
   "type": "Code"
  },
  {
   "start": 45215,
   "end": 45237,
   "type": "Code"
  },
  {
   "start": 45238,
   "end": 45270,
   "type": "Code"
  },
  {
   "start": 45271,
   "end": 45278,
   "type": "Word"
  },
  {
   "start": 45279,
   "end": 45279,
   "type": "Byte"
  },
  {
   "start": 45280,
   "end": 45360,
   "type": "Byte"
  },
  {
   "start": 45361,
   "end": 45656,
   "type": "Byte"
  },
  {
   "start": 45657,
   "end": 46462,
   "type": "Byte"
  },
  {
   "start": 46463,
   "end": 46533,
   "type": "Code"
  },
  {
   "start": 46534,
   "end": 46588,
   "type": "Code"
  },
  {
   "start": 46589,
   "end": 46625,
   "type": "Code"
  },
  {
   "start": 46626,
   "end": 46667,
   "type": "Code"
  },
  {
   "start": 46668,
   "end": 46706,
   "type": "Code"
  },
  {
   "start": 46707,
   "end": 47730,
   "type": "Byte"
  },
  {
   "start": 47731,
   "end": 48754,
   "type": "Byte"
  },
  {
   "start": 48755,
   "end": 48815,
   "type": "Byte"
  },
  {
   "start": 48816,
   "end": 48823,
   "type": "Byte"
  },
  {
   "start": 48824,
   "end": 48829,
   "type": "Byte"
  },
  {
   "start": 48830,
   "end": 48863,
   "type": "Code"
  },
  {
   "start": 48864,
   "end": 48878,
   "type": "Code"
  },
  {
   "start": 48879,
   "end": 48936,
   "type": "Code"
  },
  {
   "start": 48937,
   "end": 48944,
   "type": "Byte"
  },
  {
   "start": 48945,
   "end": 49023,
   "type": "Byte"
  },
  {
   "start": 49024,
   "end": 49103,
   "type": "Byte"
  },
  {
   "start": 49104,
   "end": 49138,
   "type": "Byte"
  },
  {
   "start": 49139,
   "end": 49151,
   "type": "Byte"
  },
  {
   "start": 49152,
   "end": 50175,
   "type": "Byte"
  },
  {
   "start": 50176,
   "end": 51199,
   "type": "Byte"
  },
  {
   "start": 51200,
   "end": 51439,
   "type": "Byte"
  },
  {
   "start": 51440,
   "end": 52463,
   "type": "Byte"
  },
  {
   "start": 52464,
   "end": 53247,
   "type": "Byte"
  },
  {
   "start": 53248,
   "end": 54271,
   "type": "Byte"
  },
  {
   "start": 54272,
   "end": 55295,
   "type": "Byte"
  },
  {
   "start": 55296,
   "end": 56319,
   "type": "Byte"
  },
  {
   "start": 56320,
   "end": 57343,
   "type": "Byte"
  },
  {
   "start": 57344,
   "end": 58367,
   "type": "Byte"
  },
  {
   "start": 58368,
   "end": 59391,
   "type": "Byte"
  },
  {
   "start": 59392,
   "end": 59455,
   "type": "Byte"
  },
  {
   "start": 59456,
   "end": 59554,
   "type": "Byte"
  },
  {
   "start": 59555,
   "end": 59618,
   "type": "Byte"
  },
  {
   "start": 59619,
   "end": 60196,
   "type": "Byte"
  },
  {
   "start": 60197,
   "end": 60708,
   "type": "Byte"
  },
  {
   "start": 60709,
   "end": 61439,
   "type": "Byte"
  },
  {
   "start": 61440,
   "end": 61725,
   "type": "Byte"
  },
  {
   "start": 61726,
   "end": 62112,
   "type": "Byte"
  },
  {
   "start": 62113,
   "end": 62122,
   "type": "Byte"
  },
  {
   "start": 62123,
   "end": 62185,
   "type": "Code"
  },
  {
   "start": 62186,
   "end": 62232,
   "type": "Code"
  },
  {
   "start": 62233,
   "end": 62252,
   "type": "Code"
  },
  {
   "start": 62253,
   "end": 62331,
   "type": "Code"
  },
  {
   "start": 62332,
   "end": 62401,
   "type": "Code"
  },
  {
   "start": 62402,
   "end": 62466,
   "type": "Code"
  },
  {
   "start": 62467,
   "end": 62495,
   "type": "Code"
  },
  {
   "start": 62496,
   "end": 62523,
   "type": "Code"
  },
  {
   "start": 62524,
   "end": 62562,
   "type": "Code"
  },
  {
   "start": 62563,
   "end": 62564,
   "type": "Word"
  },
  {
   "start": 62565,
   "end": 62683,
   "type": "Code"
  },
  {
   "start": 62684,
   "end": 62781,
   "type": "Code"
  },
  {
   "start": 62782,
   "end": 62808,
   "type": "Code"
  },
  {
   "start": 62809,
   "end": 62845,
   "type": "Code"
  },
  {
   "start": 62846,
   "end": 62853,
   "type": "Word"
  },
  {
   "start": 62854,
   "end": 62913,
   "type": "Byte"
  },
  {
   "start": 62914,
   "end": 62940,
   "type": "Byte"
  },
  {
   "start": 62941,
   "end": 63064,
   "type": "Code"
  },
  {
   "start": 63065,
   "end": 63232,
   "type": "Code"
  },
  {
   "start": 63233,
   "end": 63237,
   "type": "Byte"
  },
  {
   "start": 63238,
   "end": 63255,
   "type": "Byte"
  },
  {
   "start": 63256,
   "end": 63365,
   "type": "Byte"
  },
  {
   "start": 63366,
   "end": 63533,
   "type": "Byte"
  },
  {
   "start": 63534,
   "end": 64557,
   "type": "Byte"
  },
  {
   "start": 64558,
   "end": 65028,
   "type": "Byte"
  },
  {
   "start": 65029,
   "end": 65242,
   "type": "Byte"
  },
  {
   "start": 65243,
   "end": 65350,
   "type": "Byte"
  },
  {
   "start": 65351,
   "end": 65478,
   "type": "Byte"
  },
  {
   "start": 65479,
   "end": 65535,
   "type": "Byte"
  }
 ],
 "symbols": [
  {
   "address": 23296,
   "name": "menu_contents",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24320,
   "name": "menu_contents_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24576,
   "name": "menu_contents_end_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24808,
   "name": "menu_attributes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24997,
   "name": "message_contents",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25765,
   "name": "message_attributes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25861,
   "name": "cell_map",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26629,
   "name": "key_pairs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26641,
   "name": "input_routine",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26712,
   "name": "unused_6858",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26713,
   "name": "area_08_scenery",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26883,
   "name": "shimmer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26973,
   "name": "shimmer_pattern",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27060,
   "name": "scenery_shapes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28084,
   "name": "scenery_shapes_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28672,
   "name": "snd_frame",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28674,
   "name": "snd_request",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28675,
   "name": "snd_chan_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28700,
   "name": "snd_chan_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28725,
   "name": "snd_chan_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28750,
   "name": "snd_pending",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28751,
   "name": "snd_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28772,
   "name": "snd_frame_jp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28775,
   "name": "snd_channel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28791,
   "name": "snd_silence",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28798,
   "name": "snd_sequencer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28863,
   "name": "snd_handlers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28923,
   "name": "snd_lengths",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28949,
   "name": "snd_tune",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28951,
   "name": "snd_tune1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28960,
   "name": "snd_tune2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28995,
   "name": "snd_tune3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29009,
   "name": "snd_ret",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29010,
   "name": "snd_jp_instr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29013,
   "name": "snd_tune5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29022,
   "name": "snd_tune15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29064,
   "name": "snd_tune17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29106,
   "name": "snd_pat_bass",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29138,
   "name": "snd_pat_b17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29170,
   "name": "snd_pat_a15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29202,
   "name": "snd_tune18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29244,
   "name": "snd_pat_a18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29276,
   "name": "snd_pat_b18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29308,
   "name": "snd_pat_b20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29340,
   "name": "snd_pat_a23",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29356,
   "name": "snd_tune20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29398,
   "name": "snd_tune22",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29407,
   "name": "snd_tune23",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29461,
   "name": "snd_tune24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29497,
   "name": "snd_tune26",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29503,
   "name": "snd_pat_a2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29701,
   "name": "snd_pat_b2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29899,
   "name": "snd_pat_c2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30097,
   "name": "snd_drum",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30133,
   "name": "snd_bits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30141,
   "name": "snd_note_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30160,
   "name": "snd_note_a_plain",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30163,
   "name": "snd_note_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30167,
   "name": "snd_note_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30169,
   "name": "snd_note",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30236,
   "name": "snd_pitch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30317,
   "name": "snd_envelope",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30355,
   "name": "snd_vibrato",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30419,
   "name": "snd_effects",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30516,
   "name": "snd_instrument",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30556,
   "name": "snd_instruments",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30589,
   "name": "snd_instr_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30613,
   "name": "snd_effect_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30997,
   "name": "snd_effect_mix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31012,
   "name": "snd_quiet",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31052,
   "name": "snd_divider",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31074,
   "name": "snd_next_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31096,
   "name": "snd_advance",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31107,
   "name": "snd_advance_to",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31115,
   "name": "snd_work",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31119,
   "name": "snd_frames",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31125,
   "name": "snd_vibrato_rows",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31301,
   "name": "snd_envelopes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31397,
   "name": "snd_periods",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31493,
   "name": "snd_write",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31565,
   "name": "snd_mixer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31567,
   "name": "ay_write_word",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31579,
   "name": "ay_write",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31592,
   "name": "shape_56",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31613,
   "name": "messages",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31687,
   "name": "message_texts",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32219,
   "name": "message_texts_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32673,
   "name": "names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32710,
   "name": "exclamations",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32739,
   "name": "after_texts",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "bit_reverse",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33024,
   "name": "left_masks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33280,
   "name": "right_masks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33536,
   "name": "actors",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33792,
   "name": "interrupt_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34049,
   "name": "record_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34081,
   "name": "start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34121,
   "name": "draw_frame",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34229,
   "name": "fill_85b5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34274,
   "name": "new_game",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34466,
   "name": "main_loop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34580,
   "name": "line_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34595,
   "name": "line_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34630,
   "name": "line_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34663,
   "name": "line_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34678,
   "name": "line_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34693,
   "name": "line_up_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34767,
   "name": "load_area",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34937,
   "name": "place_objects",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35227,
   "name": "stamp_piece",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35483,
   "name": "load_boxes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35633,
   "name": "translate_cell",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35695,
   "name": "restore_screen_x",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35713,
   "name": "leader_input",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35881,
   "name": "queue_message",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35911,
   "name": "day_night_colour",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35931,
   "name": "colour_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35957,
   "name": "page_bank_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35962,
   "name": "page_bank_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35967,
   "name": "page_bank_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35971,
   "name": "page_bank_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35976,
   "name": "page_bank_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35981,
   "name": "page_bank_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35986,
   "name": "page_bank_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35989,
   "name": "page_bank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36005,
   "name": "page_hidden_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36019,
   "name": "page_bank_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36022,
   "name": "copy_needs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36048,
   "name": "copy_from_bank1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36066,
   "name": "copy_from_bank6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36085,
   "name": "var_8cf5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36099,
   "name": "vars_8d03",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36120,
   "name": "vars_8d18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36134,
   "name": "message_queue",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36155,
   "name": "input_actions",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36173,
   "name": "screen_rows",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36557,
   "name": "leader_slope",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36558,
   "name": "leader_cell",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36568,
   "name": "animate_actors",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36826,
   "name": "start_animation",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36936,
   "name": "follow_actor",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36946,
   "name": "animation_event",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36979,
   "name": "animation_events",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36997,
   "name": "event_stun",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37011,
   "name": "event_clear",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37015,
   "name": "try_move",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37077,
   "name": "ground_cell",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37086,
   "name": "ground_cell_at",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37124,
   "name": "ground_allows",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37374,
   "name": "ground_slope",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37471,
   "name": "neighbour_offsets",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37479,
   "name": "ground_routines",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37507,
   "name": "ground_72",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37528,
   "name": "ground_73",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37542,
   "name": "ground_74",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37558,
   "name": "ground_75",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37605,
   "name": "ground_7e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37658,
   "name": "ground_76",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37708,
   "name": "ground_77",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37712,
   "name": "ground_78",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37759,
   "name": "fill_937f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37780,
   "name": "clear_ground_flag",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37797,
   "name": "byte_93a5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37798,
   "name": "ground_7d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37859,
   "name": "ground_79",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37867,
   "name": "ground_7c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37875,
   "name": "ground_7b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37907,
   "name": "ground_7a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37952,
   "name": "actor_collide",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38181,
   "name": "turn_aside",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38214,
   "name": "box_collide",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38336,
   "name": "find_cell_near",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38419,
   "name": "type_byte",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38435,
   "name": "times_four",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38445,
   "name": "box_count",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38448,
   "name": "view_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38459,
   "name": "show_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38547,
   "name": "scroll_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38617,
   "name": "scroll_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38673,
   "name": "scroll_left_half",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38700,
   "name": "scroll_right_half",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38727,
   "name": "scroll_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38748,
   "name": "scroll_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38769,
   "name": "scroll_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38773,
   "name": "scroll_0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38795,
   "name": "scroll_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38799,
   "name": "scroll_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38820,
   "name": "scroll_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38848,
   "name": "scroll_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38877,
   "name": "scroll_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38892,
   "name": "scroll_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38907,
   "name": "scroll_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38917,
   "name": "scroll_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38927,
   "name": "scroll_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38958,
   "name": "scroll_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38987,
   "name": "scroll_left_whole",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39003,
   "name": "scroll_right_whole",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39019,
   "name": "shift_buffer_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39088,
   "name": "shift_buffer_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39157,
   "name": "scroll_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39162,
   "name": "scroll_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39167,
   "name": "follow_leader",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39267,
   "name": "scroll_steps",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39303,
   "name": "show_frame",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39349,
   "name": "shift_pixels_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39441,
   "name": "shift_pixels_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39533,
   "name": "map_address",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39557,
   "name": "draw_right_column",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39583,
   "name": "draw_left_column",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39777,
   "name": "draw_bottom_row",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39814,
   "name": "draw_top_row",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39952,
   "name": "block_chars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40013,
   "name": "draw_char",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40073,
   "name": "draw_right_half_column",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40234,
   "name": "draw_char_left_half",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40357,
   "name": "draw_char_straddle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40405,
   "name": "draw_bottom_row_half",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40437,
   "name": "draw_top_row_half",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40530,
   "name": "draw_left_half_column",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40691,
   "name": "draw_char_right_half",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40840,
   "name": "move_buffer_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40909,
   "name": "move_buffer_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40978,
   "name": "draw_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41017,
   "name": "sprite_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41023,
   "name": "sink_counts",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41044,
   "name": "draw_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41053,
   "name": "store_patches_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41065,
   "name": "store_patches_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41081,
   "name": "draw_sprite_24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41336,
   "name": "draw_sprite_24_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41591,
   "name": "draw_sprite_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41849,
   "name": "draw_sprite_16_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42102,
   "name": "mirror_24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42123,
   "name": "mirror_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42131,
   "name": "set_up_sprite",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42427,
   "name": "coarse_position",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42479,
   "name": "patch_drawers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42579,
   "name": "clip_sprite",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42717,
   "name": "divide_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42732,
   "name": "occluder_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42740,
   "name": "draw_actors",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42789,
   "name": "draw_two_pieces",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 42989,
   "name": "shift_mask_half",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43010,
   "name": "next_to_draw",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43129,
   "name": "build_mask",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43251,
   "name": "cut_occluder",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43613,
   "name": "multiply",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43628,
   "name": "window_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43645,
   "name": "view_colour",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43646,
   "name": "message_window",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43659,
   "name": "set_bank6_word",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43668,
   "name": "windows_pass",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43737,
   "name": "open_message_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43770,
   "name": "open_window_2_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43781,
   "name": "open_window_1_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43859,
   "name": "close_message_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43877,
   "name": "close_window_1_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43899,
   "name": "close_window_2_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43918,
   "name": "close_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43963,
   "name": "draw_windows",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44000,
   "name": "draw_window",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44268,
   "name": "redraw_behind",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44447,
   "name": "draw_pointer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44554,
   "name": "fill_ae0a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44560,
   "name": "title",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44675,
   "name": "title_loop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44680,
   "name": "clear_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44703,
   "name": "print_counted",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44719,
   "name": "print_char",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44743,
   "name": "confirm",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44761,
   "name": "wait_y_or_n",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44779,
   "name": "title_strings",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44815,
   "name": "title_keys",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44897,
   "name": "define_strings",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44953,
   "name": "key_rows",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44962,
   "name": "key_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44986,
   "name": "key_chars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45026,
   "name": "key_prompt_places",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45036,
   "name": "define_keys",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45215,
   "name": "light_option",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45238,
   "name": "title_key",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45271,
   "name": "input_routines",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45279,
   "name": "chosen_option",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45280,
   "name": "title_lines",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45361,
   "name": "title_font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45657,
   "name": "logo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46463,
   "name": "read_keyboard",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46534,
   "name": "read_cursor",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46589,
   "name": "read_kempston",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46626,
   "name": "read_port_7f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46668,
   "name": "read_sinclair",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46707,
   "name": "view_buffer_rest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47731,
   "name": "view_buffer_rest_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48755,
   "name": "view_buffer_last",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48816,
   "name": "view_buffer_after",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48824,
   "name": "fill_beb8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48830,
   "name": "interrupt",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48864,
   "name": "caps_reset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48879,
   "name": "clock",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48937,
   "name": "clock_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48945,
   "name": "clock_after",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49024,
   "name": "digits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49104,
   "name": "fill_bfd0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49139,
   "name": "loader_stack",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49152,
   "name": "area_map",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50176,
   "name": "area_map_lower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51200,
   "name": "block_numbers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51440,
   "name": "block_defs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52464,
   "name": "block_defs_64",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53248,
   "name": "block_defs_113",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 54272,
   "name": "block_defs_177",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55296,
   "name": "block_defs_241",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 56320,
   "name": "block_defs_305",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57344,
   "name": "block_defs_369",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58368,
   "name": "block_defs_433",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59392,
   "name": "block_defs_497",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59456,
   "name": "char_bases",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59555,
   "name": "area_blocks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59619,
   "name": "area_block_lists",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60197,
   "name": "area_block_lists_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60709,
   "name": "tiles",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61440,
   "name": "tiles_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61726,
   "name": "tiles_113",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62113,
   "name": "panel_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62123,
   "name": "panel_pass",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62186,
   "name": "panel_portrait",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62233,
   "name": "panel_redraw",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62253,
   "name": "panel_digits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62332,
   "name": "panel_light",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62402,
   "name": "panel_bars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62467,
   "name": "bar_shrink",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62496,
   "name": "bar_grow",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62524,
   "name": "bar_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62563,
   "name": "calendar_cells",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62565,
   "name": "panel_calendar",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62684,
   "name": "calendar_day",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62782,
   "name": "calendar_digit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62809,
   "name": "calendar_picture",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62846,
   "name": "month_cells",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62854,
   "name": "calendar_pictures",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62914,
   "name": "light_pictures",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62941,
   "name": "shimmer_check",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63065,
   "name": "shimmer_clip",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63233,
   "name": "shimmer_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63238,
   "name": "shimmer_areas",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63256,
   "name": "shimmer_masks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63366,
   "name": "clive_frames",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63534,
   "name": "clive_graphics",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64558,
   "name": "clive_graphics_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65029,
   "name": "starting_values",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65243,
   "name": "frames_fedb",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65351,
   "name": "graphics_ff47",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65479,
   "name": "bank0_end",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 23296,
   "type": "line",
   "text": "The pixels of what the menus show, 21 characters across by 9 rows, row after row: bank 3 draws a menu here ($CF00, $D9A8) and both menu windows ($C8A6 and $C899 in bank 3) show it from here ($AA77 in their records). Zeros at the hand-over."
  },
  {
   "address": 24320,
   "type": "line",
   "text": "The last 488 bytes of the menus' pixels, to $60E7."
  },
  {
   "address": 24576,
   "type": "line",
   "text": "Continued from menu_contents_end ($5F00): its bytes from $6000."
  },
  {
   "address": 24808,
   "type": "line",
   "text": "The attributes of the menus' contents, 21 by 9, to $61A4 ($AA79 in the windows' records)."
  },
  {
   "address": 24997,
   "type": "line",
   "text": "The pixels of the conversation window's contents, 12 characters across ($AA7E), drawn by bank 3 ($D830, $D97E)."
  },
  {
   "address": 25765,
   "type": "line",
   "text": "The attributes of the conversation window's contents ($AA88)."
  },
  {
   "address": 25861,
   "type": "line",
   "text": "The play screen's frame and panel as 768 cell numbers, 32 across by 24 down, copied from bank 0's $C000 at the start ($8549): what $ACEC draws again behind a window. The panel's routines in bank 0 write into it: the leader's portrait ($6786), the three bars ($6789, $67A9, $67C9), the five digits ($6795), the calendar ($679D, $67BC) and the light ($67C0)."
  },
  {
   "address": 26629,
   "type": "line",
   "text": "The keys of the KEYBOARD option, each the high byte of its half row's port and its bit: SPACE ($6805, $7F and 1), kept so that it cannot be chosen, then the five the player chooses ($6807: west, east, north, south, fire). Those five are zeros at the hand-over."
  },
  {
   "address": 26641,
   "type": "line",
   "text": "Where the input routine for the option chosen on the title is copied ($AF52, 71 bytes), called once a pass by $8B81. Zeros in this snapshot, taken before the choice."
  },
  {
   "address": 26712,
   "type": "line",
   "text": "A byte before area 8's scenery record that no instruction in the code maps names."
  },
  {
   "address": 26713,
   "type": "line",
   "text": "Area 8's scenery record, here in main RAM where the other areas' are in bank 7 (bank 7's word for area 8 at $DB10 names it; $8A9B): 3 boxes of eight bytes for bank 4's list at $C000, 1 record of four bytes for bank 3's, then the area's map of 64 by 32 blocks, packed ($FF, a count and the block to repeat), to $6902."
  },
  {
   "address": 26883,
   "type": "line",
   "text": "Lights a rectangle of the view in the screen not shown, cell by cell, from the 24-bit-wide pattern at $695D ANDed with the region's mask at $8521: a cell whose bit is set gets the view's colour with BRIGHT, the others the plain colour. Bank 0's $F5DD prepares it and comes here with bank 7 paged in; it requests sound effect 14 on channel A ($7006) and turns the pattern a row ($6947), so the light moves from pass to pass."
  },
  {
   "address": 26973,
   "type": "line",
   "text": "29 rows of three bytes, the pattern $6903 lights the view's cells by, turned a row each pass."
  },
  {
   "address": 27060,
   "type": "line",
   "text": "The records of 40 of the scenery's shapes, here in main RAM, named by bank 4's word table at $FE28 ($A8F3 reads them): each a byte, four times the shape's width in blocks, then its blocks (bank 4's $C2C0) row by row. From $69B4 (shape 46) to $6FED (shape 83), then bytes to $6FFF."
  },
  {
   "address": 28084,
   "type": "line",
   "text": "Continued from scenery_shapes ($69B4): its bytes from $6DB4."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "The sound driver's entry, called once a frame by the interrupt handler ($BED0) whatever bank is paged in: everything it uses is here, below $C000. It steps the current tune or sound mode ($704F) and writes the three channels to the AY chip ($7B05)."
  },
  {
   "address": 28674,
   "type": "line",
   "text": "Tune request: a number written here (by the start-up, $852E, and by bank 3's music switch at $CD77 and new game at $E968) is taken up at the start of the next frame by $707E, which clears it. 14 starts the title and in-game music; 4 is the sound-effects-only mode the menu's music icon switches to."
  },
  {
   "address": 28675,
   "type": "line",
   "text": "Channel A's state, 25 bytes; channel B's follows at $701C and channel C's at $7035, the same layout, and the routines reach them through the offset in $7993 (0, $19 or $32). +4/+5 the pitch the note slides to and +6/+7 the pitch now, in 48ths of an octave (four to a semitone); +8/+9 the slide step; +$0A/+$0B the vibrato offset added to the pitch; +$0C/+$0D the AY tone period worked out from it; +$0E/+$0F frames since the note began; +$10 the vibrato's delay in frames; +$12 which 16-step vibrato row of $7995 it uses; +$13 the volume; +$14 which volume envelope of $7A45; +$15 the step through it (it stops at 15); +$16 frames to the next step and +$17 the frames between steps. +0 to +3 are used only in sound-effects mode ($76D3)."
  },
  {
   "address": 28700,
   "type": "line",
   "text": "Channel B's state, laid out as channel A's at $7003."
  },
  {
   "address": 28725,
   "type": "line",
   "text": "Channel C's state, laid out as channel A's at $7003."
  },
  {
   "address": 28750,
   "type": "line",
   "text": "The tune to start at the next frame (0 for none): set by a request, and by each section of a tune when it ends, to chain the next section."
  },
  {
   "address": 28751,
   "type": "line",
   "text": "The driver proper: the sequencer ($707E), then for each channel in turn ($7067: offsets 0, $19, $32) the vibrato, volume envelope and pitch slide, then the AY write ($7B05)."
  },
  {
   "address": 28772,
   "type": "line",
   "text": "A jump to $704F that nothing calls: a second entry to the driver's step."
  },
  {
   "address": 28775,
   "type": "line",
   "text": "One channel's frame, A the channel's offset in its state ($7993): the sound-effects shapes when tune 4 is on ($76D3), the volume envelope ($766D), the vibrato ($7693) and the pitch slide with the period it gives ($761C)."
  },
  {
   "address": 28791,
   "type": "line",
   "text": "Silences the chip: every channel's volume to 0 ($7924), then the registers written ($7B05). Nothing in the code map calls it; its address is stored as a word at $DAE8 in bank 0."
  },
  {
   "address": 28798,
   "type": "line",
   "text": "The sequencer. A request in $7002 is taken first: it becomes the pending tune, the request and the transposition ($7992) are cleared, the mixer is set to tones only ($38) and every channel silenced ($7924), and nothing else happens this frame. Otherwise a pending tune becomes the current one ($7115) with its step and frame counters cleared; then the current tune's handler is called through the table at $70BF (tune 0 is silence: the handler is a RET)."
  },
  {
   "address": 28863,
   "type": "line",
   "text": "The tune handlers, a word for each tune number 0 to 29. A tune is a chain of sections, each a number of its own: 5 to 14, 1 and 22 set the channels' instruments ($775C) and chain at once to the next number; 2, 15 to 21 and 23 to 25 play patterns; 3 replays 2 a semitone up or down alternately; 26 to 29 go back to 14, so the music loops. 4 does nothing here: sound-effects mode works in $76D3."
  },
  {
   "address": 28923,
   "type": "line",
   "text": "The length of each tune section in steps, a byte for each tune number from 0 to 25: when the step counter reaches it, $7978 chains the next number."
  },
  {
   "address": 28949,
   "type": "line",
   "text": "The tune number playing now (the high byte at $7116 is kept 0, so the pair is an index)."
  },
  {
   "address": 28951,
   "type": "line",
   "text": "Tune 1: the instruments for the second tune ($775C with 0, 8 and $10), then section 2. No instruction in the code writes 1 to the request at $7002: this tune is never started."
  },
  {
   "address": 28960,
   "type": "line",
   "text": "Tune 2, the second tune's 192 steps: a step every ten frames, channel A's notes from $733F (24 added, the high nibble the vibrato row), B's from $7405 (24 added) and C's from $74CB (none added), then on to section 3 at the end."
  },
  {
   "address": 28995,
   "type": "line",
   "text": "Tune 3: flips the transposition ($7992) between 0 and 1 semitone and plays section 2 again, so the second tune repeats a semitone up, then back."
  },
  {
   "address": 29009,
   "type": "line",
   "text": "A RET: tune 4's handler. Sound-effects mode has no notes of its own here."
  },
  {
   "address": 29010,
   "type": "line",
   "text": "A jump to $775C that nothing reaches: the bytes before the handler of tunes 5 to 14."
  },
  {
   "address": 29013,
   "type": "line",
   "text": "Tunes 5 to 14: the title music's instruments ($775C with 0, 8 and $10 for channels A, B and C) and on to the next number at once. A request for 14 starts the music here."
  },
  {
   "address": 29022,
   "type": "line",
   "text": "Tunes 15 and 16: a step every ten frames; channel A's note from $71F2 (its high nibble picks the vibrato row, its low nibble the note, plus 24), B's from $71B2 plus 19, and C's from the first eight bytes of $71B2 (the step modulo 8) plus 0; the noise drum on steps 2 and 6 of every eight ($7591 with $22); then the next step or section ($7978)."
  },
  {
   "address": 29064,
   "type": "line",
   "text": "Tune 17: as tunes 15 and 16 ($715E), with A's notes from $7212 and B's from $71D2. $7212 is the code of tune 18's section, so channel A plays those instructions' bytes as notes."
  },
  {
   "address": 29106,
   "type": "line",
   "text": "Pattern bytes for channels B and C in tunes 15 to 17 and 22, one note a step, 0 for none."
  },
  {
   "address": 29138,
   "type": "line",
   "text": "Channel B's notes in tune 17."
  },
  {
   "address": 29170,
   "type": "line",
   "text": "Channel A's notes in tunes 15 and 16, 32 steps: the high nibble picks the vibrato row, the low nibble the note."
  },
  {
   "address": 29202,
   "type": "line",
   "text": "Tunes 18 and 19: channel A from $723C, B from $725C, C from $71B2, the drum on steps 2 and 6, as in $715E."
  },
  {
   "address": 29244,
   "type": "line",
   "text": "Channel A's notes in tunes 18 to 21: high nibble the vibrato row, low nibble the note."
  },
  {
   "address": 29276,
   "type": "line",
   "text": "Channel B's notes in tunes 18 and 19; a note with bit 7 set slides to its pitch ($75DE)."
  },
  {
   "address": 29308,
   "type": "line",
   "text": "Channel B's notes in tunes 20 and 21."
  },
  {
   "address": 29340,
   "type": "line",
   "text": "Channel A's notes in tune 23; their high nibble sets the transposition."
  },
  {
   "address": 29356,
   "type": "line",
   "text": "Tunes 20 and 21: channel B from $727C, A from $723C, C from $71B2, the drum on steps 2 and 6."
  },
  {
   "address": 29398,
   "type": "line",
   "text": "Tune 22: new instruments ($775C with 8, 8 and $10), then section 23."
  },
  {
   "address": 29407,
   "type": "line",
   "text": "Tune 23: the step's top three bits (C, the step counter's low byte, from $794C) become the transposition ($7992): 0 for its first 32 steps and 1 for the last 32, where it is left. Channel A's note is taken from $729C by the step's low nibble, B's and C's from $71B2 by its low three bits."
  },
  {
   "address": 29461,
   "type": "line",
   "text": "Tunes 24 and 25: A from $71F2, B and C from $71B2, as in tune 15."
  },
  {
   "address": 29497,
   "type": "line",
   "text": "Tunes 26 to 29: back to section 14, so the title music loops. The transposition section 23 leaves at one semitone ($7992) is not cleared, so every time round after the first plays sections 15 to 21 a semitone higher."
  },
  {
   "address": 29503,
   "type": "line",
   "text": "Channel A's 192 notes in the second tune (sections 2 and 3)."
  },
  {
   "address": 29701,
   "type": "line",
   "text": "Channel B's 192 notes in the second tune."
  },
  {
   "address": 29899,
   "type": "line",
   "text": "Channel C's 192 notes in the second tune."
  },
  {
   "address": 30097,
   "type": "line",
   "text": "The drum: on the steps whose bit is set in E (the step modulo 8 picks the bit from $75B5), the noise period is set to 0 and the mixer to $30, noise on channel A, and the speaker bit of port $FE is set, with the border black; otherwise the mixer is tones only ($38)."
  },
  {
   "address": 30133,
   "type": "line",
   "text": "The eight bit masks $80 to $01, a step modulo 8 to a bit."
  },
  {
   "address": 30141,
   "type": "line",
   "text": "Channel A's note for this step, from the pattern at HL indexed by the step (BC): 0 is no new note; the high nibble goes to the channel's vibrato row (+$12) and the low nibble is the note."
  },
  {
   "address": 30160,
   "type": "line",
   "text": "Channel A's note as a whole byte. Not reached in the code map."
  },
  {
   "address": 30163,
   "type": "line",
   "text": "Channel B's note for this step, from the pattern at HL indexed by BC, E added."
  },
  {
   "address": 30167,
   "type": "line",
   "text": "Channel C's note for this step, from the pattern at HL indexed by BC, E added."
  },
  {
   "address": 30169,
   "type": "line",
   "text": "Starts a note on the channel whose offset is in A: the pattern byte's low 7 bits plus the transposition ($7992) plus E, times four, is the new target pitch; with bit 7 clear the pitch jumps there, with it set it slides from the pitch now. The note's frame counter is cleared, its envelope starts again (step $FF, a step next frame) ($7604)."
  },
  {
   "address": 30236,
   "type": "line",
   "text": "A channel's pitch slide and period: the pitch now moves by the slide step towards the target (it is not clamped, so a step that does not divide the distance overshoots), the vibrato offset is added, and the result becomes an AY period: the octave is the pitch divided by 48, the remainder picks a period from $7AA5, halved once more than the octave number. Interrupts are off meanwhile: it reads and writes the channel's state through the stack pointer."
  },
  {
   "address": 30317,
   "type": "line",
   "text": "A channel's volume envelope: every +$17 frames the step moves on, up to 15, and the volume is read from the envelope table at $7A45, the channel's row (+$14) plus the step."
  },
  {
   "address": 30355,
   "type": "line",
   "text": "A channel's vibrato: counts the note's frames, and once more have passed than its delay (+$10) the offset is read from $7995, the channel's row (+$12) plus the frame count modulo 16, sign extended; before that it is 0."
  },
  {
   "address": 30419,
   "type": "line",
   "text": "Sound-effects mode (tune 4 only): an effect number written to the channel's +3 byte is taken and cleared here each frame (on the frame its +0/+1 frame counter rolls over, +2 is used instead and kept); it names a 16-byte instrument in $7795, copied into the channel's state and started as a note ($7915, $7604). Never reached in the sessions recorded."
  },
  {
   "address": 30516,
   "type": "line",
   "text": "Copies an instrument from $777D + A into the channel at offset E: its slide step, envelope and vibrato settings."
  },
  {
   "address": 30556,
   "type": "line",
   "text": "Sets the instruments of channels A, B and C from A, B and C ($7734: BC is kept at $798B, so B is read back from $798C and C from $798B), and chains the next tune number."
  },
  {
   "address": 30589,
   "type": "line",
   "text": "The instruments: twelve bytes from each offset (0, 8 and $10 are used by the music), copied into a channel's state by $7734."
  },
  {
   "address": 30613,
   "type": "line",
   "text": "Sound-effects mode's instruments, 16 bytes each, copied into a channel by $76D3."
  },
  {
   "address": 30997,
   "type": "line",
   "text": "Sound-effects mode: the mixer is set from channel A's +$18 byte, and the noise period from its +6."
  },
  {
   "address": 31012,
   "type": "line",
   "text": "Every channel's volume to 0 and its envelope to the end (15)."
  },
  {
   "address": 31052,
   "type": "line",
   "text": "The tune's speed: counts frames in $798F and returns to the handler only on every E-th, clearing the speaker bit then; on the other frames it drops the handler's return address, so the handler stops there."
  },
  {
   "address": 31074,
   "type": "line",
   "text": "Moves the step counter ($7990) on and, when it reaches the section's length ($70FB), returns to chain the next section; otherwise it drops the caller's return address."
  },
  {
   "address": 31096,
   "type": "line",
   "text": "The end of a section handler's step: the next step ($7962), and at the end of the section the next tune number becomes pending."
  },
  {
   "address": 31107,
   "type": "line",
   "text": "As $7978, chaining the number in E instead. Not reached in the code map."
  },
  {
   "address": 31115,
   "type": "line",
   "text": "Work bytes: the note byte being started, the stack pointer while $761C runs, a pitch in between."
  },
  {
   "address": 31119,
   "type": "line",
   "text": "Frames since the last step ($794C), the step counter ($7990, a word), the transposition in semitones ($7992) and the channel offset ($7993, a word with high byte 0)."
  },
  {
   "address": 31125,
   "type": "line",
   "text": "The vibrato rows, 16 signed offsets each, read by $7693."
  },
  {
   "address": 31301,
   "type": "line",
   "text": "The volume envelopes: rows of volumes the envelope steps through ($766D)."
  },
  {
   "address": 31397,
   "type": "line",
   "text": "AY tone periods for the 48 pitches of the lowest octave, a word each; $761C halves them for each octave up."
  },
  {
   "address": 31493,
   "type": "line",
   "text": "Writes the frame to the AY: the three tone periods to registers 0 to 5, the noise period to 6, the three volumes to 8, 9 and 10 and the mixer to 7."
  },
  {
   "address": 31565,
   "type": "line",
   "text": "The mixer value for register 7 (bits 0 to 5 only are written) and the noise period."
  },
  {
   "address": 31567,
   "type": "line",
   "text": "Writes HL to AY registers A and A+1."
  },
  {
   "address": 31579,
   "type": "line",
   "text": "Writes C to AY register A: the register number to port $FFFD, the value to $BFFD."
  },
  {
   "address": 31592,
   "type": "line",
   "text": "Scenery shape 56's record, after the sound driver, in the form of those at $69B4: bank 4's word for shape 56 at $FE98 names it ($A8F3). 21 bytes, to $7B7C."
  },
  {
   "address": 31613,
   "type": "line",
   "text": "The 37 conversation messages, a word each (bank 3's $D805). A message is a byte (6 or 7) and then text in the game's alphabet ($23 a space, $25 an apostrophe), with $FE and $FD for new lines, $FA, $FB and $FC for the names of the characters it concerns, $F8 for one of the exclamations at $7FC6, and $FF at its end. Messages 17 and 18 are the same text."
  },
  {
   "address": 31687,
   "type": "line",
   "text": "The texts of messages 0 to 16, from I'VE BEEN HIT to I CAN'T REACH FROM HERE."
  },
  {
   "address": 32219,
   "type": "line",
   "text": "The texts of messages 17 to 36, from WELCOME FOOLISH PEOPLE FROM THE SKY to THE CURRENT IS TOO STRONG."
  },
  {
   "address": 32673,
   "type": "line",
   "text": "The four characters' names for messages, each with a space and $FF: JARRET, GLORIA, DIRK and CLIVE; then HE SAID."
  },
  {
   "address": 32710,
   "type": "line",
   "text": "The exclamations, each ending in a new line ($FE) and $FF: DAMN IT, GOSH, HECK and CRIKEY."
  },
  {
   "address": 32739,
   "type": "line",
   "text": "Bytes after the texts that no instruction in the code maps names."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "Each byte's index with its bits in the opposite order, built at the start ($8534) for mirroring sprites ($A476, $A48B). Zeros in this snapshot, taken before it is built."
  },
  {
   "address": 33024,
   "type": "line",
   "text": "For the left byte of a 16-pixel sprite ($A277): ones in the bits left of the one beside the byte's leftmost pixel, so the sprite's left edge gets a pixel of outline. $FF for an empty byte."
  },
  {
   "address": 33280,
   "type": "line",
   "text": "For the right byte: ones in the bits right of the one beside the byte's rightmost pixel, $FF for an empty byte. Five entries break the pattern: 1, 6, 7, $40 and $50."
  },
  {
   "address": 33536,
   "type": "line",
   "text": "Eight actor records of 32 bytes. +0 the type (0 to 3 the four characters), +1 its state ($FF an empty slot; bit 6 held), +7 its list of animations, +9 the current frame's address, +$0B the frame number (bit 7 backwards), +$0C the action (bit 7 new), +$0D its state for the animations, +$0E, +$10 and +$12 its position across, down and in height, +$14 and +$16 its place on the screen, +$18 flags (bit 7 to be drawn), +$19 its list of sprite frames, +$1B the frame (bit 7 mirrored), +$1C and +$1D the sprite's width and rows, +$1F the bank of its graphics."
  },
  {
   "address": 33792,
   "type": "line",
   "text": "The interrupt table for IM 2 (I = $84): 257 bytes of $BE, so whatever the bus holds the interrupt goes to $BEBE."
  },
  {
   "address": 34049,
   "type": "line",
   "text": "A copy of an actor record for drawing a second piece ($A725) or an object ($A802)."
  },
  {
   "address": 34081,
   "type": "line",
   "text": "The game's first instruction, where the loader hands over: interrupts in mode 2 through the table at $8400 (I = $84, every byte $BE, so every interrupt goes to $BEBE), the title music requested (14, $7002), the title and control selection ($AE10); then the bit-reversal table at $8000 is built (each byte its index with the bits in the opposite order), and the play screen's frame is drawn ($8549). Only the hand-over has this code: new game ($85E2) copies 80 bytes of bank 0 over it."
  },
  {
   "address": 34121,
   "type": "line",
   "text": "Draws the play screen's frame and panel: the 768 cell numbers at bank 0 $C000 are copied to $6505, then each cell is drawn on the screen at $4000 from the nine-byte tiles at bank 0 $ED25 (eight rows of pixels and an attribute; $FF is cell 0), and the whole screen is copied to bank 7, the second screen, so both show the frame."
  },
  {
   "address": 34229,
   "type": "line",
   "text": "45 bytes of $FF between the frame drawing and new game, never read."
  },
  {
   "address": 34274,
   "type": "line",
   "text": "New game, from the start-up and from the menu's new-game icon (bank 3): bank 0's $FE05-$FEDA hold the starting values, moved through $8521 to bank 3 ($EB05, $EC5D, $ECD8), to $BF29 (the clock) and $9633; bank 3's counters and flags are cleared or set to their starting values, the party's needs ($D5C3) set full, and the game starts in area 13 ($8D1F): the area is set up ($DC0B, $87CF), the leader's portrait drawn ($8C5B), the view built ($A012) and the main loop entered with the stack reset."
  },
  {
   "address": 34466,
   "type": "line",
   "text": "The main loop, one pass for each view drawn, about five interrupts at the start of play: the pass counter ($8D1C) goes up, then in turn (with the bank each needs paged in) bank 3's needs ($D603), the party ($DCB9, $DC0B, $E187 twice, $DED5), the leader's input ($8B81), bank 3's $FB9B, the view ($8ED8, $98FF), bank 0's $F5DD, the clock's day and night ($8C47), bank 3's $E6B3 and $C21B, the screen ($A6F4), bank 0's $F2AB, bank 3's $C8D4 and the windows ($AA94); the view is shown from $98FF ($9987). While the leader is alive (the low nibble of $8301 under 8) it loops; when he dies the first time ($8D09 still 0) it calls bank 3's $FB7C with 1 and queues message 32 (\"<leader> IS DEAD. WHAT ARE WE GOING TO DO NOW\")."
  },
  {
   "address": 34580,
   "type": "line",
   "text": "Starts an isometric line: saves HL, DE and BC around $A879 and $A7ED, which work out the screen address and pattern for it, then pages in the screen not shown ($8CA5)."
  },
  {
   "address": 34595,
   "type": "line",
   "text": "One step of a line going up the screen: the pattern at DE, masked by C, is ORed into the screen byte at HL; DE moves back four and HL up a pixel row (across a character row when the row wraps), and there the same bit is cleared, so the line has a dark edge above it."
  },
  {
   "address": 34630,
   "type": "line",
   "text": "One step of a line going down the screen, as $8723 with DE forward four and HL a pixel row down; the bit is cleared in the row below."
  },
  {
   "address": 34663,
   "type": "line",
   "text": "Moves the mask in C two pixels right (the isometric slope: two across for each row), moving HL and DE on a byte when the bit wraps."
  },
  {
   "address": 34678,
   "type": "line",
   "text": "Moves the mask in C two pixels left, HL and DE back a byte when the bit wraps."
  },
  {
   "address": 34693,
   "type": "line",
   "text": "Draws B steps of an isometric line up and to the right ($8714, then $8723 and $8767 each step), then pages bank 3 back in ($87AA). $8792 draws down and right, $879F down and left, $87AE up and left, and $87BB a vertical line down, clearing the pixel to the right of each one. All end with A = 0 and bank 3 paged in. Called from bank 3."
  },
  {
   "address": 34767,
   "type": "line",
   "text": "Sets up the area in $8D1F (0 to 15), the plateau being sixteen areas loaded one at a time. Bank 1's table at $D000, four bytes an area: the word points to the area's packed data, which is unpacked into bank 1 $C000-$CFFF (a byte with bit 7 set is a count, the next byte repeated that many times; anything else is one byte), and the two bytes after it are written into the instructions at $90E2/$9237 and $90F0/$9244. Bank 0's table at $E8A3, four bytes an area, points to a byte for $9C13 and then pairs (first number, count) up to a count of $FF: the numbers they make up are listed in bank 0 from $C801, after a 4 at $C800. Then bank 7's table at $DB00 (a word an area) gives the area's boxes and map ($8A9B), and bank 6's table at $C76A the objects placed in it ($8879): each adds its shapes' boxes to bank 4's and bank 3's lists and stamps its piece of map into the area's map in bank 0 ($899B), the block numbers of a piece drawn for another area translated into this one's ($8B31)."
  },
  {
   "address": 34937,
   "type": "line",
   "text": "For each object in the area's list (bank 6; a count, then the column and row of each object in the map, a height with bit 7 set when it has one, and its type): its place is kept in $8CF6-$8CFA, and each of its shapes (the shape list from bank 6's table at $D482 by the object's type) adds an 8-byte box to bank 4's list at $C000 (the shape's box from bank 6 $DDD4, moved by the object's position; $A6F3 counts them) and a 4-byte record to bank 3's list at $C000 (from bank 6 $DF24; $962D counts them)."
  },
  {
   "address": 35227,
   "type": "line",
   "text": "The object's piece of map, after its shape list in bank 6: the area whose block numbers it is drawn in, its width and height in blocks, then its blocks row by row. It is stamped into bank 0's map at $C000 at the object's column and row, clipped to 64 columns and 32 rows, blocks of 0 left out. For a piece drawn in another area's numbers the call at $8A63 is made a CALL to $8B31, which turns each block into this area's number; for this area's own a CALL Z, which never runs, as A is not 0 there. The loop at $8A59 reads each block with bank 6 in and writes it with bank 0 in; then the next object ($8879)."
  },
  {
   "address": 35483,
   "type": "line",
   "text": "Bank 7's data for the area: a count of 8-byte boxes, copied to bank 4 from $C000 ($A6F3 the count); a count of 4-byte records, copied to bank 3 from $C000 ($962D); then 2 KB unpacked into bank 0 $C000-$C7FF, the area's grid of 64 by 32 cell numbers (an $FF byte is followed by a count and the byte to repeat). The OUT at $8AC8 restores bank 7 with the flags of $8D1E, an operand written at $8AA2. Banks are switched for every run, with the two values kept in D and E. Area 14's packed grid runs on past $FFFF into ROM 0, the 128 editor ROM: the $FF at $FFFF takes its count and block from $0000 and $0001, and $0002-$00AA are the grid's last 169 blocks."
  },
  {
   "address": 35633,
   "type": "line",
   "text": "Turns a block number of another area into this area's: the number is found in that area's list (pairs of first number and count, at an address written into $8B33 by $899B), and its place in that list looked up in this area's list at bank 0 $C800: from the start for a number up to that area's split, from this area's split ($9C13) for one over it. That area's split plus one is the operand of the CP at $8B39, written at $89C1. Returns the number in A."
  },
  {
   "address": 35695,
   "type": "line",
   "text": "Adds 4 back to the screen position across (+$14 and +$15 of the record at IY) when the view is half a character across ($9631), undoing what $A493 took off before drawing the actor."
  },
  {
   "address": 35713,
   "type": "line",
   "text": "The player's control of the leader, once a pass: the input routine copied to $6811 returns the direction code (up 1, down 2, left 3, right 6, the sums for diagonals, 9 more with fire), kept in $8D20. SPACE, pressed while no menu is up ($8D22 = 0), opens menu 1 (bank 3 $CE77); while a menu is up ($8D22 and $19) control goes to the menu (bank 3 $CA49). Otherwise, if the leader can move (bit 6 of $8301 clear, its low nibble under 3), the code becomes his action through the table at $8D3B; running (an action of 6 or more) becomes walking when $9631 is set or he is in the state $830D marks with 4; a new action is stored in $830C with bit 7 set. With no input for 65 passes, $8D1B reaches $FF and the word at bank 3 $DB05 is copied to $F00B. Ends in bank 3's $D6DD."
  },
  {
   "address": 35881,
   "type": "line",
   "text": "Queues message B (a number into the table at $7B7D) for character C, unless the queue is full ($FF at the slot $8D39 points to) or the last entry queued is the same pair. The queue is pairs from $8D26."
  },
  {
   "address": 35911,
   "type": "line",
   "text": "When the clock ($BEEF) marks a change of light in $BF2E (bit 7, then bit 6 on the next pass), the view's colour becomes $BF2E's low six bits ($AA7D) and the screen not shown is coloured with it ($8C5B), so both screens change over two passes."
  },
  {
   "address": 35931,
   "type": "line",
   "text": "Colours the view in the screen not shown with the attribute in $AA7D: 28 cells across from $D822 in each of 18 rows. Entered at $8C61 with A already set, it colours the screen paged in at $C000."
  },
  {
   "address": 35957,
   "type": "line",
   "text": "Pages RAM bank 5 in at $C000, keeping the screen and ROM bits of $8D1E. This and the entries that follow keep A, BC and the flags. No instruction in the code maps calls this one."
  },
  {
   "address": 35962,
   "type": "line",
   "text": "Pages bank 6 in at $C000."
  },
  {
   "address": 35967,
   "type": "line",
   "text": "Pages bank 0 in at $C000."
  },
  {
   "address": 35971,
   "type": "line",
   "text": "Pages bank 7, the second screen, in at $C000."
  },
  {
   "address": 35976,
   "type": "line",
   "text": "Pages bank 4 in at $C000."
  },
  {
   "address": 35981,
   "type": "line",
   "text": "Pages bank 1 in at $C000."
  },
  {
   "address": 35986,
   "type": "line",
   "text": "Pages bank 3, the game's logic, in at $C000; it then runs on into $8C95."
  },
  {
   "address": 35989,
   "type": "line",
   "text": "Pages in the bank in A (0 to 7) through port $7FFD with the screen and ROM bits of $8D1E."
  },
  {
   "address": 36005,
   "type": "line",
   "text": "Pages in the screen not being shown: bank 5 when bit 3 of $8D1E shows bank 7, bank 7 when it shows bank 5."
  },
  {
   "address": 36019,
   "type": "line",
   "text": "Pages in the bank in A, keeping AF (an entry into $8C95)."
  },
  {
   "address": 36022,
   "type": "line",
   "text": "Copies the eight need bytes of the leader ($8D0A) from bank 3 ($D5C3 + 8 each) to $8CFB, for code that runs with bank 0 paged in, and leaves bank 0 paged in."
  },
  {
   "address": 36048,
   "type": "line",
   "text": "Copies a column of A bytes from bank 1 (HL, stepping BC) to the buffer at $8521, sets $A6F2 to $FF and pages bank 3 back in. For bank 3's code, which cannot see bank 1."
  },
  {
   "address": 36066,
   "type": "line",
   "text": "Copies C bytes from bank 6 (DE) to the buffer at $8521, sets $A6F2 to $FF and pages bank 3 back in."
  },
  {
   "address": 36085,
   "type": "line",
   "text": "Work bytes: an object's position and size while $8879 places it ($8CF6-$8CFA), and an 8-byte record in transit between banks ($8CFB-$8D02)."
  },
  {
   "address": 36099,
   "type": "line",
   "text": "Game flags cleared at new game ($8D04-$8D14), among them $8D09, set when the leader has died, and $8D0A, the leader's character number (0 Jarret, 1 Gloria, 2 Dirk, 3 Clive); $8D14 is the day of the month. $8D15-$8D17 are set to $FF. $8D15 is both the calendar's month ($F465) and bank 3's count for the ceremony ($FEC8), which stops at $FF."
  },
  {
   "address": 36120,
   "type": "line",
   "text": "$8D1B counts passes with no input; $8D1C/$8D1D count the main loop's passes; $8D1E is the last value written to port $7FFD, whose screen and ROM bits every paging keeps; $8D1F the area; $8D20 the input code; $8D22 the menu flags; $8D25 a countdown that holds the message queue."
  },
  {
   "address": 36134,
   "type": "line",
   "text": "The message queue: pairs (message, character) waiting to be shown, up to the $FF at $8D38; $8D39 points to the next free pair."
  },
  {
   "address": 36155,
   "type": "line",
   "text": "The leader's action for each input code 0 to 17: 0 stand; up and up-left 1, right and up-right 2, down and down-right 3, left and down-left 4; fire alone 5; the same directions with fire 6 to 9."
  },
  {
   "address": 36173,
   "type": "line",
   "text": "The address of each of the 192 pixel rows of the screen paged in at $C000, from its third character column ($C002, $C102, ...): the view's left edge."
  },
  {
   "address": 36557,
   "type": "line",
   "text": "Cleared at the start of each pass of the actors ($8ED8): the way the cell under the leader slopes (1 to 4, from $91FE), or $10 when he drops; the scrolling ($98FF) changes its speed by it."
  },
  {
   "address": 36558,
   "type": "line",
   "text": "The address in bank 1's grid of the cell the leader is in ($8ECE), its byte ($8ED0), and the new position being tried, three words: across ($8ED1), down ($8ED3), height ($8ED5); $8ED7 holds the fourth byte of the animation frame being played."
  },
  {
   "address": 36568,
   "type": "line",
   "text": "Moves the eight actors, a pass each, with bank 1 paged in (their animations are there). An actor's record is 32 bytes from $8300 ($FF in +1 for an empty slot). A new action (bit 7 of +$0C) starts its animation ($8FDA); otherwise the animation steps a frame forward, or back when bit 7 of the frame number (+$0B) is set: each frame is four bytes, three signed steps for the three position words (+$0E, +$10, +$12) and a byte kept in $8ED7. The new position is tried ($9097) and the frame kept only if the move is allowed; at the last frame, the high nibble of its fourth byte names an event ($9052). Then bank 3 follows the actor up ($9048)."
  },
  {
   "address": 36826,
   "type": "line",
   "text": "Starts the animation for an actor's new action: bank 1's table at $E2F2, twelve bytes for each value of the actor's +$0D (its state), gives an animation number for each action; the actor's animation list (+$07) gives the script, stored in +$09. Bit 7 of the number plays it backwards from the last frame; a next byte other than $FF becomes the actor's new state."
  },
  {
   "address": 36936,
   "type": "line",
   "text": "Moves HL on $0D, pages bank 3 in and goes on at its $C362. Callers pass the actor's +1, so the projection starts at its place across, +$0E."
  },
  {
   "address": 36946,
   "type": "line",
   "text": "The event at the end of an animation (A's high nibble, $F for none): the routine for it, a word from $9071 plus twice its number, is called with bank 3 paged in (its address written into the CALL at $906D), then bank 1 is paged back. The table overlaps the JP that ends this routine: event 0's entry is that JP's operand, $8C8D, which only pages bank 1."
  },
  {
   "address": 36979,
   "type": "line",
   "text": "End-of-animation events 1 to 9: bank 3's $C75A, $9085, bank 3's $F0A3 and $F2F5, $9070 (the JP that ends $9052: no event), bank 3's $F26E, $9093, and bank 3's $E8D7 and $FAC0. A number over 9 would read the code at $9085 as an address."
  },
  {
   "address": 36997,
   "type": "line",
   "text": "End-of-animation event 2: for an actor of type 4 or more, sets its action to $8A and bit 6 of its +1."
  },
  {
   "address": 37011,
   "type": "line",
   "text": "End-of-animation event 7: clears the byte after HL."
  },
  {
   "address": 37015,
   "type": "line",
   "text": "Whether the actor at IY may move to the position in $8ED1-$8ED6: not into a box of the scenery ($9546, bank 1), not into another actor ($9440), and the ground there allows it ($9104). If so the position is copied into the record (+$0E to +$13) with the byte after it into +$1B, and Z is returned; NZ refuses. While the player is idle ($8D1B at $FF) or the leader is in state 3, the leader's own move is checked with bit 7 of $8D0A set."
  },
  {
   "address": 37077,
   "type": "line",
   "text": "The ground cell under $8ED1/$8ED3, read with bank 1 paged in and bank 3 paged back after."
  },
  {
   "address": 37086,
   "type": "line",
   "text": "The ground cell under the position in $8ED1 (across) and $8ED3 (down): bank 1's grid at $C000 has 64 cells to a row, each 16 units square; returns the cell's byte in A and its address in HL."
  },
  {
   "address": 37124,
   "type": "line",
   "text": "Whether the ground lets the actor at IY stand at the new position: the cell's byte ($A039) is a height for values under $72, compared with the new height (the third position word, $8ED5, divided by eight): a step of two or more down, or up for the four characters, refuses it ($9525); values $72 to $7E are special ground, each with its own routine from the table at $9267. The leader's cell and its byte are kept in $8ECE and $8ED0. Actor type $2D goes anywhere; types $10 to $13 move only over cells 0 and $7B. On level ground the height is taken from the cell's slope ($91FE)."
  },
  {
   "address": 37374,
   "type": "line",
   "text": "The height at the new place within a sloping cell (HL): of the cell's neighbours left, above, right and below (the steps at $925F, each added to the last), the first one exactly one higher gives the way the cell slopes (1 to 4, the leader's into $8ECD), and the place's eighths across or down the cell give the height within it, stored in $8ED5 with the cell's own height times 8."
  },
  {
   "address": 37471,
   "type": "line",
   "text": "The four steps from a ground cell to its neighbours, each added to the last: -1, -63, +65 and +63 cells reach the cells left, above, right and below."
  },
  {
   "address": 37479,
   "type": "line",
   "text": "The routines for special ground, cells $72 to $7E: $9283, $9298, $92A6, $92B6, $931A, $934C, $9350, $93E3, $9413, $93F3, $93EB, $93A6, $92E5."
  },
  {
   "address": 37507,
   "type": "line",
   "text": "Ground $72: only the leader may step on it; then bank 3's $E910 runs and his action is cleared."
  },
  {
   "address": 37528,
   "type": "line",
   "text": "Ground $73: only actors of type $28 or more; their height becomes $A0."
  },
  {
   "address": 37542,
   "type": "line",
   "text": "Ground $74: for an actor of type 3 (Clive), bank 3's $E609 runs; otherwise as ground $75."
  },
  {
   "address": 37558,
   "type": "line",
   "text": "Ground $75: when the cell under the leader is $75 or $76, a party member following him in a walking state copies the leader's action (less 5 if running) and +4 is set to 3."
  },
  {
   "address": 37605,
   "type": "line",
   "text": "Ground $7E: the leader, or the character in $8D0C when its bit 7 is set, is put in state $49 and the byte at BC cleared; any other actor of type $27 or below is turned aside ($92FB), and one above $27 goes on without the new state. Then the action is set to $80, +$0D's low two bits plus $0C, and sound effect 4 on channel B ($701F)."
  },
  {
   "address": 37658,
   "type": "line",
   "text": "Ground $76: at height 0 it is refused; otherwise a character facing the right way (state bits 0-1 of 2 or more) has its state set to $0C plus that, action $84, and bit 6 of +1 and +$18."
  },
  {
   "address": 37708,
   "type": "line",
   "text": "Ground $77: as $9350 with direction 3."
  },
  {
   "address": 37712,
   "type": "line",
   "text": "Ground $78: as $931A for the direction in C (2), with action $83."
  },
  {
   "address": 37759,
   "type": "line",
   "text": "22 bytes that no code in the code map reads: what looks like a routine comparing $8ED1 with $0210 and $0208, cut off."
  },
  {
   "address": 37780,
   "type": "line",
   "text": "Clears the byte at BC and, when the actor's state is $10 to $13, bit 4 of it. Returns Z."
  },
  {
   "address": 37797,
   "type": "line",
   "text": "One byte, $C1, between two routines."
  },
  {
   "address": 37798,
   "type": "line",
   "text": "Ground $7D: for an actor in state 7, bank 3's $FA02; otherwise only the leader, whose bit 6 of +1 is cleared; under height $10 its state becomes $10 plus its direction and BC's byte $14 or $15 by the pass; the idle count is cleared."
  },
  {
   "address": 37859,
   "type": "line",
   "text": "Ground $79: refused for every actor except types 0 to 3 and those with type bits 2-5 clear."
  },
  {
   "address": 37867,
   "type": "line",
   "text": "Ground $7C: the height becomes 0."
  },
  {
   "address": 37875,
   "type": "line",
   "text": "Ground $7B: the leader, or an actor with bit 6 of +1 set, gets bit 6 set and its action to $80 unless it is $0B; BC's counter goes up."
  },
  {
   "address": 37907,
   "type": "line",
   "text": "Ground $7A: with no menu up, an actor whose bit 6 of +1 is clear and whose counter at BC has reached $10 gets bit 6 set and action $80; the counter goes up while the actor is still, and down while it acts."
  },
  {
   "address": 37952,
   "type": "line",
   "text": "Whether the actor at IY would touch another actor at the new position: only actors of types 0 to $0F are checked, and one with bit 6 of +1 set passes. Every other active actor of type under $10 or from $18 on whose first two position words are within four units of $8ED1 and $8ED3 is a hit. Hitting an actor of type $28 or more that is acting kills a party member ($48 in +1, action $8B); hitting anything else stops the actor and turns it to another direction ($9525), and NZ refuses the move. Z with no hit."
  },
  {
   "address": 38181,
   "type": "line",
   "text": "Turns the actor at IY: bit 5 of +$18 is flipped and the new action is its direction (+$0D) plus 2 (entered at $9531: plus 3), as a walk 1 to 4 with bit 7 set, unless bit 6 of +1 holds it."
  },
  {
   "address": 38214,
   "type": "line",
   "text": "Whether an actor (types under $28) at the new position stands inside one of the area's boxes, bank 3's list of four bytes each from $C000 ($962D of them: first and last across, first and last down, in units of four): if so it is turned to walk along the box's nearer side, and NZ refuses the move. Z when clear, or when the area has no boxes."
  },
  {
   "address": 38336,
   "type": "line",
   "text": "Looks for the cell value in A in the eight cells to the right of the leader's cell ($8ECE), then left, down and up; returns its distance in H (across, signed) or L (down, signed) with Z, or NZ if none. Bank 1 is paged in meanwhile and bank 3 after. Called from bank 3."
  },
  {
   "address": 38419,
   "type": "line",
   "text": "BC points to a byte for the actor type in A: $A03F plus the type for types under $14, $A053 for the rest."
  },
  {
   "address": 38435,
   "type": "line",
   "text": "BC = A times 4."
  },
  {
   "address": 38445,
   "type": "line",
   "text": "The number of 4-byte boxes in bank 3's list at $C000 (set with the area); $962E keeps the stack pointer while $963B copies the view."
  },
  {
   "address": 38448,
   "type": "line",
   "text": "The view. It is drawn into a buffer of 152 pixel rows of 28 bytes, $AE10-$BEAF, one character row more than the 144 rows shown, from a map of blocks; the buffer scrolls a pixel row at a time up and down and half a character (4 pixels) across. $9630 is where the rows shown start in the buffer (the pixel offset times 28); $9631 is 1 when the view stands half a character across; $9632 the pixel offset, 0 to 7; $9633 and $9634 the view's column and row on the map, in characters; $9635 and $9637 the same times 8; $9639 the number of the first character of the block being drawn."
  },
  {
   "address": 38459,
   "type": "line",
   "text": "Copies the 144 rows of the view from the buffer ($AE10 plus $9630) to the screen paged in at $C000, 28 bytes to a row, each row to the address the next word of the row table names from its 9th entry ($8D5D), with interrupts off and the stack pointing into the table; then plays a pass of the sound driver ($7000) and enables interrupts."
  },
  {
   "address": 38547,
   "type": "line",
   "text": "Moves the view up B pixel rows. B is first made one smaller when the leader's row in the buffer (+$16 of his record, $8316, less $9637), less the pixel offset and B, is over 72, one bigger when it is under. When the offset passes a character row, $9634 is one less, the buffer moves down a character row ($9F88) and the new top row is drawn ($9B86), after bank 3's $DB0B."
  },
  {
   "address": 38597,
   "type": "line",
   "text": "Keeps the offset within a character and sets $9630, the offset times 28."
  },
  {
   "address": 38617,
   "type": "line",
   "text": "Moves the view down B pixel rows. B is first made one bigger when the leader's row in the buffer, less the pixel offset and plus B, is over 80, one smaller when it is under. When the offset passes a character row, $9634 is one more, the buffer moves up a character row ($9FCD) and the new bottom row is drawn ($9B61), after bank 3's $DB0B."
  },
  {
   "address": 38673,
   "type": "line",
   "text": "Moves the view left half a character: the buffer's pixels shift 4 right ($99B5) and $9631 flips. Coming back to a whole character, the left column is drawn again ($9A9F); going to a half, $9633 is one less and the half column is drawn at the left ($9E52), after bank 3's $DB0B."
  },
  {
   "address": 38700,
   "type": "line",
   "text": "Moves the view right half a character: the buffer's pixels shift 4 left ($9A11) and $9631 flips. Going to a half, the right column is drawn as a half ($9C89); coming back to a whole character, $9633 is one more and the right column is drawn ($9A85), after bank 3's $DB0B."
  },
  {
   "address": 38727,
   "type": "line",
   "text": "Scroll step 2 (the table at $9963): left half a character, then up 2 pixel rows (3 when the leader stands on slope 4, 1 on slope 2; $8ECD). The rows are asked of $9693, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38748,
   "type": "line",
   "text": "Scroll step 3: up 2 pixel rows (3 on slope 3, 1 on slope 1), then right half a character. The rows are asked of $9693, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38769,
   "type": "line",
   "text": "Scroll step 10: down 6 pixel rows, then right half a character. The rows are asked of $96D9, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38773,
   "type": "line",
   "text": "Scroll step 0: down 2 pixel rows (3 on slope 4, 1 on slope 2), then right half a character. The rows are asked of $96D9, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38795,
   "type": "line",
   "text": "Scroll step 11: down 6 pixel rows, then left half a character. The rows are asked of $96D9, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38799,
   "type": "line",
   "text": "Scroll step 1: down 2 pixel rows (3 on slope 3, 1 on slope 1), then left half a character. The rows are asked of $96D9, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38820,
   "type": "line",
   "text": "Scroll step 6: at a half character, as step 2; otherwise left a whole character ($984B) and up 4 pixel rows (6 on slope 4, 2 on slope 2). The rows are asked of $9693, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38848,
   "type": "line",
   "text": "Scroll step 7: at a half character, as step 3; otherwise up 4 pixel rows (6 on slope 3, 2 on slope 1) and right a whole character ($985B). The rows are asked of $9693, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38877,
   "type": "line",
   "text": "Scroll step 14: at a half character, as step 2; otherwise left a whole character and up 8 pixel rows. The rows are asked of $9693, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38892,
   "type": "line",
   "text": "Scroll step 15: at a half character, as step 3; otherwise up 8 pixel rows and right a whole character. The rows are asked of $9693, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38907,
   "type": "line",
   "text": "Scroll steps 8 and 16: right half a character at a half character, otherwise a whole one."
  },
  {
   "address": 38917,
   "type": "line",
   "text": "Scroll step 17: left half a character at a half character, otherwise a whole one."
  },
  {
   "address": 38927,
   "type": "line",
   "text": "Scroll step 4: at a half character, as step 0; otherwise down 4 pixel rows (6 on slope 4, 2 on slope 2) and right a whole character. The rows are asked of $96D9, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38958,
   "type": "line",
   "text": "Scroll step 5: at a half character, as step 1; otherwise down 4 pixel rows (6 on slope 3, 2 on slope 1) and left a whole character. The rows are asked of $96D9, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 38987,
   "type": "line",
   "text": "Moves the view left a whole character: the buffer moves a byte on ($986B), $9633 is one less and the left column is drawn ($9A9F), after bank 3's $DB0B."
  },
  {
   "address": 39003,
   "type": "line",
   "text": "Moves the view right a whole character: the buffer moves a byte back ($98B0), $9633 is one more and the right column is drawn ($9A85), after bank 3's $DB0B."
  },
  {
   "address": 39019,
   "type": "line",
   "text": "Moves the whole view buffer one byte on (28 LDDs to a row, for 152 rows, from $BEAE to $BEAF)."
  },
  {
   "address": 39088,
   "type": "line",
   "text": "Moves the whole view buffer one byte back (LDIs from $AE11 to $AE10)."
  },
  {
   "address": 39157,
   "type": "line",
   "text": "Scroll step 13: down 6 pixel rows. The rows are asked of $96D9, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 39162,
   "type": "line",
   "text": "Scroll steps 9 and 12: down 8 pixel rows. The rows are asked of $96D9, which moves one more or one fewer by where the leader stands in the view."
  },
  {
   "address": 39167,
   "type": "line",
   "text": "Scrolls the view after the leader, once a pass, then shows the frame ($9987). Only when the actor in the first slot ($8300) is the leader and bit 6 of its +$18 is clear. The step is one of 18 from the table at $9963: one bank 3 asked for in $8D16 (its value plus 14) or in $8D17 (its value with bit 1 flipped), step 9 when the leader drops ($8ECD = $10), otherwise the low nibble of the fourth byte of the leader's animation frame (bank 1, at the pointer in +$09 of his record), with bit 1 flipped when the animation plays backwards (bit 7 of +$0B). A frame whose fourth byte has a high nibble scrolls nothing."
  },
  {
   "address": 39267,
   "type": "line",
   "text": "The 18 scroll steps: $9775, $978F, $9747, $975C, $980F, $982E, $97A4, $97C0, $97FB, $98FA, $9771, $978B, $98FA, $98F5, $97DD, $97EC, $97FB and $9805."
  },
  {
   "address": 39303,
   "type": "line",
   "text": "Sets $9635 and $9637 from the view's column and row; at the next interrupt (HALT) the screen just drawn is shown (bit 3 of $8D1E flipped and written to $7FFD), the other one is paged in and the view copied into it ($963B), and bit 6 of $8318 is cleared."
  },
  {
   "address": 39349,
   "type": "line",
   "text": "Shifts the pixels of the whole view buffer 4 to the right: RRD along each of the 152 rows from $AE10."
  },
  {
   "address": 39441,
   "type": "line",
   "text": "Shifts the pixels of the whole view buffer 4 to the left: RLD backwards from $BEAF."
  },
  {
   "address": 39533,
   "type": "line",
   "text": "HL = the address in bank 0's block map ($C000: 64 blocks to a row, each block 4 by 4 characters) of the block holding the character at row $9634 + B and column $9633 + C."
  },
  {
   "address": 39557,
   "type": "line",
   "text": "Draws the buffer's right-hand column (column 27, $AE2B) for the map column $9633 + 27: 19 characters down, from the blocks the column passes through."
  },
  {
   "address": 39583,
   "type": "line",
   "text": "Draws the buffer's left-hand column ($AE10) for the map column $9633: 19 characters down, the rest of the first block from row $9634 within it, then whole blocks, then the start of the last ($9C10 finds each block's characters, $9C4D draws one), with bank 0 paged in."
  },
  {
   "address": 39599,
   "type": "line",
   "text": "Draws the column whose position within its blocks is A."
  },
  {
   "address": 39777,
   "type": "line",
   "text": "Draws the buffer's last character row ($BDD0) for the map row $9634 + 18, 28 characters across ($9DD5 at a half character)."
  },
  {
   "address": 39814,
   "type": "line",
   "text": "Draws the buffer's first character row ($AE10) for the map row $9634: 28 characters across, the rest of the first block from column $9633 within it, six whole blocks, then the start of the last ($9DF5 at a half character)."
  },
  {
   "address": 39834,
   "type": "line",
   "text": "Draws the row whose position within its blocks is A."
  },
  {
   "address": 39952,
   "type": "line",
   "text": "For the block number in A (from the map in bank 0), HL points to its 16 character numbers, four rows of four, at $C8F0 plus 16 times its definition, which is the byte at $C800 plus the number (plus 256 for numbers over the area's split, the operand of the CP at $9C12, which load_area writes at $882C). $9639 is set to the number of its first character: the word of the first entry of the table at $E840 ($E864 over the split), three bytes an entry, whose first byte is above the definition ($FF counting as $FE)."
  },
  {
   "address": 40013,
   "type": "line",
   "text": "Draws character A of the block: its 8 bytes, in bank 4 at $CD40 plus 8 times ($9639 + A), go down the buffer at DE (of the other register set), 28 bytes apart; bank 0 is paged back in."
  },
  {
   "address": 40073,
   "type": "line",
   "text": "As $9A85 with the view half a character across: column 27 gets the left halves of the characters of the map column $9633 + 28 in its right half ($9D2A)."
  },
  {
   "address": 40234,
   "type": "line",
   "text": "Puts the left half of each of character A's 8 rows into the right half of the buffer byte at DE (the other set), 28 bytes apart, with RLD; the character's own bytes in bank 4 are put back."
  },
  {
   "address": 40357,
   "type": "line",
   "text": "For a row drawn half a character across: each of 8 bytes, written down the buffer at HL (the other set), is the right half of the character at DE and the left half of character A; returns the new character's address in DE for the next byte."
  },
  {
   "address": 40405,
   "type": "line",
   "text": "As $9B61 with the view half a character across. Not reached in the code map's sessions."
  },
  {
   "address": 40437,
   "type": "line",
   "text": "As $9B86 with the view half a character across: each of the 28 bytes across straddles two characters ($9DA5)."
  },
  {
   "address": 40530,
   "type": "line",
   "text": "As $9A9F with the view half a character across: the left column gets the right halves of the characters in its left half ($9EF3)."
  },
  {
   "address": 40691,
   "type": "line",
   "text": "Puts the right half of each of character A's 8 rows into the left half of the buffer byte at DE (the other set), keeping its right half."
  },
  {
   "address": 40840,
   "type": "line",
   "text": "Moves 144 rows of the view buffer down a character row (LDDs from $BDCF to $BEAF)."
  },
  {
   "address": 40909,
   "type": "line",
   "text": "Moves 144 rows of the view buffer up a character row (LDIs from $AEF0 to $AE10)."
  },
  {
   "address": 40978,
   "type": "line",
   "text": "Draws the whole view buffer: 19 character rows from the map row $9634 down, each as the top row is drawn ($9B90), with $9631 cleared; bank 1 is paged in after."
  },
  {
   "address": 41017,
   "type": "line",
   "text": "$A039 keeps the byte of the ground cell being tried ($9104). $A03A-$A03E: where the actor being drawn is, from $A5BB: across plus 2 and down in units of four, and its height, screen column and screen row in units of eight."
  },
  {
   "address": 41023,
   "type": "line",
   "text": "A counter for each actor type 0 to $13, and one ($A053) shared by the rest ($9613): the swamp ground ($7A, $7B) raises it while the actor stands still. The actor's sprite is drawn that many rows shorter, sunk into the ground, and an actor with no rows left is gone ($A493)."
  },
  {
   "address": 41044,
   "type": "line",
   "text": "The sprite being drawn: $A054 the screen address of its next row, $A056 and $A058 the addresses of its graphics and mask bytes, $A05A the next row of the visibility mask at $8521, $A05C its frame byte (bit 7 drawn mirrored)."
  },
  {
   "address": 41053,
   "type": "line",
   "text": "The addresses of the two instructions that write each byte of a three-byte row in the 16-pixel drawers (right-shifted at $A277, left-shifted at $A379), patched to LD (HL),A / INC L or to two NOPs by $A5EF so that only the bytes in the view are written."
  },
  {
   "address": 41065,
   "type": "line",
   "text": "The same for the four bytes of a row in the 24-pixel drawers ($A079, $A178)."
  },
  {
   "address": 41081,
   "type": "line",
   "text": "Draws a sprite 24 pixels wide (16 rows unless patched, $A0B3) into the screen not shown, at the pixel position across in +$14 of its record (IY): three graphics bytes and three mask bytes a row, from the bank in +$1F, shifted right by that position's pixel (0 to 3) into four, or left ($A178, for 4 to 7). Each screen byte becomes (screen AND (mask OR NOT visible)) OR (graphics AND visible), with the visibility mask at $8521 (set where no scenery stands in front)."
  },
  {
   "address": 41191,
   "type": "line",
   "text": "Shifts the graphics right; the JR before is patched to skip the shifts not needed."
  },
  {
   "address": 41219,
   "type": "line",
   "text": "Shifts the mask right, filling with ones."
  },
  {
   "address": 41306,
   "type": "line",
   "text": "Down a pixel row on the screen."
  },
  {
   "address": 41336,
   "type": "line",
   "text": "The left-shifting half of $A079, for pixel positions 4 to 7: the rows are shifted left 4 to 1 times."
  },
  {
   "address": 41591,
   "type": "line",
   "text": "Draws a sprite 16 pixels wide (26 rows unless patched, $A2AB): two graphics bytes a row, its mask made from the graphics by the tables at $8100 (left byte) and $8200 (right byte), with an outline pixel carried across the bytes, shifted right by the pixel position (0 to 3) into three bytes, or left ($A379, for 4 to 7), and drawn as $A079 draws."
  },
  {
   "address": 41849,
   "type": "line",
   "text": "The left-shifting half of $A277, for pixel positions 4 to 7."
  },
  {
   "address": 42102,
   "type": "line",
   "text": "Mirrors a row of the 24-pixel sprite, graphics and mask: the three bytes swap ends and each is reversed through the table at $8000. Not reached in the code map's sessions."
  },
  {
   "address": 42123,
   "type": "line",
   "text": "Mirrors a row of the 16-pixel sprite: its two bytes swap and each is reversed through $8000."
  },
  {
   "address": 42131,
   "type": "line",
   "text": "Sets up the drawing of the actor whose record is at IY (and HL). The actor's bank (+$1F) is paged in and its screen position across (+$14) is 4 less when the view is half a character across. Its frame (+$1B, bit 7 mirrored) picks a six-byte entry from the list at +$19: width (into +$1C: 3 for the 16-pixel drawer, 4 for the 24), rows, and the addresses of its graphics and mask. The rows less its sink count (type $20 never sinks) go into +$1D; the top row (+$16, the bottom, less them) is kept while it is drawn. NZ if none of it is in the view ($A653); otherwise the drawers are patched for its clipped rows and bytes ($A5EF), and the screen address, the visibility mask's row and the graphics addresses are set past the rows clipped at the top."
  },
  {
   "address": 42204,
   "type": "line",
   "text": "An actor sunk out of sight: for types $0C to $0F the count starts again; any other is removed through bank 3's $E492 (+1 set to $FF), and $8D09 is set when it was the leader."
  },
  {
   "address": 42427,
   "type": "line",
   "text": "Fills $A03A-$A03E from the record's position words at HL (+$0E on): across plus 2, and down, divided by 4; height, screen across and screen down divided by 8."
  },
  {
   "address": 42479,
   "type": "line",
   "text": "Patches the drawers for the sprite's width (+$1C, 3 or 4): the row count E into both drawers of that width, and each byte's stores ($A05D or $A069) to write or not: B bytes skipped at the left, then C written, the rest skipped. Entered at $A5F2 with A already the width."
  },
  {
   "address": 42579,
   "type": "line",
   "text": "Whether any of the sprite is in the view, which is 28 bytes across from column $9633 and 144 rows down from $9637 plus the pixel offset: NZ if not. Otherwise B and C are the bytes clipped at the left and drawn, from its column ($A03D) and width (+$1C); D and E the rows clipped at the top and drawn, from its top row (+$16) and rows (+$1D)."
  },
  {
   "address": 42717,
   "type": "line",
   "text": "Divides C:A, plus 4, by 8 into A. Called from bank 3."
  },
  {
   "address": 42732,
   "type": "line",
   "text": "The part of a scenery piece being cut out of the visibility mask ($A8F3): where it starts in the piece across ($A6EC) and down ($A6ED), how many rows ($A6EE) and columns ($A6EF), and the mask address ($A6F0); $A6F2 is set when the mask holds a cut-out, and $A6F3 is the number of scenery pieces in the area (bank 4 from $C002)."
  },
  {
   "address": 42740,
   "type": "line",
   "text": "Draws the actors and objects into the screen not shown, back to front: $A802 picks the next one. Actor types $14 to $1B are drawn in two pieces ($A725); the others set up ($A493), have their visibility mask built ($A879, shifted at a half character, $A7ED) and are drawn 16 or 24 pixels wide by their width; the screen position across is restored after ($8B6F)."
  },
  {
   "address": 42789,
   "type": "line",
   "text": "An actor of types $14 to $1B is drawn as two sprites from a copy of its record at $8501. Its frame (+$1B) picks a four-byte entry at $F26A (types under $18) or $E2EF in the actor's bank: the first sprite's frame; then, for the second, a step across (negated when mirrored) and down for the copy's screen position (+$14, +$16) and its frame. Before the second, the copy's position is moved 12 units across or down, by its direction (+$0D), when that is 2 or 3."
  },
  {
   "address": 42989,
   "type": "line",
   "text": "With the view half a character across and a cut-out in the visibility mask ($A6F2), shifts the mask's 192 bytes ($8521-$85E0) 4 pixels left."
  },
  {
   "address": 43010,
   "type": "line",
   "text": "The next actor or object to draw, back to front: of the records at $8300 waiting to be drawn (bit 7 of +$18), the last whose position across (+$0E) and down (+$10) are both at least those of the one picked before it; then bank 3 decides between it and the objects ($F689, $C3C7). Returns HL and IY the record and NZ, with bit 7 of +$18 cleared; Z when nothing is left; an object comes back as the record $8501, filled by bank 3's $F6D6."
  },
  {
   "address": 43129,
   "type": "line",
   "text": "Builds the visibility mask for the sprite set up: the 192 bytes at $8521 (4 bytes across by 48 rows) are set to $FF if a cut-out was left there, then each of the $A6F3 scenery pieces of the area (8 bytes each in bank 4 from $C000: shape, first and last column, first and last row, and where it stands: across, down and how high) that overlaps the sprite's columns and rows and stands in front of it is cut out ($A8F3)."
  },
  {
   "address": 43251,
   "type": "line",
   "text": "Cuts the part of a scenery piece that overlaps the sprite out of the visibility mask: the piece's shape (its number picks a word from bank 4's table at $FE28) is blocks of 4 by 4 characters, each block 16 character numbers at $C2C0 in bank 4; every non-zero one is ANDed into the mask from its 8-byte mask character at $F678. Sets $A6F2."
  },
  {
   "address": 43613,
   "type": "line",
   "text": "HL = A times E."
  },
  {
   "address": 43628,
   "type": "line",
   "text": "The window being drawn: $AA6C points to the row-table entry of its first row shown, $AA6E to the first byte of its contents shown. $AA70-$AA7C are its 13-byte record, copied there by bank 3's $CAEB: its width and height shown in characters, its left column on the screen, the columns and rows of its contents not yet shown at the left and top (a window opens from its middle), its full width and height, and the addresses of its contents' pixels and attributes and of the row-table entry of its top row."
  },
  {
   "address": 43645,
   "type": "line",
   "text": "The attribute of the view, set by the clock's day and night ($8C47)."
  },
  {
   "address": 43646,
   "type": "line",
   "text": "The record of the conversation window, as $AA70 holds a window's."
  },
  {
   "address": 43659,
   "type": "line",
   "text": "Writes HL into bank 6's $F1EF and pages bank 3 back in. Called from bank 3."
  },
  {
   "address": 43668,
   "type": "line",
   "text": "The windows, once a pass, after bank 3's $D7B9 (the conversation queue): the conversation window's state is $8D25 (bit 6 opening, bit 7 closing, both while it is open, with a countdown in the low bits); the menus' state is $8D22 (first window, $C8A6 in bank 3: 1 opening, 3 open, 2 closing; the second, $C899: 8 opening, $18 open, $10 closing). Each window opening or closing takes a step, then the windows open are drawn ($ABBB)."
  },
  {
   "address": 43737,
   "type": "line",
   "text": "A step of the conversation window opening ($AB23); when it is full size, bit 7 of $8D25 is set. Not reached in the code map's sessions."
  },
  {
   "address": 43770,
   "type": "line",
   "text": "A step of bank 3's window at $C899 opening towards the size at $C89E; bit 4 of $8D22 is set when it is full size."
  },
  {
   "address": 43781,
   "type": "line",
   "text": "A step of bank 3's window at $C8A6 opening towards the size at $C8AB; bit 1 of $8D22 is set when it is full size."
  },
  {
   "address": 43811,
   "type": "line",
   "text": "One step: the width grows by up to B (4), the columns not shown less half of it, the height by up to 2 and the rows not shown by one less."
  },
  {
   "address": 43859,
   "type": "line",
   "text": "A step of the conversation window closing; when it has closed, $8D25 is cleared. Not reached in the code map's sessions."
  },
  {
   "address": 43877,
   "type": "line",
   "text": "A step of the window at $C8A6 closing; when it has closed, the low three bits of $8D22 are cleared, and bank 3's $CE57 runs if the other window's bits are set."
  },
  {
   "address": 43899,
   "type": "line",
   "text": "A step of the window at $C899 closing; when it has closed, $8D22 becomes 1 (the other window opens) and bank 3's $CE77 runs. Not reached in the code map's sessions."
  },
  {
   "address": 43918,
   "type": "line",
   "text": "A step of the window whose record is at HL closing: what is behind it is drawn again ($ACEC), then it narrows by B (4) columns and one character's worth of rows on each side; Z when it is already shut (width 0). Entered at $AB91 with BC set."
  },
  {
   "address": 43963,
   "type": "line",
   "text": "Draws into the screen not shown the window open or opening ($C8A6 first, or $C899), then the menu pointer ($AD9F), then the conversation window if it is up."
  },
  {
   "address": 44000,
   "type": "line",
   "text": "Draws the window whose record is at HL ($CAEB copies it to $AA70) into the screen not shown: the part of its contents its size shows, a pixel row at a time (LDIs, the JR at $AC51 patched to skip those the width does not need) to the rows the row table gives, then its attributes."
  },
  {
   "address": 44268,
   "type": "line",
   "text": "Draws again what the window whose record is in $AA70 covers at full size, from the character map at $6505 (32 by 24): each character's 8 bytes and attribute are 9 bytes in bank 0 from $ED25, the bank switched between bank 0 and the screen not shown for each byte; character $FF is the view's colour ($AA7D) with nothing drawn."
  },
  {
   "address": 44447,
   "type": "line",
   "text": "Draws the menu pointer when a menu is open ($8D22 with $1B at 3 or $18): its sprite record is copied from bank 3's $C8B3, its position is $8D24 (row) and $8D23 (column), and it is drawn unmasked by any scenery (the visibility mask set to $FF) with bank 6's graphics, by the 16-pixel drawer, or the 24-pixel one when it is 4 bytes wide."
  },
  {
   "address": 44554,
   "type": "line",
   "text": "Six bytes of $FF before the title code."
  },
  {
   "address": 44560,
   "type": "line",
   "text": "The control selection screen, in the normal screen with bank 0 and the 128 ROM paged in: the screen is cleared ($AE88) and coloured (rows 0 to 6 bright yellow, row 7 bright red, rows 8 to 19 cyan), the logo drawn from $B259 in five strips of 4, 4, 4, 4 and 1 bytes across from column 7, and the six lines of $B0E0 printed. The first option is lit and $AF0F runs until a choice is confirmed; the screen is cleared again."
  },
  {
   "address": 44595,
   "type": "line",
   "text": "The logo: each strip is its width (patched into the LD BC at $AE46) and its rows, then its bytes, row by row down the screen."
  },
  {
   "address": 44675,
   "type": "line",
   "text": "Calls $AF0F for ever: the confirmed choice leaves by dropping this loop's return address."
  },
  {
   "address": 44680,
   "type": "line",
   "text": "Clears the normal screen's pixels and sets its attributes to 7 (white ink on black)."
  },
  {
   "address": 44703,
   "type": "line",
   "text": "Prints a string at HL: the screen address, a count, then that many character codes ($AEAF)."
  },
  {
   "address": 44719,
   "type": "line",
   "text": "Prints the character code in A at DE in the title's font (8 bytes each from $B131) and moves DE a column right."
  },
  {
   "address": 44743,
   "type": "line",
   "text": "Prints CONFIRM? Y OR N ($AEFD), waits for Y or N ($AED9), then blanks the line ($AEEB): Z for Y."
  },
  {
   "address": 44761,
   "type": "line",
   "text": "Waits for Y (Z) or N (NZ)."
  },
  {
   "address": 44779,
   "type": "line",
   "text": "Two strings for $AE9F, in the game's alphabet (0 to 9, then A to N and P to Z with no O: the zero stands for it; $23 a space, $24 a question mark): fifteen spaces and CONFIRM? Y OR N."
  },
  {
   "address": 44815,
   "type": "line",
   "text": "One look at the keys ($B0B6): 1 to 4 light that option (attribute $46, the one before put back to $05); 0 picks the one lit ($B0DF) once it is confirmed: its input routine, $47 bytes from the address at $B0D7, is copied to $6811 for the game to call, the keys are chosen for KEYBOARD ($AFEC), and the title loop is left."
  },
  {
   "address": 44897,
   "type": "line",
   "text": "The CHOOSE KEYS screen, six strings for $AE9F: CHOOSE KEYS, WEST?, EAST?, NORTH?, SOUTH?, FIRE?."
  },
  {
   "address": 44953,
   "type": "line",
   "text": "The high bytes of the ports of the keyboard's eight half rows, $F7FE (1 to 5) to $7FFE (SPACE to B), in the order $AFBA lists their keys; a 0 ends them."
  },
  {
   "address": 44962,
   "type": "line",
   "text": "The names of four keys, each a count and its characters: ENTER, CAPS, SYMBOL and SPACE."
  },
  {
   "address": 44986,
   "type": "line",
   "text": "The character for each key, five to a half row in the order of $AF99 and of the port's bits, or $80 plus the offset of its name in $AFA2."
  },
  {
   "address": 45026,
   "type": "line",
   "text": "Where on the screen the name of each of the five keys chosen is printed."
  },
  {
   "address": 45036,
   "type": "line",
   "text": "The CHOOSE KEYS screen: for each of west, east, north, south and fire, waits for every key to be let go, then for one, refused if already taken (the list from $6805, where SPACE is kept, since it calls up the menus); its port and bit go into $6807 on, and its name is printed. After a pause, CONFIRM? Y OR N: N starts again."
  },
  {
   "address": 45215,
   "type": "line",
   "text": "Colours the ten attribute cells of option A's line (row 11 plus two for each, from column 11) with E."
  },
  {
   "address": 45238,
   "type": "line",
   "text": "Which title key is held: 1 to 4 for the keys 1 to 4, 0 for the key 0, $FF for none."
  },
  {
   "address": 45271,
   "type": "line",
   "text": "The input routine for each option: KEYBOARD $B57F, KEMPSTON $B5FD, SINCLAIR $B64C and CURSOR $B5C6."
  },
  {
   "address": 45279,
   "type": "line",
   "text": "The option lit, 0 to 3."
  },
  {
   "address": 45280,
   "type": "line",
   "text": "The six lines of the title for $AE9F: CONTROL SELECTION, 0 SELECT, 1 KEYBOARD, 2 KEMPSTON, 3 SINCLAIR, 4 CURSOR."
  },
  {
   "address": 45361,
   "type": "line",
   "text": "The title's font, 8 bytes for each character code 0 to $24."
  },
  {
   "address": 45657,
   "type": "line",
   "text": "The logo, five strips for $AE33: 4 bytes by 49 rows, 4 by 42, 4 by 43, 4 by 52 and 1 by 52."
  },
  {
   "address": 46463,
   "type": "line",
   "text": "The input routine for keys the player chose (copied to $6811): the five port and bit pairs from $6807 give left 3 or else right 6, plus up 1 or else down 2, plus 9 for fire, in A."
  },
  {
   "address": 46534,
   "type": "line",
   "text": "The input routine for the cursor keys: 5 left, 8 right, 7 up, 6 down and 0 fire, in the same codes."
  },
  {
   "address": 46589,
   "type": "line",
   "text": "The input routine for a Kempston joystick, port $1F: right, left, down, up and fire bits 0 to 4."
  },
  {
   "address": 46626,
   "type": "line",
   "text": "A fifth input routine, the same shape as the others, for a joystick on port $7F: up, down, left and right in bits 0 to 3 and fire in bit 7. No option of the title lists it."
  },
  {
   "address": 46668,
   "type": "line",
   "text": "The input routine for a Sinclair (Interface 2) joystick, the keys 6 to 0: 6 left, 7 right, 8 down, 9 up and 0 fire."
  },
  {
   "address": 46707,
   "type": "line",
   "text": "The rest of the room the view buffer takes ($AE10-$BEAF) once play starts, here holding bytes that came from the tape with the title. The routines of the view are the only code that addresses this range, and play draws the whole view ($A012) before it is shown."
  },
  {
   "address": 47731,
   "type": "line",
   "text": "More of the view buffer's room, holding bytes from the tape."
  },
  {
   "address": 48755,
   "type": "line",
   "text": "The view buffer's last 61 bytes, to $BEAF."
  },
  {
   "address": 48816,
   "type": "line",
   "text": "Eight zeros after the view buffer."
  },
  {
   "address": 48824,
   "type": "line",
   "text": "Six bytes of $FF."
  },
  {
   "address": 48830,
   "type": "line",
   "text": "The interrupt routine (IM 2: every entry of the table at $8400 is $BE): saves every register, runs the clock ($BEEF) unless $BF30 stops it, and plays a pass of the sound driver ($7000)."
  },
  {
   "address": 48864,
   "type": "line",
   "text": "Resets the machine (JP 0, with the stack at $5B00) when CAPS SHIFT is held. No code in the code maps calls it."
  },
  {
   "address": 48879,
   "type": "line",
   "text": "The game's clock, an interrupt at a time: $BF2A counts up to $3000, a day, and its high byte halved is the hour ($BF2C). In play about one interrupt in five is missed while the view is copied with interrupts off ($963B), so a day lasts about 15,000 frames, five minutes. At hour 0, $BF2D (the day count) goes up and $BF29 is set to 4; at hour 6, $BF2E becomes $C7 (day: white ink) and at hour 20 $C5 (night: cyan), with $BF2F set to 4. Bits 7 and 6 of $BF2E tell $8C47 to recolour the view."
  },
  {
   "address": 48937,
   "type": "line",
   "text": "The clock's bytes (set from bank 0's $FECE at new game, $8637): $BF29 a flag set at midnight, $BF2A the frame count, $BF2C the hour, $BF2D the days since the crash, $BF2E the light (bits 7 and 6 a change to show, the low six bits the view's attribute), $BF2F a flag set at dawn and dusk, and $BF30, which stops the clock when it is not 0."
  },
  {
   "address": 48945,
   "type": "line",
   "text": "Blocks of eight $00 and eight $FF bytes with a few others set, that no code in the code maps addresses."
  },
  {
   "address": 49024,
   "type": "line",
   "text": "Bytes the shape of the digits 1 to 9 (8 each from $BF88; the 8 before them do not draw a 0), that no code in the code maps addresses."
  },
  {
   "address": 49104,
   "type": "line",
   "text": "Zeros."
  },
  {
   "address": 49139,
   "type": "line",
   "text": "Words above the game's stack (it starts at $BFF0, $8522) that look like return addresses into $BCxx-$BExx, where the tape's loader ran: left from loading, it seems."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "Bank 0, paged in at the hand-over. $C000-$C7FF is the area's map, 64 blocks across by 32 down, each block 4 by 4 characters ($9A6D): unpacked from bank 7 by $8A9B, then the pieces of the area's objects stamped on it ($899B). At the hand-over, before any area, its first 768 bytes are the frame's cell numbers that $8549 copies to $6505; the rest is zeros."
  },
  {
   "address": 50176,
   "type": "line",
   "text": "The map's rows 16 to 31 (zeros at the hand-over)."
  },
  {
   "address": 51200,
   "type": "line",
   "text": "For each block number in the map, its definition ($9C10), from the area's list ($87CF); $C800 itself is set to 4. Zeros at the hand-over."
  },
  {
   "address": 51440,
   "type": "line",
   "text": "The block definitions, 16 character numbers each, four rows of four ($9C10): definitions 0 to 63. A character number is added to the base $9C10 finds and picks one of bank 4's characters ($CD40, 8 bytes each)."
  },
  {
   "address": 52464,
   "type": "line",
   "text": "Block definitions 64 to 112."
  },
  {
   "address": 53248,
   "type": "line",
   "text": "Block definitions 113 to 176."
  },
  {
   "address": 54272,
   "type": "line",
   "text": "Block definitions 177 to 240."
  },
  {
   "address": 55296,
   "type": "line",
   "text": "Block definitions 241 to 304; those from 256 are for block numbers above the area's limit ($9C13)."
  },
  {
   "address": 56320,
   "type": "line",
   "text": "Block definitions 305 to 368."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "Block definitions 369 to 432."
  },
  {
   "address": 58368,
   "type": "line",
   "text": "Block definitions 433 to 496."
  },
  {
   "address": 59392,
   "type": "line",
   "text": "Block definitions 497 to 500, the last, to $E83F."
  },
  {
   "address": 59456,
   "type": "line",
   "text": "The character bases for $9C10, three bytes an entry: a limit and the word added to the character numbers of the definitions under it. From $E840 for definitions 0 to 255, from $E864 for the rest."
  },
  {
   "address": 59555,
   "type": "line",
   "text": "Four bytes for each of the 16 areas: the address of its list of block definitions (a byte that goes into $9C13, then pairs, the first definition and a count, up to a count of $FF, $87CF) and a second address, which $899B writes into $8B3E for $8B31."
  },
  {
   "address": 59619,
   "type": "line",
   "text": "The areas' lists of block definitions, and the tables of the second addresses."
  },
  {
   "address": 60197,
   "type": "line",
   "text": "The rest of the areas' lists, to $ED24."
  },
  {
   "address": 60709,
   "type": "line",
   "text": "The 156 tiles of the play screen's frame and panel, 9 bytes each (eight rows of pixels, then the attribute), one for each cell number at $6505: tiles 0 to 112 here. $16, $19 and $1C are the ends of the three bars, rewritten as they grow and shrink ($F43C); 5 to 8 hold the day of the month ($F4DC)."
  },
  {
   "address": 61440,
   "type": "line",
   "text": "Continued from tiles ($ED25): its bytes from $F000."
  },
  {
   "address": 61726,
   "type": "line",
   "text": "Tiles 113 to 155: $42 to $55 (from $EF77, before these) are the ten digits two cells high, $65 to $88 the four characters' portraits, nine cells each, and $89 to $9B the pictures of the light."
  },
  {
   "address": 62113,
   "type": "line",
   "text": "The panel as drawn: $F2A1-$F2A3 the lengths of the three bars, $F2A4-$F2A8 the five digits, $F2A9 the leader whose portrait it shows and $F2AA the passes since the portrait changed (to 3)."
  },
  {
   "address": 62123,
   "type": "line",
   "text": "The status panel, once a pass with bank 0 paged in: the leader's portrait ($F2EA), the five digits ($F32D), the three bars ($F3C2), the light ($F37C) and the calendar ($F465) are brought up to date in the cell map at $6505, and each part that changed is drawn again from it into the screen not shown ($F319) on the passes after the change, so that both screens get it."
  },
  {
   "address": 62186,
   "type": "line",
   "text": "When the leader ($8D0A) is not the one whose portrait is drawn ($F2A9), his portrait goes into the cell map: three rows of three cells from $6786, cells $65 plus nine times his number; $F2AA counts the passes since, to 3."
  },
  {
   "address": 62233,
   "type": "line",
   "text": "Draws again from the cell map ($ACEC) the part of the panel D rows by E cells at column A, from the row whose entry in the row table is $8E8D (row 160); bank 0 is paged back in. Entered at $F31C with HL another row's entry."
  },
  {
   "address": 62253,
   "type": "line",
   "text": "When the five digits at $8D04-$8D08 differ from those drawn ($F2A4), they are copied there and put in the cell map from $6795, each two cells high (cell $42 plus twice the digit, and the cell after it below), with a cell's gap after the third; $8D18 counts the passes since, to 2."
  },
  {
   "address": 62332,
   "type": "line",
   "text": "While $BF2F counts down from 4 (the clock sets it at dawn and dusk): on the first pass the picture at $F5D4 goes into the cell map at $67C0, then the day's ($F5C2, when the view's colour is 7) or the night's ($F5CB), each drawn three by three cells at column 27 ($F3B7)."
  },
  {
   "address": 62402,
   "type": "line",
   "text": "The three bars: each is the product of a pair of the leader's need bytes (copied to $8CFB by $8CB6), divided by 1024 ($AA5D); a bar longer or shorter than drawn ($F2A1) grows or shrinks a pixel ($F420, $F403). $8D19 counts the passes since a change, to 2."
  },
  {
   "address": 62467,
   "type": "line",
   "text": "Shortens bar B by a pixel: the end cell's tile ($F43C) is rewritten one pixel shorter, and an empty end cell gives way to the cell before it."
  },
  {
   "address": 62496,
   "type": "line",
   "text": "Lengthens bar B by a pixel: the end cell's tile is rewritten one pixel longer, and a full one moves the end on a cell."
  },
  {
   "address": 62524,
   "type": "line",
   "text": "For bar A (0 to 2): HL the bar's end in its row of the cell map ($6789, $67A9 or $67C9, the first of the next eight cells that holds the end cell $16, $19 or $1C) and DE that cell's tile ($EDEB, $EE06 or $EE21)."
  },
  {
   "address": 62563,
   "type": "line",
   "text": "Two cells of the calendar kept while its page turns."
  },
  {
   "address": 62565,
   "type": "line",
   "text": "The clock sets $BF29 to 4 at midnight, and this turns the calendar's page over the next passes: each puts a picture from $F586 into the cell map ($F559). On the first, the day of the month ($8D14) goes up; after the month's last day (the 31st, or the 30th in month 1) it is 1 again and the month ($8D15) becomes one more, kept to 0 to 3, the cells of its name from $F57E going to $679D; then the day is drawn into its tiles ($F4DC). NZ when the panel is to be drawn again. $8D15 is also bank 3's count for the ceremony, $FF when none runs, so after the first May the month is May again."
  },
  {
   "address": 62684,
   "type": "line",
   "text": "Draws the day of the month into tiles 5 to 8 ($ED52), top halves in 5 and 7, bottom halves in 6 and 8: two digits side by side ($F53E for each), or one split across both columns so that it stands in the middle. The digits' tiles are the panel's, from $EF77."
  },
  {
   "address": 62782,
   "type": "line",
   "text": "Copies digit A's two tiles from $EF77 (pixels only) into the tiles at HL."
  },
  {
   "address": 62809,
   "type": "line",
   "text": "Copies picture A, 4 cells across by 3 down from $F586, into the cell map at $67BC."
  },
  {
   "address": 62846,
   "type": "line",
   "text": "The two cells of the name of each month: 0 MAY, 1 JUN, 2 JUL and 3 AUG."
  },
  {
   "address": 62854,
   "type": "line",
   "text": "Five pictures of the calendar's page turning, 12 cells each."
  },
  {
   "address": 62914,
   "type": "line",
   "text": "The light's pictures, 3 by 3 cells: day ($F5C2), night ($F5CB) and between ($F5D4)."
  },
  {
   "address": 62941,
   "type": "line",
   "text": "Whether the area ($8D1F) is one of the three with a shimmering rectangle ($F706), and whether it is in the view (28 by 18 characters from $9633 and $9634): with an edge on the view's edge the view is coloured plainly ($8C5B); inside it, the rectangle's mask is unpacked into $8521 from its pattern ($F783, $F760 or $F718: a byte under $80 is a count of bytes that follow, $80 plus a count repeats the next byte, $FF ends), the view is coloured and $F659 goes on."
  },
  {
   "address": 63065,
   "type": "line",
   "text": "Clips the rectangle to the view, works out where it starts in the attributes of the screen not shown ($D822, or $5822 when bank 7's is shown) and in the mask, and goes to $6903 with bank 7 paged in ($8C83)."
  },
  {
   "address": 63233,
   "type": "line",
   "text": "The rectangle's first bit ($F701) and its width and rows as clipped ($F702, $F703)."
  },
  {
   "address": 63238,
   "type": "line",
   "text": "The three shimmering rectangles, six bytes each (area, last and first column, last and first row, pattern): area 1, columns $58-$6F and rows $5F-$7A, pattern 0; area 5, columns $58-$6F and rows 0-$1B, pattern 1; area 10, columns $CC-$E3 and rows $50-$6B, pattern 2."
  },
  {
   "address": 63256,
   "type": "line",
   "text": "The rectangles' masks, packed: pattern 2 ($F718), pattern 1 ($F760) and pattern 0 ($F783, every bit set)."
  },
  {
   "address": 63366,
   "type": "line",
   "text": "Clive's sprite frames (his record's +$19 and +$1F name this list and bank 0), 28 of 6 bytes: width in bytes (3 for the 16-pixel drawer, 4 for the 24), rows, and the addresses of the graphics and of the mask, which only the 24-pixel drawer uses."
  },
  {
   "address": 63534,
   "type": "line",
   "text": "Clive's graphics and masks."
  },
  {
   "address": 64558,
   "type": "line",
   "text": "The rest of Clive's graphics and masks, to $FE04."
  },
  {
   "address": 65029,
   "type": "line",
   "text": "What new game ($85E2) starts from: $FE05-$FE54 go through $8521 to bank 3's $EB05 (64 bytes) and $EC5D (16), $FE55-$FECD to bank 3's $ECD8, $FECE-$FED4 to the clock ($BF29) and $FED5-$FEDA to the view's position ($9633)."
  },
  {
   "address": 65243,
   "type": "line",
   "text": "The sprite frames of types $28 to $2C, the runners (class $0A of bank 3's $EAC8, at $EAFB): eighteen of 6 bytes, each width 3, 16 rows, one of the four pictures from $FF47, and $8521 for the mask, which this width does not use."
  },
  {
   "address": 65351,
   "type": "line",
   "text": "The four 16-by-16 graphics of those frames, 32 bytes each."
  },
  {
   "address": 65479,
   "type": "line",
   "text": "The last bytes of bank 0, after the graphics: no instruction in the code maps names them."
  }
 ]
}