{
 "schema": 1,
 "platform": "c64",
 "game": "gribblys-day-out",
 "build": "Hewson's cassette release: a raw TAP of the original tape, one turbo-loaded block",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    2048,
    3071,
    "screen RAM"
   ],
   [
    1024,
    2047,
    "runtime: the title and status-panel text screen and its sprite pointers, printed and set by the code"
   ],
   [
    29964,
    30035,
    "unused: a gap in the loaded file between empty_hook and the sound driver, a RAM fill pattern of $00 and $FF with a few stray bytes; nothing runs or reads it"
   ],
   [
    32768,
    49151,
    "runtime: the level map, 256 columns by 64 rows, built at every level start over the load's copies of the level data and scene lists, which start_game has moved to $E000 and $C200"
   ],
   [
    49152,
    49439,
    "runtime: the soil row under the map and the wall's copy after it, built by make_soil_row"
   ]
  ],
  "extra": [
   [
    10240,
    12287,
    "character set"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 3327,
   "type": "Undefined"
  },
  {
   "start": 3328,
   "end": 3554,
   "type": "Byte"
  },
  {
   "start": 3555,
   "end": 3647,
   "type": "Undefined"
  },
  {
   "start": 3648,
   "end": 4344,
   "type": "Byte"
  },
  {
   "start": 4345,
   "end": 4351,
   "type": "Undefined"
  },
  {
   "start": 4352,
   "end": 7282,
   "type": "Byte"
  },
  {
   "start": 7283,
   "end": 7295,
   "type": "Undefined"
  },
  {
   "start": 7296,
   "end": 16383,
   "type": "Byte"
  },
  {
   "start": 16384,
   "end": 17010,
   "type": "Code"
  },
  {
   "start": 17011,
   "end": 17087,
   "type": "Byte"
  },
  {
   "start": 17088,
   "end": 29963,
   "type": "Code"
  },
  {
   "start": 29964,
   "end": 30035,
   "type": "Undefined"
  },
  {
   "start": 30036,
   "end": 30719,
   "type": "Code"
  },
  {
   "start": 30720,
   "end": 32767,
   "type": "Byte"
  },
  {
   "start": 32768,
   "end": 49663,
   "type": "Undefined"
  },
  {
   "start": 49664,
   "end": 52847,
   "type": "Byte"
  },
  {
   "start": 52848,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 57344,
   "end": 58055,
   "type": "Byte"
  },
  {
   "start": 58056,
   "end": 58111,
   "type": "Undefined"
  },
  {
   "start": 58112,
   "end": 63971,
   "type": "Byte"
  },
  {
   "start": 63972,
   "end": 64255,
   "type": "Undefined"
  },
  {
   "start": 64256,
   "end": 65375,
   "type": "Byte"
  },
  {
   "start": 65376,
   "end": 65529,
   "type": "Undefined"
  },
  {
   "start": 65530,
   "end": 65535,
   "type": "Word"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "cpu_ddr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2,
   "name": "spr_num",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "spr_bit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4,
   "name": "spr_mask",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5,
   "name": "spr_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6,
   "name": "spr_xhi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7,
   "name": "spr_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8,
   "name": "spr_on",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9,
   "name": "spr_tall",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10,
   "name": "spr_behind",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11,
   "name": "spr_multi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12,
   "name": "spr_wide",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13,
   "name": "spr_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14,
   "name": "spr_shape",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15,
   "name": "scratch",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16,
   "name": "slot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17,
   "name": "temp_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18,
   "name": "map_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19,
   "name": "map_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20,
   "name": "map_ptr2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21,
   "name": "map_ptr2_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22,
   "name": "joy_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23,
   "name": "joy_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 24,
   "name": "joy_fire",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 25,
   "name": "fkeys",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26,
   "name": "src_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27,
   "name": "src_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28,
   "name": "dst_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29,
   "name": "dst_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32,
   "name": "count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33,
   "name": "score",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34,
   "name": "score_2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35,
   "name": "score_3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36,
   "name": "score_4",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37,
   "name": "clock_state",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38,
   "name": "pending_add",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39,
   "name": "set_seconds",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40,
   "name": "set_minutes",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41,
   "name": "set_hours",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42,
   "name": "hour_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "raster_phase",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44,
   "name": "fine_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45,
   "name": "fine_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46,
   "name": "frame",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47,
   "name": "level_done",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48,
   "name": "pending_sub",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49,
   "name": "speed_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50,
   "name": "speed_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51,
   "name": "speed_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52,
   "name": "speed_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53,
   "name": "level_bg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 54,
   "name": "view_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55,
   "name": "view_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 56,
   "name": "view_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57,
   "name": "view_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "view_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59,
   "name": "view_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60,
   "name": "level",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "decay_l",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62,
   "name": "accel_l",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 63,
   "name": "max_l",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64,
   "name": "decay_r",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 65,
   "name": "accel_r",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 66,
   "name": "max_r",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 67,
   "name": "decay_u",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 68,
   "name": "accel_u",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 69,
   "name": "max_u",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 70,
   "name": "decay_d",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 71,
   "name": "accel_d",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 72,
   "name": "max_d",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 73,
   "name": "drift_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 74,
   "name": "drift_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 75,
   "name": "gravity",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 76,
   "name": "gravity_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 77,
   "name": "bouncing",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 78,
   "name": "bounce_v",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 79,
   "name": "bounce_v_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 80,
   "name": "height",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 81,
   "name": "tile_here",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 82,
   "name": "gribblet_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 83,
   "name": "near_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 84,
   "name": "near_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 85,
   "name": "fire_latch",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 86,
   "name": "bg_hits",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 87,
   "name": "psi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 88,
   "name": "psi_target",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 89,
   "name": "bank",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 90,
   "name": "hit_latch",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 91,
   "name": "carrying",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 92,
   "name": "saved",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 93,
   "name": "performance",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 94,
   "name": "scr_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 95,
   "name": "scr_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 96,
   "name": "scr_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 97,
   "name": "scr_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 98,
   "name": "tile_below",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 99,
   "name": "pt_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 100,
   "name": "pt_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 101,
   "name": "pt_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 102,
   "name": "pt_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 103,
   "name": "creatures",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 104,
   "name": "spawn_chance",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 105,
   "name": "gribbly_cell",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 106,
   "name": "gribbly_cell_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 107,
   "name": "gribbly_colour",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 108,
   "name": "tile",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 109,
   "name": "spr_hits",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 110,
   "name": "blank_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 111,
   "name": "panel_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 112,
   "name": "hit_type_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 113,
   "name": "hit_type_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 114,
   "name": "web_state",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 115,
   "name": "web_row_ptr",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 116,
   "name": "web_row_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 117,
   "name": "gone",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 118,
   "name": "aggression",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 119,
   "name": "first_level",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 120,
   "name": "seon_wait",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 121,
   "name": "volume",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 157,
   "name": "sound_mode",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 158,
   "name": "fx_req1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 159,
   "name": "fx_req2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 160,
   "name": "fx_req3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 161,
   "name": "tune_step",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 162,
   "name": "rec_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 163,
   "name": "voice_reg",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 164,
   "name": "fx_num",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 167,
   "name": "glyph_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 168,
   "name": "glyph_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 170,
   "name": "fx_voice",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 171,
   "name": "str_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 172,
   "name": "fx_rec",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 173,
   "name": "fx_rec_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 176,
   "name": "mon_addr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 177,
   "name": "mon_addr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 178,
   "name": "mon_byte",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 179,
   "name": "str_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 180,
   "name": "str_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 181,
   "name": "mon_state",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 182,
   "name": "mon_key",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 183,
   "name": "text_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 184,
   "name": "text_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 185,
   "name": "glyph",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 189,
   "name": "mon_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 192,
   "name": "fx1_freq",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 193,
   "name": "fx1_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 194,
   "name": "fx1_sweep",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 195,
   "name": "fx1_sweep_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 196,
   "name": "fx1_steps",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 197,
   "name": "fx1_steps_reload",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 198,
   "name": "fx1_repeats",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 199,
   "name": "fx1_pulse",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 200,
   "name": "fx1_pulse_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 201,
   "name": "fx1_pulse_sweep",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 202,
   "name": "fx1_pulse_sweep_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 203,
   "name": "fx1_mode",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 204,
   "name": "fx1_reset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 205,
   "name": "fx1_reset_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 206,
   "name": "fx1_next",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 212,
   "name": "fx2_steps_reload",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 225,
   "name": "tune_tick",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 237,
   "name": "busy1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 238,
   "name": "busy2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 239,
   "name": "busy3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 512,
   "name": "pause_clock",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 516,
   "name": "pause_frame",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 517,
   "name": "end_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 518,
   "name": "motor_latch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 534,
   "name": "levels_done",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 550,
   "name": "best_score",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 551,
   "name": "best_score_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 552,
   "name": "best_score_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 553,
   "name": "best_score_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 832,
   "name": "grib_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 840,
   "name": "grib_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 848,
   "name": "grib_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 856,
   "name": "grib_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 864,
   "name": "spr_type",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 872,
   "name": "cr_type",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 880,
   "name": "cr_type_8",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 888,
   "name": "cr_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 904,
   "name": "cr_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 920,
   "name": "cr_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 936,
   "name": "cr_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 952,
   "name": "cr_sprite",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 968,
   "name": "cr_frame",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 984,
   "name": "cr_dx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1000,
   "name": "cr_dy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1024,
   "name": "panel_screen",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1280,
   "name": "panel_screen_1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1536,
   "name": "panel_screen_2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1784,
   "name": "panel_screen_3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2040,
   "name": "panel_sprite_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3064,
   "name": "play_sprite_ptrs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3328,
   "name": "msg_remain",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3347,
   "name": "msg_all_safe",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3378,
   "name": "msg_congrats",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3397,
   "name": "msg_completed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3414,
   "name": "msg_bonus",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3442,
   "name": "msg_signature",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3488,
   "name": "number_words",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3504,
   "name": "msg_volume",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3513,
   "name": "vol_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3514,
   "name": "vol_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3517,
   "name": "lbl_score",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3529,
   "name": "lbl_gametime",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3541,
   "name": "msg_level_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3648,
   "name": "spr_seon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3904,
   "name": "spr_seon_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "collide_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4160,
   "name": "rock_record",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4161,
   "name": "rock_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4162,
   "name": "rock_shape",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4163,
   "name": "rock_shape_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4168,
   "name": "rock_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4176,
   "name": "num_words",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4231,
   "name": "msg_six_must",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4259,
   "name": "msg_to_rescue",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4281,
   "name": "msg_saved",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4301,
   "name": "msg_one_saved",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4322,
   "name": "msg_one_remains",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4352,
   "name": "shapes_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4539,
   "name": "shapes_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5130,
   "name": "shapes_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5599,
   "name": "shapes_d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6381,
   "name": "shapes_e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7209,
   "name": "shapes_f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7296,
   "name": "stray_code",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8192,
   "name": "font_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9216,
   "name": "font_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10240,
   "name": "tile_web_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10336,
   "name": "tile_controls",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10368,
   "name": "tile_web_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10496,
   "name": "tile_web_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10528,
   "name": "tile_ground",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10552,
   "name": "tile_psi_grub",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10560,
   "name": "tile_ledges",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10688,
   "name": "tile_gribblets",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10752,
   "name": "tile_flipped_l",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10760,
   "name": "tile_flipped_r",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10768,
   "name": "tile_ground_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10824,
   "name": "tile_scenery_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11032,
   "name": "tile_plant",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11036,
   "name": "tile_plant_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11040,
   "name": "tile_scenery_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11264,
   "name": "tile_web_off_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11296,
   "name": "tile_scenery_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11392,
   "name": "tile_web_off_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11424,
   "name": "tile_scenery_d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11520,
   "name": "tile_web_off_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11552,
   "name": "tile_scenery_e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11744,
   "name": "tile_water_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11776,
   "name": "tile_scenery_f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11824,
   "name": "tile_water_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11832,
   "name": "tile_water_b2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11840,
   "name": "tile_water_b3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11848,
   "name": "tile_water_b4",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11856,
   "name": "tile_blank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12288,
   "name": "spr_blank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12352,
   "name": "spr_gribbly_front",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12416,
   "name": "spr_gribbly_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12480,
   "name": "spr_gribbly_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12544,
   "name": "spr_bubble",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13056,
   "name": "spr_tumble",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13568,
   "name": "spr_seed_pod",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13952,
   "name": "spr_pieces_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14464,
   "name": "spr_pieces_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14848,
   "name": "spr_pieces_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15104,
   "name": "spr_topsy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15360,
   "name": "spr_chrysalis",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15680,
   "name": "spr_stomper",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16000,
   "name": "spr_flyer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16320,
   "name": "spr_stray",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "monitor_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16401,
   "name": "monitor_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16423,
   "name": "b_4027",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16427,
   "name": "b_402B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16441,
   "name": "r_4039",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16442,
   "name": "monitor_edit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16475,
   "name": "b_405B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16487,
   "name": "b_4067",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16495,
   "name": "b_406F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16507,
   "name": "b_407B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16515,
   "name": "b_4083",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16528,
   "name": "b_4090",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16541,
   "name": "b_409D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16551,
   "name": "b_40A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16561,
   "name": "b_40B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16574,
   "name": "b_40BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16584,
   "name": "b_40C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16594,
   "name": "j_40D2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16626,
   "name": "b_40F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16638,
   "name": "b_40FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16648,
   "name": "b_4108",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16658,
   "name": "b_4112",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16684,
   "name": "b_412C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16696,
   "name": "b_4138",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16706,
   "name": "b_4142",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16713,
   "name": "j_4149",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16719,
   "name": "j_414F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16799,
   "name": "b_419F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16807,
   "name": "monitor_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16822,
   "name": "b_41B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16837,
   "name": "b_41C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16853,
   "name": "b_41D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16861,
   "name": "b_41DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16877,
   "name": "b_41ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16885,
   "name": "b_41F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16888,
   "name": "print_string",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16906,
   "name": "j_420A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16925,
   "name": "r_421D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16926,
   "name": "draw_glyph",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16985,
   "name": "r_4259",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16986,
   "name": "copy_pages",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 16999,
   "name": "copy_page",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17011,
   "name": "mon_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17035,
   "name": "row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17060,
   "name": "row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17085,
   "name": "after_rows",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17088,
   "name": "start_game",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17100,
   "name": "b_42CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17195,
   "name": "b_432B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17264,
   "name": "b_4370",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17319,
   "name": "title",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17415,
   "name": "title_scenario",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17463,
   "name": "b_4437",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17464,
   "name": "j_4438",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17502,
   "name": "b_445E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17526,
   "name": "b_4476",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17550,
   "name": "title_controls",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 17578,
   "name": "b_44AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17609,
   "name": "b_44C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17628,
   "name": "b_44DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17635,
   "name": "b_44E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17642,
   "name": "title_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17668,
   "name": "new_game",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17723,
   "name": "b_453B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17736,
   "name": "b_4548",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17773,
   "name": "b_456D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17779,
   "name": "level_start",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17806,
   "name": "b_458E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17860,
   "name": "b_45C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17904,
   "name": "b_45F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17914,
   "name": "b_45FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17928,
   "name": "j_4608",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18020,
   "name": "b_4664",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18079,
   "name": "b_469F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18106,
   "name": "j_46BA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18126,
   "name": "b_46CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18155,
   "name": "b_46EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18215,
   "name": "b_4727",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18312,
   "name": "b_4788",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18448,
   "name": "b_4810",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18480,
   "name": "b_4830",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18512,
   "name": "b_4850",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18541,
   "name": "b_486D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18566,
   "name": "b_4886",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18587,
   "name": "b_489B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18591,
   "name": "b_489F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18620,
   "name": "b_48BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18633,
   "name": "b_48C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18664,
   "name": "main_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 18717,
   "name": "b_491D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18728,
   "name": "b_4928",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18734,
   "name": "b_492E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18739,
   "name": "b_4933",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18766,
   "name": "b_494E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18799,
   "name": "j_496F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18804,
   "name": "b_4974",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18820,
   "name": "level_over",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 18863,
   "name": "seon_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18879,
   "name": "b_49BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18917,
   "name": "b_49E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18926,
   "name": "j_49EE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18937,
   "name": "b_49F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18943,
   "name": "b_49FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18955,
   "name": "b_4A0B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18958,
   "name": "j_4A0E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18970,
   "name": "b_4A1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18973,
   "name": "b_4A1D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18983,
   "name": "b_4A27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18985,
   "name": "j_4A29",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18998,
   "name": "b_4A36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19000,
   "name": "j_4A38",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19017,
   "name": "b_4A49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19026,
   "name": "b_4A52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19035,
   "name": "b_4A5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19049,
   "name": "j_4A69",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19052,
   "name": "b_4A6C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19065,
   "name": "b_4A79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19078,
   "name": "b_4A86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19091,
   "name": "b_4A93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19128,
   "name": "b_4AB8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19133,
   "name": "j_4ABD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19151,
   "name": "b_4ACF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19154,
   "name": "j_4AD2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19179,
   "name": "j_4AEB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19184,
   "name": "b_4AF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19192,
   "name": "b_4AF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19200,
   "name": "b_4B00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19208,
   "name": "b_4B08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19216,
   "name": "seon_web",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19218,
   "name": "b_4B12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19244,
   "name": "b_4B2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19250,
   "name": "b_4B32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19277,
   "name": "b_4B4D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19307,
   "name": "b_4B6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19336,
   "name": "b_4B88",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19355,
   "name": "b_4B9B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19376,
   "name": "r_4BB0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19377,
   "name": "b_4BB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19409,
   "name": "b_4BD1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19431,
   "name": "b_4BE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19453,
   "name": "scatter_rocks",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19457,
   "name": "b_4C01",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19483,
   "name": "b_4C1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19517,
   "name": "new_seon",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19563,
   "name": "b_4C6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19572,
   "name": "j_4C74",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19595,
   "name": "stomper_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19629,
   "name": "b_4CAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19656,
   "name": "b_4CC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19667,
   "name": "b_4CD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19679,
   "name": "b_4CDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19690,
   "name": "j_4CEA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19707,
   "name": "j_4CFB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19724,
   "name": "b_4D0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19742,
   "name": "b_4D1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19755,
   "name": "b_4D2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19775,
   "name": "b_4D3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19812,
   "name": "b_4D64",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19817,
   "name": "j_4D69",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19835,
   "name": "b_4D7B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19838,
   "name": "j_4D7E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19850,
   "name": "b_4D8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19857,
   "name": "b_4D91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19866,
   "name": "b_4D9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19882,
   "name": "b_4DAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19889,
   "name": "b_4DB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19905,
   "name": "b_4DC1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19995,
   "name": "b_4E1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20001,
   "name": "j_4E21",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20024,
   "name": "j_4E38",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20029,
   "name": "j_4E3D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20059,
   "name": "b_4E5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20077,
   "name": "web_power_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20095,
   "name": "b_4E7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20114,
   "name": "b_4E92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20124,
   "name": "j_4E9C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20129,
   "name": "r_4EA1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 20130,
   "name": "b_4EA2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20137,
   "name": "b_4EA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20148,
   "name": "b_4EB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20171,
   "name": "b_4ECB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20188,
   "name": "b_4EDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20210,
   "name": "b_4EF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20216,
   "name": "b_4EF8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20223,
   "name": "b_4EFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20228,
   "name": "fall_gribblet_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20245,
   "name": "b_4F15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20254,
   "name": "b_4F1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20263,
   "name": "b_4F27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20265,
   "name": "j_4F29",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20280,
   "name": "b_4F38",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20296,
   "name": "b_4F48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20309,
   "name": "b_4F55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20322,
   "name": "b_4F62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20358,
   "name": "b_4F86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20363,
   "name": "j_4F8B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20384,
   "name": "b_4FA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20387,
   "name": "j_4FA3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20468,
   "name": "b_4FF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20473,
   "name": "j_4FF9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20497,
   "name": "j_5011",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20510,
   "name": "b_501E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20524,
   "name": "b_502C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20580,
   "name": "flyer_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20611,
   "name": "b_5083",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20620,
   "name": "j_508C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20631,
   "name": "b_5097",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20634,
   "name": "b_509A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20644,
   "name": "b_50A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20646,
   "name": "j_50A6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20659,
   "name": "b_50B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20661,
   "name": "j_50B5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20682,
   "name": "b_50CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20685,
   "name": "b_50CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20698,
   "name": "b_50DA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20711,
   "name": "b_50E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20741,
   "name": "b_5105",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20778,
   "name": "b_512A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20783,
   "name": "j_512F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20801,
   "name": "b_5141",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20804,
   "name": "j_5144",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20829,
   "name": "j_515D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20834,
   "name": "b_5162",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20842,
   "name": "b_516A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20850,
   "name": "b_5172",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20858,
   "name": "b_517A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20866,
   "name": "apply_velocity",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20888,
   "name": "b_5198",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20901,
   "name": "j_51A5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20928,
   "name": "b_51C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20941,
   "name": "j_51CD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20947,
   "name": "make_soil_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20949,
   "name": "b_51D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20980,
   "name": "b_51F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20982,
   "name": "j_51F6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20989,
   "name": "b_51FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20995,
   "name": "b_5203",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21000,
   "name": "b_5208",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21011,
   "name": "topsy_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21042,
   "name": "b_5232",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21053,
   "name": "b_523D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21065,
   "name": "b_5249",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21076,
   "name": "j_5254",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21093,
   "name": "j_5265",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21110,
   "name": "b_5276",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21128,
   "name": "b_5288",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21141,
   "name": "b_5295",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21161,
   "name": "b_52A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21198,
   "name": "b_52CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21203,
   "name": "j_52D3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21221,
   "name": "b_52E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21224,
   "name": "j_52E8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21294,
   "name": "b_532E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21336,
   "name": "b_5358",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21366,
   "name": "b_5376",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21381,
   "name": "j_5385",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21386,
   "name": "chrysalis_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21423,
   "name": "b_53AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21436,
   "name": "b_53BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21449,
   "name": "b_53C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21469,
   "name": "b_53DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21506,
   "name": "b_5402",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21511,
   "name": "j_5407",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21533,
   "name": "b_541D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21536,
   "name": "j_5420",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21577,
   "name": "b_5449",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21579,
   "name": "j_544B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21611,
   "name": "j_546B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21616,
   "name": "check_best_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21652,
   "name": "r_5494",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 21653,
   "name": "b_5495",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21655,
   "name": "b_5497",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21682,
   "name": "b_54B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21722,
   "name": "j_54DA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21739,
   "name": "j_54EB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21744,
   "name": "j_54F0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21762,
   "name": "b_5502",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21766,
   "name": "b_5506",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21777,
   "name": "b_5511",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21799,
   "name": "r_5527",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 21800,
   "name": "j_5528",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21817,
   "name": "b_5539",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21830,
   "name": "b_5546",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21854,
   "name": "b_555E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21868,
   "name": "b_556C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21874,
   "name": "b_5572",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21880,
   "name": "b_5578",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21886,
   "name": "b_557E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21896,
   "name": "j_5588",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21910,
   "name": "b_5596",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21916,
   "name": "b_559C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21922,
   "name": "b_55A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21928,
   "name": "b_55A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21938,
   "name": "best_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21961,
   "name": "b_55C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21972,
   "name": "j_55D4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21993,
   "name": "b_55E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22004,
   "name": "r_55F4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22005,
   "name": "flash_best",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22010,
   "name": "b_55FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22020,
   "name": "sprite_collisions",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22032,
   "name": "b_5610",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22048,
   "name": "b_5620",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22098,
   "name": "b_5652",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22102,
   "name": "b_5656",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22105,
   "name": "r_5659",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22106,
   "name": "b_565A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22111,
   "name": "b_565F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22148,
   "name": "b_5684",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22184,
   "name": "apply_collision",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 22210,
   "name": "j_56C2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22241,
   "name": "b_56E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22247,
   "name": "b_56E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22253,
   "name": "b_56ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22259,
   "name": "b_56F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22282,
   "name": "b_570A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22294,
   "name": "b_5716",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22300,
   "name": "b_571C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22304,
   "name": "b_5720",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22308,
   "name": "b_5724",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22312,
   "name": "b_5728",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22335,
   "name": "b_573F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22347,
   "name": "b_574B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22351,
   "name": "creature_hit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22372,
   "name": "b_5764",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22379,
   "name": "b_576B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22383,
   "name": "flyer_drop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22427,
   "name": "creature_reverse",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22439,
   "name": "seon_stunned",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22461,
   "name": "b_57BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22468,
   "name": "find_creature",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22473,
   "name": "b_57C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22484,
   "name": "r_57D4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22485,
   "name": "on_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22526,
   "name": "b_57FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22532,
   "name": "b_5804",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22573,
   "name": "b_582D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22579,
   "name": "j_5833",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22581,
   "name": "b_5835",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22583,
   "name": "sprite_xy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22602,
   "name": "b_584A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22604,
   "name": "r_584C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22605,
   "name": "move_creatures",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22613,
   "name": "j_5855",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22621,
   "name": "b_585D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22631,
   "name": "b_5867",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22641,
   "name": "b_5871",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22651,
   "name": "b_587B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22661,
   "name": "b_5885",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22671,
   "name": "b_588F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22681,
   "name": "b_5899",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22691,
   "name": "b_58A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22698,
   "name": "j_58AA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22758,
   "name": "b_58E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22759,
   "name": "j_58E7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22767,
   "name": "b_58EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22770,
   "name": "hop_gribblet_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22787,
   "name": "b_5903",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22809,
   "name": "b_5919",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22826,
   "name": "b_592A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22848,
   "name": "b_5940",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22865,
   "name": "b_5951",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22898,
   "name": "b_5972",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22909,
   "name": "b_597D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22913,
   "name": "b_5981",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22924,
   "name": "j_598C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22940,
   "name": "sprite_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22959,
   "name": "colour_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22984,
   "name": "r_59C8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22985,
   "name": "b_59C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22997,
   "name": "volume_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23028,
   "name": "b_59F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23036,
   "name": "b_59FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23049,
   "name": "b_5A09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23051,
   "name": "j_5A0B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23072,
   "name": "end_sequence",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23074,
   "name": "b_5A22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23162,
   "name": "b_5A7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23244,
   "name": "b_5ACC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23276,
   "name": "b_5AEC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23485,
   "name": "wait_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23521,
   "name": "b_5BE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23525,
   "name": "b_5BE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23529,
   "name": "b_5BE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23534,
   "name": "wait_3frames",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23544,
   "name": "seed_pod_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23564,
   "name": "b_5C0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23580,
   "name": "b_5C1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23583,
   "name": "j_5C1F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23610,
   "name": "b_5C3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23632,
   "name": "b_5C50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23650,
   "name": "b_5C62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23663,
   "name": "b_5C6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23683,
   "name": "b_5C83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23719,
   "name": "b_5CA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23724,
   "name": "j_5CAC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23739,
   "name": "b_5CBB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23771,
   "name": "b_5CDB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23788,
   "name": "b_5CEC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23790,
   "name": "b_5CEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23793,
   "name": "j_5CF1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23852,
   "name": "b_5D2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23854,
   "name": "j_5D2E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23882,
   "name": "b_5D4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23892,
   "name": "b_5D54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23897,
   "name": "j_5D59",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23902,
   "name": "tile_at",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23947,
   "name": "spawn_seed_pod",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24010,
   "name": "r_5DCA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 24011,
   "name": "build_level",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24039,
   "name": "b_5DE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24063,
   "name": "b_5DFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24068,
   "name": "b_5E04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24082,
   "name": "b_5E12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24101,
   "name": "j_5E25",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24122,
   "name": "b_5E3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24132,
   "name": "b_5E44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24145,
   "name": "b_5E51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24153,
   "name": "b_5E59",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24164,
   "name": "b_5E64",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24172,
   "name": "b_5E6C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24183,
   "name": "draw_templates",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24220,
   "name": "b_5E9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24227,
   "name": "b_5EA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24241,
   "name": "b_5EB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24273,
   "name": "r_5ED1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 24274,
   "name": "note_tile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24305,
   "name": "r_5EF1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 24306,
   "name": "b_5EF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24322,
   "name": "psi_bar",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24345,
   "name": "b_5F19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24351,
   "name": "b_5F1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24359,
   "name": "b_5F27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24378,
   "name": "b_5F3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24385,
   "name": "r_5F41",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 24386,
   "name": "b_5F42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24398,
   "name": "b_5F4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24410,
   "name": "bank_bar",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24420,
   "name": "b_5F64",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24439,
   "name": "b_5F77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24447,
   "name": "j_5F7F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24463,
   "name": "b_5F8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24473,
   "name": "b_5F99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24481,
   "name": "b_5FA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24491,
   "name": "b_5FAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24501,
   "name": "b_5FB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24513,
   "name": "transfer_stage",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24523,
   "name": "game_over",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 24530,
   "name": "j_5FD2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24544,
   "name": "b_5FE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24561,
   "name": "b_5FF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24576,
   "name": "b_6000",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24591,
   "name": "b_600F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24601,
   "name": "b_6019",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24618,
   "name": "b_602A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24625,
   "name": "b_6031",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24653,
   "name": "add_psi",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24665,
   "name": "b_6059",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24670,
   "name": "b_605E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24686,
   "name": "clear_text_area",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24700,
   "name": "b_607C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24702,
   "name": "b_607E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24728,
   "name": "gribblet_fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24739,
   "name": "b_60A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24764,
   "name": "b_60BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24826,
   "name": "r_60FA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 24827,
   "name": "b_60FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24850,
   "name": "b_6112",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24917,
   "name": "r_6155",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 24918,
   "name": "j_6156",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24943,
   "name": "b_616F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24945,
   "name": "j_6171",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24992,
   "name": "b_61A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24997,
   "name": "bounce_tiles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25027,
   "name": "b_61C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25031,
   "name": "j_61C7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25073,
   "name": "r_61F1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25074,
   "name": "b_61F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25099,
   "name": "free_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25101,
   "name": "b_620D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25109,
   "name": "b_6215",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25114,
   "name": "find_gribblet",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25122,
   "name": "b_6222",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25137,
   "name": "b_6231",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25142,
   "name": "find_state",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25144,
   "name": "b_6238",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25152,
   "name": "r_6240",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25153,
   "name": "count_gribblets",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25161,
   "name": "b_6249",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25176,
   "name": "j_6258",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25180,
   "name": "b_625C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25185,
   "name": "b_6261",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25193,
   "name": "b_6269",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25199,
   "name": "b_626F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25243,
   "name": "reset_gribblets",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25245,
   "name": "b_629D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25260,
   "name": "j_62AC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25267,
   "name": "b_62B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25274,
   "name": "b_62BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25309,
   "name": "b_62DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25317,
   "name": "gribblet_hop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25330,
   "name": "r_62F2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25331,
   "name": "b_62F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25382,
   "name": "b_6326",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25393,
   "name": "j_6331",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25466,
   "name": "b_637A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25474,
   "name": "b_6382",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25608,
   "name": "j_6408",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25641,
   "name": "blow_bubble",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25658,
   "name": "r_643A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25659,
   "name": "b_643B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25712,
   "name": "b_6470",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25765,
   "name": "move_bubbles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25767,
   "name": "b_64A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25776,
   "name": "b_64B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25780,
   "name": "b_64B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25804,
   "name": "b_64CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25814,
   "name": "b_64D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25830,
   "name": "b_64E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25835,
   "name": "b_64EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25843,
   "name": "level_result",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25872,
   "name": "b_6510",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25879,
   "name": "j_6517",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25883,
   "name": "b_651B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25892,
   "name": "b_6524",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25901,
   "name": "b_652D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25912,
   "name": "b_6538",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25932,
   "name": "b_654C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25933,
   "name": "b_654D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25943,
   "name": "b_6557",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26012,
   "name": "b_659C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26032,
   "name": "b_65B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26044,
   "name": "b_65BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26047,
   "name": "j_65BF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26062,
   "name": "b_65CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26071,
   "name": "r_65D7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26072,
   "name": "scroll_x",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26091,
   "name": "b_65EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26101,
   "name": "b_65F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26117,
   "name": "scroll_y",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26136,
   "name": "b_6618",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26146,
   "name": "b_6622",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26162,
   "name": "rotate_chars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26164,
   "name": "b_6634",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26165,
   "name": "rot_src4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26166,
   "name": "rot_src4_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26168,
   "name": "rot_src3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26169,
   "name": "rot_src3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26171,
   "name": "rot_dst4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26172,
   "name": "rot_dst4_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26174,
   "name": "rot_src2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26175,
   "name": "rot_src2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26177,
   "name": "rot_dst3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26178,
   "name": "rot_dst3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26180,
   "name": "rot_src1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26181,
   "name": "rot_src1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26183,
   "name": "rot_dst2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26184,
   "name": "rot_dst2_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26187,
   "name": "rot_dst1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26188,
   "name": "rot_dst1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26193,
   "name": "animate_chars",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26201,
   "name": "b_6659",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26207,
   "name": "set_rotation",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26277,
   "name": "r_66A5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26278,
   "name": "b_66A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26288,
   "name": "b_66B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26303,
   "name": "b_66BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26321,
   "name": "b_66D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26342,
   "name": "b_66E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26359,
   "name": "b_66F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26370,
   "name": "draw_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26432,
   "name": "j_6740",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26436,
   "name": "b_6744",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26454,
   "name": "b_6756",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26462,
   "name": "b_675E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26473,
   "name": "b_6769",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26475,
   "name": "b_676B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26493,
   "name": "b_677D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26514,
   "name": "j_6792",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26516,
   "name": "b_6794",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26537,
   "name": "b_67A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26540,
   "name": "b_67AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26596,
   "name": "b_67E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26605,
   "name": "b_67ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26621,
   "name": "b_67FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26650,
   "name": "b_681A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26669,
   "name": "r_682D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26670,
   "name": "fill_wall_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26680,
   "name": "b_6838",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26684,
   "name": "b_683C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26701,
   "name": "web_band_a",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26718,
   "name": "b_685E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26728,
   "name": "b_6868",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26730,
   "name": "b_686A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26750,
   "name": "b_687E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26785,
   "name": "web_band_b",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26802,
   "name": "b_68B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26812,
   "name": "b_68BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26814,
   "name": "b_68BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26834,
   "name": "b_68D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26869,
   "name": "gribbly_physics",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26906,
   "name": "b_691A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26932,
   "name": "b_6934",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26952,
   "name": "b_6948",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26978,
   "name": "b_6962",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26996,
   "name": "b_6974",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27006,
   "name": "j_697E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27028,
   "name": "b_6994",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27044,
   "name": "b_69A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27070,
   "name": "b_69BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27088,
   "name": "b_69D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27094,
   "name": "j_69D6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27113,
   "name": "b_69E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27125,
   "name": "b_69F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27144,
   "name": "b_6A08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27156,
   "name": "b_6A14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27209,
   "name": "b_6A49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27227,
   "name": "b_6A5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27240,
   "name": "b_6A68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27252,
   "name": "b_6A74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27268,
   "name": "b_6A84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27271,
   "name": "b_6A87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27301,
   "name": "b_6AA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27305,
   "name": "j_6AA9",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27309,
   "name": "animate_face",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27322,
   "name": "b_6ABA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27343,
   "name": "b_6ACF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27365,
   "name": "b_6AE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27377,
   "name": "b_6AF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27399,
   "name": "r_6B07",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27400,
   "name": "b_6B08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27423,
   "name": "b_6B1F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27446,
   "name": "eyes",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27458,
   "name": "b_6B42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27469,
   "name": "b_6B4D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27480,
   "name": "b_6B58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27491,
   "name": "b_6B63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27521,
   "name": "b_6B81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27531,
   "name": "press_control",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27539,
   "name": "b_6B93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27551,
   "name": "j_6B9F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27572,
   "name": "b_6BB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27575,
   "name": "b_6BB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27611,
   "name": "b_6BDB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27631,
   "name": "b_6BEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27654,
   "name": "b_6C06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27693,
   "name": "b_6C2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27716,
   "name": "b_6C44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27739,
   "name": "web_diag_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27741,
   "name": "b_6C5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27754,
   "name": "b_6C6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27760,
   "name": "web_diag_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27762,
   "name": "b_6C72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27775,
   "name": "b_6C7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27781,
   "name": "web_row",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27794,
   "name": "web_switch_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27806,
   "name": "b_6C9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27813,
   "name": "fire_button",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27825,
   "name": "r_6CB1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27826,
   "name": "b_6CB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27834,
   "name": "b_6CBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27843,
   "name": "gribbly_collides",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27870,
   "name": "b_6CDE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27888,
   "name": "b_6CF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27898,
   "name": "b_6CFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27922,
   "name": "b_6D12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27940,
   "name": "b_6D24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27952,
   "name": "r_6D30",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27953,
   "name": "b_6D31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27956,
   "name": "b_6D34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27964,
   "name": "b_6D3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27969,
   "name": "j_6D41",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27977,
   "name": "b_6D49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27986,
   "name": "web_layout_ptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28004,
   "name": "web_block_a",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28028,
   "name": "b_6D7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28042,
   "name": "b_6D8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28061,
   "name": "b_6D9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28075,
   "name": "b_6DAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28089,
   "name": "b_6DB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28108,
   "name": "b_6DCC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28128,
   "name": "b_6DE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28148,
   "name": "b_6DF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28159,
   "name": "r_6DFF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28160,
   "name": "web_block_b",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28184,
   "name": "b_6E18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28198,
   "name": "b_6E26",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28217,
   "name": "b_6E39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28231,
   "name": "b_6E47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28245,
   "name": "b_6E55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28264,
   "name": "b_6E68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28284,
   "name": "b_6E7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28304,
   "name": "b_6E90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28315,
   "name": "r_6E9B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28316,
   "name": "read_joystick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28343,
   "name": "b_6EB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28350,
   "name": "b_6EBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28354,
   "name": "j_6EC2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28367,
   "name": "b_6ECF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28374,
   "name": "b_6ED6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28378,
   "name": "j_6EDA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28384,
   "name": "get_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28461,
   "name": "put_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28506,
   "name": "b_6F5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28511,
   "name": "b_6F5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28525,
   "name": "b_6F6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28530,
   "name": "b_6F72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28544,
   "name": "b_6F80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28549,
   "name": "b_6F85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28563,
   "name": "b_6F93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28568,
   "name": "b_6F98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28582,
   "name": "b_6FA6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28587,
   "name": "b_6FAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28601,
   "name": "b_6FB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28606,
   "name": "b_6FBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28610,
   "name": "fill_colour_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28612,
   "name": "j_6FC4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28614,
   "name": "b_6FC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28642,
   "name": "b_6FE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28656,
   "name": "score_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28671,
   "name": "b_6FFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28700,
   "name": "b_701C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28749,
   "name": "r_704D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28750,
   "name": "j_704E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28763,
   "name": "b_705B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28806,
   "name": "b_7086",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28814,
   "name": "b_708E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28821,
   "name": "b_7095",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28825,
   "name": "b_7099",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28839,
   "name": "clock_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28860,
   "name": "r_70BC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28861,
   "name": "b_70BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28885,
   "name": "b_70D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28895,
   "name": "b_70DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28909,
   "name": "b_70ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28929,
   "name": "b_7101",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28960,
   "name": "b_7120",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28994,
   "name": "b_7142",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29003,
   "name": "b_714B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29013,
   "name": "b_7155",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29019,
   "name": "b_715B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29047,
   "name": "b_7177",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29052,
   "name": "b_717C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29063,
   "name": "b_7187",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29065,
   "name": "b_7189",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29093,
   "name": "b_71A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29108,
   "name": "r_71B4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29109,
   "name": "show_clock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29124,
   "name": "b_71C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29132,
   "name": "j_71CC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29142,
   "name": "b_71D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29144,
   "name": "b_71D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29157,
   "name": "b_71E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29212,
   "name": "read_fkeys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29266,
   "name": "b_7252",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29275,
   "name": "delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29290,
   "name": "show_gametime",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29295,
   "name": "b_726F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29305,
   "name": "b_7279",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29308,
   "name": "j_727C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29319,
   "name": "b_7287",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29340,
   "name": "b_729C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29413,
   "name": "pause",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29427,
   "name": "b_72F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29474,
   "name": "b_7322",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29506,
   "name": "b_7342",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29543,
   "name": "r_7367",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29544,
   "name": "b_7368",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29549,
   "name": "b_736D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29603,
   "name": "b_73A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29613,
   "name": "tape_motor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29628,
   "name": "r_73BC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29629,
   "name": "b_73BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29641,
   "name": "freeze_keys",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29662,
   "name": "b_73DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29713,
   "name": "r_7411",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29714,
   "name": "nmi_rti",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29715,
   "name": "irq_title",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29732,
   "name": "irq_blank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29733,
   "name": "b_7425",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29786,
   "name": "irq_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29837,
   "name": "b_748D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29843,
   "name": "j_7493",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29871,
   "name": "irq_panel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29872,
   "name": "b_74B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29920,
   "name": "irq_collide",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29963,
   "name": "empty_hook",
   "type": "Return",
   "kind": "user"
  },
  {
   "address": 30036,
   "name": "sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30047,
   "name": "b_755F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30054,
   "name": "b_7566",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30063,
   "name": "b_756F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30097,
   "name": "b_7591",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30122,
   "name": "b_75AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30126,
   "name": "music_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30135,
   "name": "b_75B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30185,
   "name": "b_75E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30189,
   "name": "b_75ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30194,
   "name": "effects_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30217,
   "name": "b_7609",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30221,
   "name": "b_760D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30240,
   "name": "b_7620",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30244,
   "name": "b_7624",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30254,
   "name": "j_762E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30265,
   "name": "b_7639",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30375,
   "name": "b_76A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30387,
   "name": "j_76B3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30404,
   "name": "j_76C4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30417,
   "name": "b_76D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30421,
   "name": "b_76D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30434,
   "name": "r_76E2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30435,
   "name": "music_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30470,
   "name": "start_effect",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30534,
   "name": "b_7746",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30538,
   "name": "j_774A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30540,
   "name": "b_774C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30557,
   "name": "play_note",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30596,
   "name": "r_7784",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30597,
   "name": "gate_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30610,
   "name": "load_instrument",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30612,
   "name": "b_7794",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30625,
   "name": "b_77A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30661,
   "name": "voice_offset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30663,
   "name": "b_77C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30672,
   "name": "sid_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30674,
   "name": "b_77D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30688,
   "name": "sid_clear_fx",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30690,
   "name": "b_77E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30720,
   "name": "sprite_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30728,
   "name": "clock_str",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30730,
   "name": "clk_h10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30731,
   "name": "clk_h1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30733,
   "name": "clk_m10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30734,
   "name": "clk_m1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30736,
   "name": "clk_s10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30737,
   "name": "clk_s1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30738,
   "name": "clk_ampm",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30741,
   "name": "gametime_str",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30754,
   "name": "title_gribblys",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30766,
   "name": "title_day_out",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30778,
   "name": "frame_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30817,
   "name": "frame_bottom",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30858,
   "name": "credit_lines",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31186,
   "name": "control_lines",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31459,
   "name": "blank_line16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31498,
   "name": "hour_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31522,
   "name": "status_words",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31642,
   "name": "colour_cycle",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31660,
   "name": "psi_str",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31662,
   "name": "psi_cells",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31672,
   "name": "bank_str",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31674,
   "name": "bank_cells",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31688,
   "name": "msg_game_over",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31700,
   "name": "msg_transfer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31742,
   "name": "lbl_psi_bank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31783,
   "name": "char_groups",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31807,
   "name": "web_tri_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31999,
   "name": "web_tri_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32191,
   "name": "level_bg_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32199,
   "name": "level_mc1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32207,
   "name": "level_mc2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32215,
   "name": "level_cram",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32223,
   "name": "flight_consts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32235,
   "name": "gribbly_sprite",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32245,
   "name": "mouth_front",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32251,
   "name": "mouth_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32257,
   "name": "mouth_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32263,
   "name": "smile_front",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32269,
   "name": "smile_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32275,
   "name": "smile_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32281,
   "name": "frown_front",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32287,
   "name": "frown_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32293,
   "name": "frown_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32299,
   "name": "head_front",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32363,
   "name": "head_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32427,
   "name": "head_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32491,
   "name": "eyes_open",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32500,
   "name": "eyes_blink",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32509,
   "name": "eyes_looks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32563,
   "name": "bounce_consts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32575,
   "name": "slope_steps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32587,
   "name": "drain_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32591,
   "name": "msg_bw",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32603,
   "name": "msg_colour",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32615,
   "name": "legs_left",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32631,
   "name": "legs_right",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32647,
   "name": "plant_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32663,
   "name": "icon_clear",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32668,
   "name": "icon_carry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32672,
   "name": "msg_cheese",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32684,
   "name": "grub_frames",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32716,
   "name": "best_line",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32717,
   "name": "best_line_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32751,
   "name": "end_7800",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "f_8000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 48896,
   "name": "f_BF00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49152,
   "name": "f_C000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49408,
   "name": "f_C100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 49664,
   "name": "scene_07",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50008,
   "name": "scene_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50264,
   "name": "scene_09",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50520,
   "name": "scene_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50968,
   "name": "scene_00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51336,
   "name": "scene_04",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51656,
   "name": "scene_05",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52232,
   "name": "scene_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55938,
   "name": "f_DA82",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55978,
   "name": "f_DAAA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56125,
   "name": "f_DB3D",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56165,
   "name": "f_DB65",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "cbm80_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57360,
   "name": "scene_lists",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57361,
   "name": "scene_lists_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57392,
   "name": "web_layouts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57424,
   "name": "start_cols",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57440,
   "name": "level_names",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 57600,
   "name": "name_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57624,
   "name": "name_09",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57648,
   "name": "name_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57680,
   "name": "name_00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57720,
   "name": "name_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57752,
   "name": "name_04",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57776,
   "name": "name_05",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57800,
   "name": "name_07",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57832,
   "name": "name_03",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57864,
   "name": "name_01",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57888,
   "name": "name_02",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57912,
   "name": "name_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57944,
   "name": "name_06",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57976,
   "name": "name_08",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57992,
   "name": "name_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58032,
   "name": "name_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58112,
   "name": "web_10",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58184,
   "name": "web_09",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58256,
   "name": "web_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58328,
   "name": "web_00",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58400,
   "name": "web_11",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58472,
   "name": "web_04",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58544,
   "name": "web_05",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58616,
   "name": "web_07",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58688,
   "name": "web_03",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58760,
   "name": "web_01",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58832,
   "name": "web_02",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58904,
   "name": "web_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58976,
   "name": "web_06",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59048,
   "name": "web_08",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59120,
   "name": "web_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59192,
   "name": "web_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59264,
   "name": "scene_12",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59912,
   "name": "scene_06",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60400,
   "name": "scene_08",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60848,
   "name": "scene_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61328,
   "name": "scene_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62056,
   "name": "shapes_g",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62768,
   "name": "scene_03",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63264,
   "name": "scene_01",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63664,
   "name": "scene_02",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64256,
   "name": "instruments",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 64260,
   "name": "inst_control",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 64384,
   "name": "effects",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64640,
   "name": "effects_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64768,
   "name": "note_freqs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 64896,
   "name": "note_freqs_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65024,
   "name": "tune_v1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 65152,
   "name": "tune_v2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 65280,
   "name": "tune_v3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 65530,
   "name": "vectors",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 0,
   "type": "line",
   "text": "The 6510's data-direction register for its port at $01. Nothing in the game reads or writes it; regenerator2000 put its start label here, at the image's first address."
  },
  {
   "address": 1,
   "type": "line",
   "text": "The 6510's port: start_game writes $25, all RAM but the I/O chips at $D000 (no BASIC or KERNAL ROM) and the cassette motor off; tape_motor reads bit 4 (a datasette key down) and sets or clears bit 5, the motor."
  },
  {
   "address": 2,
   "type": "line",
   "text": "The hardware sprite (0-7) that get_sprite, put_sprite and sprite_off work on: the one a creature mover, free_sprite or blow_bubble has in hand, and the first of the two touching sprites in sprite_collisions."
  },
  {
   "address": 3,
   "type": "line",
   "text": "The bit of sprite spr_num in the VIC's one-bit-per-sprite registers, from sprite_bits ($7800), set by get_sprite and put_sprite."
  },
  {
   "address": 4,
   "type": "line",
   "text": "The inverse of spr_bit, for clearing sprite spr_num's bit in the VIC's sprite registers."
  },
  {
   "address": 5,
   "type": "line",
   "text": "The sprite parameters, ten bytes $05-$0E that get_sprite fills from a hardware sprite and put_sprite writes back; $05 is the low byte of the x position. level_start copies Gribbly's ten from $7DEB."
  },
  {
   "address": 6,
   "type": "line",
   "text": "Sprite parameter: bit 8 of the x position, $FF set or 0 clear ($D010)."
  },
  {
   "address": 7,
   "type": "line",
   "text": "Sprite parameter: the y position."
  },
  {
   "address": 8,
   "type": "line",
   "text": "Sprite parameter: shown ($FF) or not (0), the sprite's bit in $D015."
  },
  {
   "address": 9,
   "type": "line",
   "text": "Sprite parameter: double height ($FF) or not (0), $D017."
  },
  {
   "address": 10,
   "type": "line",
   "text": "Sprite parameter: behind the background's foreground colours ($FF) or in front (0), $D01B."
  },
  {
   "address": 11,
   "type": "line",
   "text": "Sprite parameter: multicolour ($FF) or hi-res (0), $D01C."
  },
  {
   "address": 12,
   "type": "line",
   "text": "Sprite parameter: double width ($FF) or not (0), $D01D."
  },
  {
   "address": 13,
   "type": "line",
   "text": "Sprite parameter: the sprite's own colour ($D027 + n). Each mover sets its creature's; Gribbly and the Topsies take gribbly_colour ($6B)."
  },
  {
   "address": 14,
   "type": "line",
   "text": "Sprite parameter: the shape number, written to the play screen's pointer ($0BF8 + n): $C1-$C3 are Gribbly facing the player, left and right."
  },
  {
   "address": 15,
   "type": "line",
   "text": "A scratch byte many routines borrow: the Gribblets found by build_level and note_tile, the leading-zero flag of best_digits, the cell count of the psi and bank bars, a bit pattern in web_block_a and web_block_b, a sum in new_seon and creature_hit, a step in draw_view and eyes."
  },
  {
   "address": 16,
   "type": "line",
   "text": "The creature slot a mover is working on (each saves X here on entry), the second of two touching sprites in sprite_collisions, and a loop counter for clear_text_area, score_tick and gribblet_hop."
  },
  {
   "address": 17,
   "type": "line",
   "text": "Where a creature mover keeps move_creatures' Y, and a counter for set_rotation, build_level, draw_templates and the title pages. sprite_collisions leaves the type - 2 of a sprite a bubble hit here, the multiplier creature_hit scores by (x 20 points), and clears it after one kill."
  },
  {
   "address": 18,
   "type": "line",
   "text": "Pointer to a map cell, low byte the column: tile_at sets $12 = x / 8 and $13 = row page, so (map_ptr) is the cell under a point. Also the web-switching routines' cell and build_level's tile pointer."
  },
  {
   "address": 19,
   "type": "line",
   "text": "High byte of map_ptr: the map row as a page, $80-$BF."
  },
  {
   "address": 20,
   "type": "line",
   "text": "A second map pointer, low byte: the column a template or ground shape is drawn at (build_level, draw_templates), the target of a Gribblet's hop, the righting of a flipped Gribblet, and the next row for fill_wall_rows and the web bands."
  },
  {
   "address": 21,
   "type": "line",
   "text": "High byte of map_ptr2, the row page."
  },
  {
   "address": 22,
   "type": "line",
   "text": "The joystick's vertical direction, from read_joystick: $FF up, 1 down, 0 neither."
  },
  {
   "address": 23,
   "type": "line",
   "text": "The joystick's horizontal direction, from read_joystick: $FF left, 1 right, 0 neither."
  },
  {
   "address": 24,
   "type": "line",
   "text": "The fire button from read_joystick, bit 4 of $DC00: 0 while it is pressed, $10 when it is not."
  },
  {
   "address": 25,
   "type": "line",
   "text": "The function keys from read_fkeys, active low: bits 3-6 f7, f1, f3, f5, bit 7 low while SHIFT is held."
  },
  {
   "address": 26,
   "type": "line",
   "text": "Source pointer, low byte: the level's scene list in build_level and draw_templates, a web triangle in the web bands, a map row in draw_view, the clock string in show_clock."
  },
  {
   "address": 27,
   "type": "line",
   "text": "High byte of src_ptr."
  },
  {
   "address": 28,
   "type": "line",
   "text": "Destination pointer, low byte: a map row being built, a play-screen row in draw_view, a row of colour RAM for fill_colour_rows."
  },
  {
   "address": 29,
   "type": "line",
   "text": "High byte of dst_ptr. The two bytes after it, $1E and $1F, are not used."
  },
  {
   "address": 32,
   "type": "line",
   "text": "A down counter for loops over rows, columns and records: title pages, level_start's band and row loops, build_level, draw_templates, the web bands, check_best_score, game_over and level_result's waits."
  },
  {
   "address": 33,
   "type": "line",
   "text": "The score, four bytes of BCD with the most significant first ($21-$24), eight digits. score_tick changes it one point at a time; level_result adds 6808 on completing the game."
  },
  {
   "address": 34,
   "type": "line",
   "text": "Second byte of the BCD score: the hundred thousands and ten thousands ($21 holds the ten millions and millions)."
  },
  {
   "address": 35,
   "type": "line",
   "text": "Third byte of the BCD score: the thousands and hundreds."
  },
  {
   "address": 36,
   "type": "line",
   "text": "Last byte of the BCD score: the tens and units."
  },
  {
   "address": 37,
   "type": "line",
   "text": "The real-time clock setting state of clock_keys: 0 running, $40 waiting for f1 to be let go after entering, $80 setting, $C0 waiting for f1 to be let go after starting. While it is non-zero colour_keys and volume_keys do nothing, the title pages wait before reading the joystick, and the pause will not resume."
  },
  {
   "address": 38,
   "type": "line",
   "text": "Points waiting to be added to the score, a plain count: every award adds to it and score_tick moves them into the score one at a time. The face smiles while it is not zero."
  },
  {
   "address": 39,
   "type": "line",
   "text": "Seconds of the clock being set (always 0), written to CIA 1's clock when f1 starts it."
  },
  {
   "address": 40,
   "type": "line",
   "text": "Minutes of the clock being set, BCD 0-59, stepped by f5 and f6."
  },
  {
   "address": 41,
   "type": "line",
   "text": "Hours of the clock being set, in the CIA's form (bit 7 PM), from hour_table."
  },
  {
   "address": 42,
   "type": "line",
   "text": "The place in hour_table ($7B0A) of the hour being set, 0-23; show_gametime also uses it as the index of the game clock's hour."
  },
  {
   "address": 43,
   "type": "line",
   "text": "Where the raster chain has got to, for main_loop and wait_frame: 1 after irq_top (line 44), 2 after irq_collide (182), $80 after irq_blank (189), 0 after irq_panel (197)."
  },
  {
   "address": 44,
   "type": "line",
   "text": "The fine horizontal scroll, 0-7, from scroll_x, which irq_top puts in $D016."
  },
  {
   "address": 45,
   "type": "line",
   "text": "The fine vertical scroll, 0-7, from scroll_y, which irq_top puts in $D011."
  },
  {
   "address": 46,
   "type": "line",
   "text": "The frame counter, counted up by main_loop each frame and by wait_frame each step of a cut sequence: odd and even frames run different work, and its low bits pace the animations."
  },
  {
   "address": 47,
   "type": "line",
   "text": "Set when the level is over: by main_loop when every Gribblet is settled, or by psi_bar when psi runs out. main_loop then goes to level_over, which clears it."
  },
  {
   "address": 48,
   "type": "line",
   "text": "Points waiting to be taken off the score, a plain count. score_tick cancels them against pending_add first; the face frowns while it is not zero."
  },
  {
   "address": 49,
   "type": "line",
   "text": "Gribbly's horizontal speed, a signed 8.8 number with the fraction here and the pixels in $32; positive is left. gribbly_physics changes it and scroll_x moves the view by it."
  },
  {
   "address": 50,
   "type": "line",
   "text": "Whole pixels a step (every other frame) of Gribbly's horizontal speed (signed, positive left)."
  },
  {
   "address": 51,
   "type": "line",
   "text": "Gribbly's vertical speed, fraction byte; with $34 a signed 8.8 number, positive up."
  },
  {
   "address": 52,
   "type": "line",
   "text": "Whole pixels a step (every other frame) of Gribbly's vertical speed (signed, positive up)."
  },
  {
   "address": 53,
   "type": "line",
   "text": "The play area's background colour, from the level colour table ($7DBF), which irq_top writes to $D021 each frame."
  },
  {
   "address": 54,
   "type": "line",
   "text": "The view's horizontal position in the map in pixels, low byte: level_start sets it from the level's start column ($E050) x 8; scroll_x moves it."
  },
  {
   "address": 55,
   "type": "line",
   "text": "High byte of the view's horizontal position."
  },
  {
   "address": 56,
   "type": "line",
   "text": "The view's vertical position in pixels, low byte, from $80 at level start (with $39 = 1, $0180)."
  },
  {
   "address": 57,
   "type": "line",
   "text": "High byte of the view's vertical position."
  },
  {
   "address": 58,
   "type": "line",
   "text": "The map column at the view's left edge, (view_x + 7) / 8, set by draw_view."
  },
  {
   "address": 59,
   "type": "line",
   "text": "The map row at the view's top edge, (view_y + 7) / 8, set by draw_view."
  },
  {
   "address": 60,
   "type": "line",
   "text": "The level number, 0-15, chosen by level_result. It indexes the scene lists, names, web layouts and start positions at $E010-$E07F and the colour tables at $7DBF."
  },
  {
   "address": 61,
   "type": "line",
   "text": "First of Gribbly's twelve movement constants ($3D-$48), loaded from the flight set ($7DDF) or the bounce set ($7F33): added with a high byte of $FF, it slows a leftward speed when the stick is centred."
  },
  {
   "address": 62,
   "type": "line",
   "text": "Movement constant: added to the x speed while the stick is held left."
  },
  {
   "address": 63,
   "type": "line",
   "text": "Movement constant: the highest leftward speed in whole pixels a step."
  },
  {
   "address": 64,
   "type": "line",
   "text": "Movement constant: added to a rightward (negative) x speed when the stick is centred."
  },
  {
   "address": 65,
   "type": "line",
   "text": "Movement constant: added with carry and a high byte of $FF while the stick is held right."
  },
  {
   "address": 66,
   "type": "line",
   "text": "Movement constant: the limit of the rightward speed, a negative whole-pixel value."
  },
  {
   "address": 67,
   "type": "line",
   "text": "Movement constant: slows an upward speed when the stick is centred."
  },
  {
   "address": 68,
   "type": "line",
   "text": "Movement constant: added to the y speed while the stick is held up."
  },
  {
   "address": 69,
   "type": "line",
   "text": "Movement constant: the highest upward speed in whole pixels a step."
  },
  {
   "address": 70,
   "type": "line",
   "text": "Movement constant: slows a downward speed when the stick is centred."
  },
  {
   "address": 71,
   "type": "line",
   "text": "Movement constant: added with carry and a high byte of $FF while the stick is held down."
  },
  {
   "address": 72,
   "type": "line",
   "text": "Movement constant: the limit of the downward speed, a negative whole-pixel value."
  },
  {
   "address": 73,
   "type": "line",
   "text": "An acceleration gribbly_physics adds to the x speed every step (odd frames), low byte. Nothing writes it after start_game clears zero page, so it is always 0."
  },
  {
   "address": 74,
   "type": "line",
   "text": "High byte of the always-zero acceleration at $49."
  },
  {
   "address": 75,
   "type": "line",
   "text": "The pull added to the y speed every step (odd frames) in flight, low byte: level_start sets $FFD0, -$30, so Gribbly sinks unless he is held up."
  },
  {
   "address": 76,
   "type": "line",
   "text": "High byte of the pull in flight, $FF."
  },
  {
   "address": 77,
   "type": "line",
   "text": "Gribbly's mode: 1 bouncing on the ground, 0 flying. draw_view switches it; fire does different things in each."
  },
  {
   "address": 78,
   "type": "line",
   "text": "The bounce speed's fraction byte: with $4F it is set at each landing to four times the sideways speed, and it is what lifts Gribbly's height each step."
  },
  {
   "address": 79,
   "type": "line",
   "text": "The bounce speed in whole pixels, added to the height $50 each step (odd frames) and reduced by 2 each step."
  },
  {
   "address": 80,
   "type": "line",
   "text": "Gribbly's height above the ground while bouncing, in pixels: his sprite is drawn at y $77 - height. Below 8 he is low enough to pick up a Gribblet or touch a tile."
  },
  {
   "address": 81,
   "type": "line",
   "text": "The tile in Gribbly's cell, set by draw_view."
  },
  {
   "address": 82,
   "type": "line",
   "text": "The level's Gribblet colour, the low three bits of its colour-RAM fill ($7DD7), or $F3 in black and white: the colour hopping and falling Gribblets are drawn in."
  },
  {
   "address": 83,
   "type": "line",
   "text": "A pointer near Gribbly: draw_view leaves it one row up and one column left of his cell, for gribblet_fire, bounce_tiles and press_control; web_layout_ptr points it at the level's web layout, and the Stomper and Topsy movers borrow it."
  },
  {
   "address": 84,
   "type": "line",
   "text": "High byte of near_ptr."
  },
  {
   "address": 85,
   "type": "line",
   "text": "Set while fire is held after it did something (a control, a Gribblet), so that one press acts once; cleared when the button is let go. check_best_score uses it for the same purpose."
  },
  {
   "address": 86,
   "type": "line",
   "text": "The sprite-to-background collisions ($D01F) gribbly_collides read, bit 0 Gribbly's."
  },
  {
   "address": 87,
   "type": "line",
   "text": "Gribbly's psi energy, 0-64, which psi_bar moves a step at a time towards psi_target and draws as the Psi bar. At 0 the level is over and is played again."
  },
  {
   "address": 88,
   "type": "line",
   "text": "The level psi is heading to: add_psi changes it, psi_bar follows it."
  },
  {
   "address": 89,
   "type": "line",
   "text": "The psi bank, 0-255, shown as the Bank bar: the transfer stage at every level start moves energy between it and psi. new_game starts it at $77."
  },
  {
   "address": 90,
   "type": "line",
   "text": "Set by gribbly_collides while Gribbly is touching the web or scenery, so one contact costs once; cleared when he is clear."
  },
  {
   "address": 91,
   "type": "line",
   "text": "Set while Gribbly carries a Gribblet; the carrying icon shows in the panel."
  },
  {
   "address": 92,
   "type": "line",
   "text": "Gribblets saved on this level, counted by count_gribblets; level_result needs six."
  },
  {
   "address": 93,
   "type": "line",
   "text": "How well the game is going: it rises by the Gribblets saved beyond five on each level won, at most 14, and limits which level can come next. It is added to spawn_chance, and Seon switches a web control it touches with a chance of performance in 32."
  },
  {
   "address": 94,
   "type": "line",
   "text": "The screen x on_screen worked out for a point, low byte, for sprite_xy."
  },
  {
   "address": 95,
   "type": "line",
   "text": "High byte of on_screen's screen x, signed."
  },
  {
   "address": 96,
   "type": "line",
   "text": "The screen y on_screen worked out for a point, low byte."
  },
  {
   "address": 97,
   "type": "line",
   "text": "High byte of on_screen's screen y, signed."
  },
  {
   "address": 98,
   "type": "line",
   "text": "The tile in the cell under Gribbly's, set by draw_view."
  },
  {
   "address": 99,
   "type": "line",
   "text": "A point in the map in pixels, x low byte, given to tile_at and on_screen: each mover puts its creature's position here."
  },
  {
   "address": 100,
   "type": "line",
   "text": "High byte of the point's x."
  },
  {
   "address": 101,
   "type": "line",
   "text": "The point's y in pixels, low byte."
  },
  {
   "address": 102,
   "type": "line",
   "text": "High byte of the point's y."
  },
  {
   "address": 103,
   "type": "line",
   "text": "The number of creature slots in use; move_creatures closes the gaps when one is freed. level_start empties the table."
  },
  {
   "address": 104,
   "type": "line",
   "text": "The odds creatures change on, set by level_start to level x 2 + 20 + performance: a chance of it in 256 that a Topsy becomes a chrysalis, a chrysalis hatches or a Flyer is pushed, and in 128 that a sitting Gribblet hops."
  },
  {
   "address": 105,
   "type": "line",
   "text": "Gribbly's cell in the map, low byte the column (draw_view): bounce_tiles writes through it and Seon steers towards it."
  },
  {
   "address": 106,
   "type": "line",
   "text": "Gribbly's map row as a page, the high byte of gribbly_cell."
  },
  {
   "address": 107,
   "type": "line",
   "text": "Gribbly's sprite colour: $F5 from start_game or f7 on the title, $FC from f8, which also makes level_start use grey shades for the level. Topsies and seed pods turning into Topsies take it too."
  },
  {
   "address": 108,
   "type": "line",
   "text": "The tile tile_at found under a point."
  },
  {
   "address": 109,
   "type": "line",
   "text": "The sprite-to-sprite collisions ($D01E) that irq_collide latched, for sprite_collisions."
  },
  {
   "address": 110,
   "type": "line",
   "text": "The delay loop count irq_blank waits before blanking, set by irq_top from the fine y scroll, so the blank line stays put while the view scrolls."
  },
  {
   "address": 111,
   "type": "line",
   "text": "The delay loop count irq_panel waits before turning the panel on, set by irq_top."
  },
  {
   "address": 112,
   "type": "line",
   "text": "In sprite_collisions, the type - 2 of the touching sprite held in slot ($10): a column of collide_table for the first look-up and a row for the second."
  },
  {
   "address": 113,
   "type": "line",
   "text": "The type - 2 of the touching sprite in spr_num ($02), the other index into collide_table."
  },
  {
   "address": 114,
   "type": "line",
   "text": "web_power_down's state, counted up by every call that works a row: 0 waiting, 1 starting, 2 onwards killing controls on one row a call (every other row, where the controls are), $80 onwards switching web lines off a row a call, $FF done."
  },
  {
   "address": 115,
   "type": "line",
   "text": "The map row web_power_down is working on, low byte (the column)."
  },
  {
   "address": 116,
   "type": "line",
   "text": "The page of the row web_power_down is working on, $80-$C0."
  },
  {
   "address": 117,
   "type": "line",
   "text": "Gribblets saved, lost or carried off by a Flyer, counted by count_gribblets; at 7 web_power_down starts."
  },
  {
   "address": 118,
   "type": "line",
   "text": "Seon's aggression, 0-14: the chance in 16 that it steers towards Gribbly on each move. main_loop raises it every 256 frames once the wait timer is out; a bubble lowers it by 2."
  },
  {
   "address": 119,
   "type": "line",
   "text": "0 until the first level of a game has been built, then $FF: level_result shows no saved count before the first level."
  },
  {
   "address": 120,
   "type": "line",
   "text": "Seon's wait timer: level_start sets (28 - level) x 2 and main_loop counts it down every 256 frames; Seon stays still while it runs. web_power_down and Gribbly touching Seon clear it; a bubble that finds Seon's aggression below 2 sets it to 1."
  },
  {
   "address": 121,
   "type": "line",
   "text": "The SID volume, 1-15 (5 from start_game), changed by volume_keys and written to $D418 with the low-pass filter bit. The 35 bytes after it, $7A-$9C, are not used."
  },
  {
   "address": 157,
   "type": "line",
   "text": "The sound driver's mode: 0 silence, 1 the title tune, 2 effects; $11 and $12 are requests to set up the tune or the effects."
  },
  {
   "address": 158,
   "type": "line",
   "text": "A request for a sound effect on voice 1: the effect number, bit 7 marking one that cannot be cut short. effects_step starts it and clears the request."
  },
  {
   "address": 159,
   "type": "line",
   "text": "A request for a sound effect on voice 2, like fx_req1."
  },
  {
   "address": 160,
   "type": "line",
   "text": "The request byte for voice 3, cleared by sid_clear_fx; nothing sets it, as voice 3 is the noise source."
  },
  {
   "address": 161,
   "type": "line",
   "text": "The tune's step, the index into the three note lists at $FE00, $FE80 and $FF00."
  },
  {
   "address": 162,
   "type": "line",
   "text": "An index into a record: the byte of an effect record start_effect copies, or the instrument byte load_instrument writes."
  },
  {
   "address": 163,
   "type": "line",
   "text": "The register offset of the voice being worked on (0, 7 or 14), from voice_offset; in start_effect, the offset of the voice's effect set (0 or $0F)."
  },
  {
   "address": 164,
   "type": "line",
   "text": "The effect start_effect is starting, 1 upwards, with bit 7 the cannot-cut flag. $A5 and $A6 are not used."
  },
  {
   "address": 167,
   "type": "line",
   "text": "The screen cell draw_glyph writes to, low byte; also copy_page's destination."
  },
  {
   "address": 168,
   "type": "line",
   "text": "High byte of glyph_ptr. $A9 is not used."
  },
  {
   "address": 170,
   "type": "line",
   "text": "The voice (1 or 2) start_effect is starting an effect on."
  },
  {
   "address": 171,
   "type": "line",
   "text": "print_string's index into the string."
  },
  {
   "address": 172,
   "type": "line",
   "text": "Pointer to the effect record start_effect is reading, $FB80 + (n - 1) x 16, low byte."
  },
  {
   "address": 173,
   "type": "line",
   "text": "High byte of the effect record pointer. $AE and $AF are not used."
  },
  {
   "address": 176,
   "type": "line",
   "text": "The hidden editor's address, low byte (monitor_init sets $0200); copy_page's source pointer at start-up."
  },
  {
   "address": 177,
   "type": "line",
   "text": "High byte of the hidden editor's address, and of copy_page's source."
  },
  {
   "address": 178,
   "type": "line",
   "text": "The byte at the hidden editor's address, changed with J and M and written back."
  },
  {
   "address": 179,
   "type": "line",
   "text": "print_string's pointer to the string, low byte; monitor_edit uses it to write its digits."
  },
  {
   "address": 180,
   "type": "line",
   "text": "High byte of print_string's string pointer."
  },
  {
   "address": 181,
   "type": "line",
   "text": "The hidden editor's state: bit 7 set is off ($80 from monitor_init); while on it counts the steps, and acts on every fourth."
  },
  {
   "address": 182,
   "type": "line",
   "text": "The key the hidden editor read (monitor_key)."
  },
  {
   "address": 183,
   "type": "line",
   "text": "The text row draw_glyph prints at, 0-24 of the screen at $0400."
  },
  {
   "address": 184,
   "type": "line",
   "text": "The text column draw_glyph prints at, moved on by one or two cells per glyph."
  },
  {
   "address": 185,
   "type": "line",
   "text": "The glyph draw_glyph prints, a code of the game's alphabet. $BA-$BC are not used."
  },
  {
   "address": 189,
   "type": "line",
   "text": "The hidden editor's cursor column: $0A-$0D an address digit, $11-$12 a byte digit. $BE and $BF are not used."
  },
  {
   "address": 192,
   "type": "line",
   "text": "Voice 1's effect set, fifteen bytes $C0-$CE copied from an effect record by start_effect: $C0/$C1 the frequency now (low, high)."
  },
  {
   "address": 193,
   "type": "line",
   "text": "High byte of voice 1's effect frequency."
  },
  {
   "address": 194,
   "type": "line",
   "text": "Voice 1's frequency sweep, low byte, added every call."
  },
  {
   "address": 195,
   "type": "line",
   "text": "High byte of voice 1's frequency sweep."
  },
  {
   "address": 196,
   "type": "line",
   "text": "Voice 1's step counter: when it runs out the frequency resets or the sweep reverses, and it is reloaded from $C5."
  },
  {
   "address": 197,
   "type": "line",
   "text": "The value voice 1's step counter is reloaded with."
  },
  {
   "address": 198,
   "type": "line",
   "text": "Voice 1's repeat count: when it runs out the gate closes and the chained effect, if any, is requested."
  },
  {
   "address": 199,
   "type": "line",
   "text": "Voice 1's pulse width, low byte, written to the SID every call."
  },
  {
   "address": 200,
   "type": "line",
   "text": "High byte of voice 1's pulse width."
  },
  {
   "address": 201,
   "type": "line",
   "text": "Voice 1's pulse-width sweep, low byte."
  },
  {
   "address": 202,
   "type": "line",
   "text": "High byte of voice 1's pulse-width sweep."
  },
  {
   "address": 203,
   "type": "line",
   "text": "Voice 1's effect mode: 1 resets the frequency when the steps run out, otherwise the sweep reverses."
  },
  {
   "address": 204,
   "type": "line",
   "text": "The frequency voice 1's effect goes back to, low byte."
  },
  {
   "address": 205,
   "type": "line",
   "text": "High byte of voice 1's reset frequency."
  },
  {
   "address": 206,
   "type": "line",
   "text": "The effect to request on voice 1 when this one ends, 0 for none. Voice 2's set follows at $CF-$DD in the same order."
  },
  {
   "address": 212,
   "type": "line",
   "text": "Voice 2's step-counter reload ($CF + 5), the byte sid_clear_fx zeroes for voice 2 where for voice 1 it zeroes the repeat count."
  },
  {
   "address": 225,
   "type": "line",
   "text": "The tune's tick counter, counted down by music_step every call; the notes move on when its low two bits are 0, every fourth call."
  },
  {
   "address": 237,
   "type": "line",
   "text": "Voice 1 is playing an effect that cannot be cut short (bit 7 of its number)."
  },
  {
   "address": 238,
   "type": "line",
   "text": "Voice 2 is playing an effect that cannot be cut short."
  },
  {
   "address": 239,
   "type": "line",
   "text": "The busy flag for voice 3, cleared by sid_clear_fx and otherwise unused. $F0-$FF are not used."
  },
  {
   "address": 512,
   "type": "line",
   "text": "CIA 2's time-of-day clock kept here while the game is paused ($0200-$0203, tenths to hours), so that game time does not run, and written back when play resumes."
  },
  {
   "address": 516,
   "type": "line",
   "text": "The frame counter kept while the game is paused."
  },
  {
   "address": 517,
   "type": "line",
   "text": "end_sequence's loop counter, from 6 down."
  },
  {
   "address": 518,
   "type": "line",
   "text": "tape_motor's latch: set once no datasette key is down, so the motor runs only when a key is pressed after that. Bytes $0207-$0215 are not used."
  },
  {
   "address": 534,
   "type": "line",
   "text": "Sixteen flags, one per level ($0216-$0225): non-zero once the level has been won. new_game clears them; level_result sets them and picks the next level among those still clear."
  },
  {
   "address": 550,
   "type": "line",
   "text": "The best score, four bytes of BCD, most significant first ($0226-$0229); start_game sets it to 6809."
  },
  {
   "address": 551,
   "type": "line",
   "text": "Second byte of the best score."
  },
  {
   "address": 552,
   "type": "line",
   "text": "Third byte of the best score ($68 at start-up)."
  },
  {
   "address": 553,
   "type": "line",
   "text": "Last byte of the best score ($09 at start-up). Nothing uses $022A-$033F."
  },
  {
   "address": 832,
   "type": "line",
   "text": "The Gribblet table, eight Gribblets: $0340-$0347 the map row page of each one's cell ($0348 the column, $0350 the state, $0358 the hop timer)."
  },
  {
   "address": 840,
   "type": "line",
   "text": "The column of each Gribblet's map cell, eight bytes."
  },
  {
   "address": 848,
   "type": "line",
   "text": "Each Gribblet's state: 0 lost, 1 sitting, 2 carried, 3 falling, 4 on its back, 5 hopping, 6 inside a Flyer, $80 saved."
  },
  {
   "address": 856,
   "type": "line",
   "text": "Each Gribblet's hop timer, 16 steps, counted down by count_gribblets every other frame (32 frames)."
  },
  {
   "address": 864,
   "type": "line",
   "text": "The type of creature each hardware sprite shows, eight bytes: 0 free, 2 a bubble, and the creature types 1 and 3-9. free_sprite looks for a 0."
  },
  {
   "address": 872,
   "type": "line",
   "text": "The creature table, sixteen slots: $0368-$0377 the type of each (0 empty, 1 hopping Gribblet, 3 seed pod, 4 Topsy, 5 chrysalis, 6 Stomper, 7 Flyer, 8 Seon, 9 falling Gribblet)."
  },
  {
   "address": 880,
   "type": "line",
   "text": "The types of creature slots 8-15, the second half of cr_type."
  },
  {
   "address": 888,
   "type": "line",
   "text": "Each creature's x position in the map in pixels, low byte (sixteen slots)."
  },
  {
   "address": 904,
   "type": "line",
   "text": "Each creature's x position, high byte."
  },
  {
   "address": 920,
   "type": "line",
   "text": "Each creature's y position in pixels, low byte."
  },
  {
   "address": 936,
   "type": "line",
   "text": "Each creature's y position, high byte."
  },
  {
   "address": 952,
   "type": "line",
   "text": "The hardware sprite each creature holds, 0 when it is off screen."
  },
  {
   "address": 968,
   "type": "line",
   "text": "Each creature's sprite frame; for a hopping Gribblet, its Gribblet number."
  },
  {
   "address": 984,
   "type": "line",
   "text": "Each creature's x speed, signed."
  },
  {
   "address": 1000,
   "type": "line",
   "text": "Each creature's y speed, signed. $03F8-$03FF are not used."
  },
  {
   "address": 1024,
   "type": "line",
   "text": "The text screen at $0400 that shows the title pages, messages and the status panel, printed by print_string. Output, excluded from the count."
  },
  {
   "address": 1280,
   "type": "line",
   "text": "Second page of the panel screen, cleared by start_game."
  },
  {
   "address": 1536,
   "type": "line",
   "text": "Third page of the panel screen, cleared by start_game."
  },
  {
   "address": 1784,
   "type": "line",
   "text": "The panel screen's last 256 bytes, $06F8-$07F7, cleared by start_game."
  },
  {
   "address": 2040,
   "type": "line",
   "text": "The sprite pointers of the panel screen, all set to $C0 (blank) by new_game."
  },
  {
   "address": 3064,
   "type": "line",
   "text": "The sprite pointers of the play screen at $0800, written by put_sprite."
  },
  {
   "address": 3328,
   "type": "line",
   "text": "String: \"Gribblets remain\" at row 10, column 13, after a number word, when a level restarts with Gribblets still to save (level_start)."
  },
  {
   "address": 3347,
   "type": "line",
   "text": "String: \"All Gribblets safe and sound\" at row 10, column 5, on completing the game (level_result)."
  },
  {
   "address": 3378,
   "type": "line",
   "text": "String: \"Congratulations!\" at row 2, column 12, the first line of the game's end."
  },
  {
   "address": 3397,
   "type": "line",
   "text": "String: \"Game completed\" at row 6, column 13."
  },
  {
   "address": 3414,
   "type": "line",
   "text": "String: \"6809 bonus points awarded\" at row 6, column 7, the last line of the game's end."
  },
  {
   "address": 3442,
   "type": "line",
   "text": "String: \"Please enter your hi~score signature\" at row 18, column 1, shown by check_best_score. Followed by seven $FF bytes, $0D99-$0D9F, that nothing reads."
  },
  {
   "address": 3488,
   "type": "line",
   "text": "Low bytes of the number words \"No\", (unused), \"Two\" ... \"Eight\" at $1050-$1086, by count 0-8: level_start and level_result print $1000 + this byte. Entry 1 ($00) is never read, since one Gribblet has messages of its own. $0DA9-$0DAF hold zeros."
  },
  {
   "address": 3504,
   "type": "line",
   "text": "String: \"Volume 05\" at row 20, column 1, printed by volume_keys after patching the two digits at $0DB9."
  },
  {
   "address": 3513,
   "type": "line",
   "text": "The tens digit of the \"Volume nn\" string, written by volume_keys (glyph 0 or 1)."
  },
  {
   "address": 3514,
   "type": "line",
   "text": "The units digit of the \"Volume nn\" string, written by volume_keys. $0DBC is a spare $FF."
  },
  {
   "address": 3517,
   "type": "line",
   "text": "String: \"Score~\" at row 20, column 15 (after three spaces), the status panel's label, printed by title and again when the pause ends."
  },
  {
   "address": 3529,
   "type": "line",
   "text": "String: \"Gametime~\" at row 22, column 15, the status panel's label."
  },
  {
   "address": 3541,
   "type": "line",
   "text": "Three zero bytes, then at $0DD8 a string \"Level ??\" for row 20, column 1 that no code prints: no LDX #$D8 / LDY #$0D pair exists, and no table holds its address."
  },
  {
   "address": 3648,
   "type": "line",
   "text": "Sprite shapes $39-$3C, Seon (64 bytes each, $0E40-$0F3F): a hunched, six-legged creature with feelers; seon_move shows one of these four at random every fourth frame."
  },
  {
   "address": 3904,
   "type": "line",
   "text": "Sprite shapes $3D-$3F, Seon ($0F40-$0FFF): the three frames seon_move plays once every 256 frames."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "What one sprite does to another when they touch, 8 x 8 bytes: row = type of the sprite affected - 2, column = type of the one it touched - 2 (types 2 bubble to 9 falling Gribblet). Bit 7 kills it, 6 reverses it, 5 stuns Seon, 4 the Topsy rule, 3 makes a Flyer drop its Gribblet. Row 0 is $80 against every type but a bubble and a falling Gribblet, so a bubble pops on what it hits; the bubble column holds $80 for the seed pod, $10 for the Topsy, $80 for the chrysalis, $40 for the Stomper, $08 for the Flyer and $20 for Seon. Between creatures: a Topsy destroys a seed pod and another Topsy; a chrysalis is crushed by a seed pod, a Topsy, another chrysalis or a Stomper; a chrysalis turns a Topsy or a Stomper round. Read by apply_collision."
  },
  {
   "address": 4160,
   "type": "line",
   "text": "The one-record template list scatter_rocks builds and draws 96 times: map column, row and template address ($1040-$1043), then a zero address ($1046/$1047) that ends the list. The play snapshot holds the last record drawn for its level: column 6, row $2F, template $1C3E."
  },
  {
   "address": 4161,
   "type": "line",
   "text": "The row of scatter_rocks' record, from the SID's random oscillator."
  },
  {
   "address": 4162,
   "type": "line",
   "text": "Low byte of the template address in scatter_rocks' record, one of the four at $1048."
  },
  {
   "address": 4163,
   "type": "line",
   "text": "High byte of the template address in scatter_rocks' record, always $1C."
  },
  {
   "address": 4168,
   "type": "line",
   "text": "Low bytes of the four rock and crack templates scatter_rocks picks from: $1C29, $1C34, $1C3E, $1C43. $104C-$104F are zero."
  },
  {
   "address": 4176,
   "type": "line",
   "text": "The number words, strings for row 10, each at the column that centres its message: \"No\", \"Two\", \"Three\", \"Four\", \"Five\", \"Six\", \"Seven\", \"Eight\", reached through number_words. level_start prints \"Eight\" directly before \"Gribblets to rescue\"."
  },
  {
   "address": 4231,
   "type": "line",
   "text": "String: \"At least six must survive\" at row 14, column 6, when a level ends with fewer than six saved (level_result)."
  },
  {
   "address": 4259,
   "type": "line",
   "text": "String: \"Gribblets to rescue\" at row 10, column 13, after \"Eight\" on a new level."
  },
  {
   "address": 4281,
   "type": "line",
   "text": "String: \"Gribblets saved\" at row 10, column 13, after a number word (level_result). Two spare $FF follow."
  },
  {
   "address": 4301,
   "type": "line",
   "text": "String: \"One Gribblet saved\" at row 10, column 9."
  },
  {
   "address": 4322,
   "type": "line",
   "text": "String: \"One Gribblet remains\" at row 10, column 8. $10F9-$10FF are zero."
  },
  {
   "address": 4352,
   "type": "line",
   "text": "Column shapes and templates $1100-$11BA: 22 of them, 22 used as ground and 11 as templates, by levels 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. Each is a count of columns, then for each column a height and that many tile codes drawn upwards; the commonest ground columns, $1100 being the plain one a zero word stands for; $11AF-$11BA are zero."
  },
  {
   "address": 4539,
   "type": "line",
   "text": "Column shapes and templates $11BB-$1409: 16 of them, 0 used as ground and 16 as templates, by levels 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. Each is a count of columns, then for each column a height and that many tile codes drawn upwards; templates only; $13E1-$13E3 are zero."
  },
  {
   "address": 5130,
   "type": "line",
   "text": "Column shapes and templates $140A-$15DE: 23 of them, 18 used as ground and 15 as templates, by levels 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15. Each is a count of columns, then for each column a height and that many tile codes drawn upwards; a byte $FF at $149D belongs to none of them."
  },
  {
   "address": 5599,
   "type": "line",
   "text": "Column shapes and templates $15DF-$18EC: 17 of them, 0 used as ground and 17 as templates, by levels 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15. Each is a count of columns, then for each column a height and that many tile codes drawn upwards; templates only."
  },
  {
   "address": 6381,
   "type": "line",
   "text": "Column shapes and templates $18ED-$1C28: 34 of them, 24 used as ground and 30 as templates, by levels 0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 15. Each is a count of columns, then for each column a height and that many tile codes drawn upwards; $1AA7-$1AAE hold two one-column shapes (tiles $43 $B3 and $43 $B4) that no list uses."
  },
  {
   "address": 7209,
   "type": "line",
   "text": "Column shapes and templates $1C29-$1C72: 10 of them, 3 used as ground and 10 as templates, by levels 0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15. Each is a count of columns, then for each column a height and that many tile codes drawn upwards; the first four are also scatter_rocks' rocks and cracks; $1C73-$1C7F are zero."
  },
  {
   "address": 7296,
   "type": "line",
   "text": "896 bytes of 6502 code from another program, left in memory when the game was saved: nothing in the game calls, jumps to or reads $1C73-$1FFF. It starts mid-instruction and works on variables at $084D-$0906 (a BCD counter, a row of dots printed through routines at $277E, $2780 and $285E, which in this image are font bytes), so it cannot run here."
  },
  {
   "address": 8192,
   "type": "line",
   "text": "The text font, upper halves ($2000-$23FF, glyphs $00-$7F; the panel's $D018 = $19 points the VIC here): digits $00-$09, a-z $0A-$23, punctuation $24-$2F, space $30, the bar cells $31-$38 (one to eight units, $38 full), the bank mark $39, the capitals' left halves $3A-$53, frame corners $54-$57, the Gribblet icon $58, END $59, the capitals' right halves $5A-$73 and frame pieces up to $7F."
  },
  {
   "address": 9216,
   "type": "line",
   "text": "The text font, lower halves ($2400-$27FF, glyphs $80-$FF): draw_glyph puts code | $80 in the cell under each glyph, so every glyph here is the bottom half of the one $80 below it, and all text is two cells tall."
  },
  {
   "address": 10240,
   "type": "line",
   "text": "The play tiles (multicolour characters at $2800-$2FFF, $D018 = $2B in play), tiles $00-$0B: $00-$03 the first web line, whose four pictures animate_chars rotates every fourth frame, and $04-$0B blank, $04 being the empty map cell."
  },
  {
   "address": 10336,
   "type": "line",
   "text": "Tiles $0C-$0F, the web controls: $0C and $0E live, $0D and $0F their dead forms after the power-down. Rotated with the web lines."
  },
  {
   "address": 10368,
   "type": "line",
   "text": "Tiles $10-$1F: $10-$13 the second web line (rotated), $14-$1F blank."
  },
  {
   "address": 10496,
   "type": "line",
   "text": "Tiles $20-$23, the third web line (rotated)."
  },
  {
   "address": 10528,
   "type": "line",
   "text": "Tiles $24-$26, the first of the ground tiles $24-$48 that Gribbly bounces on and creatures walk on."
  },
  {
   "address": 10552,
   "type": "line",
   "text": "Tile $27, the psi-grub: animate_chars copies one of the four frames at $7FAC here, so it pulses. Gribbly eats it for psi."
  },
  {
   "address": 10560,
   "type": "line",
   "text": "Tiles $28-$37, ground and ledges: $2E the empty ledge where Gribblets sit, $2F the marker gribblet_hop puts on a hop's target, $37 the cave's ledge where a Gribblet is saved."
  },
  {
   "address": 10688,
   "type": "line",
   "text": "Tiles $38-$3F, a sitting Gribblet two cells wide: left halves $38-$3B, right halves $3C-$3F. animate_chars rotates each set, so the Gribblets look about."
  },
  {
   "address": 10752,
   "type": "line",
   "text": "Tile $40, the left half of a Gribblet on its back: animate_chars writes rows 0-2 from $7F67, its waving legs."
  },
  {
   "address": 10760,
   "type": "line",
   "text": "Tile $41, the right half of a Gribblet on its back, rows 0-2 from $7F77."
  },
  {
   "address": 10768,
   "type": "line",
   "text": "Tiles $42-$48, the rest of the ground tiles."
  },
  {
   "address": 10824,
   "type": "line",
   "text": "Tiles $49-$62, scenery: $50 solid rock (the left wall, and everything above and below the map), $54 and $56 the wall's edges, $55 the map's right end, $5C and $5D the soil row's ground."
  },
  {
   "address": 11032,
   "type": "line",
   "text": "Tile $63, a plant: animate_chars writes rows 4-7 from $7F87 (at $2B1C)."
  },
  {
   "address": 11036,
   "type": "line",
   "text": "Rows 4-7 of tile $63, rewritten from one of four patterns at $7F87 on frame 2 of every eight."
  },
  {
   "address": 11040,
   "type": "line",
   "text": "Tiles $64-$7F, more scenery, $7C-$7F plants."
  },
  {
   "address": 11264,
   "type": "line",
   "text": "Tiles $80-$83, the first web line switched off: blank. Switching a web section sets bit 7 of its tiles, which picks these."
  },
  {
   "address": 11296,
   "type": "line",
   "text": "Tiles $84-$8F, scenery: $84 is a tile gribbly_collides treats as the left wall."
  },
  {
   "address": 11392,
   "type": "line",
   "text": "Tiles $90-$93, the second web line switched off: blank."
  },
  {
   "address": 11424,
   "type": "line",
   "text": "Tiles $94-$9F, scenery: $99 is the plant make_soil_row puts in the soil row."
  },
  {
   "address": 11520,
   "type": "line",
   "text": "Tiles $A0-$A3, the third web line switched off: blank."
  },
  {
   "address": 11552,
   "type": "line",
   "text": "Tiles $A4-$BB, scenery."
  },
  {
   "address": 11744,
   "type": "line",
   "text": "Tiles $BC-$BF, water: rotated by animate_chars on frame 2 of every eight."
  },
  {
   "address": 11776,
   "type": "line",
   "text": "Tiles $C0-$C5, scenery."
  },
  {
   "address": 11824,
   "type": "line",
   "text": "Tile $C6, the first of the second water group $C6-$C9, which animate_chars rotates (this is what the image holds at the operands of rotate_chars)."
  },
  {
   "address": 11832,
   "type": "line",
   "text": "Tile $C7, second picture of the water group $C6-$C9."
  },
  {
   "address": 11840,
   "type": "line",
   "text": "Tile $C8, third picture of the water group $C6-$C9."
  },
  {
   "address": 11848,
   "type": "line",
   "text": "Tile $C9, fourth picture of the water group $C6-$C9."
  },
  {
   "address": 11856,
   "type": "line",
   "text": "Tiles $CA-$FF, blank ($2E50-$2FFF)."
  },
  {
   "address": 12288,
   "type": "line",
   "text": "Sprite shape $C0, blank: the shape new_game gives the panel screen's eight pointers. Shapes $C0-$FF fill $3000-$3FFF, 64 bytes each."
  },
  {
   "address": 12352,
   "type": "line",
   "text": "Sprite shape $C1, Gribbly facing the player. animate_face rewrites rows 0-4 (head patterns), 5-7 (eyes) and 12-13 (mouth)."
  },
  {
   "address": 12416,
   "type": "line",
   "text": "Sprite shape $C2, Gribbly facing left; animate_face rewrites its head and mouth."
  },
  {
   "address": 12480,
   "type": "line",
   "text": "Sprite shape $C3, Gribbly facing right; animate_face rewrites its head and mouth."
  },
  {
   "address": 12544,
   "type": "line",
   "text": "Sprite shapes $C4-$CB, the bubble: $CB the smallest, growing to $C6, then $C5 and $C4 the pop. move_bubbles counts the frame down from $CB."
  },
  {
   "address": 13056,
   "type": "line",
   "text": "Sprite shapes $CC-$D3, a Gribblet tumbling through the air, for hops and falls."
  },
  {
   "address": 13568,
   "type": "line",
   "text": "Sprite shapes $D4-$D9, the seed pod."
  },
  {
   "address": 13952,
   "type": "line",
   "text": "Sprite shapes $DA-$E1, solid triangles: the pieces that build Gribbly at level start and take him apart in end_sequence."
  },
  {
   "address": 14464,
   "type": "line",
   "text": "Sprite shapes $E2-$E7, an outlined triangle closing into a star: more of level_start's and end_sequence's pieces."
  },
  {
   "address": 14848,
   "type": "line",
   "text": "Sprite shapes $E8-$EB, a triangle dissolving into dots, which level_start plays up to $EB."
  },
  {
   "address": 15104,
   "type": "line",
   "text": "Sprite shapes $EC-$EF, the Topsy walking (it also uses $F0)."
  },
  {
   "address": 15360,
   "type": "line",
   "text": "Sprite shapes $F0-$F4: $F0 the Topsy curled over, where a chrysalis starts, then the chrysalis $F1-$F4."
  },
  {
   "address": 15680,
   "type": "line",
   "text": "Sprite shapes $F5-$F9, the Stomper."
  },
  {
   "address": 16000,
   "type": "line",
   "text": "Sprite shapes $FA-$FE, the Flyer."
  },
  {
   "address": 16320,
   "type": "line",
   "text": "Sprite shape $FF: stray bytes, not a picture; nothing shows it."
  },
  {
   "address": 16384,
   "type": "line",
   "text": "Sets up the hidden memory editor (the monitor) at start-up, called once from start_game: cursor column mon_col ($BD) = $0A, the first address digit; mon_state ($B5) = $80, editor off; edit address mon_addr ($B0/$B1) = $0200. Nothing else in the game reaches the editor: monitor_step at $4011 is never called."
  },
  {
   "address": 16401,
   "type": "line",
   "text": "Hidden memory editor, one step: a leftover development tool that no code calls (no JSR, JMP or pointer anywhere in the image holds $4011). It reads a key with monitor_key: A turns the editor on (clears bit 7 of mon_state $B5), D turns it off ($B5 = $80). While on it counts $B5 up through 0-$7F and runs monitor_edit, which acts on every fourth step."
  },
  {
   "address": 16442,
   "type": "line",
   "text": "Hidden editor, act and redraw, with the key in $B6. On every fourth step (mon_state & 3 = 0) comma and full stop ($9D/$1D) move the cursor column mon_col ($BD) between $0A-$0D, the four digits of the address, and $11-$12, the two digits of the byte, skipping $0E-$10. On every step J and M ($91/$11) add or subtract $1000, $100, $10 or 1 to the address mon_addr ($B0/$B1) when the cursor is on an address digit, or $10 or 1 to the byte ($B2) when it is on a value digit. The byte is written back to (mon_addr) at once. Then the address and byte are written as hex digit glyphs into mon_text ($4273) and the line is printed at row 20, column 1 of the status panel, with the digit under the cursor blanked on alternate pairs of steps so that it blinks."
  },
  {
   "address": 16807,
   "type": "line",
   "text": "Hidden editor's keyboard scan, reading the matrix directly (rows by $DC00, columns from $DC01): returns A = $41 for A, $44 for D, $9D for comma, $1D for full stop, $91 for J, $11 for M, 0 for none. The codes are PETSCII: A, D and the cursor-left, right, up and down codes."
  },
  {
   "address": 16888,
   "type": "line",
   "text": "Prints a string on the screen (X = low byte, Y = high byte of its address). A string is [row][column] then glyph codes in the game's alphabet, ended by $FF. The row and column go to $B7/$B8 and each glyph goes through draw_glyph, so every string is drawn double height. Row is a text row of the status-panel screen ($0400), 0-24. Used for every message, the title pages and the status panel."
  },
  {
   "address": 16926,
   "type": "line",
   "text": "Draws one glyph of the game's alphabet ($B9) at row $B7, column $B8 of the screen at $0400, looking the row address up in row_hi ($428B) and row_lo ($42A4). Text is double height: the code goes in the cell and code | $80 in the cell below, which holds the glyph's lower half. Capitals ($3A-$59) are also two cells wide: code + $20 goes to the right, with its own lower half, and the column moves on by two. Advances the column $B8."
  },
  {
   "address": 16986,
   "type": "line",
   "text": "Copies X whole pages (256 bytes each) from ($B0) to ($A7), using copy_page. Used by start_game to move the loaded block's upper parts to where they run."
  },
  {
   "address": 16999,
   "type": "line",
   "text": "Copies one page of 256 bytes from ($B0) to ($A7), Y from 0 downwards."
  },
  {
   "address": 17011,
   "type": "line",
   "text": "Hidden editor's display line, a string for print_string: row $14 (20), column 1, then '( ABMON : ' and the four address digits at $427F, two unused cells, '~', the two value digits at $4286, ')' and $FF. monitor_edit overwrites the digits. Glyphs: $26 '(', $3A/$3B 'A' 'B', $46/$48/$47 'M' 'O' 'N', $2A ':', $2E '~', $27 ')', $30 space."
  },
  {
   "address": 17035,
   "type": "line",
   "text": "High bytes of the address of each of the 25 text rows of the status-panel screen at $0400 ($04, $04, ... $07), read by draw_glyph with the row in Y."
  },
  {
   "address": 17060,
   "type": "line",
   "text": "Low bytes of the address of each of the 25 text rows of the screen at $0400 ($00, $28, $50 ... $C0), read by draw_glyph: row_hi/row_lo together give $0400 + 40 x row."
  },
  {
   "address": 17085,
   "type": "line",
   "text": "Three bytes after the row tables, $00 $02 $FF: nothing reads them (no reference by address and no string pointer names $42BD). Their shape, row 0, column 2, end, is a string header, but no print call uses it."
  },
  {
   "address": 17088,
   "type": "line",
   "text": "The game's first instruction, reached from the loader through the vector at $8000 and afterwards the RESET vector. Disables interrupts, resets the stack, sets $01 = $25 (RAM at $A000-$BFFF and $E000-$FFFF, I/O at $D000), clears zero page $02-$FF, then moves the load into place: $8000-$9FFF to $E000-$FFFF (32 pages) and $A200-$AFFF to $C200-$CFFF (14 pages), freeing $8000-$BFFF for the level map. Calls monitor_init. Starts both CIAs' time-of-day clocks counting at 50 Hz, with CIA 1's set to 1:00:00 and stopped (it is the real-time clock the player sets). Clears the status-panel screen, prints the clock line and the game time line, zeroes the score and sets the best score ($0226-$0229) to 00 00 68 09 in BCD, the 6809 the Controls page shows. Fills the map's top row ($8000-$80FF) with $50 and $98, points NMI at an RTI ($7412), IRQ at irq_title and RESET back here, sets Gribbly's colour gribbly_colour ($6B) = $F5 and the volume ($79) = 5, then falls into title."
  },
  {
   "address": 17319,
   "type": "line",
   "text": "Title sequence, entered after start-up, after a game ends (game_over) and when the player abandons a paused game. Runs the CIA 1 timer interrupt (irq_title, timer $B8B8: every 47,288 cycles) with the raster interrupt off, starts the title tune (sound mode $11), prints the Score and Gametime labels and the best score line, sets a black screen and border and clears the clock-setting state ($25) and the level number ($3C). Then alternates two pages until fire: Scenario (the credits) and Controls (the instructions)."
  },
  {
   "address": 17415,
   "type": "line",
   "text": "Title page one, Scenario: shows the word Scenario in the message field, colours rows of colour RAM from the colour cycle at $7B9A (starting at a raster-dependent offset), prints the frame at $783A and $7861 and the eight credit lines from $788A (41 bytes apart). Each frame runs title_frame; joystick left or right or 256 steps of title_frame (about 29 seconds) go to the Controls page; fire starts a game (new_game)."
  },
  {
   "address": 17550,
   "type": "line",
   "text": "Title page two, Controls: shows Controls in the message field, prints the eight instruction lines from $79D2 (39 bytes apart) and the best score line at $7FCC. Each frame runs title_frame and flash_best; left or right or 256 steps (about 29 seconds) return to the Scenario page; fire starts a game (new_game)."
  },
  {
   "address": 17642,
   "type": "line",
   "text": "One step of the title pages: reads the function keys (read_fkeys), the joystick (read_joystick), the clock-setting keys (clock_keys), drives the cassette motor (tape_motor), the colour and volume keys (colour_keys, volume_keys), counts the frame counter $2E and waits $50 delay loops: about nine steps a second, not tied to the video frame."
  },
  {
   "address": 17668,
   "type": "line",
   "text": "Starts a game: psi ($57) = 1 so that the first level is built, bank ($59) = $77, sound mode $12 (effects), starts CIA 2's time-of-day clock from 1:00:00.0 as the game clock, zeroes the score ($21-$24), the pending points ($26), the saved count ($5C), the level ($3C), the performance ($5D), the carrying flag ($5B) and $77, colours the score and game-time digits white, clears the sixteen levels-done flags ($0216-$0225), resets the psi bar, shows the game time, prints the Psi and Bank labels, sets the sprite multicolours and points all eight sprite pointers of the panel screen at $C0, then falls into level_start."
  },
  {
   "address": 17779,
   "type": "line",
   "text": "Starts or restarts a level. Clears the play area's text. If psi ($57) is not zero (a fresh game or a level just won) it builds a new level: level_result decides which, web_layout_ptr finds its web, five bands of web triangles are laid (web_band_a, web_band_b), build_level draws the scenery and Gribblets, make_soil_row the row under the ground, scatter_rocks the left wall; the Seon wait timer $78 = (28 - level) x 2. Then reset_gribblets and count_gribblets: all eight settled builds yet another level; none settled prints \"Eight Gribblets to rescue\" or the level's own count; otherwise \"<n> Gribblets remain\" or \"One Gribblet remains\". Resets scrolling, bounce state, the creature count ($67) and Seon's aggression ($76); sets the spawn chance $68 = level x 2 + 20 + performance; prints \"Game On!\"; sets the start scroll position from the level's entry in $E050 (x = value x 8, y = $0180); loads the flight constants; picks the level's colours from $7DBF-$7DDE (or the black-and-white set when gribbly_colour is $FC); prints the level's name from $E060; runs transfer_stage; clears all sprites; creates Seon (new_seon); waits; switches to the raster interrupt chain (irq_top at line $2C); draws the view and plays the materialisation sequence of sprites 0-7 before falling into main_loop."
  },
  {
   "address": 18664,
   "type": "line",
   "text": "The play loop, one pass per frame, synchronised with the raster chain through $2B. Counts the frame ($2E) and handles sprite collisions (sprite_collisions). On odd frames: joystick, Gribbly's physics, clock display, psi bar, game time, score, tape motor, sound; once in 256 frames a seed pod may spawn and the Seon timer $78 counts down, or, once it is zero, Seon's aggression $76 rises to at most 14. On even frames: the web power-down (web_power_down) and the pause key (pause). Then waits for the interrupt at line 182 ($2B = 0); on odd frames scrolls and redraws the view (scroll_x, scroll_y, draw_view), on even frames animates characters and the face, checks Gribbly's background collision, moves the bubbles and the creatures, the fire button, Gribblets hopping, bouncing onto tiles, and counts the Gribblets: when all eight are settled the level is over ($2F). Waits for line 44 ($2B non-zero) and loops, or goes to level_over."
  },
  {
   "address": 18820,
   "type": "line",
   "text": "The end of a level, reached when $2F is set: by main_loop when count_gribblets reports every Gribblet saved or lost, or by psi_bar when psi runs out. Draws the view, plays the end sequence (end_sequence), waits two long delays, switches back to the CIA timer interrupt (irq_title) and starts the next level (level_start), which decides from psi whether this one is played again."
  },
  {
   "address": 18863,
   "type": "line",
   "text": "Creature mover for type 8, Seon. While the wait timer $78 runs Seon stays still. Otherwise it moves by its velocity (apply_velocity); when a random nibble is below the aggression $76 it steers one step towards Gribbly's map position ($69/$6A), else on one frame in eight it drifts randomly (+-3 x, +-1 y). Velocities are kept to x -8..+7 and y -4..+7 pixels. Checks the web under it (seon_web). While on screen it has a hardware sprite of type 8, frames $3D, $3E and $3F once every 256 frames and otherwise a random one of $39-$3C every fourth frame (frame $39 plays effect $15). Turns back at the map's edges: x tile below $21 or from $FB, row from $BD or below $84."
  },
  {
   "address": 19216,
   "type": "line",
   "text": "What the web does to Seon: for the two tiles at ($12): a lit web line ($00-$03, $10-$13, $20-$23, bit 7 clear) reverses both its velocities and multiplies them by four; on a control ($0C-$0F) in either tile, when a random number 0-31 is below the performance $5D, Seon switches the live control ($0C or $0E) in the first tile, if there is one, toggling the same web sections a player's press would (web_diag_left, web_diag_right, web_row); a dead control, or one in the second tile only, is never switched. Other tiles do nothing."
  },
  {
   "address": 19453,
   "type": "line",
   "text": "Draws 96 small rock and crack shapes in the left wall of the map (columns 1-25, any row): each pass builds a one-record template list at $1040 (column from CIA 1's timer, row from the SID's random oscillator, one of the four shapes at $1048 picked by the raster line) and draws it with draw_templates."
  },
  {
   "address": 19517,
   "type": "line",
   "text": "Adds Seon to the creature table at level start: type 8, standing still, at y = $38 or $88 pixels (picked at random) and x = (random & $70 + $3E, or + $46 for the lower start) x 8 pixels, so between map columns $3E and $B6."
  },
  {
   "address": 19595,
   "type": "line",
   "text": "Creature mover for type 6, the Stomper. Like every mover it runs every other frame (move_creatures), so a step is two frames. Falls while its y speed is not zero, gaining 1 a step up to 8; walks 3 pixels a step left or right, stepping its frame through $F5-$F9 (effect $0B on voice 2 at frame $F5). While on screen it holds a hardware sprite of type 6 in colour $FD. Off the map's left or right edge it turns back; above row $83 it is removed. Falling, it stops on a ground tile ($24-$48) and snaps to the tile's top. Walking, it starts to fall where there is no ground, which is how a Stomper drops through water: nothing under it counts as ground until its row wraps past the map's bottom to the top, where it is removed. Walking onto the left half of a Gribblet flipped by a Topsy ($40, state 4) absorbs it: the Gribblet's state becomes 6, its two tiles become empty ledge ($2E), and the Stomper turns into a Flyer (type 7, frame $FC, rising at 3 a step) with a sprite of type 7, colour $F1, double width."
  },
  {
   "address": 20077,
   "type": "line",
   "text": "Powers the psi web down once at most one Gribblet is left to save: when the count $75 of Gribblets saved, lost or carried off reaches 7. State $72, counted up by every call that works a row: 0 waiting; 1 starts at row $82; from 2 it works one row a call, every other row from $84 to $BC (the rows that hold controls, columns $14-$FF), turning every control ($0C/$0E) into its dead form ($0D/$0F); at row $BE it sounds effects $8D and $98, clears Seon's wait timer $78 and goes to state $80, which works one row a call from $81 to $BF (columns $20-$FF), setting bit 7 of every web tile ($00-$03, $10-$13, $20-$23), which turns the line off; at row $C0 it ends with state $FF. With the web down and $78 at zero, main_loop raises Seon's aggression every 256 frames."
  },
  {
   "address": 20228,
   "type": "line",
   "text": "Creature mover for type 9, a Gribblet falling from a Flyer that was killed. Gravity adds 1 a step (every other frame) up to 4; its sideways speed halves every step. Frames $CC-$D3 cycle; on screen it holds a sprite of type 9 in the level's Gribblet colour ($52), squeaking now and then (effect $0F, a chance of 1 in 16 each step). Where it falls: off the map's sides or top row it is lost (state 0) and 100 points are taken off ($30 += 100); onto two cells of empty ledge ($2E $2E) it lands safe, the cells get a Gribblet (left $38-$3B, right +4, a random face) and its state is 1 again (effect $0E); onto two cave-ledge cells ($37 $37) it is saved in the cave (state $80, faces $38-$3F, effect $94); onto any other ground tile ($24-$48) it is lost; over anything else it keeps falling. Gribbly can catch it on the way down (sprite_collisions)."
  },
  {
   "address": 20580,
   "type": "line",
   "text": "Creature mover for type 7, the Flyer, a Stomper that has absorbed a Gribblet. It moves by its velocity; with a chance of spawn_chance ($68) in 256 each step (every other frame) it gets a random push (x +-0..7, y +-1). Velocities stay within -8..+7. Its frame cycles $FA-$FE every fourth frame (effect $0C on voice 1 at $FA). On screen it holds a sprite of type 7, colour $F1, double width. It turns back at the map's edges: x tile below $20 or from $FC, row from $BB or below $82. It never leaves the map: the Gribblet inside (state 6) is lost only when the level is restarted (reset_gribblets) or freed when the Flyer is bubbled (flyer_drop)."
  },
  {
   "address": 20866,
   "type": "line",
   "text": "Moves creature X by its velocity: adds the signed speeds $03D8,x and $03E8,x to its 16-bit x ($0378/$0388) and y ($0398/$03A8) and copies the new position to $63-$66 for tile_at and on_screen."
  },
  {
   "address": 20947,
   "type": "line",
   "text": "Builds the row under the map's bottom row: reads row $BF ($BF00-$BFFF) and writes row $C0 ($C000-$C0FF), which the view shows when it scrolls to the bottom. Columns 0-31 (the left wall) are copied as they are, and also to $C100-$C11F. Elsewhere a ground tile ($24-$48) becomes a random $5C or $5D, plant tiles ($63, $C6, $7C-$7F) become $99 and everything else $50."
  },
  {
   "address": 21011,
   "type": "line",
   "text": "Creature mover for type 4, the Topsy. Walks 3 pixels a step (every other frame), stepping its frame up through $EC-$F0 going one way and down going the other (effect $0A on voice 2 at $EC); on screen it holds a sprite of type 4 in Gribbly's colour ($6B). At the map's edges, or where the tile ahead is not ground ($24-$48), it turns round. On an upright Gribblet ($38-$3B) sitting on its ledge (state 1) it flips it: state 4 and the tiles become $40 $41, a Gribblet on its back. Once every 256 frames, with a chance of spawn_chance ($68) in 256, it stops and becomes a chrysalis (type 5, frame $F0)."
  },
  {
   "address": 21386,
   "type": "line",
   "text": "Creature mover for type 5, the chrysalis. Its frame counts up to $F4 and stays; on screen it holds a multicolour sprite of type 5 in colour $FE. Once every 256 frames, with a chance of spawn_chance ($68) in 256, it hatches into a Stomper: type 6, frame $F7, walking 3 pixels a step left or right at random."
  },
  {
   "address": 21616,
   "type": "line",
   "text": "At game over: when the score ($21-$24, BCD) beats the best score ($0226-$0229) it replaces it, prints \"Please enter your hi~score signature\" and lets the player sign the best-score line, the string at best_line ($7FCC) the Controls page prints. The new score goes in at $7FD6 without leading zeros, then ' ~ ' and the first letter, which starts at A (later ones start at a). The joystick steps the letter: right or down to the next in the cycle a-z, ? ! ( ) . , : ; \" ' ~, space, A-Z, the Gribblet glyph $58, the END glyph $59, back to a; left or up to the previous one. Fire (on each fresh press) accepts it with effect 2 and moves on, a capital taking two cells. Choosing END, or reaching index $26 of the string or column $24, finishes. The signature overwrites the string's '(c) ST Software 1985.', and lasts until the machine is switched off."
  },
  {
   "address": 21938,
   "type": "line",
   "text": "Writes one BCD byte of the best score ($0226,y) as two digit glyphs into best_line at index $20, advancing it, and leaves out zeros while the leading-zero flag $0F is set; the first non-zero digit clears the flag."
  },
  {
   "address": 22005,
   "type": "line",
   "text": "On the Controls page: copies the current raster line number into the colour RAM of 36 cells of rows 16 and 17 ($DA82 and $DAAA onwards), the best-score line, so that its colours ripple every frame."
  },
  {
   "address": 22020,
   "type": "line",
   "text": "Acts on the sprite-to-sprite collisions irq_collide latched into $6D. Finds the two lowest sprites set. If one is sprite 0, Gribbly: touching a falling Gribblet (type 9) when he carries none ($5B = 0) catches it, +100 points ($26), the carrying icon, the Gribblet's state 3 becomes 2 (carried) and effect 4; touching Seon (type 8) costs 3 psi (add_psi) and 10 points ($30) and ends Seon's wait ($78 = 0); other types do nothing. For two other sprites it looks up what each does to the other in the table at collide_table ($1000) by their types, and if one is a bubble the other's type - 2 is kept in $11 as the points multiplier (x 20) for the kill."
  },
  {
   "address": 22184,
   "type": "line",
   "text": "Looks up collide_table ($1000) twice: row = type of the sprite affected - 2, column = type of the sprite it touched - 2, first for sprite $02 and then for sprite $10. The bits pick the action: 7 kill (creature_hit), 6 reverse (creature_reverse), 5 stun Seon (seon_stunned), 4 bubble on a Topsy (kill from behind, turn round from the front: the side of the screen, x < $A7, against its direction; the second copy of the test, for sprite $10, reads $05 where the first reads $06, so a Topsy walking right that holds the lower sprite number is killed wherever it is), 3 a Flyer drops its Gribblet (flyer_drop)."
  },
  {
   "address": 22351,
   "type": "line",
   "text": "Kills what sprite $02 shows: if a creature owns it (find_creature) it scores $11 x 20 points into $26 (seed pod 20, Topsy 40, chrysalis 60), clears $11 so that only one kill scores, and frees the creature slot (type 0). The sprite is switched off either way, which is how a bubble pops."
  },
  {
   "address": 22383,
   "type": "line",
   "text": "A bubble has hit a Flyer: the creature becomes a falling Gribblet (type 9, frame $CC, falling at 1), its sprite is freed, the Gribblet it carried goes from state 6 to 3 (falling) and 100 points go to $26."
  },
  {
   "address": 22427,
   "type": "line",
   "text": "Reverses the x speed of the creature that owns sprite $02 (EOR #$FF, so +3 becomes -4): how a bubble turns a Stomper or a Topsy round."
  },
  {
   "address": 22439,
   "type": "line",
   "text": "A bubble has hit Seon: stops it (both speeds 0) and lowers its aggression $76 by 2, or, below 2, sets it to 1 and the wait timer $78 to 1. No points."
  },
  {
   "address": 22468,
   "type": "line",
   "text": "Finds the creature slot (X) whose sprite ($03B8) is sprite $02, searching the $67 slots in use from the top; carry set if found, else X = 0 and carry clear."
  },
  {
   "address": 22485,
   "type": "line",
   "text": "Is the point at $63/$64 (x) and $65/$66 (y) in the visible window? Subtracts the view's scroll position ($36/$37, $38/$39), adds 16 to x and 32 to y to give sprite coordinates, leaves them in $5E/$5F (x) and $60/$61 (y) and sets carry when they fall in the play view or a margin round it: x from -64 to 383, y from -56 to 191."
  },
  {
   "address": 22583,
   "type": "line",
   "text": "Copies the screen position on_screen left in $5E/$5F and $60 into the sprite parameters: $05 x, $06 x bit 8 ($FF or 0), $07 y."
  },
  {
   "address": 22605,
   "type": "line",
   "text": "Runs the mover of every creature in the table ($67 slots: type $0368, x $0378/$0388, y $0398/$03A8, sprite $03B8, frame $03C8, speeds $03D8/$03E8) by its type: 1 hopping Gribblet, 3 seed pod, 4 Topsy, 5 chrysalis, 6 Stomper, 7 Flyer, 8 Seon, 9 falling Gribblet. A slot whose type has become 0 is dropped and the rest are moved down over it, and $67 is the new count."
  },
  {
   "address": 22770,
   "type": "line",
   "text": "Creature mover for type 1, a Gribblet hopping along a ledge (gribblet_hop launched it): while its Gribblet ($03C8 holds the Gribblet's number) is still in state 5 it flies on its jump, gravity adding 1 a step (every other frame), frames $CC-$D3, in the level's Gribblet colour; its sprite is shown when on screen. When the state has changed (the hop timer ran out in count_gribblets) the creature and sprite are removed."
  },
  {
   "address": 22940,
   "type": "line",
   "text": "Switches hardware sprite $02 off ($D015) and marks it free (sprite type $0360 = 0). sprite_bits ($7800) holds each sprite's bit."
  },
  {
   "address": 22959,
   "type": "line",
   "text": "On the title pages (not while the clock is being set): f7 prints \"Colour\" and gives Gribbly colour $F5; f8 (SHIFT + f7) prints \"Blk~Whte\" and sets $FC, which level_start also takes as the cue to use grey shades for the level."
  },
  {
   "address": 22997,
   "type": "line",
   "text": "On the title pages, every fourth frame (not while the clock is being set): f5 turns the volume ($79) up to 15, f6 (SHIFT + f5) down to 1; writes it to $D418 with the low-pass filter bit and prints \"Volume nn\" with the two digits patched into the string at $0DB9."
  },
  {
   "address": 23072,
   "type": "line",
   "text": "The end-of-level sequence. Switches off sprites 1-7, sounds effect 7, and plays a fixed animation with sprite 0 (Gribbly), sprites 1-3 and sprites 6-7, built from frames $DA-$E5 and the delays of wait_3frames, ending with every sprite off."
  },
  {
   "address": 23485,
   "type": "line",
   "text": "One step of a cut sequence: waits for the bottom of the play area ($2B = 0) and counts the step in $2E. On an odd count it returns at the next top of the screen, one frame. On an even count it runs the background work (clock, game time, score, face, character animation, psi bar, tape motor and sound), then waits for the top, the bottom and the top again, returning two frames on: so the background work runs once in three frames."
  },
  {
   "address": 23534,
   "type": "line",
   "text": "Three calls of wait_frame, four or five frames: the step of every cut sequence."
  },
  {
   "address": 23544,
   "type": "line",
   "text": "Creature mover for type 3, the seed pod. Falls 1 pixel a step (every other frame) and drifts sideways at a random speed of -8..+7 that changes by 1 each step. On screen it holds a sprite of type 3 (colour $F9, frames $D4-$D9, jiggling 8 pixels left or right on two of them, effect $17 on voice 2 at $D7). Off the map's sides or at its top row it is removed. Landing on a ground tile ($24-$48) it becomes a Topsy: type 4, frame $EE, snapped to the tile's top, walking 3 pixels a step left or right at random."
  },
  {
   "address": 23902,
   "type": "line",
   "text": "Map address and tile under a point: from the pixel position $63/$64 (x) and $65/$66 (y) makes $12 = x / 8, the column, and $13 = (y / 8) | $80 within $80-$BF, the row's page, so ($12) is the map cell, and loads the tile into $6C. Rows wrap: the map is 256 columns by 64 rows at $8000-$BFFF, one byte a cell."
  },
  {
   "address": 23947,
   "type": "line",
   "text": "Once every 256 frames (main_loop): if fewer than level + 8 creatures exist and fewer than 13 slots are used, adds a seed pod (type 3) at the top of the map (y = 16) at a random x between $0200 and $05FF pixels, map columns $40-$BF."
  },
  {
   "address": 24011,
   "type": "line",
   "text": "Draws the level's scenery into the map from its scene list, found through scene_lists ($E010) by the level number. The first part is the ground: words naming column shapes, each shape a count of columns, then for each column a height and that many tiles drawn upwards from the bottom row ($BF), and when a column is shorter than three tiles the rest of the bottom three rows ($BD-$BF) get tile $04; a zero word means the plain shape at $1100. Columns run from map column $20 to $FF; words left over after column $FF are skipped up to a zero word. The second part, after it, is a template list (draw_templates): the floating scenery. Every tile drawn goes through note_tile, which collects the Gribblets ($38-$3B) and plants psi-grubs; $0F counts Gribblets found."
  },
  {
   "address": 24183,
   "type": "line",
   "text": "Draws a list of templates: each record is a map position (column, row) and a template address, ended by a zero address. A template is a count of columns, then for each column a height (low four bits) and that many tiles drawn upwards from the position's row, moving one column right each time; a column that would rise above row $80 ends the whole list. Every tile goes through note_tile. Used by build_level for the floating islands and by scatter_rocks with a one-record list at $1040."
  },
  {
   "address": 24274,
   "type": "line",
   "text": "Called for each tile drawn into the map: a Gribblet's left half ($38-$3B) is entered in the Gribblet table (map position $0348/$0340, state 1) while fewer than eight are known; an empty ledge cell ($2E) becomes a psi-grub ($27) with a chance of 6 in 256."
  },
  {
   "address": 24322,
   "type": "line",
   "text": "Moves psi ($57) one step towards its target ($58), which add_psi changes, and draws the Psi bar: nine cells at $7BAE, a full cell ($38) for every 8 units and a part-filled one for the rest, printed at row 18, column 7. Psi reaching 0 ends the level ($2F), and level_start then plays it again."
  },
  {
   "address": 24410,
   "type": "line",
   "text": "Draws the Bank bar from the bank ($59): nine cells at $7BBA showing its low six bits like the Psi bar (a full cell per 8 units; effect $10 when the partial cell shows 7), then up to three $39 marks for the top two bits, printed at row 18, column 27."
  },
  {
   "address": 24513,
   "type": "line",
   "text": "At every level start: psi target ($58) = psi. With both psi and bank empty the game is over (game_over). Otherwise prints \"Psi~energy Transfer Stage\" and moves energy one unit at a time, redrawing both bars, until psi is 40: from psi to the bank while psi is above 40 (the bank stops at 255), or from the bank to psi while psi is below 40 and the bank has any."
  },
  {
   "address": 24523,
   "type": "line",
   "text": "Prints \"Game over\", waits until the pending points ($26 and $30) have all reached the score, sounds effect $11 on both voices, waits, checks the best score (check_best_score), and returns to the title, dropping the return address of its caller."
  },
  {
   "address": 24653,
   "type": "line",
   "text": "Adds A (signed) to the psi target ($58). Below 0 it stops at 0. Above 64 it stops at 64 and the excess times 8 goes to the pending points ($26) as excess energy bonus."
  },
  {
   "address": 24686,
   "type": "line",
   "text": "Clears the message area of the text screen at $0400, the part above the status panel that shows between levels: nine double rows from row 0, columns 1-38, written with spaces through draw_glyph."
  },
  {
   "address": 24728,
   "type": "line",
   "text": "Fire with Gribbly on or near the ground ($4D set), picking up or putting down a Gribblet. Carrying one ($5B set): on an empty ledge ($2E, in Gribbly's cell and the one to its right, or else the one to its left) it is put down, state 1 at that place, 20 points off ($30), effect 5; on the cave's ledge ($37) it is saved, state $80, +100 points ($26), 8 psi (add_psi), effect $94. Either way the carrying icon goes. Not carrying, with Gribbly bouncing low ($50 < 8) on an upright Gribblet ($38-$3F), he picks it up: state 2, its cells become empty ledge, +20 points ($26), effect 4, the carrying icon (glyph $58) in the panel."
  },
  {
   "address": 24997,
   "type": "line",
   "text": "Gribbly bouncing low ($4D set, $50 < 8) on special tiles: on a Gribblet lying on its back ($40/$41) he rights it: its cells are emptied and it is launched as a hop from that place back to the same place (gribblet_hop's launch, which needs a free sprite), landing upright; on a psi-grub ($27) he eats it: +3 to +6 psi (add_psi), the cell becomes empty ledge, effect $13 on voice 2."
  },
  {
   "address": 25099,
   "type": "line",
   "text": "Finds a free hardware sprite, searching 7 down to 1 for sprite type ($0360) 0; X and $02 hold it, zero flag set when none is free (sprite 0 is Gribbly's)."
  },
  {
   "address": 25114,
   "type": "line",
   "text": "Finds the Gribblet at map position ($53 + Y, $54) in the Gribblet table ($0348 low, $0340 high); returns its number in Y with carry set, or carry clear when there is none."
  },
  {
   "address": 25142,
   "type": "line",
   "text": "Finds the Gribblet whose state ($0350) equals A, searching 7 down to 0; X holds it (X = $FF when none)."
  },
  {
   "address": 25153,
   "type": "line",
   "text": "Counts the eight Gribblets by state ($0350): Y = settled (lost, state 0, or saved, bit 7 set), $5C = saved, $75 = saved, lost or inside a Flyer (state 6), the count web_power_down watches. A Gribblet hopping (state 5) counts down its timer ($0358); at zero it is drawn at its new place with a random face and is back to state 1. Y = 8 ends the level."
  },
  {
   "address": 25243,
   "type": "line",
   "text": "Before a level restarts: a hopping Gribblet (state 5) is put down at its target, state 1; one inside a Flyer (6) or falling (3) is lost, state 0. Then all sixteen creature slots are cleared."
  },
  {
   "address": 25317,
   "type": "line",
   "text": "Gives one Gribblet a chance to hop along its ledge each time it runs, every other frame (the frame counter / 2 picks it, so each one's turn comes every 16 frames): if it is sitting (state 1) and a random number is below spawn_chance ($68), it picks a target from 14 cells to the left to 16 to the right in steps of 2; if both target cells are empty ledge ($2E) it hops. Seen on screen with a free sprite, it becomes a creature of type 1 flying there (speed (target - start) / 2 across, 8 up, frames from $CC), its old cells emptied, the target marked $2F, state 5 with a timer of 16 (counted down every other frame, so 32 frames), effect $89. Off screen the tiles move at once."
  },
  {
   "address": 25641,
   "type": "line",
   "text": "While fire is held, on one frame in eight: blows a bubble from Gribbly's mouth. Facing left (frame $C2) it starts 16 pixels left of him, facing right ($C3) 16 pixels right, 3 lower; it takes a free sprite (none free, no bubble) of type 2, frame $CB, and sounds effect 2 on voice 2."
  },
  {
   "address": 25765,
   "type": "line",
   "text": "Moves every bubble (sprites 7-1 of type 2): its frame counts down from $CB, and below $C4 the bubble is gone; it travels 9 pixels a step away from the middle of the screen, left if it is left of x $A7, else right."
  },
  {
   "address": 25843,
   "type": "line",
   "text": "Decides the next level, at the end of a level whose Gribblets are all settled. Except on a game's first level ($77 = 0) it prints the number saved (\"One Gribblet saved\" or \"<n> Gribblets saved\") and waits. Fewer than six saved: \"At least six must survive\", and the same level number is built again. Six or more: the performance $5D rises by the number saved beyond five (at most 14), this level is marked done ($0216 + level), and the next is the highest undone level at or below min(random 0-15, performance), or failing that the first undone one from 1 upwards, level 15 last. With all sixteen done the game is complete: 6808 is added to the score and 1 more pending, \"Congratulations!\", \"All Gribblets safe and sound\", \"Game completed\" and \"6809 bonus points awarded\" are shown, and the game ends (game_over)."
  },
  {
   "address": 26072,
   "type": "line",
   "text": "Scrolls the view sideways: subtracts Gribbly's x speed ($32, signed, positive is left) from the view position $36/$37 and sets the fine scroll $2C = (8 - $36) & 7 for irq_top."
  },
  {
   "address": 26117,
   "type": "line",
   "text": "Scrolls the view up or down: subtracts Gribbly's y speed ($34, signed, positive is up) from $38/$39 and sets the fine scroll $2D = (8 - $38) & 7 for irq_top."
  },
  {
   "address": 26162,
   "type": "line",
   "text": "Cycles the bitmaps of four consecutive characters, eight rows each, so that each takes the next one's picture. The eight addresses in its instructions are written by set_rotation before every call ($2E30-$2E48 is what the image holds, characters $C6-$C9)."
  },
  {
   "address": 26165,
   "type": "line",
   "text": "Operand of rotate_chars' first load (LDY abs,X), low byte: set_rotation writes the group's base + 24, the fourth character's bitmap, whose row is held in Y while the others move up."
  },
  {
   "address": 26166,
   "type": "line",
   "text": "High byte of the operand at $6635, the fourth character's page, written by set_rotation from char_groups."
  },
  {
   "address": 26168,
   "type": "line",
   "text": "Operand of rotate_chars' LDA abs,X that reads the third character's row: low byte, base + 16, written by set_rotation."
  },
  {
   "address": 26169,
   "type": "line",
   "text": "High byte of the third character's read address in rotate_chars ($6638)."
  },
  {
   "address": 26171,
   "type": "line",
   "text": "Operand of rotate_chars' STA abs,X that stores the third character's row into the fourth: low byte, base + 24."
  },
  {
   "address": 26172,
   "type": "line",
   "text": "High byte of the fourth character's write address in rotate_chars ($663B)."
  },
  {
   "address": 26174,
   "type": "line",
   "text": "Operand of rotate_chars' LDA abs,X that reads the second character's row: low byte, base + 8."
  },
  {
   "address": 26175,
   "type": "line",
   "text": "High byte of the second character's read address in rotate_chars ($663E)."
  },
  {
   "address": 26177,
   "type": "line",
   "text": "Operand of rotate_chars' STA abs,X that stores the second character's row into the third: low byte, base + 16."
  },
  {
   "address": 26178,
   "type": "line",
   "text": "High byte of the third character's write address in rotate_chars ($6641)."
  },
  {
   "address": 26180,
   "type": "line",
   "text": "Operand of rotate_chars' LDA abs,X that reads the first character's row: low byte, the group's base itself."
  },
  {
   "address": 26181,
   "type": "line",
   "text": "High byte of the first character's read address in rotate_chars ($6644)."
  },
  {
   "address": 26183,
   "type": "line",
   "text": "Operand of rotate_chars' STA abs,X that stores the first character's row into the second: low byte, base + 8."
  },
  {
   "address": 26184,
   "type": "line",
   "text": "High byte of the second character's write address in rotate_chars ($6647)."
  },
  {
   "address": 26187,
   "type": "line",
   "text": "Operand of rotate_chars' last STA abs,X, which stores the fourth character's row (held in Y) into the first: low byte, the group's base. With the three moves before it the four pictures rotate by one."
  },
  {
   "address": 26188,
   "type": "line",
   "text": "High byte of the first character's write address in rotate_chars ($664B)."
  },
  {
   "address": 26193,
   "type": "line",
   "text": "Animates the play charset ($2800). Every fourth frame it cycles four characters of each of four groups through rotate_chars: the web lines $00-$03, $10-$13, $20-$23 and the controls $0C-$0F, which makes the web shimmer. On frame 2 of each eight it cycles the Gribblets' faces ($38-$3B and $3C-$3F, so they look about) and the water ($BC-$BF, $C6-$C9), then copies random rows from $7F67, $7F77 and $7F87 into the flipped Gribblet ($40/$41, waving legs) and character $63, and one of four frames from $7FAC into the psi-grub ($27), which pulses."
  },
  {
   "address": 26207,
   "type": "line",
   "text": "Takes the address of a group's first character from char_groups ($7C27, high byte at Y, low at Y - 1) and writes it, +8, +16 and +24 into the operands of rotate_chars, then runs it. Y goes down by two."
  },
  {
   "address": 26370,
   "type": "line",
   "text": "Draws the play view: 18 rows of 40 tiles from the map into the play screen at $0800, starting at map column $3A = (x + 7) / 8 and row $3B = (y + 7) / 8 of the view position ($36/$37, $38/$39). Rows above the map's top or below row $C0 (the soil row) are filled with $50. Then finds Gribbly's cell, which is always the view's column 19, row 10: $69/$6A, its tile $51 and the tile below $62 (and leaves $53/$54 one up and one left). Switches his mode: bouncing ($4D = 1) with the joystick up, or off the ground, he takes off (\"Flight\", the flight constants from $7DDF into $3D-$48); flying with his cell on ground ($24-$48) and the fine y position 2 or more he lands (\"Bounce\", the bounce constants from $7F33, vertical speed 0)."
  },
  {
   "address": 26670,
   "type": "line",
   "text": "Fills 15 map rows from ($1C) with the left wall: columns 0-31, tile $54 at column 0, $56 at column 31 and $50 between."
  },
  {
   "address": 26701,
   "type": "line",
   "text": "Lays one band of the web, 12 rows deep, from map column $20 to the right: the left wall's rows (fill_wall_rows), then fourteen copies of the 16 x 12 triangle web_tri_up ($7C3F), each adjusted by the next byte of the level's web layout (web_block_a). The next band starts 12 rows lower."
  },
  {
   "address": 26785,
   "type": "line",
   "text": "Like web_band_a with the other triangle, web_tri_down ($7CFF), and web_block_b. Level start lays the bands a, b, a, b, a from row $81 downwards: five bands, sixty rows."
  },
  {
   "address": 26869,
   "type": "line",
   "text": "Gribbly's movement each odd frame. Adds the unused acceleration $49/$4A to the x speed $31/$32; in flight adds the pull $4B/$4C (-$30) to the y speed $33/$34. Joystick left adds $3E and shows frame $C2, right subtracts and shows $C3; with neither the speed decays towards 0 ($3D, $40), and once it is 0 frame $C1 faces the player. Up and down work the same on the y speed with $44, $47 and decay $43, $46. Speeds are capped at $3F/$42 across and $45/$48 up and down; the constants come from the flight or bounce set (draw_view). Bouncing, it runs the bounce: the height $50 rises by the bounce speed $4F, which loses 2 a step (every other frame); on landing the next bounce's speed is four times the sideways speed (effect 1 on a big one), and the view moves a pixel at each landing until it lines up with the ground. Flying, any height left is moved into the view position two pixels a step. Sprite 0, whose x never changes, is drawn at y $77 - height, in Gribbly's colour, or flashing through $7F4B with effect 8 while psi is draining."
  },
  {
   "address": 27309,
   "type": "line",
   "text": "Gribbly's face, drawn into his three sprite shapes ($C1 facing the player at $3040, $C2 left at $3080, $C3 right at $30C0). Every 128 frames the front shape's eyes go through a cycle (eyes). On frame 2 of each eight, rows 0-4 of all three shapes get one of four random patterns from $7E2B, $7E6B and $7EAB. Every call the mouth (rows 12-13) is set from the score: a smile ($7E07, $7E0D, $7E13) while pending points are being added ($26), a frown ($7E19, $7E1F, $7E25) while points are being taken off ($30), otherwise the plain mouth ($7DF5, $7DFB, $7E01)."
  },
  {
   "address": 27446,
   "type": "line",
   "text": "The eyes of the front-facing shape, rows 5-7 of sprite $C1 ($304F-$3057), with A the frame step 2-$10 of each 128 frames: open ($7EEB), closed at step 8 (a blink, $7EF4), and at step $10 one of six looks picked at random ($7EFD + 9 x n), which stays until the next cycle opens them again."
  },
  {
   "address": 27531,
   "type": "line",
   "text": "Fire while flying ($4D = 0): looks for a control in the three cells above Gribbly's and in his own. On a control $0C or $0E it plays effect 3 and switches the web section that control works, its place picked by the control's column & 7 (0 a base row, 1 one slope, anything else the other): for $0C a slope starting 6 rows up or the row 3 rows down and 6 columns left; for $0E a slope 4 rows up and 6 columns across or the row 3 rows up and 6 columns left. Each switch scores first (web_switch_score). The press latch $55 stays set only when a control was found."
  },
  {
   "address": 27739,
   "type": "line",
   "text": "Switches one slope of the web: flips bit 7 (on/off) of 11 cells from ($12)+Y down the map, one row each, stepping one column left wherever slope_steps ($7F3F) holds 1."
  },
  {
   "address": 27760,
   "type": "line",
   "text": "Switches the other slope: like web_diag_left, stepping one column right where slope_steps ($7F3F) holds 1."
  },
  {
   "address": 27781,
   "type": "line",
   "text": "Switches a base row of the web: flips bit 7 of seven cells, every other one, from ($12) across."
  },
  {
   "address": 27794,
   "type": "line",
   "text": "Scores switching the web section whose first cell is at ($12): a section that is off (bit 7 set) being switched on gains 10 points ($26), one that is on being switched off loses 10 ($30)."
  },
  {
   "address": 27813,
   "type": "line",
   "text": "Fire button, each even frame. Released ($18 non-zero): clears the press latch $55. Held: blows bubbles (blow_bubble); on a fresh press it also tries a control (press_control) and a Gribblet (gribblet_fire), and the latch then holds while the button stays down if either did something."
  },
  {
   "address": 27843,
   "type": "line",
   "text": "Gribbly's sprite against the background ($D01F bit 0, read into $56). Near the map's left wall (view column below $0E, or tile $84) or right end (from $EC, or tile $55) he is pushed back at half his top speed; at the bottom (view row $36 or more) upwards. Standing on ground ($24-$48, in his cell or the one below) nothing happens. Anything else, the web or scenery hit in flight, is a collision: once per contact ($5A) both his speeds are reversed, 4 psi are lost (add_psi) and 5 points are taken off ($30)."
  },
  {
   "address": 27986,
   "type": "line",
   "text": "Points $53/$54 at the level's web layout, from web_layouts ($E030) by level: one byte for each of the 70 triangles (14 in each of 5 bands), read in turn by web_block_a and web_block_b."
  },
  {
   "address": 28004,
   "type": "line",
   "text": "Adjusts a triangle just copied from web_tri_up with the next layout byte: each of bits 7-2 set removes one of its six controls (tile $04 over it, at columns 0, 1, 7, 8, 9, 15 and rows 3, 5, 7, 9, 7, 5 of the block); bit 1 switches the slope at column 7, bit 0 the slope at column 9, from row 1."
  },
  {
   "address": 28160,
   "type": "line",
   "text": "Adjusts a triangle copied from web_tri_down like web_block_a: controls at columns 0, 1, 7, 8, 9, 15 and rows 9, 7, 5, 3, 5, 7; bit 1 switches the slope at column 1, bit 0 the one at column 15."
  },
  {
   "address": 28316,
   "type": "line",
   "text": "Reads the joystick in port 2 ($DC00): $17 = $FF left, 1 right, 0 neither; $16 = $FF up, 1 down, 0 neither; $18 = fire bit, 0 while pressed."
  },
  {
   "address": 28384,
   "type": "line",
   "text": "Reads hardware sprite $02's settings into the sprite parameters: $03 its bit (sprite_bits) and $04 the inverse, $0D colour, $0E shape (pointer at $0BF8), $05 x, $06 x bit 8, $07 y, $08 enabled, $09 double height, $0A behind the background, $0B multicolour, $0C double width."
  },
  {
   "address": 28461,
   "type": "line",
   "text": "Writes the sprite parameters ($0D colour, $0E shape, $05-$07 position, $08-$0C flags) to hardware sprite $02. The shape goes to the play screen's pointer ($0BF8 + n)."
  },
  {
   "address": 28610,
   "type": "line",
   "text": "Fills X rows of 40 cells from ($1C) with A, moving $1C on a row each time: colour RAM for the title pages and the play area."
  },
  {
   "address": 28656,
   "type": "line",
   "text": "Moves the score one point towards the pending points: one point of $26 (to add) and one of $30 (to take off) cancel each other, then one point is added or taken off the four-byte BCD score $21-$24, which never goes below 0. Prints the score at row 20, column 31 with leading zeros as spaces. In play it runs every other frame, so points reach the score at 25 a second."
  },
  {
   "address": 28839,
   "type": "line",
   "text": "Setting the real-time clock with the function keys (title pages and pause), state in $25. In normal running (0), f1 copies CIA 1's clock hours and minutes into $29/$28 (seconds $27 = 0), finds the hour in hour_table ($7B0A, its place in $2A), prints \"Set clock\" and waits for f1 to be let go ($40, then $80). While setting ($80): f3 or f4 (SHIFT) steps the hour up or down through the 24-entry table, f5 or f6 the minutes (BCD, 0-59), f7 prints \"50 Hertz\" and makes both CIAs' clocks count mains at 50 Hz ($DC0E/$DD0E = $81), f8 \"60 Hertz\" ($01). f1 again writes the time to CIA 1's clock, which starts it, prints \"Started\" and returns to normal once f1 is let go ($C0). An hour of 12 has its AM/PM bit flipped first, for the CIA's way of writing 12."
  },
  {
   "address": 29109,
   "type": "line",
   "text": "Prints the real-time clock at row 22, column 1: from CIA 1's time-of-day registers, or from the copy in $27-$29 while it is being set. Hours (a leading 0 as a space), minutes and seconds go into the string at $7808 as digits, with a or p from bit 7 of the hours before the fixed m. Reads the hours first and the tenths last, which latches the CIA's clock while it is read."
  },
  {
   "address": 29212,
   "type": "line",
   "text": "Reads the function keys into $19 straight from the keyboard matrix: row 0's columns 3-6 (f7, f1, f3, f5) as bits 3-6, low while held, and bit 7 low while either SHIFT is held (row 1 column 7 or row 6 column 4), so SHIFT + f1 is f2 and so on."
  },
  {
   "address": 29275,
   "type": "line",
   "text": "Waits X x Y loop turns (Y = 0 is 256), then updates the clock and the score (show_clock, score_tick). Returns Y = 0. Used for every pause between title pages, messages and cut sequences."
  },
  {
   "address": 29290,
   "type": "line",
   "text": "Prints the game time at row 22, column 29 from CIA 2's time-of-day clock, which new_game started at 1:00:00.0: the hour is looked up in hour_table and shown as the hours since the start, then minutes, seconds and tenths, one digit each glyph."
  },
  {
   "address": 29413,
   "type": "line",
   "text": "RUN/STOP pauses the game. Keeps CIA 2's clock in $0200-$0203 and the frame counter in $0204 so that game time stops, silences the sound, prints \"Pause\" and \"Gribbly's Day Out\" over the panel's labels, then loops: CLR/HOME (row 6 column 3) abandons the game and returns to the title; the clock keys work (clock_keys), the face and the characters still animate, f7 freezes everything (freeze_keys). RUN/STOP or fire (once no clock is being set) resumes: \"Game On!\", the labels back, effects on, the frame counter and the game clock restored."
  },
  {
   "address": 29613,
   "type": "line",
   "text": "Runs the cassette motor while a key on the datasette is held down: with the sense line ($01 bit 4) showing no key it sets the motor bit (off) and remembers that in $0206; with a key down, once $0206 is set, it clears the motor bit, which turns the motor on."
  },
  {
   "address": 29641,
   "type": "line",
   "text": "In the pause: f7 prints \"Cheese\" and freezes the screen, nothing animating, until f8 (which prints \"Pause\" again), CLR/HOME, RUN/STOP or fire."
  },
  {
   "address": 29714,
   "type": "line",
   "text": "The NMI handler: a bare RTI, so RESTORE does nothing."
  },
  {
   "address": 29715,
   "type": "line",
   "text": "Interrupt handler for the title pages and cut sequences, run by CIA 1's timer A every 47,288 cycles (20.8 times a second on PAL): calls the sound driver and acknowledges the CIA."
  },
  {
   "address": 29732,
   "type": "line",
   "text": "Raster interrupt at line 189, the third of the play chain: after a delay set by irq_top ($6E) it blanks the line with an invalid video mode ($D011 = $7F, bitmap and extended colour together, which shows black), selects the status panel's screen and font ($D018 = $19), switches multicolour off and the background to black, and points the chain at irq_panel for line 197. $2B = $80."
  },
  {
   "address": 29786,
   "type": "line",
   "text": "Raster interrupt at line 44, the first of the play chain: shows the play screen at $0800 with the font at $2800 ($D018 = $2B), multicolour text, the fine scroll from $2C (x) and $2D (y), the level's background ($35). Sets the delays irq_blank and irq_panel use ($6E, $6F) from the fine y scroll, enables the raster and sprite-collision interrupts and points the chain at irq_collide for line 182. $2B = 1, which main_loop waits for."
  },
  {
   "address": 29871,
   "type": "line",
   "text": "Raster interrupt at line 197, the last of the play chain: after a delay ($6F) turns the display back on with no scroll ($D011 = $10, $D016 without fine x), keeps the panel's screen and font, points the chain at irq_top for line 44 and sets $2B = 0: the bottom of the play view, where main_loop does its work."
  },
  {
   "address": 29920,
   "type": "line",
   "text": "Interrupt at line 182, or earlier if two sprites touch (irq_top enabled that too): latches the sprite-to-sprite collisions ($D01E) into $6D for sprite_collisions, which also clears them, sets the next line 189 and points the chain at irq_blank. $2B = 2."
  },
  {
   "address": 29963,
   "type": "line",
   "text": "A lone RTS that level_start calls: an empty hook."
  },
  {
   "address": 30036,
   "type": "line",
   "text": "The sound driver, run by the title's interrupt every other frame in play (main_loop on odd frames) and once in three frames in cut sequences (wait_frame). Mode $9D: 0 silence, 1 the title tune (music_step), 2 effects (effects_step); $11 and $12 are requests that set up the SID and become 1 and 2. Setting up effects also starts voice 3 on noise at the top frequency with its output cut ($D418 = $8F): the SID's oscillator 3 ($D41B) is then the game's random number source. Setting up the tune sets the filter and the volume from $79."
  },
  {
   "address": 30126,
   "type": "line",
   "text": "The title tune: on every fourth call reads the next note of each voice from the three note lists ($FE00, $FE80, $FF00, step $A1) and plays it (play_note). $FF in voice 1's list loops to step 1; $FE reloads the three instruments (music_reset) and restarts."
  },
  {
   "address": 30194,
   "type": "line",
   "text": "Sound effects on voices 1 and 2. A request in $9E (voice 1) or $9F (voice 2) starts that effect (start_effect) unless the voice is playing one marked with bit 7, which cannot be cut short. Then each running effect moves on: frequency += sweep ($C0-$C3), pulse width += its sweep ($C7-$CA); when its step counter ($C4, reloaded from $C5) runs out the frequency jumps to the effect's reset frequency ($CC/$CD, mode $CB = 1) or the sweep reverses; when its repeat count ($C6) runs out the gate closes, and the effect named in $CE, if any, is requested next, always on voice 1 ($9E), even when it chains from voice 2. Voice 2's set is the same fifteen bytes from $CF."
  },
  {
   "address": 30435,
   "type": "line",
   "text": "Loads the three tune instruments into SID voices 1-3 (load_instrument) and sets the step $A1 to 1."
  },
  {
   "address": 30470,
   "type": "line",
   "text": "Starts effect n ($A4, bit 7 the cannot-cut flag) on the voice in A (1 or 2, kept in X and $AA): its 16-byte record at $FB80 + (n - 1) x 16 gives an instrument number, loaded with load_instrument, and fifteen bytes copied to the voice's effect set ($C0 or $CF): start frequency, sweep, step counter and reload, repeat count, pulse width and its sweep, mode, reset frequency and the effect to chain to."
  },
  {
   "address": 30557,
   "type": "line",
   "text": "Plays one note of the tune on the voice whose register offset is $A3: 1 holds the note on, 0 releases it (gate_off), any other value n sets the frequency from note_freqs ($FD00 + 2n, high byte first) and opens the gate with the voice's waveform ($FB04 + offset)."
  },
  {
   "address": 30597,
   "type": "line",
   "text": "Closes the gate of the voice at offset $A3: writes $08 (test bit) and then 0 to its control register."
  },
  {
   "address": 30610,
   "type": "line",
   "text": "Writes instrument X (seven bytes from $FB00 + (X - 1) x 7: frequency, pulse width, control, attack/decay, sustain/release) into the SID voice at offset $A3, after gate_off, then writes the control byte again with the gate bit set."
  },
  {
   "address": 30661,
   "type": "line",
   "text": "Sets $A3 = (X - 1) x 7, the SID register offset of voice X."
  },
  {
   "address": 30672,
   "type": "line",
   "text": "Zeroes all SID registers $D400-$D418, the volume included, and the tune's step $A1."
  },
  {
   "address": 30688,
   "type": "line",
   "text": "Zeroes the registers of voices 1 and 2 ($D400-$D40D), the tune's step, the effect requests $9E-$A0 and the voices' busy flags ($ED-$EF), and voice 1's repeat count ($C6). For voice 2 it clears $D4, the reload of its step counter, not its repeat count at $D5, so an effect running on voice 2 is not stopped."
  },
  {
   "address": 30720,
   "type": "line",
   "text": "One bit for each hardware sprite, $01 to $80, for the VIC's one-bit-per-sprite registers (get_sprite, put_sprite, sprite_off)."
  },
  {
   "address": 30728,
   "type": "line",
   "text": "String: the real-time clock \" 1:00:00am\" at row 22, column 1. show_clock writes the digits into it."
  },
  {
   "address": 30730,
   "type": "line",
   "text": "The clock string's tens-of-hours digit (a space for 0)."
  },
  {
   "address": 30731,
   "type": "line",
   "text": "The clock string's hours digit."
  },
  {
   "address": 30733,
   "type": "line",
   "text": "The clock string's tens-of-minutes digit."
  },
  {
   "address": 30734,
   "type": "line",
   "text": "The clock string's minutes digit."
  },
  {
   "address": 30736,
   "type": "line",
   "text": "The clock string's tens-of-seconds digit."
  },
  {
   "address": 30737,
   "type": "line",
   "text": "The clock string's seconds digit."
  },
  {
   "address": 30738,
   "type": "line",
   "text": "a or p in the clock string, from bit 7 of the hours; the m after it is fixed."
  },
  {
   "address": 30741,
   "type": "line",
   "text": "String: the game time \" 0:00:00.0\" at row 22, column 29, filled in by show_gametime."
  },
  {
   "address": 30754,
   "type": "line",
   "text": "String: \"Gribbly's\" at row 20, column 15, shown over the Score label while paused."
  },
  {
   "address": 30766,
   "type": "line",
   "text": "String: \"Day Out\" at row 22, column 15, over the Gametime label while paused. A spare $FF follows."
  },
  {
   "address": 30778,
   "type": "line",
   "text": "String: the top edge of the title pages' frame, row 0: corner $54, 34 edge glyphs $7C, corner $55."
  },
  {
   "address": 30817,
   "type": "line",
   "text": "String: the bottom edge of the frame, row 18: corner $57, edges $7D, corner $56. Two spare $FF follow."
  },
  {
   "address": 30858,
   "type": "line",
   "text": "The Scenario page, eight strings 41 bytes apart for rows 2-16 (padded with $FF), each between the frame's sides $7B and $7A: \"Hewson Consultants Ltd.\", \"Presents\", \"GRIBBLY'S DAY OUT\", a blank line, \"Featuring Gribbly Grobbly, the\", \"no~armed, one~footed but strangely\", \"cute beastie from Blabgor. Brought\", \"to life by Andrew Braybrook.\"."
  },
  {
   "address": 31186,
   "type": "line",
   "text": "The Controls page, eight strings 39 bytes apart for rows 2-16: \"Influence Gribbly with a joystick\", \"in the rear port. Set the real~time\", \"clock using the function keys:\", \"f1 : set and start,\", \"f3~4 : change hours,\", \"f5~6 : change minutes.\", \"Press fire to play\"; the eighth is blank_line16."
  },
  {
   "address": 31459,
   "type": "line",
   "text": "String: 36 spaces at row 16, column 2: the Controls page's last line, and what check_best_score prints to clear the best-score line before redrawing it."
  },
  {
   "address": 31498,
   "type": "line",
   "text": "The 24 hours in the CIA's time-of-day form, from 1 AM ($01) to 11 AM ($11), noon ($92), 1 PM ($81) to 11 PM ($91) and midnight ($12): clock_keys steps through it, and show_gametime finds the game clock's hour here and shows its place, the hours since the 1 AM start."
  },
  {
   "address": 31522,
   "type": "line",
   "text": "The status panel's message field, strings for row 20, column 1, each padded to the same width: \"Set clock\", \"Pause\", \"Bounce\", \"Flight\", \"Scenario\", \"Controls\", \"Game On!\" (a spare $FF), \"Started\", \"50 Hertz\", \"60 Hertz\"."
  },
  {
   "address": 31642,
   "type": "line",
   "text": "Eighteen colours the title pages write into rows of colour RAM, starting at a raster-dependent place in the list."
  },
  {
   "address": 31660,
   "type": "line",
   "text": "String: the Psi bar at row 18, column 7, nine cells and $FF."
  },
  {
   "address": 31662,
   "type": "line",
   "text": "The Psi bar's nine cells, written by psi_bar: $38 full, $31-$37 part-filled, $30 empty."
  },
  {
   "address": 31672,
   "type": "line",
   "text": "String: the Bank bar at row 18, column 27."
  },
  {
   "address": 31674,
   "type": "line",
   "text": "The Bank bar's cells, written by bank_bar: up to nine full or part cells for the low six bits, then a $39 mark for each of the top two bits' value, padded with spaces to twelve."
  },
  {
   "address": 31688,
   "type": "line",
   "text": "String: \"Game over\" at row 20, column 1."
  },
  {
   "address": 31700,
   "type": "line",
   "text": "String: \"Psi~energy Transfer Stage\" at row 2, column 1, centred in spaces, shown at every level start. After it, $7BF8-$7BFD hold five spaces and an $FF that nothing prints."
  },
  {
   "address": 31742,
   "type": "line",
   "text": "String: \"Psi:\" and \"Bank:\" at row 18, column 1, the panel's labels (new_game). A spare $FF follows."
  },
  {
   "address": 31783,
   "type": "line",
   "text": "Addresses of the character groups animate_chars rotates, nine pairs (low, high): the web lines $2800, $2880, $2900, the controls $2860, then $2DE0 (unused), the water $2E30 and $2DE0, the Gribblets $29C0 and $29E0. The six bytes after them, $7C39-$7C3E, read 00 E0 00 E0 00 E0 and nothing reads them."
  },
  {
   "address": 31807,
   "type": "line",
   "text": "The web's first triangle, 16 tiles x 12 rows: web lines on the slopes and the base with the controls, in the empty tile $04 between. web_band_a copies it fourteen times across a band and web_block_a trims each copy."
  },
  {
   "address": 31999,
   "type": "line",
   "text": "The web's second triangle, 16 x 12 tiles, upside down to the first so that the bands interlock: web_band_b copies it and web_block_b trims each copy."
  },
  {
   "address": 32191,
   "type": "line",
   "text": "Background colour of the play area by level & 7, into level_bg ($35): blue, blue, cyan, dark grey, red, purple, brown, orange."
  },
  {
   "address": 32199,
   "type": "line",
   "text": "First multicolour ($D022) by level & 7."
  },
  {
   "address": 32207,
   "type": "line",
   "text": "Second multicolour ($D023) by level & 7."
  },
  {
   "address": 32215,
   "type": "line",
   "text": "The colour-RAM fill for the play area by level & 7 (bit 3, multicolour, always set); its low three bits are also the level's Gribblet colour."
  },
  {
   "address": 32223,
   "type": "line",
   "text": "Gribbly's twelve movement constants in flight, copied to $3D-$48: decay, push and limit for left, right, up and down. The limits are 9 pixels a step (every other frame) sideways, 4 up and 6 down."
  },
  {
   "address": 32235,
   "type": "line",
   "text": "Gribbly's ten sprite parameters at level start, copied to $05-$0E: x $AB, y $77, shown, multicolour, colour $F5, shape $C1."
  },
  {
   "address": 32245,
   "type": "line",
   "text": "Gribbly's plain mouth for the front shape, six bytes: sprite rows 12-13."
  },
  {
   "address": 32251,
   "type": "line",
   "text": "Plain mouth for the left-facing shape."
  },
  {
   "address": 32257,
   "type": "line",
   "text": "Plain mouth for the right-facing shape."
  },
  {
   "address": 32263,
   "type": "line",
   "text": "Smile for the front shape, shown while points are being added."
  },
  {
   "address": 32269,
   "type": "line",
   "text": "Smile for the left-facing shape."
  },
  {
   "address": 32275,
   "type": "line",
   "text": "Smile for the right-facing shape."
  },
  {
   "address": 32281,
   "type": "line",
   "text": "Frown for the front shape, shown while points are being taken off."
  },
  {
   "address": 32287,
   "type": "line",
   "text": "Frown for the left-facing shape."
  },
  {
   "address": 32293,
   "type": "line",
   "text": "Frown for the right-facing shape."
  },
  {
   "address": 32299,
   "type": "line",
   "text": "Four patterns for rows 0-4 of the front shape, 15 bytes each at 16-byte steps: animate_face picks one at random on frame 2 of every eight, so Gribbly's top twitches."
  },
  {
   "address": 32363,
   "type": "line",
   "text": "Four head patterns for the left-facing shape."
  },
  {
   "address": 32427,
   "type": "line",
   "text": "Four head patterns for the right-facing shape."
  },
  {
   "address": 32491,
   "type": "line",
   "text": "The front shape's open eyes, rows 5-7, nine bytes."
  },
  {
   "address": 32500,
   "type": "line",
   "text": "The front shape's eyes closed, a blink."
  },
  {
   "address": 32509,
   "type": "line",
   "text": "Six ways of looking, nine bytes each ($7EFD-$7F32): eyes picks one at random at the end of each cycle."
  },
  {
   "address": 32563,
   "type": "line",
   "text": "Gribbly's twelve movement constants while bouncing, copied to $3D-$48: sideways limit 4 pixels a step against flight's 9, and holding down adds nothing, with a downward limit of 0."
  },
  {
   "address": 32575,
   "type": "line",
   "text": "Steps for following a web slope down the map, one byte a row: 1 moves a column across, 0 stays (web_diag_left, web_diag_right)."
  },
  {
   "address": 32587,
   "type": "line",
   "text": "Four colours Gribbly flashes through while his psi drains."
  },
  {
   "address": 32591,
   "type": "line",
   "text": "String: \"Blk~Whte\" at row 20, column 1 (f8 on the title)."
  },
  {
   "address": 32603,
   "type": "line",
   "text": "String: \"Colour\" at row 20, column 1 (f7 on the title)."
  },
  {
   "address": 32615,
   "type": "line",
   "text": "Four patterns, 4 bytes apart, for rows 0-2 of tile $40 (the flipped Gribblet's left half): animate_chars picks one at random, so its legs wave."
  },
  {
   "address": 32631,
   "type": "line",
   "text": "Four patterns for rows 0-2 of tile $41, the flipped Gribblet's right half."
  },
  {
   "address": 32647,
   "type": "line",
   "text": "Four patterns of four bytes for rows 4-7 of tile $63, the plant."
  },
  {
   "address": 32663,
   "type": "line",
   "text": "String: two spaces at row 20, column 29, where the carrying icon goes: printed when a Gribblet is put down or saved."
  },
  {
   "address": 32668,
   "type": "line",
   "text": "String: the carrying icon, glyph $58, at row 20, column 29."
  },
  {
   "address": 32672,
   "type": "line",
   "text": "String: \"Cheese\" at row 20, column 1, while the pause is frozen with f7."
  },
  {
   "address": 32684,
   "type": "line",
   "text": "Four eight-byte pictures of the psi-grub, copied into tile $27 in turn (frame counter bits 3-4)."
  },
  {
   "address": 32716,
   "type": "line",
   "text": "String: the best-score line at row 16, column 2, \" Best : 6809 (c) ST Software 1985.\", printed on the Controls page. check_best_score rewrites it from $7FD6 with a new score and signature."
  },
  {
   "address": 32717,
   "type": "line",
   "text": "The best-score line's column byte (2), followed by its text."
  },
  {
   "address": 32751,
   "type": "line",
   "text": "Zeros, then $FF $FF $FF and a zero to $7FFF: nothing reads them."
  },
  {
   "address": 49664,
   "type": "line",
   "text": "Level 7's scene list, \"Seon is the 6809 beast!\" ($C200-$C34F): 35 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $C248 65 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 50008,
   "type": "line",
   "text": "Level 10's scene list, \"Gribblets in Peril\" ($C358-$C44F): 65 ground words naming column shapes from map column $20, then a zero word: the plain shape at $1100 fills the columns from $F2 on; from $C3DC 28 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 50264,
   "type": "line",
   "text": "Level 9's scene list, \"Gribbly on the Rocks\" ($C458-$C553): 59 ground words naming column shapes from map column $20, then a zero word: the plain shape at $1100 fills the columns from $FD on; from $C4D0 32 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 50520,
   "type": "line",
   "text": "Level 14's scene list, \"Floating Islands Galore\" ($C558-$C717): 63 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $C5D8 79 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 50968,
   "type": "line",
   "text": "Level 0's scene list, \"Hide the Gribblets in the Cave\" ($C718-$C883): 55 ground words naming column shapes from map column $20, then a zero word: the plain shape at $1100 fills the columns from $D7 on; from $C788 62 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 51336,
   "type": "line",
   "text": "Level 4's scene list, \"Wot, no ground?\" ($C888-$C9C1): 14 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $C8A6 70 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 51656,
   "type": "line",
   "text": "Level 5's scene list, \"The Elevated Forests\" ($C9C8-$CC03): 47 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $CA28 118 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 52232,
   "type": "line",
   "text": "Level 11's scene list, \"\"Water, water everywhere...\"\" ($CC08-$CE6F): 59 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $CC80 123 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "The autostart header the load carried at $8000: two vectors $42C0 and the signature CBM80. The loader jumped through it; start_game's copy brings it here, where nothing reads it. $E009-$E00F are zero."
  },
  {
   "address": 57360,
   "type": "line",
   "text": "Address of each level's scene list, sixteen words by level (build_level), the low byte here."
  },
  {
   "address": 57361,
   "type": "line",
   "text": "High bytes of the scene list words (build_level reads $E011,y)."
  },
  {
   "address": 57392,
   "type": "line",
   "text": "Address of each level's web layout, sixteen words (web_layout_ptr)."
  },
  {
   "address": 57424,
   "type": "line",
   "text": "Each level's starting view column (x 8 = view_x), sixteen bytes: level 0 starts at column $E0."
  },
  {
   "address": 57440,
   "type": "line",
   "text": "Address of each level's name string, sixteen words; level_start prints the name. $E080- $E0FF are zero."
  },
  {
   "address": 57600,
   "type": "line",
   "text": "String: level 10's name, \"Gribblets in Peril\", at row 6, column 9."
  },
  {
   "address": 57624,
   "type": "line",
   "text": "String: level 9's name, \"Gribbly on the Rocks\", at row 6, column 7."
  },
  {
   "address": 57648,
   "type": "line",
   "text": "String: level 14's name, \"Floating Islands Galore\", at row 6, column 5."
  },
  {
   "address": 57680,
   "type": "line",
   "text": "String: level 0's name, \"Hide the Gribblets in the Cave\", at row 6, column 2."
  },
  {
   "address": 57720,
   "type": "line",
   "text": "String: level 11's name, \"\"Water, water everywhere...\"\", at row 6, column 5."
  },
  {
   "address": 57752,
   "type": "line",
   "text": "String: level 4's name, \"~ Wot, no ground? ~\", at row 6, column 8 (between two ornaments, glyphs $7E $7F)."
  },
  {
   "address": 57776,
   "type": "line",
   "text": "String: level 5's name, \"The Elevated Forests\", at row 6, column 8."
  },
  {
   "address": 57800,
   "type": "line",
   "text": "String: level 7's name, \"Seon is the 6809 beast!\", at row 6, column 7."
  },
  {
   "address": 57832,
   "type": "line",
   "text": "String: level 3's name, \"The Infinite Waterfalls\", at row 6, column 6."
  },
  {
   "address": 57864,
   "type": "line",
   "text": "String: level 1's name, \"The Aerial Lakelands\", at row 6, column 7."
  },
  {
   "address": 57888,
   "type": "line",
   "text": "String: level 2's name, \"The Flooded Cavern\", at row 6, column 8."
  },
  {
   "address": 57912,
   "type": "line",
   "text": "String: level 12's name, \"Concerto for Island and Tree\", at row 6, column 3."
  },
  {
   "address": 57944,
   "type": "line",
   "text": "String: level 6's name, \"The Blabgorian Staircase\", at row 6, column 5."
  },
  {
   "address": 57976,
   "type": "line",
   "text": "String: level 8's name, \"The Tunnel\", at row 6, column 12."
  },
  {
   "address": 57992,
   "type": "line",
   "text": "String: level 13's name, \"Gribbly's Bane (It's a tough one!)\", at row 6, column 1."
  },
  {
   "address": 58032,
   "type": "line",
   "text": "String: level 15's name, \"Back to the Nursery\", at row 6, column 8."
  },
  {
   "address": 58112,
   "type": "line",
   "text": "Level 10's web layout ($E300-$E347): one byte for each of the 70 triangles, five bands of fourteen. Here 59 of the 420 controls are removed and 53 of the 140 slopes switched; the last two bytes, FF FF, are not read."
  },
  {
   "address": 58184,
   "type": "line",
   "text": "Level 9's web layout ($E348-$E38F): one byte for each of the 70 triangles, five bands of fourteen. Here 86 of the 420 controls are removed and 54 of the 140 slopes switched; the last two bytes, FF FF, are not read."
  },
  {
   "address": 58256,
   "type": "line",
   "text": "Level 14's web layout ($E390-$E3D7): one byte for each of the 70 triangles, five bands of fourteen. Here 115 of the 420 controls are removed and 56 of the 140 slopes switched; the last two bytes, FF FF, are not read."
  },
  {
   "address": 58328,
   "type": "line",
   "text": "Level 0's web layout ($E3D8-$E41F): one byte for each of the 70 triangles, five bands of fourteen. Here 134 of the 420 controls are removed and 57 of the 140 slopes switched; the last two bytes, FF FF, are not read."
  },
  {
   "address": 58400,
   "type": "line",
   "text": "Level 11's web layout ($E420-$E467): one byte for each of the 70 triangles, five bands of fourteen. Here 173 of the 420 controls are removed and 80 of the 140 slopes switched; the last two bytes, FF FF, are not read."
  },
  {
   "address": 58472,
   "type": "line",
   "text": "Level 4's web layout ($E468-$E4AF): one byte for each of the 70 triangles, five bands of fourteen. Here 165 of the 420 controls are removed and 51 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 58544,
   "type": "line",
   "text": "Level 5's web layout ($E4B0-$E4F7): one byte for each of the 70 triangles, five bands of fourteen. Here 203 of the 420 controls are removed and 82 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 58616,
   "type": "line",
   "text": "Level 7's web layout ($E4F8-$E53F): one byte for each of the 70 triangles, five bands of fourteen. Here 153 of the 420 controls are removed and 68 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 58688,
   "type": "line",
   "text": "Level 3's web layout ($E540-$E587): one byte for each of the 70 triangles, five bands of fourteen. Here 158 of the 420 controls are removed and 61 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 58760,
   "type": "line",
   "text": "Level 1's web layout ($E588-$E5CF): one byte for each of the 70 triangles, five bands of fourteen. Here 145 of the 420 controls are removed and 56 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 58832,
   "type": "line",
   "text": "Level 2's web layout ($E5D0-$E617): one byte for each of the 70 triangles, five bands of fourteen. Here 117 of the 420 controls are removed and 45 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 58904,
   "type": "line",
   "text": "Level 12's web layout ($E618-$E65F): one byte for each of the 70 triangles, five bands of fourteen. Here 278 of the 420 controls are removed and 98 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 58976,
   "type": "line",
   "text": "Level 6's web layout ($E660-$E6A7): one byte for each of the 70 triangles, five bands of fourteen. Here 189 of the 420 controls are removed and 75 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 59048,
   "type": "line",
   "text": "Level 8's web layout ($E6A8-$E6EF): one byte for each of the 70 triangles, five bands of fourteen. Here 199 of the 420 controls are removed and 80 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 59120,
   "type": "line",
   "text": "Level 13's web layout ($E6F0-$E737): one byte for each of the 70 triangles, five bands of fourteen. Here 176 of the 420 controls are removed and 53 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 59192,
   "type": "line",
   "text": "Level 15's web layout ($E738-$E77F): one byte for each of the 70 triangles, five bands of fourteen. Here 259 of the 420 controls are removed and 78 of the 140 slopes switched; the last two bytes, 00 00, are not read."
  },
  {
   "address": 59264,
   "type": "line",
   "text": "Level 12's scene list, \"Concerto for Island and Tree\" ($E780-$EA03): 39 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $E7D0 140 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 59912,
   "type": "line",
   "text": "Level 6's scene list, \"The Blabgorian Staircase\" ($EA08-$EBE7): 47 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $EA68 95 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 60400,
   "type": "line",
   "text": "Level 8's scene list, \"The Tunnel\" ($EBF0-$EDAB): 35 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $EC38 92 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 60848,
   "type": "line",
   "text": "Level 13's scene list, \"Gribbly's Bane (It's a tough one!)\" ($EDB0-$EF8B): 47 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $EE10 94 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 61328,
   "type": "line",
   "text": "Level 15's scene list, \"Back to the Nursery\" ($EF90-$F20F): 59 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $F008 129 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 62056,
   "type": "line",
   "text": "Column shapes and templates $F268-$F4F3: 15 of them, 4 used as ground and 14 as templates, by levels 6, 7, 8, 12, 13, 15. Each is a count of columns, then for each column a height and that many tile codes drawn upwards; $F408-$F41C hold a five-column shape no list uses; $F4F4-$F52F are zero."
  },
  {
   "address": 62768,
   "type": "line",
   "text": "Level 3's scene list, \"The Infinite Waterfalls\" ($F530-$F717): 65 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $F5B4 88 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 63264,
   "type": "line",
   "text": "Level 1's scene list, \"The Aerial Lakelands\" ($F720-$F8AB): 51 ground words naming column shapes from map column $20, then a zero word: the plain shape at $1100 fills the columns from $D2 on; from $F788 72 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 63664,
   "type": "line",
   "text": "Level 2's scene list, \"The Flooded Cavern\" ($F8B0-$F9E3): 53 ground words naming column shapes from map column $20 to the end of the row, then the zero word; from $F91C 49 template records (map column, row, template address) for the scenery above the ground, ended by a zero address."
  },
  {
   "address": 64256,
   "type": "line",
   "text": "Sound instruments, seven bytes each (frequency, pulse width, control, attack/decay, sustain/release), loaded by load_instrument: 1 sawtooth, 2 triangle and 3 pulse are the tune's three voices; the effects use 2 and 4-14. $FB62-$FB7F are zero."
  },
  {
   "address": 64260,
   "type": "line",
   "text": "The control (waveform) byte of instrument 1; play_note reads $FB04 + the voice offset, so voices 1-3 gate with instruments 1-3's waveforms."
  },
  {
   "address": 64384,
   "type": "line",
   "text": "The sound effects, 24 records of 16 bytes ($FB80-$FCFF): an instrument number, then the fifteen bytes start_effect copies to the voice's effect set (start frequency, sweep, steps, reload, repeats, pulse width and sweep, mode, reset frequency, chained effect)."
  },
  {
   "address": 64640,
   "type": "line",
   "text": "Effects 17-24 of the 24 effect records ($FC80-$FCFF)."
  },
  {
   "address": 64768,
   "type": "line",
   "text": "SID frequencies for the tune's notes, two bytes each with the high byte first: a note byte's high nibble is its octave and the low its semitone, so each octave takes 32 bytes, twelve notes and eight zero bytes. C4 ($40) is $10C3, middle C on an NTSC clock; a PAL machine plays it at about 252 Hz."
  },
  {
   "address": 64896,
   "type": "line",
   "text": "Octaves 4-7 of the note frequency table."
  },
  {
   "address": 65024,
   "type": "line",
   "text": "The title tune, voice 1's notes, one byte a step ($FE00-$FE60): $FE at step 0 reloads the instruments and restarts, 1 holds the note, a note byte plays it, $FF at step $60 loops to step 1. 95 steps, a step every fourth call of the driver."
  },
  {
   "address": 65152,
   "type": "line",
   "text": "The title tune, voice 2's notes, one byte a step; its own $FE and $FF are never read, as only voice 1's list is checked for them."
  },
  {
   "address": 65280,
   "type": "line",
   "text": "The title tune, voice 3's notes, the bass line, one byte a step."
  },
  {
   "address": 65530,
   "type": "line",
   "text": "The 6510's vectors, RAM here: NMI $7412 (an RTI), reset $42C0, and IRQ, which each handler of the raster chain rewrites for the next ($745A in this snapshot). start_game sets them."
  }
 ]
}