{
 "schema": 1,
 "platform": "c64",
 "game": "space-rogue",
 "part": "engine",
 "build": "",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    25088,
    25599,
    "the second display buffer's screen matrix (the station's load owns $6000-$61FF)"
   ],
   [
    48896,
    49151,
    "the buffer a disk text is decoded into"
   ],
   [
    49152,
    57343,
    "the first display buffer's bitmap ($C000-$DF3F, most of it under the I/O) and the zeros after it; the symbols here are text numbers, not addresses"
   ],
   [
    57344,
    58367,
    "the first display buffer's screen matrix"
   ],
   [
    62976,
    63999,
    "the cache of two text blocks read from side 2"
   ],
   [
    64000,
    65529,
    "work buffers rebuilt for every frame: face signs, projected points, screen coordinates, polygon lists, the text and view buffer"
   ],
   [
    16384,
    25087,
    "4 parts: Flight, Navigation, Hive! and others"
   ],
   [
    42240,
    48383,
    "2 parts: Bases, Flight"
   ],
   [
    58368,
    60159,
    "2 parts: Bases, Flight"
   ]
  ],
  "extra": [],
  "elsewhere": [
   [
    16384,
    25087,
    "4 parts: Flight, Navigation, Hive! and others"
   ],
   [
    42240,
    48383,
    "2 parts: Bases, Flight"
   ],
   [
    58368,
    60159,
    "2 parts: Bases, Flight"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 1023,
   "type": "Undefined"
  },
  {
   "start": 1024,
   "end": 1026,
   "type": "Code"
  },
  {
   "start": 1027,
   "end": 1628,
   "type": "Undefined"
  },
  {
   "start": 1629,
   "end": 1808,
   "type": "Byte"
  },
  {
   "start": 1809,
   "end": 1979,
   "type": "Undefined"
  },
  {
   "start": 1980,
   "end": 2097,
   "type": "Byte"
  },
  {
   "start": 2098,
   "end": 2295,
   "type": "Undefined"
  },
  {
   "start": 2296,
   "end": 2365,
   "type": "Byte"
  },
  {
   "start": 2366,
   "end": 2400,
   "type": "Undefined"
  },
  {
   "start": 2401,
   "end": 2588,
   "type": "Byte"
  },
  {
   "start": 2589,
   "end": 2658,
   "type": "Undefined"
  },
  {
   "start": 2659,
   "end": 2798,
   "type": "Byte"
  },
  {
   "start": 2799,
   "end": 2833,
   "type": "Undefined"
  },
  {
   "start": 2834,
   "end": 3041,
   "type": "Byte"
  },
  {
   "start": 3042,
   "end": 3245,
   "type": "Undefined"
  },
  {
   "start": 3246,
   "end": 3325,
   "type": "Byte"
  },
  {
   "start": 3326,
   "end": 3558,
   "type": "Undefined"
  },
  {
   "start": 3559,
   "end": 4059,
   "type": "Code"
  },
  {
   "start": 4060,
   "end": 4198,
   "type": "Undefined"
  },
  {
   "start": 4199,
   "end": 4500,
   "type": "Code"
  },
  {
   "start": 4501,
   "end": 4664,
   "type": "Undefined"
  },
  {
   "start": 4665,
   "end": 4956,
   "type": "Code"
  },
  {
   "start": 4957,
   "end": 4958,
   "type": "Undefined"
  },
  {
   "start": 4959,
   "end": 5211,
   "type": "Code"
  },
  {
   "start": 5212,
   "end": 5322,
   "type": "Byte"
  },
  {
   "start": 5323,
   "end": 5832,
   "type": "Code"
  },
  {
   "start": 5833,
   "end": 5922,
   "type": "Undefined"
  },
  {
   "start": 5923,
   "end": 6192,
   "type": "Code"
  },
  {
   "start": 6193,
   "end": 6232,
   "type": "Undefined"
  },
  {
   "start": 6233,
   "end": 6409,
   "type": "Code"
  },
  {
   "start": 6410,
   "end": 6458,
   "type": "Undefined"
  },
  {
   "start": 6459,
   "end": 7061,
   "type": "Code"
  },
  {
   "start": 7062,
   "end": 7089,
   "type": "Byte"
  },
  {
   "start": 7090,
   "end": 7188,
   "type": "Code"
  },
  {
   "start": 7189,
   "end": 7196,
   "type": "Undefined"
  },
  {
   "start": 7197,
   "end": 7551,
   "type": "Code"
  },
  {
   "start": 7552,
   "end": 7553,
   "type": "Undefined"
  },
  {
   "start": 7554,
   "end": 7770,
   "type": "Code"
  },
  {
   "start": 7771,
   "end": 7771,
   "type": "Undefined"
  },
  {
   "start": 7772,
   "end": 8215,
   "type": "Code"
  },
  {
   "start": 8216,
   "end": 8224,
   "type": "Undefined"
  },
  {
   "start": 8225,
   "end": 8359,
   "type": "Code"
  },
  {
   "start": 8360,
   "end": 8427,
   "type": "Undefined"
  },
  {
   "start": 8428,
   "end": 9208,
   "type": "Code"
  },
  {
   "start": 9209,
   "end": 9240,
   "type": "Undefined"
  },
  {
   "start": 9241,
   "end": 9378,
   "type": "Code"
  },
  {
   "start": 9379,
   "end": 9394,
   "type": "Undefined"
  },
  {
   "start": 9395,
   "end": 9537,
   "type": "Code"
  },
  {
   "start": 9538,
   "end": 9538,
   "type": "Undefined"
  },
  {
   "start": 9539,
   "end": 9938,
   "type": "Code"
  },
  {
   "start": 9939,
   "end": 10023,
   "type": "Undefined"
  },
  {
   "start": 10024,
   "end": 10282,
   "type": "Code"
  },
  {
   "start": 10283,
   "end": 10367,
   "type": "Byte"
  },
  {
   "start": 10368,
   "end": 10738,
   "type": "Code"
  },
  {
   "start": 10739,
   "end": 10772,
   "type": "Undefined"
  },
  {
   "start": 10773,
   "end": 11248,
   "type": "Code"
  },
  {
   "start": 11249,
   "end": 11293,
   "type": "Undefined"
  },
  {
   "start": 11294,
   "end": 11555,
   "type": "Code"
  },
  {
   "start": 11556,
   "end": 11575,
   "type": "Undefined"
  },
  {
   "start": 11576,
   "end": 11784,
   "type": "Code"
  },
  {
   "start": 11785,
   "end": 11888,
   "type": "Undefined"
  },
  {
   "start": 11889,
   "end": 11935,
   "type": "Code"
  },
  {
   "start": 11936,
   "end": 11938,
   "type": "Undefined"
  },
  {
   "start": 11939,
   "end": 12384,
   "type": "Code"
  },
  {
   "start": 12385,
   "end": 12392,
   "type": "Undefined"
  },
  {
   "start": 12393,
   "end": 12717,
   "type": "Code"
  },
  {
   "start": 12718,
   "end": 12721,
   "type": "Undefined"
  },
  {
   "start": 12722,
   "end": 12857,
   "type": "Code"
  },
  {
   "start": 12858,
   "end": 12863,
   "type": "Undefined"
  },
  {
   "start": 12864,
   "end": 13154,
   "type": "Code"
  },
  {
   "start": 13155,
   "end": 13166,
   "type": "Undefined"
  },
  {
   "start": 13167,
   "end": 13540,
   "type": "Code"
  },
  {
   "start": 13541,
   "end": 13568,
   "type": "Byte"
  },
  {
   "start": 13569,
   "end": 13923,
   "type": "Code"
  },
  {
   "start": 13924,
   "end": 13932,
   "type": "Undefined"
  },
  {
   "start": 13933,
   "end": 14343,
   "type": "Code"
  },
  {
   "start": 14344,
   "end": 14352,
   "type": "Undefined"
  },
  {
   "start": 14353,
   "end": 14512,
   "type": "Code"
  },
  {
   "start": 14513,
   "end": 14528,
   "type": "Undefined"
  },
  {
   "start": 14529,
   "end": 15306,
   "type": "Code"
  },
  {
   "start": 15307,
   "end": 15327,
   "type": "Undefined"
  },
  {
   "start": 15328,
   "end": 16054,
   "type": "Code"
  },
  {
   "start": 16055,
   "end": 16055,
   "type": "Undefined"
  },
  {
   "start": 16056,
   "end": 16371,
   "type": "Code"
  },
  {
   "start": 16372,
   "end": 16383,
   "type": "Undefined"
  },
  {
   "start": 25088,
   "end": 25599,
   "type": "Undefined"
  },
  {
   "start": 25600,
   "end": 25879,
   "type": "Code"
  },
  {
   "start": 25880,
   "end": 25880,
   "type": "Byte"
  },
  {
   "start": 25881,
   "end": 26205,
   "type": "Code"
  },
  {
   "start": 26206,
   "end": 26286,
   "type": "Undefined"
  },
  {
   "start": 26287,
   "end": 26653,
   "type": "Code"
  },
  {
   "start": 26654,
   "end": 26921,
   "type": "Byte"
  },
  {
   "start": 26922,
   "end": 26932,
   "type": "Code"
  },
  {
   "start": 26933,
   "end": 27314,
   "type": "Byte"
  },
  {
   "start": 27315,
   "end": 28632,
   "type": "Code"
  },
  {
   "start": 28633,
   "end": 28644,
   "type": "Word"
  },
  {
   "start": 28645,
   "end": 28722,
   "type": "Byte"
  },
  {
   "start": 28723,
   "end": 28977,
   "type": "Code"
  },
  {
   "start": 28978,
   "end": 28979,
   "type": "Byte"
  },
  {
   "start": 28980,
   "end": 29372,
   "type": "Code"
  },
  {
   "start": 29373,
   "end": 29376,
   "type": "Byte"
  },
  {
   "start": 29377,
   "end": 29840,
   "type": "Code"
  },
  {
   "start": 29841,
   "end": 29858,
   "type": "Byte"
  },
  {
   "start": 29859,
   "end": 30833,
   "type": "Code"
  },
  {
   "start": 30834,
   "end": 30842,
   "type": "Byte"
  },
  {
   "start": 30843,
   "end": 35593,
   "type": "Code"
  },
  {
   "start": 35594,
   "end": 35610,
   "type": "Byte"
  },
  {
   "start": 35611,
   "end": 36368,
   "type": "Code"
  },
  {
   "start": 36369,
   "end": 36374,
   "type": "Byte"
  },
  {
   "start": 36375,
   "end": 36723,
   "type": "Code"
  },
  {
   "start": 36724,
   "end": 36735,
   "type": "Undefined"
  },
  {
   "start": 36736,
   "end": 36808,
   "type": "Code"
  },
  {
   "start": 36809,
   "end": 36892,
   "type": "Undefined"
  },
  {
   "start": 36893,
   "end": 37011,
   "type": "Code"
  },
  {
   "start": 37012,
   "end": 37015,
   "type": "Byte"
  },
  {
   "start": 37016,
   "end": 39357,
   "type": "Code"
  },
  {
   "start": 39358,
   "end": 39389,
   "type": "Undefined"
  },
  {
   "start": 39390,
   "end": 39811,
   "type": "Code"
  },
  {
   "start": 39812,
   "end": 39812,
   "type": "Byte"
  },
  {
   "start": 39813,
   "end": 40111,
   "type": "Code"
  },
  {
   "start": 40112,
   "end": 40117,
   "type": "Byte"
  },
  {
   "start": 40118,
   "end": 40284,
   "type": "Code"
  },
  {
   "start": 40285,
   "end": 40429,
   "type": "Byte"
  },
  {
   "start": 40430,
   "end": 40591,
   "type": "Code"
  },
  {
   "start": 40592,
   "end": 40638,
   "type": "Byte"
  },
  {
   "start": 40639,
   "end": 41709,
   "type": "Code"
  },
  {
   "start": 41710,
   "end": 41717,
   "type": "Byte"
  },
  {
   "start": 41718,
   "end": 41844,
   "type": "Code"
  },
  {
   "start": 41845,
   "end": 41904,
   "type": "Byte"
  },
  {
   "start": 41905,
   "end": 41986,
   "type": "Code"
  },
  {
   "start": 41987,
   "end": 41989,
   "type": "Byte"
  },
  {
   "start": 41990,
   "end": 42239,
   "type": "Code"
  },
  {
   "start": 48384,
   "end": 48613,
   "type": "Byte"
  },
  {
   "start": 48614,
   "end": 58367,
   "type": "Undefined"
  },
  {
   "start": 60160,
   "end": 62975,
   "type": "Byte"
  },
  {
   "start": 62976,
   "end": 65529,
   "type": "Undefined"
  },
  {
   "start": 65530,
   "end": 65535,
   "type": "Word"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "zp_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2,
   "name": "zp_02",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "key_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4,
   "name": "key_room",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5,
   "name": "key_buffer",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 6,
   "name": "zpf_06",
   "type": "ZeroPageField",
   "kind": "auto"
  },
  {
   "address": 15,
   "name": "key_last",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16,
   "name": "key_held",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17,
   "name": "key_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18,
   "name": "key_rate",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19,
   "name": "key_ctrl",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20,
   "name": "key_lshift",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21,
   "name": "key_rshift",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22,
   "name": "frame_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23,
   "name": "matrix_mask",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 24,
   "name": "matrix_value",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 25,
   "name": "cell_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26,
   "name": "zpa_1A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27,
   "name": "cell_ptr2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28,
   "name": "zpa_1C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29,
   "name": "voice_mask",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30,
   "name": "hum_on",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31,
   "name": "voice_wave",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 34,
   "name": "voice_length",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 37,
   "name": "voice_gateoff",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 40,
   "name": "voice_timer",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "voice_repeats",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 46,
   "name": "frame_lag",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 56,
   "name": "bitmap_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57,
   "name": "zpa_39",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58,
   "name": "draw_buffer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59,
   "name": "clear_byte",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "pattern_even",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62,
   "name": "pattern_odd",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 65,
   "name": "window_width",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 66,
   "name": "window_height",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 67,
   "name": "window_width1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 68,
   "name": "window_height1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 69,
   "name": "span_left",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 70,
   "name": "zpa_46",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 71,
   "name": "clip_x1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 72,
   "name": "zpa_48",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 73,
   "name": "clip_x2",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 74,
   "name": "zpa_4A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 75,
   "name": "clip_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 76,
   "name": "zpa_4C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 77,
   "name": "object_size",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 79,
   "name": "cursor_col",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 80,
   "name": "cursor_row",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 81,
   "name": "screen_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 82,
   "name": "zpa_52",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 83,
   "name": "screen_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 84,
   "name": "zpa_54",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 85,
   "name": "clip_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 86,
   "name": "window_cx",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 87,
   "name": "window_cy",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 88,
   "name": "camera_pos_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 89,
   "name": "zpa_59",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 90,
   "name": "camera_orient_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 91,
   "name": "zpa_5B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 92,
   "name": "drawn_slot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 93,
   "name": "drawn_type",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 94,
   "name": "pass_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 95,
   "name": "acc_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 96,
   "name": "acc_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 97,
   "name": "acc_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 98,
   "name": "arg_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 99,
   "name": "arg_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 100,
   "name": "arg_sign",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 101,
   "name": "axpy_s",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 102,
   "name": "zpa_66",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 103,
   "name": "zpa_67",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 104,
   "name": "plane_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 105,
   "name": "zpa_69",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 106,
   "name": "zpa_6A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 107,
   "name": "scratch_vec",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 108,
   "name": "f_006C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 109,
   "name": "a_006D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 110,
   "name": "a_006E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 111,
   "name": "zpa_6F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 112,
   "name": "zpa_70",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 113,
   "name": "a_0071",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 114,
   "name": "zpa_72",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 115,
   "name": "zpa_73",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 116,
   "name": "src1_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 117,
   "name": "zpa_75",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 118,
   "name": "src2_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 119,
   "name": "zpa_77",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 120,
   "name": "dest_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 121,
   "name": "zpa_79",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 122,
   "name": "model_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 123,
   "name": "zpa_7B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 124,
   "name": "tac_mode",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 128,
   "name": "tmp80",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 129,
   "name": "tmp81",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 130,
   "name": "tmp82",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 131,
   "name": "tmp83",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 132,
   "name": "tmp84",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 133,
   "name": "tmp85",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 134,
   "name": "tmp86",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 135,
   "name": "tmp87",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 136,
   "name": "tmp88",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 137,
   "name": "tmp89",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 138,
   "name": "tmp8A",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 139,
   "name": "tmp8B",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 140,
   "name": "tmp8C",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 141,
   "name": "tmp8D",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 142,
   "name": "tmp8E",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 143,
   "name": "tmp8F",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 144,
   "name": "tmp90",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 145,
   "name": "tmp91",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 146,
   "name": "tmp92",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 148,
   "name": "tmp94",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 149,
   "name": "tmp95",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 150,
   "name": "tmp96",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 151,
   "name": "tmp97",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 152,
   "name": "tmp98",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 153,
   "name": "tmp99",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 154,
   "name": "model_inited",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 155,
   "name": "model_points",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 156,
   "name": "model_refs",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 157,
   "name": "model_normals",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 158,
   "name": "model_polys",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 159,
   "name": "model_axes",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 160,
   "name": "model_reflist",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 161,
   "name": "zpa_A1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 162,
   "name": "model_axisidx",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 163,
   "name": "zpa_A3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 164,
   "name": "model_axisvec",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 165,
   "name": "zpa_A5",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 166,
   "name": "model_parents",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 168,
   "name": "model_refpts",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 169,
   "name": "zpa_A9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 170,
   "name": "model_normvec",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 171,
   "name": "zpa_AB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 172,
   "name": "model_normref",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 174,
   "name": "model_planes",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 176,
   "name": "model_polynorm",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 178,
   "name": "model_backcol",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 179,
   "name": "zpa_B3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 180,
   "name": "model_frontcol",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 181,
   "name": "zpa_B5",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 182,
   "name": "model_vertlists",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 183,
   "name": "zpa_B7",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 184,
   "name": "model_vertcounts",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 185,
   "name": "zpa_B9",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 186,
   "name": "model_groups",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 188,
   "name": "model_groupsizes",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 189,
   "name": "zpa_BD",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 198,
   "name": "slot_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 199,
   "name": "slot_b",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 200,
   "name": "radius_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 201,
   "name": "radius_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 202,
   "name": "zpa_CA",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 203,
   "name": "zpa_CB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 204,
   "name": "zpa_CC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 208,
   "name": "ai_dist",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 209,
   "name": "zpa_D1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 210,
   "name": "ai_dot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 211,
   "name": "zpa_D3",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 212,
   "name": "zpa_D4",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 213,
   "name": "ai_slot",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 256,
   "name": "f_0100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 788,
   "name": "irq_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 789,
   "name": "a_0315",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 790,
   "name": "brk_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 791,
   "name": "a_0317",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 792,
   "name": "nmi_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 793,
   "name": "a_0319",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1024,
   "name": "sr_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1027,
   "name": "slot_missile",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1033,
   "name": "slot_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1039,
   "name": "slot_cooldown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1045,
   "name": "slot_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1051,
   "name": "slot_ai_state",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1057,
   "name": "slot_label",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1058,
   "name": "f_0422",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1059,
   "name": "f_0423",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1075,
   "name": "slot_faction",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1081,
   "name": "slot_attacker",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1087,
   "name": "slot_tactic",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1093,
   "name": "slot_target",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1099,
   "name": "slot_orient",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1288,
   "name": "slot_pitch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1295,
   "name": "slot_roll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1302,
   "name": "slot_turn",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1309,
   "name": "slot_armour",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1310,
   "name": "f_051E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1349,
   "name": "slot_velocity",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1350,
   "name": "f_0546",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1351,
   "name": "f_0547",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1352,
   "name": "a_0548",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1355,
   "name": "a_054B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1529,
   "name": "slot_in_use",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1549,
   "name": "slot_type",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1569,
   "name": "slot_onscreen",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1589,
   "name": "slot_solid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1609,
   "name": "slot_drawn",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1629,
   "name": "slot_position",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1635,
   "name": "a_0663",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1636,
   "name": "a_0664",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1637,
   "name": "a_0665",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1638,
   "name": "slot_positions_rest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1809,
   "name": "player_name",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1821,
   "name": "cur_system",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1822,
   "name": "cur_sector_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1823,
   "name": "cur_sector_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1824,
   "name": "clock_hours",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1825,
   "name": "clock_day",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1826,
   "name": "clock_month",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1827,
   "name": "clock_year",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1828,
   "name": "days_elapsed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1829,
   "name": "a_0725",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1830,
   "name": "bounty",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1831,
   "name": "a_0727",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1832,
   "name": "credits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1833,
   "name": "a_0729",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1834,
   "name": "rank",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1835,
   "name": "rank_points",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1836,
   "name": "dest_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1837,
   "name": "dest_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1838,
   "name": "standings",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1841,
   "name": "missile_count",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1842,
   "name": "missiles_sm1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1843,
   "name": "missiles_nova",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1844,
   "name": "missiles_torp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1845,
   "name": "ship_stats",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1846,
   "name": "a_0736",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1847,
   "name": "a_0737",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1848,
   "name": "a_0738",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1849,
   "name": "a_0739",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1850,
   "name": "a_073A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1851,
   "name": "engine_thrust",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1852,
   "name": "a_073C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1853,
   "name": "item_stealth_box",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1854,
   "name": "item_beam_lock",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1855,
   "name": "item_turbo_thruster",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1856,
   "name": "item_repair_droid",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1857,
   "name": "item_null_damper",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1858,
   "name": "item_key_card",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1859,
   "name": "item_manchi_egg",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1869,
   "name": "item_pilots_license",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1870,
   "name": "item_forged_papers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1871,
   "name": "item_amoebic_lenses",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1874,
   "name": "item_on_map",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1894,
   "name": "f_0766",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1895,
   "name": "cargo_kind",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1903,
   "name": "cargo_paid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1911,
   "name": "cargo_slots",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1912,
   "name": "base_file",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1913,
   "name": "base_file_system",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1914,
   "name": "base_file_number",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1916,
   "name": "danger",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1917,
   "name": "class_weights",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1922,
   "name": "special_entries",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1923,
   "name": "shot_a_base",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1924,
   "name": "rumour_states",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1934,
   "name": "plot_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1946,
   "name": "kills_079A",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1947,
   "name": "a_079B",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1948,
   "name": "a_079C",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1966,
   "name": "daily_lists",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1980,
   "name": "file_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2048,
   "name": "file_names_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2098,
   "name": "surrendered",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2099,
   "name": "taunted",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2100,
   "name": "gravity_warned",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2101,
   "name": "killer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2102,
   "name": "missile_reload",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2103,
   "name": "touched",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2104,
   "name": "in_wormhole",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2106,
   "name": "drunk",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2107,
   "name": "alarm",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2108,
   "name": "orient_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2118,
   "name": "pos_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2158,
   "name": "clip_scratch",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2206,
   "name": "a_089E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2215,
   "name": "a_08A7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2225,
   "name": "talk_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2229,
   "name": "visitor_pictures",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2261,
   "name": "type_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2296,
   "name": "type_draw",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2297,
   "name": "type_draw_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2366,
   "name": "type_model",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2401,
   "name": "model_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2457,
   "name": "type_drawdata",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2458,
   "name": "type_drawdata_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2527,
   "name": "draw_data",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2589,
   "name": "type_radius",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2590,
   "name": "f_0A1E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2651,
   "name": "a_0A5B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2652,
   "name": "a_0A5C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2659,
   "name": "type_scale",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2660,
   "name": "type_scale_whole",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2729,
   "name": "type_armour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2730,
   "name": "type_armour_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2799,
   "name": "type_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2834,
   "name": "type_names",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2835,
   "name": "type_names_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2878,
   "name": "type_name_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3042,
   "name": "type_turn",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3043,
   "name": "f_0BE3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3076,
   "name": "type_thrust",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3077,
   "name": "a_0C05",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3102,
   "name": "type_faction",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3115,
   "name": "type_ecm",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3128,
   "name": "type_tactic",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3141,
   "name": "type_systems",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3154,
   "name": "type_beam",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3167,
   "name": "type_missile_kind",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3180,
   "name": "type_shields",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3193,
   "name": "type_rank",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3206,
   "name": "tactic_steer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3216,
   "name": "tactic_angle",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3226,
   "name": "tactic_speed",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3236,
   "name": "tactic_speedrule",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3246,
   "name": "tactic_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3326,
   "name": "weapon",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3327,
   "name": "auto_fire",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3328,
   "name": "beam_heat",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3329,
   "name": "thrust_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3330,
   "name": "newtonian",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3331,
   "name": "joy_used",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3332,
   "name": "encounter_types",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3333,
   "name": "a_0D05",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3334,
   "name": "a_0D06",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3335,
   "name": "ships_near",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3336,
   "name": "cargo_spoils",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3360,
   "name": "win_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3361,
   "name": "win_right",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3362,
   "name": "win_top",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3363,
   "name": "win_bottom",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3364,
   "name": "win_lines",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3365,
   "name": "reverse_mask",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3366,
   "name": "lines_left",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3367,
   "name": "last_char",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3368,
   "name": "text_mirrored",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3369,
   "name": "message_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3375,
   "name": "chart_brackets",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3376,
   "name": "chart_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3377,
   "name": "chart_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3378,
   "name": "chart_scroll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3379,
   "name": "chart_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3388,
   "name": "view_mode",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3389,
   "name": "draw_list",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3390,
   "name": "view_front",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3391,
   "name": "a_0D3F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3428,
   "name": "proj_xscale",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3429,
   "name": "a_0D65",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3430,
   "name": "proj_yscale",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3431,
   "name": "a_0D67",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3432,
   "name": "proj_zoom",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3433,
   "name": "a_0D69",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3434,
   "name": "proj_vslope",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3435,
   "name": "a_0D6B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3436,
   "name": "proj_hedge",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3437,
   "name": "a_0D6D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3438,
   "name": "proj_vedge",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3439,
   "name": "a_0D6F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3440,
   "name": "draw_depth_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3454,
   "name": "draw_depth_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3468,
   "name": "draw_size",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3482,
   "name": "draw_slot",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3496,
   "name": "identity",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3559,
   "name": "sr_init",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 3565,
   "name": "b_0DED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3618,
   "name": "setup_irq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3717,
   "name": "bank_all_ram",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3724,
   "name": "bank_io_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3733,
   "name": "bank_kernal_in",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3742,
   "name": "nmi_rti",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3743,
   "name": "reset_rti",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3744,
   "name": "irq_entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3749,
   "name": "irq_body",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3774,
   "name": "b_0EBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3780,
   "name": "b_0EC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3789,
   "name": "clear_keybuf",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3798,
   "name": "keyscan_to_buffer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3814,
   "name": "b_0EE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3824,
   "name": "b_0EF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3828,
   "name": "r_0EF4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 3829,
   "name": "keyscan",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 3881,
   "name": "b_0F29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3903,
   "name": "b_0F3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3914,
   "name": "b_0F4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3939,
   "name": "b_0F63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3940,
   "name": "b_0F64",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3956,
   "name": "b_0F74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3975,
   "name": "b_0F87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3981,
   "name": "b_0F8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3990,
   "name": "b_0F96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 3997,
   "name": "b_0F9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4013,
   "name": "b_0FAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4017,
   "name": "b_0FB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4031,
   "name": "b_0FBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4045,
   "name": "b_0FCD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4047,
   "name": "b_0FCF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4056,
   "name": "b_0FD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4060,
   "name": "key_row_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4068,
   "name": "key_row_base",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4079,
   "name": "key_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "key_chars_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4167,
   "name": "shift_from",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4183,
   "name": "shift_to",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4199,
   "name": "sound_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4203,
   "name": "b_106B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4241,
   "name": "sound_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4305,
   "name": "r_10D1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 4306,
   "name": "sound_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4308,
   "name": "b_10D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4370,
   "name": "b_1112",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4412,
   "name": "b_113C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4424,
   "name": "b_1148",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4439,
   "name": "b_1157",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4465,
   "name": "b_1171",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4500,
   "name": "r_1194",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 4501,
   "name": "voice_reg_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4504,
   "name": "voice_freq_hi_start",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4507,
   "name": "voice_step_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4510,
   "name": "voice_step_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4513,
   "name": "voice_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4516,
   "name": "voice_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4519,
   "name": "voice_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4522,
   "name": "voice_sr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4525,
   "name": "sfx_voice",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4539,
   "name": "sfx_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4553,
   "name": "sfx_step_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4567,
   "name": "sfx_step_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4581,
   "name": "sfx_ad",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4595,
   "name": "sfx_sr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4609,
   "name": "sfx_wave",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4623,
   "name": "sfx_length",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4637,
   "name": "sfx_gateoff",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4651,
   "name": "sfx_repeats",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4665,
   "name": "frame_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4673,
   "name": "b_1241",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4697,
   "name": "b_1259",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4714,
   "name": "b_126A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4721,
   "name": "b_1271",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4742,
   "name": "b_1286",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4755,
   "name": "b_1293",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4780,
   "name": "b_12AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4795,
   "name": "b_12BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4835,
   "name": "b_12E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4839,
   "name": "b_12E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4875,
   "name": "b_130B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4881,
   "name": "j_1311",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4902,
   "name": "b_1326",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4910,
   "name": "b_132E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4956,
   "name": "r_135C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 4957,
   "name": "flight_step_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4958,
   "name": "clock_ticks",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4959,
   "name": "do_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4968,
   "name": "b_1368",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4977,
   "name": "b_1371",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4986,
   "name": "b_137A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4998,
   "name": "key_turn_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5009,
   "name": "key_turn_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5020,
   "name": "key_pitch_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5031,
   "name": "key_pitch_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5042,
   "name": "key_stop_turn",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5054,
   "name": "key_roll_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5065,
   "name": "key_roll_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5076,
   "name": "key_jettison",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5086,
   "name": "key_slower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5101,
   "name": "b_13ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5107,
   "name": "key_faster",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5122,
   "name": "b_1402",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5128,
   "name": "key_flight_mode",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5137,
   "name": "key_tac_mode",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5149,
   "name": "key_auto_fire",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5162,
   "name": "r_142A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 5163,
   "name": "key_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5173,
   "name": "b_1435",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5176,
   "name": "key_escape",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5186,
   "name": "key_navigation",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5196,
   "name": "clamp_rate",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5204,
   "name": "r_1454",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 5205,
   "name": "b_1455",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5212,
   "name": "key_cmds",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5249,
   "name": "key_handlers",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5250,
   "name": "key_handlers_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5323,
   "name": "sr_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5349,
   "name": "load_end",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5368,
   "name": "load_seg0",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5383,
   "name": "load_seg1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5413,
   "name": "restore_after_disk",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5426,
   "name": "load_won",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 5454,
   "name": "key_save",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5469,
   "name": "b_155D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5531,
   "name": "b_159B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5536,
   "name": "enter_sector",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5559,
   "name": "b_15B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5567,
   "name": "b_15BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5603,
   "name": "b_15E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5613,
   "name": "b_15ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5622,
   "name": "b_15F6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5636,
   "name": "b_1604",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5658,
   "name": "b_161A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5668,
   "name": "b_1624",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5671,
   "name": "b_1627",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5673,
   "name": "b_1629",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5676,
   "name": "b_162C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5696,
   "name": "b_1640",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5731,
   "name": "b_1663",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5748,
   "name": "b_1674",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 5755,
   "name": "count_special_entry",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5759,
   "name": "place_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5810,
   "name": "base_file_from_map",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5833,
   "name": "sector_object_lists",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5834,
   "name": "f_16CA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5891,
   "name": "sector_kind_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5901,
   "name": "sector_kind_texts",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 5902,
   "name": "f_170E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 5922,
   "name": "slot_counter",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5923,
   "name": "start_game_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5943,
   "name": "copy_ship_stats",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5989,
   "name": "load_file",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 5999,
   "name": "b_176F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6019,
   "name": "save_file",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6039,
   "name": "b_1797",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6069,
   "name": "swap_kernal_zp",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6071,
   "name": "b_17B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6086,
   "name": "open_for_io",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6102,
   "name": "b_17D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6109,
   "name": "b_17DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6128,
   "name": "a_17F0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6130,
   "name": "a_17F2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6132,
   "name": "a_17F4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6136,
   "name": "close_after_io",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6154,
   "name": "b_180A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6162,
   "name": "disk_prompt",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6193,
   "name": "io_addr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6194,
   "name": "a_1832",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6195,
   "name": "a_1833",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6196,
   "name": "a_1834",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6197,
   "name": "str_insert",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6231,
   "name": "disk_name_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6232,
   "name": "a_1858",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6233,
   "name": "prompt_boot_disk",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6244,
   "name": "prompt_data_disk",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6255,
   "name": "read_block",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6258,
   "name": "b_1872",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6267,
   "name": "b_187B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6276,
   "name": "b_1884",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6297,
   "name": "j_1899",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6365,
   "name": "b_18DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6380,
   "name": "b_18EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6409,
   "name": "f_1909",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 6410,
   "name": "sectors_per_track",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6445,
   "name": "str_block_cmd",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6453,
   "name": "a_1935",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6454,
   "name": "a_1936",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6456,
   "name": "a_1938",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6457,
   "name": "a_1939",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 6458,
   "name": "block_byte_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6459,
   "name": "to_decimal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6461,
   "name": "b_193D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6470,
   "name": "b_1946",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6473,
   "name": "create_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6485,
   "name": "b_1955",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6495,
   "name": "b_195F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6499,
   "name": "b_1963",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6511,
   "name": "create_in_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6513,
   "name": "fill_slot",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 6584,
   "name": "b_19B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6735,
   "name": "b_1A4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6738,
   "name": "j_1A52",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6745,
   "name": "j_1A59",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6748,
   "name": "b_1A5C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6751,
   "name": "destroy_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6763,
   "name": "b_1A6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6788,
   "name": "b_1A84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6793,
   "name": "r_1A89",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 6794,
   "name": "free_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6800,
   "name": "b_1A90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6817,
   "name": "b_1AA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6831,
   "name": "b_1AAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6843,
   "name": "b_1ABB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6847,
   "name": "kill_reward",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 6867,
   "name": "b_1AD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6888,
   "name": "b_1AE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6892,
   "name": "j_1AEC",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 6913,
   "name": "b_1B01",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6933,
   "name": "b_1B15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6964,
   "name": "b_1B34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 6977,
   "name": "b_1B41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7001,
   "name": "b_1B59",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7018,
   "name": "b_1B6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7031,
   "name": "b_1B77",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7055,
   "name": "r_1B8F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7056,
   "name": "player_destroyed",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 7062,
   "name": "str_bounty",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7090,
   "name": "age_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7092,
   "name": "b_1BB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7118,
   "name": "b_1BCE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7146,
   "name": "b_1BEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7150,
   "name": "load_picture",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7189,
   "name": "picture_names",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7190,
   "name": "f_1C16",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 7197,
   "name": "unpack_picture",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 7222,
   "name": "b_1C36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7238,
   "name": "j_1C46",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7251,
   "name": "b_1C53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7261,
   "name": "b_1C5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7270,
   "name": "b_1C66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7279,
   "name": "b_1C6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7303,
   "name": "b_1C87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7306,
   "name": "set_border",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7317,
   "name": "load_model",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7324,
   "name": "b_1C9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7326,
   "name": "b_1C9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7432,
   "name": "b_1D08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7461,
   "name": "b_1D25",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7483,
   "name": "b_1D3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7498,
   "name": "reset_models",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7504,
   "name": "b_1D50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7514,
   "name": "b_1D5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7530,
   "name": "load_slot_models",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7534,
   "name": "b_1D6E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7545,
   "name": "b_1D79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7552,
   "name": "model_heap_next",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7553,
   "name": "a_1D81",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 7554,
   "name": "key_next_target",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7566,
   "name": "b_1D8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7575,
   "name": "b_1D97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7591,
   "name": "b_1DA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7605,
   "name": "b_1DB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7614,
   "name": "key_fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7634,
   "name": "b_1DD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7639,
   "name": "b_1DD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7644,
   "name": "b_1DDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7647,
   "name": "target_status",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7654,
   "name": "r_1DE6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7655,
   "name": "b_1DE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7686,
   "name": "b_1E06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7698,
   "name": "b_1E12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7700,
   "name": "j_1E14",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 7748,
   "name": "b_1E44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7755,
   "name": "b_1E4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7771,
   "name": "str_empty",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7772,
   "name": "key_next_weapon",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 7784,
   "name": "b_1E68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7792,
   "name": "b_1E70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7795,
   "name": "random_offset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 7811,
   "name": "b_1E83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7853,
   "name": "launch_missile",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 7869,
   "name": "b_1EBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7884,
   "name": "b_1ECC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7889,
   "name": "b_1ED1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7905,
   "name": "b_1EE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7919,
   "name": "r_1EEF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 7920,
   "name": "b_1EF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 7943,
   "name": "b_1F07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8012,
   "name": "b_1F4C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8014,
   "name": "b_1F4E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8019,
   "name": "b_1F53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8086,
   "name": "b_1F96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8117,
   "name": "b_1FB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8148,
   "name": "b_1FD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8151,
   "name": "b_1FD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8192,
   "name": "j_2000",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8216,
   "name": "missile_launch_offset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8225,
   "name": "advance_clock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8228,
   "name": "b_2024",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8246,
   "name": "b_2036",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8249,
   "name": "r_2039",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8250,
   "name": "next_day",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8258,
   "name": "b_2042",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8307,
   "name": "r_2073",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8308,
   "name": "print_date",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8347,
   "name": "print_time",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8360,
   "name": "str_hrs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8367,
   "name": "month_days",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8380,
   "name": "month_names",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8428,
   "name": "fire_beam",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8460,
   "name": "b_210C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8465,
   "name": "r_2111",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8466,
   "name": "b_2112",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8505,
   "name": "b_2139",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8535,
   "name": "b_2157",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8565,
   "name": "b_2175",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8574,
   "name": "j_217E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 8584,
   "name": "r_2188",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8585,
   "name": "trace_beam",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8655,
   "name": "b_21CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8662,
   "name": "b_21D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8722,
   "name": "b_2212",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8735,
   "name": "b_221F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8738,
   "name": "beam_hit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8756,
   "name": "b_2234",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8772,
   "name": "b_2244",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8781,
   "name": "b_224D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8800,
   "name": "b_2260",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8805,
   "name": "b_2265",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8817,
   "name": "b_2271",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8825,
   "name": "draw_beam",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 8854,
   "name": "b_2296",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8872,
   "name": "b_22A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8892,
   "name": "b_22BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8899,
   "name": "r_22C3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 8900,
   "name": "b_22C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8988,
   "name": "b_231C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8991,
   "name": "j_231F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9046,
   "name": "b_2356",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9076,
   "name": "b_2374",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9114,
   "name": "b_239A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9139,
   "name": "j_23B3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9146,
   "name": "project_point",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9209,
   "name": "cockpit_beam_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9221,
   "name": "f_2405",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 9232,
   "name": "beam_patterns",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9236,
   "name": "beam_damage",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9241,
   "name": "joystick_flight",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9251,
   "name": "b_2423",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9260,
   "name": "joystick_speed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9270,
   "name": "b_2436",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9273,
   "name": "b_2439",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9294,
   "name": "b_244E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9303,
   "name": "b_2457",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9306,
   "name": "b_245A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9309,
   "name": "b_245D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9312,
   "name": "b_2460",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9333,
   "name": "b_2475",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9342,
   "name": "b_247E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9345,
   "name": "b_2481",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9348,
   "name": "joystick_steer",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9378,
   "name": "r_24A2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9379,
   "name": "joy_rates",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9395,
   "name": "sector_hazard",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9453,
   "name": "r_24ED",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9454,
   "name": "b_24EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9462,
   "name": "explode",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9478,
   "name": "b_2506",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9501,
   "name": "r_251D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9502,
   "name": "random_velocity",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9509,
   "name": "b_2525",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9523,
   "name": "b_2533",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9538,
   "name": "debris_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9539,
   "name": "navigation",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9618,
   "name": "b_2592",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9629,
   "name": "b_259D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9638,
   "name": "j_25A6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 9674,
   "name": "nav_menu",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9687,
   "name": "b_25D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9738,
   "name": "b_260A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9741,
   "name": "b_260D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9744,
   "name": "b_2610",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9747,
   "name": "b_2613",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9750,
   "name": "b_2616",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9753,
   "name": "nav_scan",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9758,
   "name": "b_261E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9774,
   "name": "b_262E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9780,
   "name": "nav_cockpit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9800,
   "name": "b_2648",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9805,
   "name": "move_cursor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9832,
   "name": "r_2668",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 9833,
   "name": "draw_chart_cursor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9871,
   "name": "b_268F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9876,
   "name": "nav_status",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 9905,
   "name": "load_nav_tiles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9920,
   "name": "nav_menu_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 9927,
   "name": "b_26C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9929,
   "name": "b_26C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 9939,
   "name": "str_switch_nav",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9969,
   "name": "nav_menu_items",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10018,
   "name": "nav_item_enabled",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10019,
   "name": "a_2723",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 10024,
   "name": "nav_helm",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 10036,
   "name": "b_2734",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10048,
   "name": "b_2740",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10114,
   "name": "b_2782",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10119,
   "name": "nav_chart",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 10139,
   "name": "b_279B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10145,
   "name": "b_27A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10161,
   "name": "b_27B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10180,
   "name": "b_27C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10192,
   "name": "b_27D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10198,
   "name": "nav_cursor_info",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10240,
   "name": "b_2800",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10266,
   "name": "b_281A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10276,
   "name": "b_2824",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10283,
   "name": "str_course_laid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10368,
   "name": "plot_course",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10374,
   "name": "b_2886",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10399,
   "name": "b_289F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10413,
   "name": "b_28AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10414,
   "name": "b_28AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10428,
   "name": "b_28BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10429,
   "name": "b_28BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10460,
   "name": "r_28DC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10461,
   "name": "draw_course",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10475,
   "name": "b_28EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10504,
   "name": "b_2908",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10510,
   "name": "r_290E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10511,
   "name": "helm_step_time",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10527,
   "name": "b_291F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10568,
   "name": "b_2948",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10570,
   "name": "b_294A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10588,
   "name": "b_295C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10608,
   "name": "b_2970",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10641,
   "name": "helm_encounter",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10654,
   "name": "b_299E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10667,
   "name": "b_29AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10679,
   "name": "b_29B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10695,
   "name": "b_29C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10697,
   "name": "r_29C9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10698,
   "name": "step_hours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10706,
   "name": "b_29D2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10708,
   "name": "b_29D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10727,
   "name": "b_29E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10736,
   "name": "b_29F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10739,
   "name": "str_under_attack",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10773,
   "name": "helm_hazard_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10785,
   "name": "b_2A21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10802,
   "name": "b_2A32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10815,
   "name": "b_2A3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10831,
   "name": "b_2A4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10834,
   "name": "r_2A52",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10835,
   "name": "daily_repair",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 10856,
   "name": "r_2A68",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 10857,
   "name": "nav_query",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 10952,
   "name": "b_2AC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10965,
   "name": "b_2AD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 10971,
   "name": "b_2ADB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11008,
   "name": "b_2B00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11011,
   "name": "j_2B03",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11062,
   "name": "b_2B36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11070,
   "name": "b_2B3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11078,
   "name": "b_2B46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11082,
   "name": "b_2B4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11099,
   "name": "b_2B5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11105,
   "name": "b_2B61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11138,
   "name": "b_2B82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11161,
   "name": "b_2B99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11164,
   "name": "b_2B9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11167,
   "name": "query_end_list",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11189,
   "name": "b_2BB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11200,
   "name": "query_name",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11221,
   "name": "b_2BD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11233,
   "name": "j_2BE1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 11249,
   "name": "str_none",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11271,
   "name": "f_2C07",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 11282,
   "name": "query_hazard_names",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11283,
   "name": "f_2C13",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 11294,
   "name": "encounter_roll",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11398,
   "name": "b_2C86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11402,
   "name": "pick_ship_with_chance",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11404,
   "name": "pick_ship",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11421,
   "name": "b_2C9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11429,
   "name": "b_2CA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11432,
   "name": "b_2CA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11462,
   "name": "b_2CC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11474,
   "name": "encounter_hostile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11490,
   "name": "b_2CE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11506,
   "name": "b_2CF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11518,
   "name": "b_2CFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11538,
   "name": "b_2D12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11546,
   "name": "r_2D1A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11547,
   "name": "b_2D1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11552,
   "name": "b_2D20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11556,
   "name": "ship_class_types",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11576,
   "name": "move_map_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11580,
   "name": "b_2D3C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11607,
   "name": "a_2D57",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 11608,
   "name": "a_2D58",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 11609,
   "name": "b_2D59",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11616,
   "name": "place_orbiting_objects",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 11618,
   "name": "b_2D62",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11636,
   "name": "b_2D74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11651,
   "name": "a_2D83",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 11652,
   "name": "a_2D84",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 11653,
   "name": "b_2D85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11657,
   "name": "motion_wander",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11691,
   "name": "b_2DAB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11704,
   "name": "r_2DB8",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11705,
   "name": "motion_none",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11706,
   "name": "motion_small_orbit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11730,
   "name": "b_2DD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11754,
   "name": "r_2DEA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 11755,
   "name": "motion_large_orbit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11783,
   "name": "f_2E07",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 11784,
   "name": "f_2E08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 11785,
   "name": "map_motion_routines",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11793,
   "name": "orbit_small",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11794,
   "name": "f_2E12",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 11825,
   "name": "orbit_large",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 11826,
   "name": "f_2E32",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 11889,
   "name": "back_to_cockpit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 11898,
   "name": "load_system_map",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11924,
   "name": "b_2E94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11936,
   "name": "str_system_file",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11937,
   "name": "a_2EA1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 11939,
   "name": "cargo_add",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11945,
   "name": "b_2EA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11955,
   "name": "b_2EB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11965,
   "name": "cargo_remove",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11968,
   "name": "b_2EC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11977,
   "name": "b_2EC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11983,
   "name": "cargo_jettison",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 11988,
   "name": "b_2ED4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 11995,
   "name": "cargo_count",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12001,
   "name": "b_2EE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12007,
   "name": "b_2EE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12020,
   "name": "r_2EF4",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12021,
   "name": "b_2EF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12023,
   "name": "print_disk_text_cf9c",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12035,
   "name": "pay_credits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12065,
   "name": "r_2F21",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12066,
   "name": "add_credits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12095,
   "name": "r_2F3F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12096,
   "name": "clear_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12149,
   "name": "sector_kind",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12182,
   "name": "a_2F96",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 12183,
   "name": "a_2F97",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 12188,
   "name": "draw_map_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12196,
   "name": "b_2FA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12254,
   "name": "b_2FDE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12259,
   "name": "b_2FE3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12266,
   "name": "b_2FEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12269,
   "name": "b_2FED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12300,
   "name": "b_300C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12307,
   "name": "in_chart_window",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12318,
   "name": "b_301E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12333,
   "name": "b_302D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12335,
   "name": "r_302F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12336,
   "name": "sector_entries",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12345,
   "name": "b_3039",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12371,
   "name": "b_3053",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12385,
   "name": "sector_entry_list",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12393,
   "name": "fill_chart_window",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12415,
   "name": "b_307F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12430,
   "name": "b_308E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12454,
   "name": "b_30A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12455,
   "name": "a_30A7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 12460,
   "name": "b_30AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12466,
   "name": "a_30B2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 12475,
   "name": "b_30BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12492,
   "name": "b_30CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12495,
   "name": "b_30CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12499,
   "name": "b_30D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12503,
   "name": "set_ship_heading",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12519,
   "name": "b_30E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12523,
   "name": "b_30EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12527,
   "name": "b_30EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12529,
   "name": "b_30F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12545,
   "name": "r_3101",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12546,
   "name": "update_cockpit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12564,
   "name": "draw_tac",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 12571,
   "name": "b_311B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12574,
   "name": "clear_tac",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12585,
   "name": "attack_lamp",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12587,
   "name": "b_312B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12605,
   "name": "b_313D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12612,
   "name": "b_3144",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12614,
   "name": "b_3146",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12621,
   "name": "threat_lamps",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12633,
   "name": "b_3159",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12666,
   "name": "b_317A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12703,
   "name": "threat_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12708,
   "name": "b_31A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12714,
   "name": "b_31AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12718,
   "name": "threat_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 12722,
   "name": "draw_speed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12740,
   "name": "b_31C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12743,
   "name": "b_31C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12764,
   "name": "b_31DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12779,
   "name": "b_31EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12796,
   "name": "b_31FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12812,
   "name": "b_320C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12838,
   "name": "b_3226",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12857,
   "name": "r_3239",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 12858,
   "name": "str_cruise_newton",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12864,
   "name": "draw_armour_bar",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12896,
   "name": "b_3260",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12922,
   "name": "b_327A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12945,
   "name": "b_3291",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12952,
   "name": "b_3298",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12956,
   "name": "draw_weapon",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 12981,
   "name": "b_32B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 12992,
   "name": "b_32C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13008,
   "name": "b_32D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13031,
   "name": "b_32E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13053,
   "name": "b_32FD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13063,
   "name": "b_3307",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13083,
   "name": "b_331B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13091,
   "name": "j_3323",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13155,
   "name": "weapon_chars",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13159,
   "name": "weapon_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 13163,
   "name": "f_336B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13167,
   "name": "tac_data",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 13194,
   "name": "b_338A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13226,
   "name": "b_33AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13237,
   "name": "tac_name",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13253,
   "name": "b_33C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13275,
   "name": "j_33DB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13289,
   "name": "r_33E9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13290,
   "name": "tac_label",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13304,
   "name": "tac_range",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13357,
   "name": "b_342D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13365,
   "name": "tac_tactic",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13404,
   "name": "r_345C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 13405,
   "name": "tac_armour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13440,
   "name": "tac_systems",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13500,
   "name": "tac_system_letter",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13515,
   "name": "b_34CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13526,
   "name": "b_34D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13528,
   "name": "b_34D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13541,
   "name": "str_30km",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13548,
   "name": "f_34EC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 13569,
   "name": "tac_picture",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 13576,
   "name": "b_3508",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13644,
   "name": "tac_draw_model",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13674,
   "name": "b_356A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13686,
   "name": "b_3576",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13695,
   "name": "j_357F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 13803,
   "name": "b_35EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13924,
   "name": "tac_model_record",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13930,
   "name": "tac_distance",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13931,
   "name": "a_366B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 13932,
   "name": "a_366C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 13933,
   "name": "print_ship_label",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13961,
   "name": "ship_ai",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 13981,
   "name": "b_369D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13985,
   "name": "b_36A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 13995,
   "name": "b_36AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14025,
   "name": "b_36C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14049,
   "name": "b_36E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14055,
   "name": "b_36E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14071,
   "name": "b_36F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14080,
   "name": "r_3700",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14081,
   "name": "ai_find_target",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14091,
   "name": "b_370B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14106,
   "name": "b_371A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14135,
   "name": "b_3737",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14137,
   "name": "ai_attitude",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14162,
   "name": "b_3752",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14171,
   "name": "b_375B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14174,
   "name": "r_375E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14175,
   "name": "ai_tactic",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14204,
   "name": "b_377C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14231,
   "name": "b_3797",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14240,
   "name": "b_37A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14244,
   "name": "j_37A4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14247,
   "name": "r_37A7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14248,
   "name": "ai_speed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14287,
   "name": "b_37CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14300,
   "name": "b_37DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14303,
   "name": "b_37DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14311,
   "name": "ai_closing_speed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14325,
   "name": "b_37F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14329,
   "name": "b_37F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14341,
   "name": "b_3805",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14343,
   "name": "r_3807",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14344,
   "name": "ai_tick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14345,
   "name": "ai_think_tick",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14346,
   "name": "ai_tactic_choices",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14353,
   "name": "ai_find_enemy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14363,
   "name": "b_381B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14401,
   "name": "b_3841",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14405,
   "name": "b_3845",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14414,
   "name": "b_384E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14457,
   "name": "r_3879",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14458,
   "name": "b_387A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14462,
   "name": "faction_attitude",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14489,
   "name": "b_3899",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14491,
   "name": "b_389B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14495,
   "name": "b_389F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14510,
   "name": "b_38AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14513,
   "name": "faction_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 14529,
   "name": "ai_fire",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 14575,
   "name": "b_38EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14609,
   "name": "b_3911",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14612,
   "name": "b_3914",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14616,
   "name": "b_3918",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14630,
   "name": "b_3926",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14633,
   "name": "r_3929",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14634,
   "name": "key_surrender",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14666,
   "name": "b_394A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14684,
   "name": "b_395C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14715,
   "name": "b_397B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14736,
   "name": "b_3990",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14743,
   "name": "b_3997",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14750,
   "name": "b_399E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14773,
   "name": "b_39B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14780,
   "name": "b_39BC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14815,
   "name": "b_39DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14822,
   "name": "b_39E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14846,
   "name": "b_39FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14853,
   "name": "j_3A05",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14858,
   "name": "b_3A0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14871,
   "name": "b_3A17",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14882,
   "name": "j_3A22",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 14893,
   "name": "merchant_surrender",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 14965,
   "name": "r_3A75",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 14966,
   "name": "b_3A76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14970,
   "name": "b_3A7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14985,
   "name": "b_3A89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 14990,
   "name": "b_3A8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15009,
   "name": "b_3AA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15053,
   "name": "b_3ACD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15064,
   "name": "b_3AD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15075,
   "name": "b_3AE3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15142,
   "name": "b_3B26",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15169,
   "name": "b_3B41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15183,
   "name": "b_3B4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15196,
   "name": "b_3B5C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15209,
   "name": "b_3B69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15229,
   "name": "b_3B7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15251,
   "name": "b_3B93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15257,
   "name": "j_3B99",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15265,
   "name": "ask_agree",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15307,
   "name": "str_quote_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15328,
   "name": "ai_fight_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15339,
   "name": "b_3BEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15394,
   "name": "b_3C22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15454,
   "name": "b_3C5E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15465,
   "name": "b_3C69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15476,
   "name": "b_3C74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15485,
   "name": "b_3C7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15493,
   "name": "b_3C85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15501,
   "name": "b_3C8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15504,
   "name": "change_standing",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15527,
   "name": "b_3CA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15530,
   "name": "r_3CAA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15531,
   "name": "ai_steer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15580,
   "name": "random_rates",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15598,
   "name": "r_3CEE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 15599,
   "name": "b_3CEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15630,
   "name": "b_3D0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15638,
   "name": "j_3D16",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15656,
   "name": "b_3D28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15662,
   "name": "b_3D2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15666,
   "name": "b_3D32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15694,
   "name": "j_3D4E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15713,
   "name": "random_rate",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15721,
   "name": "steer_toward",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 15795,
   "name": "b_3DB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15808,
   "name": "j_3DC0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 15885,
   "name": "random_label",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15901,
   "name": "random_label_char",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15913,
   "name": "b_3E29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15916,
   "name": "build_draw_list",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 15920,
   "name": "b_3E30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15935,
   "name": "b_3E3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15977,
   "name": "b_3E69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15981,
   "name": "b_3E6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 15993,
   "name": "b_3E79",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16002,
   "name": "a_3E82",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 16003,
   "name": "b_3E83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16021,
   "name": "b_3E95",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16031,
   "name": "b_3E9F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16054,
   "name": "r_3EB6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16055,
   "name": "draw_list_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16056,
   "name": "in_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16115,
   "name": "b_3EF3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16184,
   "name": "b_3F38",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16197,
   "name": "b_3F45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16199,
   "name": "b_3F47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16371,
   "name": "r_3FF3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 16372,
   "name": "sr_end_zeros",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25100,
   "name": "f_620C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25140,
   "name": "f_6234",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25180,
   "name": "f_625C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25310,
   "name": "f_62DE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25329,
   "name": "a_62F1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25350,
   "name": "f_6306",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25390,
   "name": "f_632E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25403,
   "name": "a_633B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25406,
   "name": "a_633E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25411,
   "name": "a_6343",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25412,
   "name": "a_6344",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25430,
   "name": "f_6356",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25443,
   "name": "a_6363",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25446,
   "name": "a_6366",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25451,
   "name": "a_636B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25452,
   "name": "a_636C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25470,
   "name": "f_637E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25483,
   "name": "a_638B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25510,
   "name": "f_63A6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25600,
   "name": "draw_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25734,
   "name": "b_6486",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25764,
   "name": "j_64A4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25852,
   "name": "b_64FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25859,
   "name": "b_6503",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25876,
   "name": "b_6514",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25879,
   "name": "r_6517",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25880,
   "name": "far_dot_colour",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25881,
   "name": "update_camera",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25887,
   "name": "b_651F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25967,
   "name": "b_656F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25983,
   "name": "j_657F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26032,
   "name": "set_view",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 26061,
   "name": "b_65CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26085,
   "name": "j_65E5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26099,
   "name": "place_camera",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26157,
   "name": "b_662D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26168,
   "name": "camera_offset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26206,
   "name": "view_names",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26207,
   "name": "f_665F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26212,
   "name": "str_cockpit_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26225,
   "name": "str_chase_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26236,
   "name": "str_cinematic_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26251,
   "name": "camera_pos",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26252,
   "name": "a_668C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26253,
   "name": "a_668D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26260,
   "name": "camera_orient",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26287,
   "name": "screen_size",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26313,
   "name": "r_66C9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26314,
   "name": "set_projection",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26460,
   "name": "log_hypot1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26483,
   "name": "project",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26574,
   "name": "b_67CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26598,
   "name": "b_67E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26624,
   "name": "j_6800",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26643,
   "name": "model_missile",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26654,
   "name": "model_missile_header",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26690,
   "name": "model_missile_tables",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26922,
   "name": "model_sunracer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26933,
   "name": "model_sunracer_header",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26969,
   "name": "model_sunracer_tables",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27315,
   "name": "check_collisions",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27324,
   "name": "b_6ABC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27348,
   "name": "b_6AD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27404,
   "name": "b_6B0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27410,
   "name": "b_6B12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27420,
   "name": "b_6B1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27426,
   "name": "on_contact",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27451,
   "name": "b_6B3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27473,
   "name": "b_6B51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27493,
   "name": "b_6B65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27500,
   "name": "collide",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27532,
   "name": "b_6B8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27549,
   "name": "b_6B9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27559,
   "name": "b_6BA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27562,
   "name": "hit_shard",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 27587,
   "name": "ram",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27605,
   "name": "b_6BD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27619,
   "name": "b_6BE3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27717,
   "name": "b_6C45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27732,
   "name": "gate_contact",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27773,
   "name": "r_6C7D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27774,
   "name": "missile_hit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27795,
   "name": "b_6C93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27798,
   "name": "b_6C96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27813,
   "name": "b_6CA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27822,
   "name": "b_6CAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27833,
   "name": "b_6CB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27845,
   "name": "hazard_hit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27854,
   "name": "b_6CCE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27894,
   "name": "contact_cooldown",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27911,
   "name": "r_6D07",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 27912,
   "name": "bounce",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27951,
   "name": "b_6D2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28113,
   "name": "s_6DD1",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 28164,
   "name": "reverse_velocity",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 28189,
   "name": "back_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28217,
   "name": "jolt_turn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28234,
   "name": "r_6E4A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28235,
   "name": "blow_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28259,
   "name": "b_6E63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28261,
   "name": "b_6E65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28291,
   "name": "b_6E83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28301,
   "name": "jolt_player",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 28320,
   "name": "damage",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 28354,
   "name": "r_6EC2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28355,
   "name": "b_6EC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28368,
   "name": "b_6ED0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28393,
   "name": "b_6EE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28401,
   "name": "b_6EF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28406,
   "name": "b_6EF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28427,
   "name": "b_6F0B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28440,
   "name": "b_6F18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28459,
   "name": "b_6F2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28484,
   "name": "b_6F44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28486,
   "name": "j_6F46",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28491,
   "name": "b_6F4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28504,
   "name": "b_6F58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28507,
   "name": "b_6F5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28552,
   "name": "shield_reduce",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28591,
   "name": "b_6FAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28597,
   "name": "b_6FB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28605,
   "name": "b_6FBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28607,
   "name": "b_6FBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28612,
   "name": "b_6FC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28614,
   "name": "r_6FC6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28615,
   "name": "random_system",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28626,
   "name": "b_6FD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28633,
   "name": "system_msgs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28634,
   "name": "f_6FDA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28645,
   "name": "str_system_hit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28723,
   "name": "dock_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28760,
   "name": "b_7058",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28770,
   "name": "facing_face",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28776,
   "name": "b_7068",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28786,
   "name": "b_7072",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28801,
   "name": "b_7081",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28814,
   "name": "b_708E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28816,
   "name": "r_7090",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 28817,
   "name": "b_7091",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28820,
   "name": "dock",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 28830,
   "name": "b_709E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28881,
   "name": "b_70D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28978,
   "name": "exit_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28979,
   "name": "a_7133",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 28980,
   "name": "gate_jump",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29000,
   "name": "b_7148",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29023,
   "name": "b_715F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29035,
   "name": "b_716B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29058,
   "name": "b_7182",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29061,
   "name": "b_7185",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29100,
   "name": "b_71AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29132,
   "name": "b_71CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29149,
   "name": "b_71DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29172,
   "name": "b_71F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29216,
   "name": "b_7220",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29251,
   "name": "j_7243",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29287,
   "name": "show_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29297,
   "name": "b_7271",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29300,
   "name": "j_7274",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29303,
   "name": "r_7277",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29304,
   "name": "wormhole_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29323,
   "name": "b_728B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29326,
   "name": "b_728E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29345,
   "name": "b_72A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29361,
   "name": "b_72B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29373,
   "name": "gate_dest",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29374,
   "name": "a_72BE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29375,
   "name": "a_72BF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29376,
   "name": "a_72C0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29377,
   "name": "wormhole_rings",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29393,
   "name": "b_72D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29407,
   "name": "b_72DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29439,
   "name": "b_72FF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29471,
   "name": "b_731F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29495,
   "name": "b_7337",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29536,
   "name": "r_7360",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29537,
   "name": "b_7361",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29549,
   "name": "b_736D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29596,
   "name": "b_739C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29626,
   "name": "b_73BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29649,
   "name": "b_73D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29655,
   "name": "b_73D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29671,
   "name": "ring_drift",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29697,
   "name": "b_7401",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29718,
   "name": "b_7416",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29722,
   "name": "b_741A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29740,
   "name": "make_wormhole",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29764,
   "name": "b_7444",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29778,
   "name": "b_7452",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29823,
   "name": "ring_type",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29840,
   "name": "r_7490",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29841,
   "name": "drift_signs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29843,
   "name": "f_7493",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29851,
   "name": "ring_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29852,
   "name": "a_749C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29853,
   "name": "a_749D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29854,
   "name": "a_749E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29855,
   "name": "a_749F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29856,
   "name": "a_74A0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29857,
   "name": "a_74A1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29858,
   "name": "a_74A2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29859,
   "name": "within_range",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29861,
   "name": "b_74A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29890,
   "name": "b_74C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29900,
   "name": "b_74CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29906,
   "name": "r_74D2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 29907,
   "name": "apply_thrust",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29911,
   "name": "b_74D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29919,
   "name": "b_74DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30015,
   "name": "r_753F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30016,
   "name": "cruise_thrust",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30133,
   "name": "b_75B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30152,
   "name": "forward_times",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30190,
   "name": "engine_damage",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30203,
   "name": "r_75FB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30204,
   "name": "move_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30206,
   "name": "b_75FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30256,
   "name": "b_7630",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30260,
   "name": "turn_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30264,
   "name": "b_7638",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30276,
   "name": "b_7644",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30290,
   "name": "b_7652",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30401,
   "name": "rate_to_radians",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30410,
   "name": "b_76CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30429,
   "name": "turn_ship",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30475,
   "name": "b_770B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30478,
   "name": "b_770E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30491,
   "name": "b_771B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30506,
   "name": "b_772A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30509,
   "name": "b_772D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30522,
   "name": "b_773A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30537,
   "name": "b_7749",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30540,
   "name": "b_774C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30553,
   "name": "b_7759",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30578,
   "name": "place_particles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30586,
   "name": "b_777A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30610,
   "name": "b_7792",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30613,
   "name": "b_7795",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30622,
   "name": "place_particle",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30654,
   "name": "b_77BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30741,
   "name": "b_7815",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30776,
   "name": "ahead_of_camera",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30834,
   "name": "last_ahead",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30843,
   "name": "gravity",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30847,
   "name": "b_787F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30887,
   "name": "b_78A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30941,
   "name": "b_78DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30947,
   "name": "b_78E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30956,
   "name": "gravity_pull",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31041,
   "name": "b_7941",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31047,
   "name": "bearing",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31101,
   "name": "a_797D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31119,
   "name": "draw_target_arrows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31127,
   "name": "b_7997",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31206,
   "name": "b_79E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31208,
   "name": "b_79E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31210,
   "name": "b_79EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31214,
   "name": "b_79EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31220,
   "name": "b_79F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31234,
   "name": "b_7A02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31236,
   "name": "b_7A04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31238,
   "name": "b_7A06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31242,
   "name": "b_7A0A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31248,
   "name": "b_7A10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31299,
   "name": "b_7A43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31343,
   "name": "arrow_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31373,
   "name": "b_7A8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31384,
   "name": "b_7A98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31395,
   "name": "b_7AA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31406,
   "name": "b_7AAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31417,
   "name": "b_7AB9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31428,
   "name": "b_7AC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31439,
   "name": "b_7ACF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31450,
   "name": "b_7ADA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31455,
   "name": "arrow_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31485,
   "name": "b_7AFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31496,
   "name": "b_7B08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31507,
   "name": "b_7B13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31518,
   "name": "b_7B1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31529,
   "name": "b_7B29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31540,
   "name": "b_7B34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31551,
   "name": "b_7B3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31562,
   "name": "b_7B4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31567,
   "name": "arrow_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31606,
   "name": "b_7B76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31612,
   "name": "b_7B7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31618,
   "name": "b_7B82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31629,
   "name": "b_7B8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31635,
   "name": "b_7B93",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31641,
   "name": "b_7B99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31652,
   "name": "b_7BA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31658,
   "name": "b_7BAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31664,
   "name": "b_7BB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31669,
   "name": "arrow_down",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31708,
   "name": "b_7BDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31716,
   "name": "b_7BE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31722,
   "name": "b_7BEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31733,
   "name": "b_7BF5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31741,
   "name": "b_7BFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31747,
   "name": "b_7C03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31758,
   "name": "b_7C0E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31766,
   "name": "b_7C16",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31772,
   "name": "b_7C1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31777,
   "name": "speed_of",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31826,
   "name": "slot_pos_ptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31841,
   "name": "draw_model",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31859,
   "name": "b_7C73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31877,
   "name": "b_7C85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31890,
   "name": "b_7C92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31899,
   "name": "prepare_model",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31921,
   "name": "b_7CB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31943,
   "name": "b_7CC7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31996,
   "name": "b_7CFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31999,
   "name": "b_7CFF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32044,
   "name": "b_7D2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32171,
   "name": "place_points",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32176,
   "name": "b_7DB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32225,
   "name": "j_7DE1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32249,
   "name": "b_7DF9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32257,
   "name": "j_7E01",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32282,
   "name": "b_7E1A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32307,
   "name": "j_7E33",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32346,
   "name": "b_7E5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32357,
   "name": "r_7E65",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32358,
   "name": "face_signs",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32388,
   "name": "b_7E84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32402,
   "name": "b_7E92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32413,
   "name": "b_7E9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32422,
   "name": "b_7EA6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32470,
   "name": "draw_polygons",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32474,
   "name": "b_7EDA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32491,
   "name": "b_7EEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32497,
   "name": "b_7EF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32500,
   "name": "b_7EF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32512,
   "name": "b_7F00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32519,
   "name": "b_7F07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32531,
   "name": "b_7F13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32548,
   "name": "b_7F24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32554,
   "name": "b_7F2A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32557,
   "name": "b_7F2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32566,
   "name": "draw_polygon",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32582,
   "name": "r_7F46",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32583,
   "name": "b_7F47",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32589,
   "name": "b_7F4D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32602,
   "name": "b_7F5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32609,
   "name": "b_7F61",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32622,
   "name": "point_ptr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32638,
   "name": "clip_polygon",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32645,
   "name": "b_7F85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32674,
   "name": "b_7FA2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32728,
   "name": "b_7FD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32739,
   "name": "clip_edges",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32752,
   "name": "b_7FF0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32784,
   "name": "b_8010",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32795,
   "name": "b_801B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32804,
   "name": "b_8024",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32815,
   "name": "b_802F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32816,
   "name": "b_8030",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32826,
   "name": "new_vertex",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32866,
   "name": "b_8062",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32869,
   "name": "j_8065",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32888,
   "name": "b_8078",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32908,
   "name": "count_in_front",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32917,
   "name": "b_8095",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32932,
   "name": "b_80A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32943,
   "name": "b_80AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32948,
   "name": "b_80B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32950,
   "name": "j_80B6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32955,
   "name": "b_80BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32999,
   "name": "plane_side",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33010,
   "name": "b_80F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33014,
   "name": "j_80F6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33092,
   "name": "b_8144",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33094,
   "name": "a_8146",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33098,
   "name": "r_814A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33099,
   "name": "intersect_neg",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33120,
   "name": "intersect_pos",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33132,
   "name": "intersect_core",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33416,
   "name": "fill_polygon",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33426,
   "name": "r_8292",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33427,
   "name": "b_8293",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33433,
   "name": "b_8299",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33446,
   "name": "b_82A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33469,
   "name": "b_82BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33527,
   "name": "clip_side",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33544,
   "name": "b_8308",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33568,
   "name": "a_8320",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33572,
   "name": "b_8324",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33579,
   "name": "b_832B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33603,
   "name": "a_8343",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33607,
   "name": "b_8347",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33636,
   "name": "b_8364",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33646,
   "name": "b_836E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33681,
   "name": "b_8391",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33697,
   "name": "b_83A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33711,
   "name": "j_83AF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33714,
   "name": "clip_point",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33761,
   "name": "b_83E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33899,
   "name": "j_846B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34037,
   "name": "close_polygon",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34062,
   "name": "scan_fill",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34077,
   "name": "b_851D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34087,
   "name": "b_8527",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34115,
   "name": "b_8543",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34124,
   "name": "b_854C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34129,
   "name": "b_8551",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34141,
   "name": "b_855D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34146,
   "name": "b_8562",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34159,
   "name": "b_856F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34178,
   "name": "b_8582",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34184,
   "name": "b_8588",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34196,
   "name": "left_edge",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34214,
   "name": "b_85A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34252,
   "name": "b_85CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34261,
   "name": "b_85D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34272,
   "name": "b_85E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34276,
   "name": "b_85E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34279,
   "name": "right_edge",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34298,
   "name": "b_85FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34336,
   "name": "b_8620",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34345,
   "name": "b_8629",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34356,
   "name": "b_8634",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34360,
   "name": "animate_chart",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34362,
   "name": "b_863A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34388,
   "name": "b_8654",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34392,
   "name": "draw_chart",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34437,
   "name": "j_8685",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34465,
   "name": "b_86A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34479,
   "name": "b_86AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34487,
   "name": "b_86B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34518,
   "name": "b_86D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34527,
   "name": "a_86DF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34534,
   "name": "a_86E6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34571,
   "name": "b_870B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34572,
   "name": "a_870C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34574,
   "name": "a_870E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34575,
   "name": "a_870F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34579,
   "name": "a_8713",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34588,
   "name": "a_871C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34613,
   "name": "b_8735",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34614,
   "name": "a_8736",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34616,
   "name": "a_8738",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34617,
   "name": "a_8739",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34633,
   "name": "b_8749",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34651,
   "name": "b_875B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34658,
   "name": "r_8762",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34659,
   "name": "chart_cell_index",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34681,
   "name": "draw_brackets",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34755,
   "name": "b_87C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34762,
   "name": "a_87CA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34769,
   "name": "a_87D1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34777,
   "name": "a_87D9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34778,
   "name": "a_87DA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34780,
   "name": "a_87DC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34781,
   "name": "a_87DD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34789,
   "name": "a_87E5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34790,
   "name": "a_87E6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34792,
   "name": "a_87E8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34793,
   "name": "a_87E9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34814,
   "name": "window_view",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34832,
   "name": "window_full",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34850,
   "name": "window_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34868,
   "name": "draw_disc",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34897,
   "name": "b_8851",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34959,
   "name": "b_888F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34965,
   "name": "b_8895",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34968,
   "name": "b_8898",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34971,
   "name": "j_889B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34979,
   "name": "b_88A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34985,
   "name": "b_88A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34995,
   "name": "b_88B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35005,
   "name": "b_88BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35013,
   "name": "b_88C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35015,
   "name": "b_88C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35029,
   "name": "b_88D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35043,
   "name": "r_88E3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35044,
   "name": "draw_ring",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35051,
   "name": "b_88EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35111,
   "name": "b_8927",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35119,
   "name": "b_892F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35125,
   "name": "b_8935",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35135,
   "name": "b_893F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35145,
   "name": "b_8949",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35153,
   "name": "b_8951",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35155,
   "name": "b_8953",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35177,
   "name": "b_8969",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35189,
   "name": "b_8975",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35227,
   "name": "s_899B",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 35279,
   "name": "draw_burst",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35293,
   "name": "b_89DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35295,
   "name": "b_89DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35328,
   "name": "b_8A00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35336,
   "name": "draw_annulus",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35368,
   "name": "r_8A28",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35369,
   "name": "draw_ragged",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35378,
   "name": "b_8A32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35444,
   "name": "b_8A74",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35450,
   "name": "b_8A7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35453,
   "name": "b_8A7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35478,
   "name": "j_8A96",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35486,
   "name": "b_8A9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35492,
   "name": "b_8AA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35502,
   "name": "b_8AAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35512,
   "name": "b_8AB8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35520,
   "name": "b_8AC0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35522,
   "name": "b_8AC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35570,
   "name": "b_8AF2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35579,
   "name": "b_8AFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35593,
   "name": "r_8B09",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35594,
   "name": "a_8B0A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35595,
   "name": "f_8B0B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 35611,
   "name": "draw_sparks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35620,
   "name": "spray_triangles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35628,
   "name": "b_8B2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35634,
   "name": "b_8B32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35642,
   "name": "spray_triangle",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35656,
   "name": "b_8B48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35672,
   "name": "b_8B58",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35763,
   "name": "b_8BB3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35813,
   "name": "j_8BE5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 35823,
   "name": "draw_flicker",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35831,
   "name": "b_8BF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35875,
   "name": "draw_bar",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35955,
   "name": "span_clipped",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35961,
   "name": "s_8C79",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 35962,
   "name": "a_8C7A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35974,
   "name": "a_8C86",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35977,
   "name": "b_8C89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35978,
   "name": "a_8C8A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35979,
   "name": "b_8C8B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35988,
   "name": "a_8C94",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35991,
   "name": "r_8C97",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35992,
   "name": "b_8C98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35994,
   "name": "b_8C9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35996,
   "name": "span",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35997,
   "name": "a_8C9D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 35998,
   "name": "a_8C9E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36002,
   "name": "a_8CA2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36003,
   "name": "a_8CA3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36011,
   "name": "a_8CAB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36012,
   "name": "a_8CAC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36052,
   "name": "a_8CD4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36053,
   "name": "a_8CD5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36062,
   "name": "a_8CDE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36063,
   "name": "a_8CDF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36071,
   "name": "a_8CE7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36072,
   "name": "a_8CE8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36096,
   "name": "b_8D00",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36097,
   "name": "a_8D01",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36098,
   "name": "a_8D02",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36101,
   "name": "a_8D05",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36102,
   "name": "a_8D06",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36106,
   "name": "a_8D0A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36107,
   "name": "a_8D0B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36109,
   "name": "a_8D0D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36110,
   "name": "a_8D0E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36116,
   "name": "a_8D14",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36117,
   "name": "b_8D15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36155,
   "name": "b_8D3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36158,
   "name": "b_8D3E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36186,
   "name": "a_8D5A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36190,
   "name": "a_8D5E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36191,
   "name": "a_8D5F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36200,
   "name": "b_8D68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36203,
   "name": "a_8D6B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36204,
   "name": "a_8D6C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36211,
   "name": "b_8D73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36212,
   "name": "a_8D74",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36321,
   "name": "b_8DE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36345,
   "name": "b_8DF9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36348,
   "name": "a_8DFC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36352,
   "name": "a_8E00",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36353,
   "name": "a_8E01",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36359,
   "name": "b_8E07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36362,
   "name": "a_8E0A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36363,
   "name": "a_8E0B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36369,
   "name": "f_8E11",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36371,
   "name": "f_8E13",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36373,
   "name": "f_8E15",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 36375,
   "name": "set_window",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36563,
   "name": "flip_buffers",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36581,
   "name": "b_8EE5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36587,
   "name": "flip_draw_buffer",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36598,
   "name": "show_bank3",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36634,
   "name": "show_bank1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36672,
   "name": "copy_to_bank1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36699,
   "name": "spark_pattern",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36712,
   "name": "b_8F68",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36724,
   "name": "spark_patterns_even",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36730,
   "name": "spark_patterns_odd",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36736,
   "name": "set_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36749,
   "name": "b_8F8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36754,
   "name": "b_8F92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36782,
   "name": "b_8FAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36785,
   "name": "b_8FB1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36797,
   "name": "set_flash_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36805,
   "name": "b_8FC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36809,
   "name": "colour_code",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36810,
   "name": "colour_cell_index",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36829,
   "name": "colour_cell_mask",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36861,
   "name": "colour_cell_value",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36866,
   "name": "a_9002",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 36893,
   "name": "fill_window",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 36905,
   "name": "b_9029",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36919,
   "name": "turn_by_rates",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36941,
   "name": "b_904D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36996,
   "name": "b_9084",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37012,
   "name": "turn_row_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37013,
   "name": "f_9095",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 37016,
   "name": "turn_pair",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37110,
   "name": "copy_identity",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37120,
   "name": "b_9100",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37128,
   "name": "vec_times_rows",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37158,
   "name": "b_9126",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37190,
   "name": "b_9146",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37193,
   "name": "b_9149",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37204,
   "name": "b_9154",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37216,
   "name": "mat_times_vec",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37246,
   "name": "b_917E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37276,
   "name": "b_919C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37296,
   "name": "mat_times_mat",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37310,
   "name": "b_91BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37321,
   "name": "b_91C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37332,
   "name": "b_91D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37367,
   "name": "b_91F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37370,
   "name": "mat_transpose",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 37376,
   "name": "b_9200",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37438,
   "name": "mat_orthonormal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37532,
   "name": "b_929C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37543,
   "name": "b_92A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37557,
   "name": "b_92B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37568,
   "name": "b_92C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37580,
   "name": "vec_sub_to_log",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37707,
   "name": "vec_log_to_lin",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37709,
   "name": "b_934D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37746,
   "name": "vec_lin_to_log",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37852,
   "name": "vec_cross",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38119,
   "name": "vec_dot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38193,
   "name": "vec_length",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38248,
   "name": "copy9_from_0DAB",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38256,
   "name": "copy9",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38304,
   "name": "vec_scale_signed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38373,
   "name": "vec_scale",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38436,
   "name": "vec_div_signed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38505,
   "name": "vec_normalise",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38508,
   "name": "vec_div",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38571,
   "name": "vec_add_log",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38573,
   "name": "b_96AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38622,
   "name": "vec_sub_log",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38624,
   "name": "b_96E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38673,
   "name": "vec_axpy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38687,
   "name": "b_971F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38745,
   "name": "vec_add_lin",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 38814,
   "name": "vec_sub_lin",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38883,
   "name": "vec_neg_lin",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 38952,
   "name": "vec_length_store",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38971,
   "name": "vec_angles",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39106,
   "name": "arcsin_units",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39149,
   "name": "arctan_log",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39172,
   "name": "b_9904",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39218,
   "name": "b_9932",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39235,
   "name": "r_9943",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39236,
   "name": "arcsin_rad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39252,
   "name": "arctan_rad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39268,
   "name": "arccos_units",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39287,
   "name": "arccos_rad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39290,
   "name": "r_997A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39297,
   "name": "arctan2_log",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39322,
   "name": "b_999A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39335,
   "name": "r_99A7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39336,
   "name": "units_to_radians",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 39343,
   "name": "a_99AF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39358,
   "name": "arctan_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 39390,
   "name": "menu",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39406,
   "name": "menu_choose",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39410,
   "name": "menu_select",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39422,
   "name": "j_99FE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 39454,
   "name": "b_9A1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39475,
   "name": "b_9A33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39480,
   "name": "b_9A38",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39488,
   "name": "b_9A40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39501,
   "name": "b_9A4D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39505,
   "name": "b_9A51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39522,
   "name": "menu_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39532,
   "name": "b_9A6C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39567,
   "name": "b_9A8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39582,
   "name": "b_9A9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39587,
   "name": "menu_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39594,
   "name": "b_9AAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39599,
   "name": "menu_blank",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39611,
   "name": "b_9ABB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39619,
   "name": "b_9AC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39644,
   "name": "print_message",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 39674,
   "name": "print_wrapped",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39686,
   "name": "b_9B06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39705,
   "name": "wrap_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39720,
   "name": "b_9B28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39725,
   "name": "b_9B2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39754,
   "name": "b_9B4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39763,
   "name": "b_9B53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39771,
   "name": "b_9B5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39772,
   "name": "b_9B5C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39781,
   "name": "b_9B65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39789,
   "name": "b_9B6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39791,
   "name": "b_9B6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39805,
   "name": "b_9B7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39812,
   "name": "wrap_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39813,
   "name": "text_length",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39828,
   "name": "b_9B94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39830,
   "name": "a_9B96",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39831,
   "name": "a_9B97",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39835,
   "name": "print_text",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39848,
   "name": "b_9BA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39851,
   "name": "a_9BAB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39852,
   "name": "a_9BAC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 39862,
   "name": "r_9BB6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39863,
   "name": "resolve_text",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39871,
   "name": "b_9BBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39881,
   "name": "r_9BC9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39882,
   "name": "b_9BCA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39895,
   "name": "b_9BD7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39916,
   "name": "b_9BEC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39927,
   "name": "b_9BF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39968,
   "name": "b_9C20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39977,
   "name": "b_9C29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39986,
   "name": "b_9C32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40002,
   "name": "b_9C42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40011,
   "name": "b_9C4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40022,
   "name": "b_9C56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40027,
   "name": "b_9C5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40056,
   "name": "b_9C78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40074,
   "name": "b_9C8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40079,
   "name": "b_9C8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40084,
   "name": "b_9C94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40090,
   "name": "b_9C9A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40098,
   "name": "b_9CA2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40112,
   "name": "text_block",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40113,
   "name": "a_9CB1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40114,
   "name": "a_9CB2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40115,
   "name": "a_9CB3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40116,
   "name": "a_9CB4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40118,
   "name": "read_text_block",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40139,
   "name": "b_9CCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40142,
   "name": "s_9CCE",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 40152,
   "name": "b_9CD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40160,
   "name": "decode_char",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40174,
   "name": "b_9CEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40193,
   "name": "b_9D01",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40201,
   "name": "b_9D09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40214,
   "name": "b_9D16",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40218,
   "name": "a_9D1A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40222,
   "name": "read_bit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40225,
   "name": "a_9D21",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40226,
   "name": "a_9D22",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40233,
   "name": "b_9D29",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40240,
   "name": "b_9D30",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40255,
   "name": "r_9D3F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40256,
   "name": "start_bits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40264,
   "name": "a_9D48",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40277,
   "name": "b_9D55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40285,
   "name": "bit_number",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40286,
   "name": "bit_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40294,
   "name": "huffman_tree",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40430,
   "name": "append_text",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40445,
   "name": "b_9DFD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40452,
   "name": "b_9E04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40454,
   "name": "b_9E06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40455,
   "name": "a_9E07",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40456,
   "name": "a_9E08",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40470,
   "name": "r_9E16",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40471,
   "name": "find_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40493,
   "name": "b_9E2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40504,
   "name": "b_9E38",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40511,
   "name": "r_9E3F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40512,
   "name": "s_9E40",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 40514,
   "name": "b_9E42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40523,
   "name": "r_9E4B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40524,
   "name": "select_window",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 40565,
   "name": "restore_cursor",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40579,
   "name": "save_cursor",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40592,
   "name": "saved_cursors",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40593,
   "name": "f_9E91",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40598,
   "name": "f_9E96",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40603,
   "name": "window_number",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40604,
   "name": "window_lines",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40611,
   "name": "f_9EA3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40618,
   "name": "f_9EAA",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40625,
   "name": "f_9EB1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40632,
   "name": "f_9EB8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 40639,
   "name": "print_number",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40649,
   "name": "b_9EC9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40679,
   "name": "b_9EE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40709,
   "name": "b_9F05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40737,
   "name": "b_9F21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40738,
   "name": "b_9F22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40756,
   "name": "b_9F34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40770,
   "name": "b_9F42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40780,
   "name": "b_9F4C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40790,
   "name": "print_signed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40806,
   "name": "b_9F66",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40826,
   "name": "split_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40831,
   "name": "b_9F7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40839,
   "name": "b_9F87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40847,
   "name": "invert_bar",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40876,
   "name": "b_9FAC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40883,
   "name": "a_9FB3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40892,
   "name": "a_9FBC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40908,
   "name": "b_9FCC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40909,
   "name": "a_9FCD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40912,
   "name": "b_9FD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40922,
   "name": "b_9FDA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40928,
   "name": "b_9FE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40947,
   "name": "dim_item",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40973,
   "name": "b_A00D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40980,
   "name": "a_A014",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 40989,
   "name": "a_A01D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41001,
   "name": "b_A029",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41004,
   "name": "a_A02C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41007,
   "name": "b_A02F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41031,
   "name": "print_char",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41063,
   "name": "b_A067",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41077,
   "name": "b_A075",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41082,
   "name": "b_A07A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41092,
   "name": "b_A084",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41102,
   "name": "b_A08E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41112,
   "name": "b_A098",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41116,
   "name": "j_A09C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41136,
   "name": "b_A0B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41140,
   "name": "b_A0B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41153,
   "name": "b_A0C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41209,
   "name": "b_A0F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41210,
   "name": "a_A0FA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41216,
   "name": "a_A100",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41225,
   "name": "a_A109",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41262,
   "name": "a_A12E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41264,
   "name": "a_A130",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41265,
   "name": "a_A131",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41271,
   "name": "a_A137",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41272,
   "name": "a_A138",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41279,
   "name": "a_A13F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41280,
   "name": "a_A140",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41281,
   "name": "b_A141",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41292,
   "name": "mirror_text_on",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41316,
   "name": "mirror_text_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41336,
   "name": "scroll_window",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41356,
   "name": "b_A18C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41386,
   "name": "b_A1AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41389,
   "name": "b_A1AD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41393,
   "name": "b_A1B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41405,
   "name": "s_A1BD",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 41412,
   "name": "j_A1C4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41417,
   "name": "a_A1C9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41424,
   "name": "a_A1D0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41432,
   "name": "a_A1D8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41441,
   "name": "a_A1E1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41445,
   "name": "a_A1E5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41455,
   "name": "b_A1EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41474,
   "name": "b_A202",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41488,
   "name": "j_A210",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 41498,
   "name": "b_A21A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41507,
   "name": "r_A223",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41508,
   "name": "clear_window",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41513,
   "name": "b_A229",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41535,
   "name": "r_A23F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41536,
   "name": "s_A240",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 41549,
   "name": "get_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41564,
   "name": "b_A25C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41565,
   "name": "r_A25D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41566,
   "name": "s_A25E",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 41579,
   "name": "b_A26B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41593,
   "name": "b_A279",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41597,
   "name": "random_word",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41604,
   "name": "b_A284",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41616,
   "name": "b_A290",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41624,
   "name": "random_upto",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41630,
   "name": "b_A29E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41637,
   "name": "b_A2A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41667,
   "name": "b_A2C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41669,
   "name": "random",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41692,
   "name": "random_seed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41700,
   "name": "b_A2E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41710,
   "name": "random_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41711,
   "name": "a_A2EF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41712,
   "name": "a_A2F0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41713,
   "name": "a_A2F1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41714,
   "name": "a_A2F2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41715,
   "name": "a_A2F3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41718,
   "name": "copy_memory",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41724,
   "name": "b_A2FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41738,
   "name": "b_A30A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41742,
   "name": "b_A30E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41750,
   "name": "r_A316",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41751,
   "name": "wait_ticks",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41758,
   "name": "b_A31E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41760,
   "name": "b_A320",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41762,
   "name": "b_A322",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41791,
   "name": "key_direction",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41808,
   "name": "b_A350",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41809,
   "name": "b_A351",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41815,
   "name": "b_A357",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41817,
   "name": "b_A359",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41835,
   "name": "b_A36B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41845,
   "name": "direction_keys",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41865,
   "name": "f_A389",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 41885,
   "name": "f_A39D",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 41905,
   "name": "joystick_eased",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41907,
   "name": "s_A3B3",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 41922,
   "name": "b_A3C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41927,
   "name": "b_A3C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41932,
   "name": "b_A3CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41937,
   "name": "b_A3D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41986,
   "name": "r_A402",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41987,
   "name": "ease_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41988,
   "name": "a_A404",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41989,
   "name": "a_A405",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 41990,
   "name": "joystick_direction",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42006,
   "name": "s_A416",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 42013,
   "name": "b_A41D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42020,
   "name": "b_A424",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42023,
   "name": "fire_pressed",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42032,
   "name": "r_A430",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42033,
   "name": "wait_key",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42038,
   "name": "b_A436",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42051,
   "name": "r_A443",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42052,
   "name": "wait_fire_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42060,
   "name": "read_joystick1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42070,
   "name": "read_joystick2",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42077,
   "name": "j_A45D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42086,
   "name": "b_A466",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42093,
   "name": "r_A46D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42094,
   "name": "r_A46E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42095,
   "name": "r_A46F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42096,
   "name": "frame_skip3",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42108,
   "name": "frame_skip5",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42120,
   "name": "draw_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42135,
   "name": "b_A497",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42138,
   "name": "station_run",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42207,
   "name": "b_A4DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42219,
   "name": "station_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48384,
   "name": "spb",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48385,
   "name": "spb_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48896,
   "name": "f_BF00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50144,
   "name": "f_C3E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50145,
   "name": "f_C3E1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50146,
   "name": "f_C3E2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50147,
   "name": "f_C3E3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50148,
   "name": "f_C3E4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50149,
   "name": "f_C3E5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50150,
   "name": "f_C3E6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50151,
   "name": "f_C3E7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50464,
   "name": "f_C520",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50465,
   "name": "f_C521",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50466,
   "name": "f_C522",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50467,
   "name": "f_C523",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50468,
   "name": "f_C524",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50469,
   "name": "f_C525",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50470,
   "name": "f_C526",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50471,
   "name": "f_C527",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50784,
   "name": "f_C660",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50785,
   "name": "f_C661",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50786,
   "name": "f_C662",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50787,
   "name": "f_C663",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50788,
   "name": "f_C664",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50789,
   "name": "f_C665",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50790,
   "name": "f_C666",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 50791,
   "name": "f_C667",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51104,
   "name": "f_C7A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51105,
   "name": "f_C7A1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51106,
   "name": "f_C7A2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51107,
   "name": "f_C7A3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51108,
   "name": "f_C7A4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51109,
   "name": "f_C7A5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51110,
   "name": "f_C7A6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51111,
   "name": "f_C7A7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51424,
   "name": "f_C8E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51425,
   "name": "f_C8E1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51426,
   "name": "f_C8E2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51427,
   "name": "f_C8E3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51428,
   "name": "f_C8E4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51429,
   "name": "f_C8E5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51430,
   "name": "f_C8E6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51431,
   "name": "f_C8E7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51744,
   "name": "f_CA20",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51745,
   "name": "f_CA21",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51746,
   "name": "f_CA22",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51747,
   "name": "f_CA23",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51748,
   "name": "f_CA24",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51749,
   "name": "f_CA25",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51750,
   "name": "f_CA26",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 51751,
   "name": "f_CA27",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52064,
   "name": "f_CB60",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52065,
   "name": "f_CB61",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52066,
   "name": "f_CB62",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52067,
   "name": "f_CB63",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52068,
   "name": "f_CB64",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52069,
   "name": "f_CB65",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52070,
   "name": "f_CB66",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52071,
   "name": "f_CB67",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52384,
   "name": "f_CCA0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52385,
   "name": "f_CCA1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52386,
   "name": "f_CCA2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52387,
   "name": "f_CCA3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52388,
   "name": "f_CCA4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52389,
   "name": "f_CCA5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52390,
   "name": "f_CCA6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52391,
   "name": "f_CCA7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52704,
   "name": "f_CDE0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52705,
   "name": "f_CDE1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52706,
   "name": "f_CDE2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52707,
   "name": "f_CDE3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52708,
   "name": "f_CDE4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52709,
   "name": "f_CDE5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52710,
   "name": "f_CDE6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 52711,
   "name": "f_CDE7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53024,
   "name": "f_CF20",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53025,
   "name": "f_CF21",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53026,
   "name": "f_CF22",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53027,
   "name": "f_CF23",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53028,
   "name": "f_CF24",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53029,
   "name": "f_CF25",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53030,
   "name": "f_CF26",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53031,
   "name": "f_CF27",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53344,
   "name": "f_D060",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53345,
   "name": "f_D061",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53346,
   "name": "f_D062",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53347,
   "name": "f_D063",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53348,
   "name": "f_D064",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53349,
   "name": "f_D065",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53350,
   "name": "f_D066",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53351,
   "name": "f_D067",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53664,
   "name": "f_D1A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53665,
   "name": "f_D1A1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53666,
   "name": "f_D1A2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53667,
   "name": "f_D1A3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53668,
   "name": "f_D1A4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53669,
   "name": "f_D1A5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53670,
   "name": "f_D1A6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53671,
   "name": "f_D1A7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53984,
   "name": "f_D2E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53985,
   "name": "f_D2E1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53986,
   "name": "f_D2E2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53987,
   "name": "f_D2E3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53988,
   "name": "f_D2E4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53989,
   "name": "f_D2E5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53990,
   "name": "f_D2E6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55025,
   "name": "f_D6F1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55026,
   "name": "f_D6F2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55027,
   "name": "f_D6F3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55028,
   "name": "f_D6F4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55029,
   "name": "f_D6F5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55030,
   "name": "f_D6F6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55031,
   "name": "f_D6F7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55344,
   "name": "f_D830",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55345,
   "name": "f_D831",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55346,
   "name": "f_D832",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55347,
   "name": "f_D833",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55348,
   "name": "f_D834",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55349,
   "name": "f_D835",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55350,
   "name": "f_D836",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55351,
   "name": "f_D837",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55552,
   "name": "f_D900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55664,
   "name": "f_D970",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55665,
   "name": "f_D971",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55666,
   "name": "f_D972",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55667,
   "name": "f_D973",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55668,
   "name": "f_D974",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55669,
   "name": "f_D975",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55670,
   "name": "f_D976",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55671,
   "name": "f_D977",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55808,
   "name": "f_DA00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55984,
   "name": "f_DAB0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55985,
   "name": "f_DAB1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55986,
   "name": "f_DAB2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55987,
   "name": "f_DAB3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55988,
   "name": "f_DAB4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55989,
   "name": "f_DAB5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55990,
   "name": "f_DAB6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55991,
   "name": "f_DAB7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56064,
   "name": "f_DB00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56304,
   "name": "f_DBF0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56305,
   "name": "f_DBF1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56306,
   "name": "f_DBF2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56307,
   "name": "f_DBF3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56308,
   "name": "f_DBF4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56309,
   "name": "f_DBF5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56310,
   "name": "f_DBF6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56311,
   "name": "f_DBF7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56624,
   "name": "f_DD30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56625,
   "name": "f_DD31",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56626,
   "name": "f_DD32",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56627,
   "name": "f_DD33",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56628,
   "name": "f_DD34",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56629,
   "name": "f_DD35",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56630,
   "name": "f_DD36",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57468,
   "name": "f_E07C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57508,
   "name": "f_E0A4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57548,
   "name": "f_E0CC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57588,
   "name": "f_E0F4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57628,
   "name": "f_E11C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57668,
   "name": "f_E144",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57708,
   "name": "f_E16C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57748,
   "name": "f_E194",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57788,
   "name": "f_E1BC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57828,
   "name": "f_E1E4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57853,
   "name": "f_E1FD",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57868,
   "name": "f_E20C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57893,
   "name": "f_E225",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57908,
   "name": "f_E234",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57948,
   "name": "f_E25C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58078,
   "name": "f_E2DE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58097,
   "name": "a_E2F1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58118,
   "name": "f_E306",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58158,
   "name": "f_E32E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58171,
   "name": "a_E33B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58174,
   "name": "a_E33E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58179,
   "name": "a_E343",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58180,
   "name": "a_E344",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58198,
   "name": "f_E356",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58211,
   "name": "a_E363",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58214,
   "name": "a_E366",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58219,
   "name": "a_E36B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58220,
   "name": "a_E36C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58238,
   "name": "f_E37E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 58251,
   "name": "a_E38B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 58278,
   "name": "f_E3A6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 60160,
   "name": "row_addr_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60161,
   "name": "row_addr_lo_up",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60233,
   "name": "row_addr_lo_view",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60360,
   "name": "screen_row_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60385,
   "name": "screen_row_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60416,
   "name": "row_addr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60417,
   "name": "row_addr_hi_up",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60489,
   "name": "row_addr_hi_view",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60616,
   "name": "div8",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60650,
   "name": "div8_view_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60689,
   "name": "div8_view_row",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 60936,
   "name": "x_byte_offsets",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60970,
   "name": "x_byte_offsets_view",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61256,
   "name": "left_masks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61290,
   "name": "left_masks_view",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61576,
   "name": "right_masks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61610,
   "name": "right_masks_view",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61896,
   "name": "colour_even",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61906,
   "name": "colour_odd",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61916,
   "name": "colour_clear",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61926,
   "name": "palette",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 61952,
   "name": "font",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62824,
   "name": "font_glyph_6D",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 62976,
   "name": "f_F600",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 62977,
   "name": "a_F601",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 63232,
   "name": "f_F700",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 63488,
   "name": "f_F800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 63744,
   "name": "f_F900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 63999,
   "name": "f_F9FF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64000,
   "name": "f_FA00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64054,
   "name": "f_FA36",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64088,
   "name": "f_FA58",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64264,
   "name": "f_FB08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64512,
   "name": "a_FC00",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64544,
   "name": "a_FC20",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64545,
   "name": "f_FC21",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64546,
   "name": "f_FC22",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64547,
   "name": "f_FC23",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64768,
   "name": "f_FD00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64769,
   "name": "a_FD01",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64770,
   "name": "a_FD02",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64771,
   "name": "a_FD03",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64772,
   "name": "a_FD04",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64773,
   "name": "a_FD05",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64774,
   "name": "a_FD06",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64775,
   "name": "a_FD07",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64776,
   "name": "a_FD08",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64777,
   "name": "a_FD09",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64778,
   "name": "a_FD0A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64779,
   "name": "a_FD0B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 64832,
   "name": "f_FD40",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64848,
   "name": "KERNAL_RAMTASj",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 64896,
   "name": "f_FD80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64897,
   "name": "f_FD81",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64898,
   "name": "f_FD82",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 64899,
   "name": "f_FD83",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65285,
   "name": "f_FF05",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65286,
   "name": "f_FF06",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65287,
   "name": "f_FF07",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65288,
   "name": "f_FF08",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65289,
   "name": "f_FF09",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65290,
   "name": "f_FF0A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65291,
   "name": "f_FF0B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65292,
   "name": "f_FF0C",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65293,
   "name": "f_FF0D",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 65328,
   "name": "a_FF30",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 65463,
   "name": "KERNAL_READST",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65466,
   "name": "KERNAL_SETLFS",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65469,
   "name": "KERNAL_SETNAM",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65472,
   "name": "KERNAL_OPEN",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65475,
   "name": "KERNAL_CLOSE",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65478,
   "name": "KERNAL_CHKIN",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65487,
   "name": "KERNAL_CHRIN",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65493,
   "name": "KERNAL_LOAD",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65496,
   "name": "KERNAL_SAVE",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65511,
   "name": "KERNAL_CLALL",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65530,
   "name": "cpu_vectors",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 0,
   "type": "line",
   "text": "The processor port's data direction register, left as the KERNAL set it"
  },
  {
   "address": 1,
   "type": "line",
   "text": "The processor port: $34-$36 in play (all RAM, or RAM with the I/O in for a moment); the interrupt saves it, banks the I/O in and puts it back"
  },
  {
   "address": 2,
   "type": "line",
   "text": "Set to $40 by setup_irq; nothing in the engine reads it back"
  },
  {
   "address": 3,
   "type": "line",
   "text": "Keys waiting in the keyboard buffer at $05"
  },
  {
   "address": 4,
   "type": "line",
   "text": "Room left in the keyboard buffer (clear_keybuf sets 2)"
  },
  {
   "address": 5,
   "type": "line",
   "text": "The keyboard buffer, oldest key first; get_key takes from here and moves the rest down"
  },
  {
   "address": 6,
   "type": "line",
   "text": "The keyboard buffer's second entry"
  },
  {
   "address": 15,
   "type": "line",
   "text": "keyscan's last key, for the auto-repeat"
  },
  {
   "address": 16,
   "type": "line",
   "text": "The key code held down, compared on each scan to time the repeat"
  },
  {
   "address": 17,
   "type": "line",
   "text": "Frames left before a held key repeats (30 for the first repeat)"
  },
  {
   "address": 18,
   "type": "line",
   "text": "The frames between later repeats (6)"
  },
  {
   "address": 19,
   "type": "line",
   "text": "Nonzero while CTRL is held (keyscan)"
  },
  {
   "address": 20,
   "type": "line",
   "text": "Nonzero while the left SHIFT is held"
  },
  {
   "address": 21,
   "type": "line",
   "text": "Nonzero while the right SHIFT is held"
  },
  {
   "address": 22,
   "type": "line",
   "text": "Frames counted by the raster interrupt, held at 255; frame_skip restarts it at 1 and draw_frame reads it"
  },
  {
   "address": 23,
   "type": "line",
   "text": "The screen-matrix nybble mask set_colour chooses; span keeps the other nybble of each cell it colours"
  },
  {
   "address": 24,
   "type": "line",
   "text": "The screen-matrix nybble value set_colour chooses, ORed into each cell a span covers"
  },
  {
   "address": 25,
   "type": "line",
   "text": "Pointer to a screen-matrix cell (print_char, draw_chart) or to a destination pixel row (scroll_window)"
  },
  {
   "address": 26,
   "type": "line",
   "text": "High byte of the cell pointer at $19"
  },
  {
   "address": 27,
   "type": "line",
   "text": "The same cell in the other buffer's screen matrix when text is mirrored (scroll_window's second destination)"
  },
  {
   "address": 28,
   "type": "line",
   "text": "High byte of the second cell pointer"
  },
  {
   "address": 29,
   "type": "line",
   "text": "The sound's mask: $FF normally, 0 while the disk is in use (open_for_io, close_after_io). sound_step ANDs every frequency it writes for an effect with it, and the speed the engine hum's pitch comes from, so with 0 the voices fall silent; the gate writes are not masked"
  },
  {
   "address": 30,
   "type": "line",
   "text": "The engine hum: $FF on, 0 off (in navigation, in a base, during loads and at the end)"
  },
  {
   "address": 31,
   "type": "line",
   "text": "The waveform of the effect on each of the three voices ($1F-$21)"
  },
  {
   "address": 34,
   "type": "line",
   "text": "Each voice's effect length in frames ($22-$24), copied to the timer on each repeat"
  },
  {
   "address": 37,
   "type": "line",
   "text": "Each voice's gate-off point ($25-$27): the timer value at which the gate is released"
  },
  {
   "address": 40,
   "type": "line",
   "text": "Each voice's effect frames left ($28-$2A); 0 once its effect is over, or for a moment before the next repeat starts. While voice 1's is 0, sound_step plays the engine hum on that voice"
  },
  {
   "address": 43,
   "type": "line",
   "text": "Each voice's repeats left ($2B-$2D)"
  },
  {
   "address": 46,
   "type": "line",
   "text": "The main loop's lag in frames: frame_skip takes 3 (or 5) off, draw_frame adds what drawing took; 3 or more skips a drawing pass"
  },
  {
   "address": 56,
   "type": "line",
   "text": "Pointer into the bitmap being drawn: a pixel row from EXTERN's tables, high byte EORed with $3A"
  },
  {
   "address": 57,
   "type": "line",
   "text": "High byte of the bitmap pointer at $38"
  },
  {
   "address": 58,
   "type": "line",
   "text": "Bit 7 picks the buffer drawing goes to: clear for $C000 (bank 3), set for $4000 (bank 1); EORed into bitmap addresses"
  },
  {
   "address": 59,
   "type": "line",
   "text": "The byte the 3D view is cleared with (from set_colour's colour 1)"
  },
  {
   "address": 61,
   "type": "line",
   "text": "The fill pattern for even pixel rows (set_colour, spark_pattern)"
  },
  {
   "address": 62,
   "type": "line",
   "text": "The fill pattern for odd pixel rows"
  },
  {
   "address": 65,
   "type": "line",
   "text": "The drawing window's width in pixels, less one (set by window_view, window_full and the TAC)"
  },
  {
   "address": 66,
   "type": "line",
   "text": "The drawing window's height in pixel rows, less one"
  },
  {
   "address": 67,
   "type": "line",
   "text": "The window's width (set_window: $41 + 1), the right limit for clipping"
  },
  {
   "address": 68,
   "type": "line",
   "text": "The window's height ($42 + 1)"
  },
  {
   "address": 69,
   "type": "line",
   "text": "The left x of a span (low byte) for span and fill_window"
  },
  {
   "address": 70,
   "type": "line",
   "text": "High byte of the span's left x"
  },
  {
   "address": 71,
   "type": "line",
   "text": "span_clipped's left x, low byte"
  },
  {
   "address": 72,
   "type": "line",
   "text": "span_clipped's left x, high byte"
  },
  {
   "address": 73,
   "type": "line",
   "text": "span_clipped's right x, low byte"
  },
  {
   "address": 74,
   "type": "line",
   "text": "span_clipped's right x, high byte"
  },
  {
   "address": 75,
   "type": "line",
   "text": "span_clipped's row, low byte (rows counted from the bottom)"
  },
  {
   "address": 76,
   "type": "line",
   "text": "span_clipped's row, high byte"
  },
  {
   "address": 77,
   "type": "line",
   "text": "The object's size on screen, from in_view ($0D8C), for the draw routines of discs, sparks and far dots"
  },
  {
   "address": 79,
   "type": "line",
   "text": "The text cursor's column (print_char)"
  },
  {
   "address": 80,
   "type": "line",
   "text": "The text cursor's pixel row, counted from the bottom; a text line is 9 rows"
  },
  {
   "address": 81,
   "type": "line",
   "text": "A projected point's screen x (project), low byte"
  },
  {
   "address": 82,
   "type": "line",
   "text": "The projected x, high byte"
  },
  {
   "address": 83,
   "type": "line",
   "text": "A projected point's screen y, low byte"
  },
  {
   "address": 84,
   "type": "line",
   "text": "The projected y, high byte"
  },
  {
   "address": 85,
   "type": "line",
   "text": "Vertex counts in the polygon clipper and the beam drawer"
  },
  {
   "address": 86,
   "type": "line",
   "text": "The window's horizontal centre (set_window: half the width), added to projected x"
  },
  {
   "address": 87,
   "type": "line",
   "text": "The window's vertical centre, added to projected y"
  },
  {
   "address": 88,
   "type": "line",
   "text": "Pointer to the camera's position (set_view: the player's $065D, or camera_pos)"
  },
  {
   "address": 89,
   "type": "line",
   "text": "High byte of the camera position pointer"
  },
  {
   "address": 90,
   "type": "line",
   "text": "Pointer to the camera's orientation (the player's $044B, or camera_orient)"
  },
  {
   "address": 91,
   "type": "line",
   "text": "High byte of the camera orientation pointer"
  },
  {
   "address": 92,
   "type": "line",
   "text": "The slot of the object being drawn (draw_object), which dock_check compares with $0837"
  },
  {
   "address": 93,
   "type": "line",
   "text": "The type of the object being drawn"
  },
  {
   "address": 94,
   "type": "line",
   "text": "Counts main-loop passes (and the gate's 256 passes); its low bits pace the animations"
  },
  {
   "address": 95,
   "type": "line",
   "text": "The number accumulator, low byte: a log's fraction, or a linear number's fraction (the maths routines' A register)"
  },
  {
   "address": 96,
   "type": "line",
   "text": "The accumulator's middle byte: a log's whole part, or a linear number's low whole byte"
  },
  {
   "address": 97,
   "type": "line",
   "text": "The accumulator's top byte: the sign of a log-form number, or a linear number's high byte"
  },
  {
   "address": 98,
   "type": "line",
   "text": "The second operand's log fraction for log_add and log_sub"
  },
  {
   "address": 99,
   "type": "line",
   "text": "The second operand's log whole part"
  },
  {
   "address": 100,
   "type": "line",
   "text": "The second operand's sign"
  },
  {
   "address": 101,
   "type": "line",
   "text": "vec_axpy's multiplier s ($65-$67), and project's scratch"
  },
  {
   "address": 102,
   "type": "line",
   "text": "The second byte of the multiplier at $65"
  },
  {
   "address": 103,
   "type": "line",
   "text": "The third byte of the multiplier at $65"
  },
  {
   "address": 104,
   "type": "line",
   "text": "The clipping plane point for intersect_core ($68-$6A)"
  },
  {
   "address": 105,
   "type": "line",
   "text": "The second byte of the plane point at $68"
  },
  {
   "address": 106,
   "type": "line",
   "text": "The third byte of the plane point at $68"
  },
  {
   "address": 107,
   "type": "line",
   "text": "A 9-byte scratch vector ($6B-$73): cross products, edge vectors, new rings, particle centres"
  },
  {
   "address": 108,
   "type": "line",
   "text": "The scratch vector's x, low whole byte (ring_drift adds to it)"
  },
  {
   "address": 109,
   "type": "line",
   "text": "The scratch vector's x, high byte"
  },
  {
   "address": 110,
   "type": "line",
   "text": "The scratch vector's y, fraction byte"
  },
  {
   "address": 111,
   "type": "line",
   "text": "The scratch vector's y, low whole byte"
  },
  {
   "address": 112,
   "type": "line",
   "text": "The scratch vector's y, high byte"
  },
  {
   "address": 113,
   "type": "line",
   "text": "The scratch vector's z, fraction byte"
  },
  {
   "address": 114,
   "type": "line",
   "text": "The scratch vector's z, low whole byte (the wormhole's rings are spaced along it)"
  },
  {
   "address": 115,
   "type": "line",
   "text": "The scratch vector's z, high byte"
  },
  {
   "address": 116,
   "type": "line",
   "text": "The first source pointer for the vector routines (and the text routines' text pointer)"
  },
  {
   "address": 117,
   "type": "line",
   "text": "High byte of the first source pointer"
  },
  {
   "address": 118,
   "type": "line",
   "text": "The second source pointer for the vector routines"
  },
  {
   "address": 119,
   "type": "line",
   "text": "High byte of the second source pointer"
  },
  {
   "address": 120,
   "type": "line",
   "text": "The destination pointer for the vector routines (also a menu's flag list)"
  },
  {
   "address": 121,
   "type": "line",
   "text": "High byte of the destination pointer; 0 tells menu that there are no flags"
  },
  {
   "address": 122,
   "type": "line",
   "text": "A model's header address (the model prologue stores it), or a menu's item list; elsewhere a vector pointer kept aside: explode's position, bounce's difference vector ($6C45), mat_orthonormal's matrix"
  },
  {
   "address": 123,
   "type": "line",
   "text": "High byte of the model or menu pointer"
  },
  {
   "address": 124,
   "type": "line",
   "text": "The TAC display: 0 the data page, nonzero the target's picture (key_tac_mode)"
  },
  {
   "address": 128,
   "type": "line",
   "text": "Scratch: copy and decode pointers, counters, the text drawer's bitmap pointer"
  },
  {
   "address": 129,
   "type": "line",
   "text": "Scratch, often the high byte of a pointer at $80"
  },
  {
   "address": 130,
   "type": "line",
   "text": "Scratch: a second pointer (resolve_text's number, set_window's bottom row)"
  },
  {
   "address": 131,
   "type": "line",
   "text": "Scratch, the high byte of the pointer at $82"
  },
  {
   "address": 132,
   "type": "line",
   "text": "Scratch: counts (copy_memory's bytes, window widths, vertex counts)"
  },
  {
   "address": 133,
   "type": "line",
   "text": "Scratch: copy_memory's pages, digits, chart row counts"
  },
  {
   "address": 134,
   "type": "line",
   "text": "Scratch: which clipping plane (negative for y = -4z), chart rows"
  },
  {
   "address": 135,
   "type": "line",
   "text": "Scratch: room left on a text line, chart rows, digits"
  },
  {
   "address": 136,
   "type": "line",
   "text": "Scratch: digits, edge-walk counters"
  },
  {
   "address": 137,
   "type": "line",
   "text": "Scratch: whether a nonzero digit has been printed, edge-walk counters"
  },
  {
   "address": 138,
   "type": "line",
   "text": "Scratch: a menu's width, a slot being worked on"
  },
  {
   "address": 139,
   "type": "line",
   "text": "Scratch: a menu's item count, flags for the first particle and the arrowheads"
  },
  {
   "address": 140,
   "type": "line",
   "text": "Scratch: a menu's chosen item; free_slot's last targeting ship"
  },
  {
   "address": 141,
   "type": "line",
   "text": "Scratch: scan-fill and model-loading state"
  },
  {
   "address": 142,
   "type": "line",
   "text": "Scratch: the menu's first row, scan-fill state"
  },
  {
   "address": 143,
   "type": "line",
   "text": "Scratch: counters (menu items, bar blinks)"
  },
  {
   "address": 144,
   "type": "line",
   "text": "Scratch: menu line index; the first of the bytes swap_kernal_zp exchanges ($90-$C4)"
  },
  {
   "address": 145,
   "type": "line",
   "text": "Scratch for scan_fill's right edge and the AI score"
  },
  {
   "address": 146,
   "type": "line",
   "text": "Scratch for scan_fill's right edge"
  },
  {
   "address": 148,
   "type": "line",
   "text": "Scratch, mostly a slot number being worked on (or the model header's copy)"
  },
  {
   "address": 149,
   "type": "line",
   "text": "Scratch, a second slot number; a 9-byte angle vector from here in turn_objects"
  },
  {
   "address": 150,
   "type": "line",
   "text": "Scratch: radii, gravity strength, ring limits"
  },
  {
   "address": 151,
   "type": "line",
   "text": "Scratch, the high byte of the word at $96"
  },
  {
   "address": 152,
   "type": "line",
   "text": "Scratch: radii, ring limits"
  },
  {
   "address": 153,
   "type": "line",
   "text": "Scratch, the high byte of the word at $98"
  },
  {
   "address": 154,
   "type": "line",
   "text": "In the model drawer, the copy of the header's first byte (0 until the model is prepared); elsewhere scratch"
  },
  {
   "address": 155,
   "type": "line",
   "text": "The model's number of points; elsewhere scratch"
  },
  {
   "address": 156,
   "type": "line",
   "text": "The model's number of reference points; elsewhere scratch"
  },
  {
   "address": 157,
   "type": "line",
   "text": "The model's number of normals; elsewhere scratch"
  },
  {
   "address": 158,
   "type": "line",
   "text": "The model's number of polygons; elsewhere scratch (an attacker's slot in damage)"
  },
  {
   "address": 159,
   "type": "line",
   "text": "The model's number of axis vectors; elsewhere scratch (the victim's slot in damage)"
  },
  {
   "address": 160,
   "type": "line",
   "text": "Pointer to the model's reference point list; elsewhere scratch (damage's shield mode)"
  },
  {
   "address": 161,
   "type": "line",
   "text": "Scratch: high byte of the reference list pointer, or the damage being done"
  },
  {
   "address": 162,
   "type": "line",
   "text": "Pointer to the model's axis index list (negative to subtract); elsewhere scratch"
  },
  {
   "address": 163,
   "type": "line",
   "text": "High byte of the axis index pointer, or random_system's system number"
  },
  {
   "address": 164,
   "type": "line",
   "text": "Pointer to the model's axis vectors; elsewhere random_system's bit"
  },
  {
   "address": 165,
   "type": "line",
   "text": "High byte of the axis vector pointer, or the shield strengths"
  },
  {
   "address": 166,
   "type": "line",
   "text": "Pointer to each point's parent (negative for the model's position)"
  },
  {
   "address": 168,
   "type": "line",
   "text": "Pointer to the reference points, linear (filled at preparation); elsewhere scratch: a slot (age_objects, blow_up, fire_beam, trace_beam), a HELM step's hours (step_hours, helm_step_time) and the count of names in a QUERY list (nav_query, query_name, query_end_list)"
  },
  {
   "address": 169,
   "type": "line",
   "text": "High byte of the reference points pointer; elsewhere scratch: blow_up's victim, fire_beam's beam power, the day a HELM step started (helm_step_time) and QUERY's entry index (nav_query)"
  },
  {
   "address": 170,
   "type": "line",
   "text": "Pointer to the normals (made at preparation); elsewhere scratch: blow_up's damage, trace_beam's slot index, the hours left in a HELM step (helm_step_time) and helm_encounter's 20-tick wait"
  },
  {
   "address": 171,
   "type": "line",
   "text": "High byte of the normals pointer; in HELM, set to stop the trip when the player presses a key, or fire after an encounter (helm_step_time, helm_encounter); the station's status_pages keep their menu column here"
  },
  {
   "address": 172,
   "type": "line",
   "text": "Pointer to the reference point for each normal; elsewhere trace_beam's count of its 50 steps, and the station's status_pages keep their menu row here"
  },
  {
   "address": 174,
   "type": "line",
   "text": "Pointer to each polygon's sorting plane for the painter's order"
  },
  {
   "address": 176,
   "type": "line",
   "text": "Pointer to the normal of each polygon"
  },
  {
   "address": 178,
   "type": "line",
   "text": "Pointer to each polygon's back colour; elsewhere the first slot in a collision, and the slot that fires in beam_hit and draw_beam"
  },
  {
   "address": 179,
   "type": "line",
   "text": "High byte of the back colour pointer; elsewhere the collision's second slot, the beam's target slot (beam_hit, draw_beam), and in nav_helm the step's x and y offsets ANDed, nonzero for a diagonal step, which it passes to helm_step_time"
  },
  {
   "address": 180,
   "type": "line",
   "text": "Pointer to each polygon's front colour; elsewhere the beam's power (beam_hit, draw_beam), and in nav_helm helm_step_time's result, nonzero to stop the trip"
  },
  {
   "address": 181,
   "type": "line",
   "text": "High byte of the front colour pointer; elsewhere draw_beam's x distance from the shooter's point on screen ($FD00) to the target's, low byte"
  },
  {
   "address": 182,
   "type": "line",
   "text": "Pointer to the polygons' vertex lists; elsewhere draw_beam's x distance, high byte"
  },
  {
   "address": 183,
   "type": "line",
   "text": "High byte of the vertex lists pointer; elsewhere ram's damage and draw_beam's y distance, low byte"
  },
  {
   "address": 184,
   "type": "line",
   "text": "Pointer to the polygons' vertex counts; elsewhere the first type in a collision, and draw_beam's y distance, high byte"
  },
  {
   "address": 185,
   "type": "line",
   "text": "High byte of the vertex counts pointer, or the collision's second type"
  },
  {
   "address": 186,
   "type": "line",
   "text": "Pointer to the face groups' normal lists (facing_face)"
  },
  {
   "address": 188,
   "type": "line",
   "text": "Pointer to the face groups' sizes, zero-ended; elsewhere scratch: frame_update's new ship's type and a slot counter, enter_sector's run count as it fills its type list"
  },
  {
   "address": 189,
   "type": "line",
   "text": "High byte of the group sizes pointer; elsewhere the AI's fire flag, load_slot_models' slot counter, enter_sector's place in the entry list and draw_chart_cursor's blink counter"
  },
  {
   "address": 198,
   "type": "line",
   "text": "The first slot of a collision pair; the chart cursor's x in navigation; enter_sector's type list from here (21 bytes); ai_speed's target slot"
  },
  {
   "address": 199,
   "type": "line",
   "text": "The second slot of a collision pair; the chart cursor's y; ai_speed's tactic speed"
  },
  {
   "address": 200,
   "type": "line",
   "text": "The first ship's radius in check_collisions; in navigation nonzero once the ship has moved; ai_speed's target speed"
  },
  {
   "address": 201,
   "type": "line",
   "text": "High byte of the first ship's radius"
  },
  {
   "address": 202,
   "type": "line",
   "text": "enter_sector's object type list, fifth byte"
  },
  {
   "address": 203,
   "type": "line",
   "text": "enter_sector's object type list, sixth byte"
  },
  {
   "address": 204,
   "type": "line",
   "text": "enter_sector's object type list, seventh byte"
  },
  {
   "address": 208,
   "type": "line",
   "text": "The AI's distance to its target, log form ($D0/$D1, from bearing)"
  },
  {
   "address": 209,
   "type": "line",
   "text": "The distance's whole part"
  },
  {
   "address": 210,
   "type": "line",
   "text": "The dot product of the target's direction with the ship's axis ($D2-$D4)"
  },
  {
   "address": 211,
   "type": "line",
   "text": "The dot product's whole part"
  },
  {
   "address": 212,
   "type": "line",
   "text": "The dot product's sign"
  },
  {
   "address": 213,
   "type": "line",
   "text": "The ship slot the AI is thinking for"
  },
  {
   "address": 788,
   "type": "line",
   "text": "The KERNAL's IRQ vector, pointed at irq_body ($0EA5) so the interrupt works while the KERNAL is banked in for a load"
  },
  {
   "address": 789,
   "type": "line",
   "text": "High byte of the IRQ vector"
  },
  {
   "address": 790,
   "type": "line",
   "text": "The KERNAL's BRK vector, pointed at an RTI ($0E9F)"
  },
  {
   "address": 791,
   "type": "line",
   "text": "High byte of the BRK vector"
  },
  {
   "address": 792,
   "type": "line",
   "text": "The KERNAL's NMI vector, pointed at an RTI ($0E9E), so RESTORE does nothing"
  },
  {
   "address": 793,
   "type": "line",
   "text": "High byte of the NMI vector"
  },
  {
   "address": 1024,
   "type": "line",
   "text": "SR's first instruction, the address the intro jumps to after loading SR: a jump to the start-up at $0DE7"
  },
  {
   "address": 1027,
   "type": "line",
   "text": "For each ship slot 0-5: 1 when it holds a missile (fill_slot, from type flag bit 5). The saved game, SAVED, is $0403-$0801"
  },
  {
   "address": 1033,
   "type": "line",
   "text": "For each ship slot 0-5, the systems knocked out: bit 0 launcher, 1 laser, 2 engine, 3 aft shield, 4 fore shield, 5 ECM"
  },
  {
   "address": 1039,
   "type": "line",
   "text": "For each ship slot 0-5, the collision cooldown in passes (contact_cooldown sets 2, dock 8, enter_sector $40)"
  },
  {
   "address": 1045,
   "type": "line",
   "text": "For each ship slot 0-5, the set speed, signed, in the game's speed units (16 to a unit of movement a pass); the player's is the CF readout"
  },
  {
   "address": 1051,
   "type": "line",
   "text": "For each ship slot 0-5, the AI state: 0 none, 1 cruising, 3 a missile, $FE fighting, $FF fleeing"
  },
  {
   "address": 1057,
   "type": "line",
   "text": "For each ship slot 0-5, a 3-character label (3 bytes each, random_label), printed on the TAC"
  },
  {
   "address": 1058,
   "type": "line",
   "text": "The label's second character"
  },
  {
   "address": 1059,
   "type": "line",
   "text": "The label's third character"
  },
  {
   "address": 1075,
   "type": "line",
   "text": "For each ship slot 0-5, the faction (from the type's $0C1E), or for a missile the slot that launched it"
  },
  {
   "address": 1081,
   "type": "line",
   "text": "For each ship slot 0-5, the last ship that attacked it ($FF none), which it may turn on"
  },
  {
   "address": 1087,
   "type": "line",
   "text": "For each ship slot 0-5, the AI tactic (0 cruise, 2 pursue, 7 flee and others; names at $0CAE)"
  },
  {
   "address": 1093,
   "type": "line",
   "text": "For each ship slot 0-5, its target slot ($FF none); the player's is the TAC's"
  },
  {
   "address": 1099,
   "type": "line",
   "text": "The orientations of slots 0-6, 27 bytes each (offsets at $083C): three rows of three log-form numbers, the third row pointing to the rear"
  },
  {
   "address": 1288,
   "type": "line",
   "text": "The pitch rate of slots 0-6, signed, in 1024ths of a turn a pass for the player, a count of steps for the others"
  },
  {
   "address": 1295,
   "type": "line",
   "text": "The roll rate of slots 0-6"
  },
  {
   "address": 1302,
   "type": "line",
   "text": "The turn rate of slots 0-6"
  },
  {
   "address": 1309,
   "type": "line",
   "text": "Each slot's armour (hit points), a signed word ($051D + 2 * slot); a missile's or explosion's counts its life down"
  },
  {
   "address": 1310,
   "type": "line",
   "text": "High byte of the armour word"
  },
  {
   "address": 1349,
   "type": "line",
   "text": "Each slot's velocity, 9 bytes (three 24-bit linear components, offsets at $0846): the movement each pass"
  },
  {
   "address": 1350,
   "type": "line",
   "text": "The velocity's x, low whole byte"
  },
  {
   "address": 1351,
   "type": "line",
   "text": "The velocity's x, high byte"
  },
  {
   "address": 1352,
   "type": "line",
   "text": "The velocity's y, fraction byte (jolt_player randomises it)"
  },
  {
   "address": 1355,
   "type": "line",
   "text": "The velocity's z, fraction byte"
  },
  {
   "address": 1529,
   "type": "line",
   "text": "Nonzero for each of the 20 slots in use"
  },
  {
   "address": 1549,
   "type": "line",
   "text": "The object type in each of the 20 slots"
  },
  {
   "address": 1569,
   "type": "line",
   "text": "Each slot's on-screen value, cleared every frame by build_draw_list and set by in_view for an object in view"
  },
  {
   "address": 1589,
   "type": "line",
   "text": "Nonzero for a slot whose type has a radius ($0A1D), so it can collide and be hit"
  },
  {
   "address": 1609,
   "type": "line",
   "text": "Nonzero for a slot that is drawn (the player's own ship is not, in the cockpit)"
  },
  {
   "address": 1629,
   "type": "line",
   "text": "Each slot's position, 9 bytes (three 24-bit linear coordinates, 16.8, offsets at $0846)"
  },
  {
   "address": 1635,
   "type": "line",
   "text": "The player's z, fraction byte (wormhole_step moves it)"
  },
  {
   "address": 1636,
   "type": "line",
   "text": "The player's z, low whole byte"
  },
  {
   "address": 1637,
   "type": "line",
   "text": "The player's z, high byte"
  },
  {
   "address": 1638,
   "type": "line",
   "text": "Slots 1-19's positions, 9 bytes each after slot 0's (the player's): slot n at $065D + 9 × n, written as the objects move"
  },
  {
   "address": 1809,
   "type": "line",
   "text": "The player's name, 12 bytes (from \"What is your name?\", copied by init_game)"
  },
  {
   "address": 1821,
   "type": "line",
   "text": "The system the ship is in (0-7, or 9 for the Manchi system), the digit of its map file Qn"
  },
  {
   "address": 1822,
   "type": "line",
   "text": "The ship's sector across the 32 by 32 chart"
  },
  {
   "address": 1823,
   "type": "line",
   "text": "The ship's sector down the chart"
  },
  {
   "address": 1824,
   "type": "line",
   "text": "The clock's hours, 0-23"
  },
  {
   "address": 1825,
   "type": "line",
   "text": "The day of the month"
  },
  {
   "address": 1826,
   "type": "line",
   "text": "The month, 1-12"
  },
  {
   "address": 1827,
   "type": "line",
   "text": "The year, 0-99 (the game starts on 01 MAR 12)"
  },
  {
   "address": 1828,
   "type": "line",
   "text": "Days since the start, a word ($0724/$0725), which turns the orbits"
  },
  {
   "address": 1829,
   "type": "line",
   "text": "High byte of the days elapsed"
  },
  {
   "address": 1830,
   "type": "line",
   "text": "The bounty on the player, a word ($0726/$0727): Hunters attack while it is nonzero"
  },
  {
   "address": 1831,
   "type": "line",
   "text": "High byte of the bounty"
  },
  {
   "address": 1832,
   "type": "line",
   "text": "The player's credits, a word ($0728/$0729)"
  },
  {
   "address": 1833,
   "type": "line",
   "text": "High byte of the credits"
  },
  {
   "address": 1834,
   "type": "line",
   "text": "The player's rank (repute), which raises the ship's rank value ($0C79) and the REPUTE word"
  },
  {
   "address": 1835,
   "type": "line",
   "text": "Points toward the next rank, from kills and surrenders"
  },
  {
   "address": 1836,
   "type": "line",
   "text": "The chart destination's sector across ($FF for none)"
  },
  {
   "address": 1837,
   "type": "line",
   "text": "The chart destination's sector down"
  },
  {
   "address": 1838,
   "type": "line",
   "text": "The player's standing with factions 0-2 ($072E-$0730), -2 to 2; faction_attitude reads $072E + faction, so for the Manchi (faction 3) it reads $0731, the beam's $FE: hostile"
  },
  {
   "address": 1841,
   "type": "line",
   "text": "The count read for weapon $0CFE at $0731 + weapon: $FE here for the beam, which never runs out, then the missiles carried, SM-1 (type 9) at $0732, Nova (type 10) at $0733 and plasma torpedoes (type 11) at $0734; faction_attitude reads the same $FE as the player's standing with the Manchi (faction 3), hostile, and change_standing ($3C90) leaves faction 3 alone"
  },
  {
   "address": 1842,
   "type": "line",
   "text": "SM-1 missiles carried (type 9); a launch reads $0732 + type - 9"
  },
  {
   "address": 1843,
   "type": "line",
   "text": "Nova missiles carried (type 10)"
  },
  {
   "address": 1844,
   "type": "line",
   "text": "Plasma torpedoes carried (type 11)"
  },
  {
   "address": 1845,
   "type": "line",
   "text": "The player's ship as fitted, 6 bytes copied into the type-0 tables: armour word, ECM, systems, beam, shields"
  },
  {
   "address": 1846,
   "type": "line",
   "text": "The ship's armour, high byte"
  },
  {
   "address": 1847,
   "type": "line",
   "text": "The ship's ECM: the percentage chance, 25, 50 or 75 (0 for none), that a missile fired at it swerves away (type 0's $0C2B)"
  },
  {
   "address": 1848,
   "type": "line",
   "text": "The ship's systems bits (type 0's $0C45)"
  },
  {
   "address": 1849,
   "type": "line",
   "text": "The ship's beam (type 0's $0C52)"
  },
  {
   "address": 1850,
   "type": "line",
   "text": "The ship's shields, two nybbles (type 0's $0C6C)"
  },
  {
   "address": 1851,
   "type": "line",
   "text": "The engine's thrust, a log word ($073B/$073C), from which frame_update makes the player's thrust: times 8 / (8 + cargo slots in use)"
  },
  {
   "address": 1852,
   "type": "line",
   "text": "The engine thrust's whole part"
  },
  {
   "address": 1853,
   "type": "line",
   "text": "The items owned start here, a byte each for items 0-20 ($073D-$0751, TALK's variable class 1, their names the disk texts $CE89-$CE9D): 0-4 the ship's equipment, 5-20 things carried. Item 0, the stealth box, lets ships pass rather than attack about a third of the time (encounter_hostile)"
  },
  {
   "address": 1854,
   "type": "line",
   "text": "Item 1, the beam lock: with it automatic beam fire can be switched on (key L)"
  },
  {
   "address": 1855,
   "type": "line",
   "text": "Item 2, the turbo thruster, sold once by an outfitter (buy_special), which adds 1 to the engine thrust's whole part ($073C)"
  },
  {
   "address": 1856,
   "type": "line",
   "text": "Item 3, the repair droid: damage repairs itself a little each day (daily_repair). Once it is owned, Chi-Sha (script 13) is no longer found at her base (base_setup)"
  },
  {
   "address": 1857,
   "type": "line",
   "text": "Item 4, the null damper: it stops the wormhole wearing the armour down (wormhole_step)"
  },
  {
   "address": 1858,
   "type": "line",
   "text": "Item 5, the key card, the first of the things carried (items 5-20, listed by status_person): it opens a locked door whose map entry's extra byte is 0 (use_card)"
  },
  {
   "address": 1859,
   "type": "line",
   "text": "Item 6, the Manchi egg; owning it lets rumour 9 out (base_setup)"
  },
  {
   "address": 1869,
   "type": "line",
   "text": "Item 16, the pilot's license, which the outfitter asks to see before selling a laser or shields"
  },
  {
   "address": 1870,
   "type": "line",
   "text": "Item 17, the forged cargo papers: a base checks the hold one time in eight with them instead of one in two ($A63A)"
  },
  {
   "address": 1871,
   "type": "line",
   "text": "Item 18, the amoebic lenses, which let the player pick up the transmutation coil (act_coil)"
  },
  {
   "address": 1874,
   "type": "line",
   "text": "A byte per item from here, 1 while the item still lies where a base map puts it; picking it up (act_item) takes it to 0, and base_setup then leaves it off the map"
  },
  {
   "address": 1894,
   "type": "line",
   "text": "The byte before the cargo hold, so the hold can be counted from its top slot ($0766 + $0777)"
  },
  {
   "address": 1895,
   "type": "line",
   "text": "The kind of cargo in each hold slot ($0767-$076E), $FF for empty"
  },
  {
   "address": 1903,
   "type": "line",
   "text": "What was paid for each hold slot's cargo, the price's low byte ($076F-$0776): 0 for cargo a surrendering merchant gave up; only the base's ONBOARD page reads it (SEG1, $AD34)"
  },
  {
   "address": 1911,
   "type": "line",
   "text": "How many hold slots the ship has"
  },
  {
   "address": 1912,
   "type": "line",
   "text": "The map file name of the base in the current sector, three characters ($0778-$077A) such as \"L51\", from the system map (base_file_from_map); docking loads it, and arrival_message and base_setup test its digits"
  },
  {
   "address": 1913,
   "type": "line",
   "text": "The base file name's second character, the system's digit, which arrival_message and base_setup test: '6' for Sigure, Trochal's system, and '5' for Bassruti's"
  },
  {
   "address": 1914,
   "type": "line",
   "text": "The base file name's third character, the base's number in its system"
  },
  {
   "address": 1916,
   "type": "line",
   "text": "The system's danger level, from its map ($5612): the chance of encounters"
  },
  {
   "address": 1917,
   "type": "line",
   "text": "The system's five ship class weights ($077D-$0781), for pick_ship"
  },
  {
   "address": 1922,
   "type": "line",
   "text": "The number of sector entries of type $64 and up (hazards) in the current sector"
  },
  {
   "address": 1923,
   "type": "line",
   "text": "Set when the player's fire hits a base; read on docking ($A5B1 in SEG1); cleared when the day changes"
  },
  {
   "address": 1924,
   "type": "line",
   "text": "The ten rumours' states, a byte each ($0784-$078D): 2 not yet out, 1 or 0 ready to be told (release_rumour takes 2 to 1), $FF told; the bartender counts each one down as it is told (pick_rumour). Their texts are disk texts $CF35 on"
  },
  {
   "address": 1934,
   "type": "line",
   "text": "The 32 plot flags ($078E-$07AD, TALK's variable class 2), set and tested by the talk scripts: flag 0 lets rumour 5 out, 2 rumour 2 and takes the Duchess off her base, 3 rumour 3, 5 rumour 4 and puts Trochal on alert, 8 ends the talk with a trip to Ja-Karn ($E7E2); 12-14 are also read in flight ($079A-$079C)"
  },
  {
   "address": 1946,
   "type": "line",
   "text": "Plot flag 12: a count of type-6 ships destroyed while $079C is set (kill_reward)"
  },
  {
   "address": 1947,
   "type": "line",
   "text": "Plot flag 13, which the merchant surrender sets and tests"
  },
  {
   "address": 1948,
   "type": "line",
   "text": "Plot flag 14, the flag that makes kill_reward count type-6 kills"
  },
  {
   "address": 1966,
   "type": "line",
   "text": "Daily lists ($07AE-$07BB), cleared when the day changes"
  },
  {
   "address": 1980,
   "type": "line",
   "text": "The file names the loader is given, zero-ended: TITLE, INIT, MAIN, SPB, EXTERN, FONT, WON, @0:SAVED (saving over SAVED), SEG0, SEG1, SEG1A, END, PIT.PAC, NAV.PAC, LAND.PAC, H.PAC, NAV.TIL, LAND.TIL, TALK"
  },
  {
   "address": 2048,
   "type": "line",
   "text": "file_names from the middle of PIT.PAC on, where a page boundary cuts the table: \".PAC\", then NAV.PAC, LAND.PAC, H.PAC, NAV.TIL, LAND.TIL and TALK"
  },
  {
   "address": 2098,
   "type": "line",
   "text": "Set once a surrender or a merchant's offer has happened in this encounter; cleared for each sector"
  },
  {
   "address": 2099,
   "type": "line",
   "text": "Set once the target's hail has been printed (target_status); cleared for each sector"
  },
  {
   "address": 2100,
   "type": "line",
   "text": "Set once the gravity warning has been printed; cleared for each sector and HELM step"
  },
  {
   "address": 2101,
   "type": "line",
   "text": "What last hit the player, for the death text: an object type, or negative for a beam"
  },
  {
   "address": 2102,
   "type": "line",
   "text": "Passes until the next missile can be fired ($7E after a launch)"
  },
  {
   "address": 2103,
   "type": "line",
   "text": "The object the player touched in the cockpit view, for dock_check ($FF none)"
  },
  {
   "address": 2104,
   "type": "line",
   "text": "Set while the wormhole is flown: do_key then takes only the first 25 commands"
  },
  {
   "address": 2106,
   "type": "line",
   "text": "Set when a drink at the bar gets the player drunk (bartender, one time in ten): the player then staggers one step in ten and the bartender serves no more. Cleared on entering a base (station_run)"
  },
  {
   "address": 2107,
   "type": "line",
   "text": "The base's alarm (raise_alarm), 0 for none: $A0 an alarm plate or a locked door, $A1 a safe, 1 Bassruti's monsters, 2 and 4 from a talk script, 3 Trochal's guards. Cleared on entering a base, with $083A"
  },
  {
   "address": 2108,
   "type": "line",
   "text": "The offset of each of slots 0-6 in the 27-byte orientation blocks ($044B)"
  },
  {
   "address": 2118,
   "type": "line",
   "text": "The offset of each of the 20 slots in the 9-byte position and velocity blocks ($065D, $0545)"
  },
  {
   "address": 2158,
   "type": "line",
   "text": "Scratch for the polygon clipper: the planes' tests and new vertices"
  },
  {
   "address": 2206,
   "type": "line",
   "text": "The sign of a projected beam end's z (project_point): negative in front of the viewer"
  },
  {
   "address": 2215,
   "type": "line",
   "text": "The sign of the target's z in the ship's frame, for draw_target_arrows: negative ahead"
  },
  {
   "address": 2225,
   "type": "line",
   "text": "The talk's own four flags ($08B1-$08B4, TALK's variable class 0), cleared as each talk starts; flag 0 is set when the player is short of the credits a script asks for ($E797)"
  },
  {
   "address": 2229,
   "type": "line",
   "text": "The picture of each of the 32 scripts' people as a visitor, a byte each ($08B5-$08D4), negative for one who never visits (base_setup picks a random one with a picture); class 0's indexes 4 and up"
  },
  {
   "address": 2261,
   "type": "line",
   "text": "The 35 object types' flags: bit 0 a base, 1 gravity, 2 a particle, 3 a limited life, 4 moves, 5 a missile, 6 a hazard, 7 a 3D model"
  },
  {
   "address": 2296,
   "type": "line",
   "text": "Each type's draw routine or model address, a word (0 until the model is loaded)"
  },
  {
   "address": 2297,
   "type": "line",
   "text": "type_draw's high bytes, read at $08F9 + 2 * type"
  },
  {
   "address": 2366,
   "type": "line",
   "text": "Each type's model number, an entry in the model names at $0961 ($FF for none): MSC, PSC, ICR, MCR, PCR, TIT, SCO, FRE, HUN, PLA, CAR, OUT, STA, GAT"
  },
  {
   "address": 2401,
   "type": "line",
   "text": "The 14 model file names, four bytes each with the zero: MSC, PSC, ICR, MCR, PCR, TIT, SCO, FRE, HUN, PLA, CAR, OUT, STA, GAT"
  },
  {
   "address": 2457,
   "type": "line",
   "text": "Each type's draw data word, passed to its draw routine in ($76)"
  },
  {
   "address": 2458,
   "type": "line",
   "text": "type_drawdata's high bytes, read at $099A + 2 * type"
  },
  {
   "address": 2527,
   "type": "line",
   "text": "The bytes type_drawdata points at: one byte each for the torpedo and the particle, star and ring types ($09DF-$09ED); four tables of ten colour codes for the PLA model's faces from $09EE (in this snapshot the gas giant draws with the first, the planetoid and the station with the third); and at $0A16 four bytes for type 10's missile"
  },
  {
   "address": 2589,
   "type": "line",
   "text": "Each type's radius, a word: 3 for the small fighters, 11 for the larger ships, 60 for a starbase, 1024 for a gas giant"
  },
  {
   "address": 2590,
   "type": "line",
   "text": "High byte of the radius word"
  },
  {
   "address": 2651,
   "type": "line",
   "text": "The radius word of type $1F, the wormhole's ring, used to test the ship is inside one"
  },
  {
   "address": 2652,
   "type": "line",
   "text": "High byte of the ring's radius"
  },
  {
   "address": 2659,
   "type": "line",
   "text": "Each type's drawing scale, a log word, also the gravity strength"
  },
  {
   "address": 2660,
   "type": "line",
   "text": "type_scale's whole parts, read at $0A64 + 2 * type"
  },
  {
   "address": 2729,
   "type": "line",
   "text": "Each type's starting armour, a word ($0AA9 + 2 * type)"
  },
  {
   "address": 2730,
   "type": "line",
   "text": "type_armour's high bytes, read at $0AAA + 2 * type"
  },
  {
   "address": 2799,
   "type": "line",
   "text": "Each type's damage on contact (missiles 100, 250, 75; planets, stars and the black hole 255); for ships, zero for those that count as threats"
  },
  {
   "address": 2834,
   "type": "line",
   "text": "Pointers to the names of types 0-21 (\"<Sunracer>\", \"Wasp\" ... \"Black Hole\")"
  },
  {
   "address": 2835,
   "type": "line",
   "text": "type_names' high bytes, read at $0B13 + 2 * type"
  },
  {
   "address": 2878,
   "type": "line",
   "text": "The type names the pointers at $0B12 lead to, zero-ended: <Sunracer>, Wasp, Dart, Cruiser, Vulture, Corsair, Titan, Scow, Tanker, Hunter, Planetoid, Terrestrial Planet, Gas Giant, Station, Carrier, Outpost, Starbase, Malir Gate, Black Hole; types 9-11, the missiles, point at the empty string at $0BE1"
  },
  {
   "address": 3042,
   "type": "line",
   "text": "Each type's turning step, a log word in 1024ths of a turn (types 0-16)"
  },
  {
   "address": 3043,
   "type": "line",
   "text": "The turning step's whole part"
  },
  {
   "address": 3076,
   "type": "line",
   "text": "Each type's thrust, a log word (types 0-12); the player's is recomputed from the engine and the cargo"
  },
  {
   "address": 3077,
   "type": "line",
   "text": "The thrust's whole part (gate_jump doubles the player's for the jump)"
  },
  {
   "address": 3102,
   "type": "line",
   "text": "Each ship type's faction, copied to $0433"
  },
  {
   "address": 3115,
   "type": "line",
   "text": "Each ship type's ECM: the percentage chance that a missile fired at it swerves away (tactic 4) instead of pursuing, tested against a random number from 0 to 100 while the ship's ECM ($0409 bit 5 clear) works"
  },
  {
   "address": 3128,
   "type": "line",
   "text": "Each ship type's own fighting tactic"
  },
  {
   "address": 3141,
   "type": "line",
   "text": "Each ship type's systems, the bits $0409 knocks out"
  },
  {
   "address": 3154,
   "type": "line",
   "text": "Each ship type's beam (0 for none)"
  },
  {
   "address": 3167,
   "type": "line",
   "text": "Each ship type's missile kind, plus 8 its missile type"
  },
  {
   "address": 3180,
   "type": "line",
   "text": "Each ship type's shields: fore in the high nybble, aft in the low, each step halving damage"
  },
  {
   "address": 3193,
   "type": "line",
   "text": "Each ship type's rank value, which also sets its reward"
  },
  {
   "address": 3206,
   "type": "line",
   "text": "Each tactic's steering mode: negative none, 0 toward the target, 1 away, 2 its heading, 3 random"
  },
  {
   "address": 3216,
   "type": "line",
   "text": "Each tactic's angle offset in 1024ths of a turn, which steer_toward takes off the size of the first angle so that the target is kept that far off the nose: 127 (about 45 degrees) for follow and flee, 63 (22) for close, 192 (67.5) for circle, 255 (90) for elude"
  },
  {
   "address": 3226,
   "type": "line",
   "text": "Each tactic's speed"
  },
  {
   "address": 3236,
   "type": "line",
   "text": "Each tactic's speed rule: negative the target's speed, 1 the average, 2 by distance, 0 the tactic's own"
  },
  {
   "address": 3246,
   "type": "line",
   "text": "The ten tactics' names, eight bytes each and zero-padded, printed by the TAC: cruise, follow, pursue, close, swerve, stand, circle, flee, elude, ram"
  },
  {
   "address": 3326,
   "type": "line",
   "text": "The weapon selected: 0 the beam, 1-3 missiles of type 9, 10 and 11"
  },
  {
   "address": 3327,
   "type": "line",
   "text": "Nonzero for automatic beam fire"
  },
  {
   "address": 3328,
   "type": "line",
   "text": "The beam's heat, counted down every 16 passes; each step halves the player's beam damage"
  },
  {
   "address": 3329,
   "type": "line",
   "text": "The direction the speed keys or joystick last pushed: 1, $FF or 0"
  },
  {
   "address": 3330,
   "type": "line",
   "text": "0 for cruise flight, nonzero for Newtonian (CTRL-E)"
  },
  {
   "address": 3331,
   "type": "line",
   "text": "Nonzero while the joystick was used last (a key clears it), so steering reads the stick"
  },
  {
   "address": 3332,
   "type": "line",
   "text": "The ship types of the last encounter ($0D04-$0D06, $FF none), which enter_sector creates"
  },
  {
   "address": 3333,
   "type": "line",
   "text": "The encounter's second ship type"
  },
  {
   "address": 3334,
   "type": "line",
   "text": "The encounter's third ship type"
  },
  {
   "address": 3335,
   "type": "line",
   "text": "The number of ships near that have no target; HELM is refused while any are"
  },
  {
   "address": 3336,
   "type": "line",
   "text": "One byte per cargo kind: negative for the kinds that spoil, which helm_hazard_check turns into kind $14, spoiled cargo"
  },
  {
   "address": 3360,
   "type": "line",
   "text": "The current text window's left column"
  },
  {
   "address": 3361,
   "type": "line",
   "text": "The current text window's right column"
  },
  {
   "address": 3362,
   "type": "line",
   "text": "The current text window's top pixel row"
  },
  {
   "address": 3363,
   "type": "line",
   "text": "The current text window's bottom pixel row"
  },
  {
   "address": 3364,
   "type": "line",
   "text": "The current window's lines to a page"
  },
  {
   "address": 3365,
   "type": "line",
   "text": "$FF for reversed text, 0 for plain, EORed into each glyph byte"
  },
  {
   "address": 3366,
   "type": "line",
   "text": "Lines left before print_char waits for a key"
  },
  {
   "address": 3367,
   "type": "line",
   "text": "The last character print_char was given"
  },
  {
   "address": 3368,
   "type": "line",
   "text": "Nonzero while text goes into both bitmaps"
  },
  {
   "address": 3369,
   "type": "line",
   "text": "Counts down every 16 passes after a message; at zero the message line is cleared"
  },
  {
   "address": 3375,
   "type": "line",
   "text": "Nonzero to draw the chart cursor's brackets (CHART and SCAN)"
  },
  {
   "address": 3376,
   "type": "line",
   "text": "The chart's left column on screen"
  },
  {
   "address": 3377,
   "type": "line",
   "text": "The chart's top pixel row"
  },
  {
   "address": 3378,
   "type": "line",
   "text": "The pixel rows the chart's first and last tile rows are cut by, for smooth scrolling"
  },
  {
   "address": 3379,
   "type": "line",
   "text": "The chart window buffer's row offsets, 11 apart"
  },
  {
   "address": 3388,
   "type": "line",
   "text": "The camera view: 0 cockpit, 1 chase, 2 cinematic (key V)"
  },
  {
   "address": 3389,
   "type": "line",
   "text": "The draw list's count, then the entry being drawn"
  },
  {
   "address": 3390,
   "type": "line",
   "text": "The view's front distance, a log word, from in_view"
  },
  {
   "address": 3391,
   "type": "line",
   "text": "The front distance's whole part"
  },
  {
   "address": 3428,
   "type": "line",
   "text": "The projection's horizontal scale, a log word (zoom plus log2 of the window width)"
  },
  {
   "address": 3429,
   "type": "line",
   "text": "The horizontal scale's whole part"
  },
  {
   "address": 3430,
   "type": "line",
   "text": "The projection's vertical scale, a little smaller"
  },
  {
   "address": 3431,
   "type": "line",
   "text": "The vertical scale's whole part"
  },
  {
   "address": 3432,
   "type": "line",
   "text": "The zoom set_projection was given, a log word: the view's horizontal slope"
  },
  {
   "address": 3433,
   "type": "line",
   "text": "The zoom's whole part"
  },
  {
   "address": 3434,
   "type": "line",
   "text": "The view's vertical slope, a log word"
  },
  {
   "address": 3435,
   "type": "line",
   "text": "The vertical slope's whole part"
  },
  {
   "address": 3436,
   "type": "line",
   "text": "log2 of sqrt(1 + slope squared) for the horizontal edges, for in_view"
  },
  {
   "address": 3437,
   "type": "line",
   "text": "The horizontal edge factor's whole part"
  },
  {
   "address": 3438,
   "type": "line",
   "text": "log2 of sqrt(1 + slope squared) for the vertical edges"
  },
  {
   "address": 3439,
   "type": "line",
   "text": "The vertical edge factor's whole part"
  },
  {
   "address": 3440,
   "type": "line",
   "text": "The depth of each draw-list entry, low bytes (14 entries)"
  },
  {
   "address": 3454,
   "type": "line",
   "text": "The depth of each draw-list entry, high bytes ($FF once drawn)"
  },
  {
   "address": 3468,
   "type": "line",
   "text": "The screen size of each draw-list entry"
  },
  {
   "address": 3482,
   "type": "line",
   "text": "The slot of each draw-list entry"
  },
  {
   "address": 3496,
   "type": "line",
   "text": "The identity orientation, three rows of three log-form numbers (1 on the diagonal, $E69C for zero); $0DAB a zero vector in log form, $0DBA the unit z axis, $0DC3 nine zero bytes (a linear zero vector)"
  },
  {
   "address": 3559,
   "type": "line",
   "text": "Start-up and main loop. Resets the stack, runs sr_setup ($14CB, which loads and runs INIT), then loops for ever: each pass calls the per-frame routines in order, from the clock and flight update at $1239 to the screen update at $8ED3. $A470 returning carry set sends the loop back to its top early"
  },
  {
   "address": 3565,
   "type": "line",
   "text": "The main loop proper: $1239 clock and flight update, $1BB2, $3689, $7634, $74D3, $787B, $75FC, $135F (keys), $6AB3, then $A470; if that returns carry set the pass ends here, otherwise $6519, $7772, $A488, $24B3, $798F and $8ED3 follow"
  },
  {
   "address": 3618,
   "type": "line",
   "text": "Sets up the machine for play: the processor port's low bits to 01 (RAM with the I/O in), $02 to $40, a raster interrupt at line $32, CIA 1 interrupts off, and the vectors: NMI ($0318 and $FFFA) to $0E9E, BRK ($0316) and reset ($FFFC) to $0E9F, both an RTI; IRQ at $FFFE to $0EA0 and the KERNAL's $0314 to $0EA5, so the interrupt runs whether the KERNAL is banked in or not. Then clears the key buffer ($0ECD) and the sound ($1067), banks everything out ($0E85) and enables interrupts"
  },
  {
   "address": 3717,
   "type": "line",
   "text": "Clears the low two bits of the processor port $01: all RAM, the I/O and both ROMs banked out. Called after every stretch of code that needed the chips or the KERNAL"
  },
  {
   "address": 3724,
   "type": "line",
   "text": "Sets the processor port's low bits to 01: RAM everywhere except the I/O area at $D000-$DFFF"
  },
  {
   "address": 3733,
   "type": "line",
   "text": "Sets the processor port's low bits to 10: the KERNAL ROM and the I/O in, BASIC out. Used around every KERNAL call the loader makes"
  },
  {
   "address": 3742,
   "type": "line",
   "text": "The NMI handler: returns at once, so RESTORE does nothing"
  },
  {
   "address": 3743,
   "type": "line",
   "text": "What the reset vector at $FFFC points to while the game runs: an RTI"
  },
  {
   "address": 3744,
   "type": "line",
   "text": "The raster interrupt as entered through $FFFE (all RAM): saves A, X and Y, then falls into irq_body"
  },
  {
   "address": 3749,
   "type": "line",
   "text": "The raster interrupt's body, also the KERNAL's $0314 target while the KERNAL is in for a load: saves the processor port and banks the I/O in; on a raster interrupt it acknowledges it, counts the frame in $16 (stopping at 255), reads the keyboard into the buffer ($0ED6) and steps the sound effects ($10D2), then restores the port and the registers"
  },
  {
   "address": 3789,
   "type": "line",
   "text": "Empties the keyboard buffer: no keys waiting ($03 = 0) and room for two ($04 = 2)"
  },
  {
   "address": 3798,
   "type": "line",
   "text": "Called by the interrupt every frame: scans the keyboard ($0EF5) and, when it returns a key, appends it to the buffer at $05; with the buffer full the oldest key is dropped to make room"
  },
  {
   "address": 3829,
   "type": "line",
   "text": "Scans the keyboard, the C128's extra keys included: notes the CTRL ($13), left SHIFT ($14) and right SHIFT ($15) states, then reads the eight C64 rows and the C128's three extra rows through $D02F, ignoring the modifier keys (mask table $0FDC). Returns zero with no key, or a repeat not yet due (first repeat after 30 frames, then every 6). Otherwise returns the key's character from the table at $0FEF: CTRL with a letter gives its control code, SHIFT with a letter gives the capital, SHIFT with a digit or punctuation key gives the symbol from $1047/$1057. A key on the C128 keypad (index $40 or more) ignores the modifiers. Also clears $0D03 on any key"
  },
  {
   "address": 4060,
   "type": "line",
   "text": "One byte per keyboard row, ORed into the row's read so the modifier keys never count as a keypress: row 1 bit 7 (left SHIFT), row 6 bit 4 (right SHIFT), row 7 bit 2 (CTRL)"
  },
  {
   "address": 4068,
   "type": "line",
   "text": "The index of each row's first key in key_chars: 0, 8, 16, ... 80, eight keys a row for the C64's eight rows and the C128's three"
  },
  {
   "address": 4079,
   "type": "line",
   "text": "The character each key gives, 88 entries: the C64's eight rows from row 7, bit 7 first, down to row 0, then the C128's three extra rows from $102F the same way. ASCII with lower-case letters; $80 marks a key that gives nothing (the modifiers, RUN/STOP, C=, F3, F5, and the C128's HELP, ALT and NO SCROLL). F1 gives $1B, ESC, and F7 $1F. The C128's keys are the keypad digits, Enter and full stop, its cursor keys, ESC, TAB and LINE FEED ($0A)"
  },
  {
   "address": 4096,
   "type": "line",
   "text": "key_chars from entry 17 on, where a page boundary cuts it: '@', ':', '.', '-', then 'l', 'p', '+', 'n' and the rest of the matrix, and from $102F the C128's extra keys"
  },
  {
   "address": 4167,
   "type": "line",
   "text": "The unshifted keys that have a shifted symbol: 1-9, colon, semicolon, comma, full stop, slash, cursor down and cursor right codes"
  },
  {
   "address": 4183,
   "type": "line",
   "text": "What SHIFT turns each key in shift_from into: ! \" # $ % & ' ( ) [ ] < > ?, cursor up ($0B) and cursor left ($08)"
  },
  {
   "address": 4199,
   "type": "line",
   "text": "Silences the sound: clears the three voices' effect timers ($28-$2A) and repeat counts ($2B-$2D), sets the voice mask $1D to $FF and the engine-hum flag $1E to 0, zeroes the three voices' frequencies and the filter routing, and sets the volume to full"
  },
  {
   "address": 4241,
   "type": "line",
   "text": "Starts sound effect A (0-13; anything higher is ignored). The effect's tables at $11AD-$122B give its voice and its start frequency, frequency step, attack/decay, sustain/release, waveform, length, gate-off point and repeat count; they are copied into that voice's slots with interrupts off, and its timer cleared so the interrupt starts it on the next frame"
  },
  {
   "address": 4306,
   "type": "line",
   "text": "Called by the interrupt every frame for each of the three voices: starts a waiting repeat of the voice's effect (resets the frequency, retriggers the envelope with the effect's waveform), otherwise adds the frequency step to the voice's frequency, takes the gate off at the gate-off point and silences the voice when its timer runs out. With voice 1 idle it plays the engine hum: a pulse whose pitch follows the speed in $0415 (its size, either direction), unless $1D or $1E masks it off"
  },
  {
   "address": 4501,
   "type": "line",
   "text": "The SID register offset of each voice: 0, 7, 14"
  },
  {
   "address": 4504,
   "type": "line",
   "text": "Per voice: the high byte of the frequency an effect starts at"
  },
  {
   "address": 4507,
   "type": "line",
   "text": "Per voice: the low byte of the frequency step added every frame"
  },
  {
   "address": 4510,
   "type": "line",
   "text": "Per voice: the high byte of the frequency step"
  },
  {
   "address": 4513,
   "type": "line",
   "text": "Per voice: the effect's frequency, low byte, before the mask: sound_step adds the step to it every frame and writes it to the SID ANDed with $1D. The engine hum writes voice 1's SID frequency directly and leaves this alone"
  },
  {
   "address": 4516,
   "type": "line",
   "text": "Per voice: the effect's frequency, high byte, before the mask (see $11A1)"
  },
  {
   "address": 4519,
   "type": "line",
   "text": "Per voice: the effect's attack/decay value"
  },
  {
   "address": 4522,
   "type": "line",
   "text": "Per voice: the effect's sustain/release value"
  },
  {
   "address": 4525,
   "type": "line",
   "text": "Sound effect table, 14 entries: the voice each effect plays on (0-2)"
  },
  {
   "address": 4539,
   "type": "line",
   "text": "Sound effect table: the frequency each effect starts at (high byte)"
  },
  {
   "address": 4553,
   "type": "line",
   "text": "Sound effect table: the frequency step's low byte"
  },
  {
   "address": 4567,
   "type": "line",
   "text": "Sound effect table: the frequency step's high byte ($FF for a falling sweep)"
  },
  {
   "address": 4581,
   "type": "line",
   "text": "Sound effect table: attack/decay"
  },
  {
   "address": 4595,
   "type": "line",
   "text": "Sound effect table: sustain/release"
  },
  {
   "address": 4609,
   "type": "line",
   "text": "Sound effect table: the waveform and gate written to the control register ($81 noise, $41 pulse, $21 sawtooth, $11 triangle)"
  },
  {
   "address": 4623,
   "type": "line",
   "text": "Sound effect table: how many frames each repeat lasts"
  },
  {
   "address": 4637,
   "type": "line",
   "text": "Sound effect table: the frame count at which the gate is released"
  },
  {
   "address": 4651,
   "type": "line",
   "text": "Sound effect table: how many times the effect plays"
  },
  {
   "address": 4665,
   "type": "line",
   "text": "The main loop's first call. Counts down $0836; fires the beam ($20EC) when auto fire ($0CFF) is on, the player's target ($0445) is a ship slot (0-5) and $0D00 has counted down to zero; every seventh pass with $3A clear runs $3102. Every 256th pass: $1DDF, then the player's orientation ($044B) made square again ($923E), then, with fewer than three ships in slots 1-5 (in use, $0403 clear), it may add one: $2C8A picks a type with $077C divided by 8 as the chance (none when it returns N set: no ship, or a type of a negative faction), and a merchant type (faction 1) is skipped one time in two ($A2C5 negative); $1D4A/$1D6A when $08F9 for that type is clear, then $1E73 and $1949 create it, and ships whose distance ($7947, a log) is $0B49 or more (about 2,500 units) are removed ($1A5F with A=$FF); that loop tests $0403 with Y, which holds what the routine called last left there, not the slot it is looking at. Every 16th pass: counts $0D29 down to clear the message line ($A178), counts $0D00 down, and computes $0C04/$0C05 from $073B/$073C and a value from $2EDB and $B451"
  },
  {
   "address": 4957,
   "type": "line",
   "text": "Counts main-loop passes down from 7 to the next flight step at $3102"
  },
  {
   "address": 4958,
   "type": "line",
   "text": "Counts the 256-pass periods of frame_update"
  },
  {
   "address": 4959,
   "type": "line",
   "text": "Calls $2419, then takes a key from the buffer ($A24D, letters as capitals) and runs its command: the key is looked up in key_cmds ($145C), only its first 25 entries (up to V) while $0838 is set; the handler's address less one is pushed from key_handlers ($1481) and reached with RTS. A key that is no command is dropped"
  },
  {
   "address": 4998,
   "type": "line",
   "text": "Key A, 4 or cursor left: one step more turn to the left (the player's turn rate $0516 down, at most $46 either way)"
  },
  {
   "address": 5009,
   "type": "line",
   "text": "Key D, 6 or cursor right: one step more turn to the right ($0516 up)"
  },
  {
   "address": 5020,
   "type": "line",
   "text": "Key W, 8 or cursor up: one step more pitch ($0508 up)"
  },
  {
   "address": 5031,
   "type": "line",
   "text": "Key X, 2 or cursor down: one step more pitch the other way ($0508 down)"
  },
  {
   "address": 5042,
   "type": "line",
   "text": "Key S or 5: stops all rotation, pitch ($0508), turn ($0516) and roll ($050F) to zero"
  },
  {
   "address": 5054,
   "type": "line",
   "text": "Key Z or 1: one step more roll ($050F down)"
  },
  {
   "address": 5065,
   "type": "line",
   "text": "Key C or 3: one step more roll the other way ($050F up)"
  },
  {
   "address": 5076,
   "type": "line",
   "text": "Key J: jettison. Calls $2ECF and prints the message at $CECF (X is the low byte)"
  },
  {
   "address": 5086,
   "type": "line",
   "text": "Key minus: unless $0D02 is set, one step less speed for the player's ship ($0415, slot 0 of the speed array), clamped to -$46; sets $0D01 to 1"
  },
  {
   "address": 5107,
   "type": "line",
   "text": "Key plus: unless $0D02 is set, one step more speed ($0415), clamped to $46; sets $0D01 to $FF"
  },
  {
   "address": 5128,
   "type": "line",
   "text": "CTRL-E, or F7 (character $1F): toggles $0D02, which the speed keys and $2419 test: cruise or Newtonian flight"
  },
  {
   "address": 5137,
   "type": "line",
   "text": "CTRL-T or I: toggles $7C and redraws the TAC display ($311E, $3114)"
  },
  {
   "address": 5149,
   "type": "line",
   "text": "Key L: toggles automatic beam fire ($0CFF), only when $073E (fitted equipment) is set"
  },
  {
   "address": 5163,
   "type": "line",
   "text": "Key V: the next camera view ($0D3C counts 2, 1, 0 and wraps to 2), then redraws the view ($65B0)"
  },
  {
   "address": 5176,
   "type": "line",
   "text": "ESC, which on a C64 is F1: waits for a key ($A431) with the engine hum off ($1E)"
  },
  {
   "address": 5186,
   "type": "line",
   "text": "Key N: Navigation Control ($2543), with the engine hum off while it runs"
  },
  {
   "address": 5196,
   "type": "line",
   "text": "Clamps X, a signed rate or speed, to -$46..$46"
  },
  {
   "address": 5212,
   "type": "line",
   "text": "The 37 keys that are commands in flight, in the order of key_handlers: 4 A cursor-left, 6 D cursor-right, 8 W cursor-up, 2 X cursor-down, 5 S, 1 Z, 3 C, J, minus, plus, ESC (F1), CTRL-E, $1F (F7), V, T, CTRL-T, I, L, 0, space, R, full stop, N, CTRL-S, G, Return"
  },
  {
   "address": 5249,
   "type": "line",
   "text": "The command handlers for key_cmds, each address less one (do_key reaches them with RTS): turn, pitch, stop, roll, jettison ($13D4), speed ($13DE, $13F3), ESC ($1438), flight mode ($1408), view ($142B), next target ($1D82), TAC mode ($1411), auto fire ($141D), fire ($1DBE), next weapon ($1E5C), navigation ($1442), save ($154E), surrender ($392A), and Return, which also takes the next target ($1D82)"
  },
  {
   "address": 5250,
   "type": "line",
   "text": "High bytes of key_handlers' words: do_key reads each handler as the pair at $1481+2n"
  },
  {
   "address": 5323,
   "type": "line",
   "text": "Run once from sr_init: sets up the interrupt and vectors ($0E22), swaps the KERNAL's zero page in ($17B5), loads INIT to $E900 and jumps to it; INIT's RTS returns to the main loop"
  },
  {
   "address": 5349,
   "type": "line",
   "text": "Loads END to $E900 with the engine hum off: END is INIT's bytes, put back after a base has used $E900"
  },
  {
   "address": 5368,
   "type": "line",
   "text": "Loads SEG0, the flight overlay, to $A500"
  },
  {
   "address": 5383,
   "type": "line",
   "text": "Loads SEG1, the base overlay, to $A500 and SEG1A to $E400"
  },
  {
   "address": 5413,
   "type": "line",
   "text": "Called after a save or an INIT reload: selects screen 0 ($1BEE), redraws ($8F40) and puts the view back ($9E4C with Y=0)"
  },
  {
   "address": 5426,
   "type": "line",
   "text": "The ending: with the engine hum off, sets the disk prompt to BOOT ($1859), loads WON from side 1 to $6800, swaps the KERNAL's zero page back ($17B5) and jumps to WON at $6800. Reached from dock ($7094) when docking anywhere in system 9 ($071D), the Manchi system whose map is Q9"
  },
  {
   "address": 5454,
   "type": "line",
   "text": "CTRL-S: asks the question at $CF9B (Save game? Y/N, a key through $A24D). Y: $B981 and $8EF6, then the prompt is set to BOOT, SPB is loaded to $4000 as a check that the BOOT disk is in, and the game state $0403-$0801 is saved as \"@0:SAVED\" ($1783); the prompt goes back to DATA and the screen is restored ($1525). Any other key just clears the message line ($A178)"
  },
  {
   "address": 5536,
   "type": "line",
   "text": "Sets up the objects of the sector the ship is in (from $7256 and INIT): $040F = $40, $0782 and the surrender, taunt and gravity-warning flags ($0832-$0834) cleared; slots 19-1 emptied ($1A8A), the models forgotten ($1D4A), and the 21-byte type list at $C6 set to $FF. Into the list go the types of the sector's kind (sector_object_lists, by the kind $2F75 gives for $071E/$071F) from $DA down; up to three of the map's entries in the sector ($3030) at $C9-$C7, skipping entry 0 (the ship) and types with bit 7 set and counting types of $64 and up in $0782 instead (a base, bit 7 at $5550, also notes its file, $16B2); and the encounter's types $0D06, $0D05 and $0D04 at $CA-$CC. Each listed type is then placed at random ($167F) and made ($1949); with ships near ($0D07), one of the encounter's first type ($0D04) gets the player, slot 0, as its target ($0445). Ends with the player's speed at 5 ($0415) and velocity ($0545-$054D) cleared"
  },
  {
   "address": 5755,
   "type": "line",
   "text": "Counts a system map entry of type $64 or more in $0782"
  },
  {
   "address": 5759,
   "type": "line",
   "text": "Sets up position words for a new object: takes the object type's word at $0A1D, multiplied by 8, as the range in $60/$61, and calls $1E73 with the source block at $065D and destination $006B"
  },
  {
   "address": 5810,
   "type": "line",
   "text": "For a map entry with bit 7 set at $5550, a base: copies its map file's name, three characters such as \"L00\", from the system map's table at $5620 plus its $55B0 offset into $0778-$077A, where docking finds it"
  },
  {
   "address": 5833,
   "type": "line",
   "text": "Ten pointers to zero-terminated lists of (count, object type) pairs that enter_sector writes into the slots, chosen by the sector's kind"
  },
  {
   "address": 5834,
   "type": "line",
   "text": "The high bytes of sector_object_lists' pointers, read in pairs with $16C9"
  },
  {
   "address": 5853,
   "type": "line",
   "text": "The lists themselves, as (count, type) pairs ending with a zero count"
  },
  {
   "address": 5891,
   "type": "line",
   "text": "One byte per sector kind (0-9, the kind times 16 from $2F75): bit 7 doubles the HELM travel time through it"
  },
  {
   "address": 5901,
   "type": "line",
   "text": "Pointers per sector kind to the text QUERY gives for it (texts in the disk text at $CFxx; $1721 is an empty string)"
  },
  {
   "address": 5902,
   "type": "line",
   "text": "The high bytes of sector_kind_texts' pointers"
  },
  {
   "address": 5922,
   "type": "line",
   "text": "enter_sector's loop counter over the 21 slots"
  },
  {
   "address": 5923,
   "type": "line",
   "text": "From INIT: puts object type 0, the player's ship, in slot 0 ($196F with X=Y=0, $74/$75 at $0DC3), sets $0433 (slot 0) to 4, then falls into copy_ship_stats"
  },
  {
   "address": 5943,
   "type": "line",
   "text": "Copies six bytes of the player's ship ($0735-$073A) into the type-0 entries of the per-type tables ($0AA9, $0AAA, $0C2B, $0C45, $0C52, $0C6C), and $072A plus 2 into $0C79, so the player's ship is described like any other type"
  },
  {
   "address": 5989,
   "type": "line",
   "text": "Loads a file through the KERNAL: X/Y point to its zero-terminated name, $80/$81 give the destination. Swaps the KERNAL's zero page in and banks the KERNAL in ($17C6), LOAD with secondary address 0 (to the destination), then puts everything back ($17F8); a failed load shows the disk prompt and tries again until it succeeds"
  },
  {
   "address": 6019,
   "type": "line",
   "text": "Saves memory through the KERNAL: X/Y point to the name, $80/$81 the start and $82/$83 the end (exclusive). Same set-up and retry as load_file"
  },
  {
   "address": 6069,
   "type": "line",
   "text": "Swaps $90-$C4 with the copy at $0190-$01C4: the KERNAL's own zero page goes in for a load, the game's comes back after. Called in pairs"
  },
  {
   "address": 6086,
   "type": "line",
   "text": "Common start of a load or save: stops the engine hum ($1D = 0), keeps the name pointer, measures the name, swaps the KERNAL's zero page in, banks the KERNAL in, and calls SETLFS 1,8,0 and SETNAM"
  },
  {
   "address": 6128,
   "type": "line",
   "text": "The operand of LDA # before SETNAM: the name's length, written by open_for_io"
  },
  {
   "address": 6130,
   "type": "line",
   "text": "The operand of LDX # before SETNAM: the name's low byte, written by open_for_io"
  },
  {
   "address": 6132,
   "type": "line",
   "text": "The operand of LDY # before SETNAM in open_for_io: the name's high byte, written by open_for_io"
  },
  {
   "address": 6136,
   "type": "line",
   "text": "Common end of a load or save: banks everything out, swaps the game's zero page back, turns the hum mask back on ($1D = $FF); if the KERNAL returned an error (carry set) it shows the disk prompt ($1812). Returns with the KERNAL's carry and X/Y as they were"
  },
  {
   "address": 6162,
   "type": "line",
   "text": "After a failed load or save: plays effect 4, prints \"Insert \" and the disk named by $1857/$1858 (\"BOOT disk...\" or \"DATA disk...\"), waits for a key and clears the line"
  },
  {
   "address": 6193,
   "type": "line",
   "text": "The load address, then the save end address, kept for the retry"
  },
  {
   "address": 6194,
   "type": "line",
   "text": "io_addr's high byte"
  },
  {
   "address": 6195,
   "type": "line",
   "text": "The save's end address, low then high, kept by save_file for the retry"
  },
  {
   "address": 6196,
   "type": "line",
   "text": "The save end address's high byte"
  },
  {
   "address": 6197,
   "type": "line",
   "text": "The disk prompt's strings: \"Insert \", \"BOOT disk...\", \"DATA disk...\""
  },
  {
   "address": 6231,
   "type": "line",
   "text": "Points to the disk name disk_prompt shows: $183D (BOOT) or $184A (DATA)"
  },
  {
   "address": 6232,
   "type": "line",
   "text": "disk_name_ptr's high byte"
  },
  {
   "address": 6233,
   "type": "line",
   "text": "Sets the disk prompt to \"BOOT disk...\""
  },
  {
   "address": 6244,
   "type": "line",
   "text": "Sets the disk prompt to \"DATA disk...\""
  },
  {
   "address": 6255,
   "type": "line",
   "text": "Reads one 256-byte block of the disk, by number, into ($80): X is the block number's low byte and Y its high byte. Converts it to a track and sector with the sectors-per-track table ($190A), writes them into the command \"U1 5 0 tt ss\", opens \"#\" as channel 5 and the command channel 15 with that command, and reads 256 bytes; on an error it shows the disk prompt and tries again"
  },
  {
   "address": 6409,
   "type": "line",
   "text": "The RTS at the end of read_block, and the byte before the sectors-per-track table, which read_block indexes from track 1"
  },
  {
   "address": 6410,
   "type": "line",
   "text": "Sectors on each track of a 1541 disk: 21 on tracks 1-17, 19 on 18-24, 18 on 25-30, 17 on 31-35"
  },
  {
   "address": 6445,
   "type": "line",
   "text": "The channel name \"#\" and the block-read command \"U1 5 0 tt ss\" that read_block fills in"
  },
  {
   "address": 6453,
   "type": "line",
   "text": "The track number's tens digit in read_block's command string"
  },
  {
   "address": 6454,
   "type": "line",
   "text": "The track's units digit in read_block's command (the tens at $1935)"
  },
  {
   "address": 6456,
   "type": "line",
   "text": "The sector number's two digits in read_block's command string"
  },
  {
   "address": 6457,
   "type": "line",
   "text": "The sector number's units digit in read_block's command"
  },
  {
   "address": 6458,
   "type": "line",
   "text": "read_block's count of bytes read"
  },
  {
   "address": 6459,
   "type": "line",
   "text": "Converts A (0-99) to two ASCII digits: tens in X, units in A"
  },
  {
   "address": 6473,
   "type": "line",
   "text": "Creates an object of type X in a free slot and returns the slot in Y ($FF if none was free). Types below $0D (ships and missiles) take a ship slot 5-1, types $0D-$10 slot 6 alone, types $11 and up a slot 19-7. Falls into fill_slot"
  },
  {
   "address": 6511,
   "type": "line",
   "text": "Puts an object of type X into slot Y without looking for a free one (INIT uses it for the player's ship in slot 0)"
  },
  {
   "address": 6513,
   "type": "line",
   "text": "Sets up slot Y for type X: marks it in use ($05F9, $0649), stores the type ($060D), sets $0635 nonzero when the type's $0A1D word is nonzero, takes the type's $0AA9 word as the slot's hit points ($051D), and copies the 9-byte position at ($74) into the slot's entry of the position block at $065D (9 bytes a slot, offsets from $0846; $9570). Slots 0-6 get their rotation rates cleared and the 27-byte record at $0DA8 copied into their entry of the block at $044B (27 bytes a slot, offsets from $083C; $90F6). Ship slots 0-5 get speed, $0409, $041B and $0403 cleared, $0445, $0439, $043F and $0433 set to $FF, and the 9-byte record at $0DC3 copied into their entry of the block at $0545. A ship in slots 1-5 whose type has flag bit 5 counts $0403 up; any other gets a random turn rate, $041B = 1, $043F = 0, $0433 from its type's $0C1E, and the three bytes $85-$87 that $3E0D returns stored at $0421+3*slot. Finally loads the type's model ($1C95)"
  },
  {
   "address": 6738,
   "type": "line",
   "text": "Every path of fill_slot ends here: load the model for the type, and return the slot in Y, or $FF when the model could not be placed (carry set)"
  },
  {
   "address": 6745,
   "type": "line",
   "text": "No free slot: return $FF in Y"
  },
  {
   "address": 6751,
   "type": "line",
   "text": "Takes the object in slot Y out of play; A says how: $FF removes it quietly, 0 means the player destroyed it. Clears the TAC when it was the player's target ($311E), empties the slot ($1A8A); for A = 0 and a ship slot whose $0403 is clear, gives the reward ($1ABF); unless A is $FF, ends at $24F6 with the slot"
  },
  {
   "address": 6794,
   "type": "line",
   "text": "Empties slot Y: clears its in-use flags ($0649, $0635, $05F9) and, among ship slots 0-5, every target ($0445) and $0439 that pointed at it, remembering in $8C the last ship that had it as its target. Slot 0 is the player's ship: freeing it is the end of the game ($1B90)"
  },
  {
   "address": 6847,
   "type": "line",
   "text": "The player has destroyed the ship in slot $8A. A type-6 ship counts in $079A when $079C is set; then, by the ship's $0433: 0 adds a random amount and 3 adds nothing extra, and either adds 32 times its type's $0C79 to the credits ($2F22) with the messages at $1B96 and $1BAF; then, on a negative random number, takes the type's $0C79 off $072B, and when that borrows and $072A is below 5, puts $072B back to 7 shifted left $072A times and raises $072A ($1737 copies it). With a random number below $40 the standing ($3C90) changes: up with the faction of the ship that had targeted it ($8C), down with its own unless it is type $0C. A ship whose $0433 is 1 or 2 adds ($0C79+2)*16 to $0726/$0727"
  },
  {
   "address": 7056,
   "type": "line",
   "text": "Slot 0 was freed: the player's ship is gone. Loads END (INIT's bytes) to $E900 and jumps into it at $E972"
  },
  {
   "address": 7062,
   "type": "line",
   "text": "\"Bounty awarded for kill:\" (kill_reward), zero-ended, then at $1BAF \"cr\", printed after the amount"
  },
  {
   "address": 7090,
   "type": "line",
   "text": "The main loop's second call. For every slot in use whose type has flag bit 3 (missiles, the type $22 object) its hit points ($051D) count down by one each pass; when they run out the object is removed ($1A8A), and if its $0403 was set it becomes a type $22 object in its place ($7C52, $1949)"
  },
  {
   "address": 7150,
   "type": "line",
   "text": "Loads picture A (0 PIT.PAC, the cockpit; 1 NAV.PAC; 2 LAND.PAC; 3 H.PAC; names from the table at $1C15) to $4000 and unpacks it to the bitmap at $C000 (unpack_picture)"
  },
  {
   "address": 7189,
   "type": "line",
   "text": "Pointers to the four picture files' names in the loader's name table: PIT.PAC, NAV.PAC, LAND.PAC, H.PAC"
  },
  {
   "address": 7190,
   "type": "line",
   "text": "The high bytes of picture_names' pointers"
  },
  {
   "address": 7197,
   "type": "line",
   "text": "Unpacks a picture from ($74) to ($78). First clears the 1 KB at ($78)+$2000 (the screen matrix that follows the bitmap) and sets the border black. The packed stream is a run of records: a byte n of 1-$7F repeats the next byte n times; $80+n copies the next n bytes; 0 ends it, and the byte after it is the border colour"
  },
  {
   "address": 7306,
   "type": "line",
   "text": "Sets the border colour to A, banking the I/O in for the write"
  },
  {
   "address": 7317,
   "type": "line",
   "text": "Loads the model for object type Y if the type has one ($093E) and it is not loaded yet. The file name is the model's 4-byte entry at $0961; it goes to the model heap's next free address ($1D80). Then relocates it there: the prologue's LDA #lo / LDA #hi (bytes 1 and 5) get the load address added, its stores and jump are rewritten to STA $7A, STA $7B, JMP $7C61 (the model drawer), and the 15 words from byte $11 get the load address added. Every type that uses the same model is pointed at it ($08F8/$08F9), and the heap pointer moves on by the size word at byte $2F. Returns carry clear"
  },
  {
   "address": 7498,
   "type": "line",
   "text": "Forgets every loaded model: clears the model pointer of each object type that has a model, and puts the heap pointer back to $E400"
  },
  {
   "address": 7530,
   "type": "line",
   "text": "Loads the model for every object in slots 19-1 ($1C95), after reset_models or a reload"
  },
  {
   "address": 7552,
   "type": "line",
   "text": "The address where the next model will be loaded, $E400 after reset_models"
  },
  {
   "address": 7553,
   "type": "line",
   "text": "model_heap_next's high byte"
  },
  {
   "address": 7554,
   "type": "line",
   "text": "Key T or Return: auto fire off, then the player's target ($0445) moves to the next slot in use after it: a ship slot (1-5) with $0403 clear, or, in slots 6-19, an object whose type has flag bit 0 (bases, planets and the like) or is type $14; past slot 19 the target becomes none ($FF). Redraws the TAC ($311E, $3114)"
  },
  {
   "address": 7614,
   "type": "line",
   "text": "Key space or 0: fires the selected weapon ($0CFE): 0 the beam ($20EC), 1-3 a missile of type 9, 10 or 11 ($1EAD), all from slot 0"
  },
  {
   "address": 7647,
   "type": "line",
   "text": "Every 256 main-loop passes (frame_update): when the player's target is a ship slot whose $0433 is not 3, and that ship has no target of its own or has the player: prints the message at $1E5B with the ship's name ($366D) and one of the texts from $CE9E chosen by its type ($0C) or $0433 and a random number. A ship not hostile to the player ($387E) and with no target greets it once (the texts 8 on); a hostile one, or one targeting the player, speaks once and then one time in four ($0833 says one has spoken)"
  },
  {
   "address": 7771,
   "type": "line",
   "text": "An empty string: target_status prints it to clear the message line before its own text"
  },
  {
   "address": 7772,
   "type": "line",
   "text": "Key R or full stop: selects the next weapon downwards ($0CFE 3, 2, 1, 0 and round), skipping a missile type the ship has none of ($0731 + weapon), then redraws ($3102)"
  },
  {
   "address": 7795,
   "type": "line",
   "text": "Puts at ($78) the 9-byte position at ($74) moved by a random amount on each axis: the top two bytes of each coordinate (offsets 7, 4 and 1) get a random value from -R to R-1 added, where R is the word $60/$61 ($A27D gives a random number below 2R)"
  },
  {
   "address": 7853,
   "type": "line",
   "text": "Ship slot Y launches a missile of type X (9, 10 or 11). Not when its $0409 bit 0 is set. A computer ship needs no ship with $0403 set and a nonzero $0433 present; the player needs $0836 at zero and one of the type left ($0732 + type - 9). The missile is created ($7C52, create_object); for the player it plays effect 7, uses up one missile and sets $0836 to $7E. The missile's $0433 is the launcher, its speed $4B; unless it is type 11 or the launcher has no target, it takes the launcher's target, $041B = 3, and $043F = 4 (swerve) when a random number from 0 to 100 is under the target type's ECM ($0C2B) and the target is a ship whose ECM works ($0409 bit 5 clear), else 2 (pursue). It copies the launcher's $0545 block and 27-byte $044B block; a type 11 missile from a computer ship also gets $7C52/$92CC/$923E aiming work; its position comes from the launcher's ($9108, $934B, $9759)"
  },
  {
   "address": 8216,
   "type": "line",
   "text": "The 9-byte vector launch_missile adds ($9108, with the launcher's orientation) to put a new missile ahead of its launcher: three 3-byte coordinates"
  },
  {
   "address": 8225,
   "type": "line",
   "text": "Advances the clock by A hours: each time the hours ($0720) pass 23 they go back to 0 and the date moves on a day ($203A)"
  },
  {
   "address": 8250,
   "type": "line",
   "text": "Moves the date on a day: counts days elapsed ($0724/$0725), then the day of the month ($0721) up to the month's length ($20AF), the month ($0722) up to 12 and the year ($0723) up to 99, each going back to 1 (the year to 0)"
  },
  {
   "address": 8308,
   "type": "line",
   "text": "Prints the date: the day ($9F56), a space, the month's three letters (from $20B8) and the year"
  },
  {
   "address": 8347,
   "type": "line",
   "text": "Prints the time: the hours ($0720, $9F56) and \":00 HRS\""
  },
  {
   "address": 8360,
   "type": "line",
   "text": "\":00 HRS\", printed after the hours"
  },
  {
   "address": 8367,
   "type": "line",
   "text": "The length of each month, indexed by month 1-12 (the byte before January is the string's end): 31 28 31 30 31 30 31 31 30 31 30 31"
  },
  {
   "address": 8380,
   "type": "line",
   "text": "The months' names, four bytes each with a zero, JAN to DEC: print_date finds month m at $20B8 + 4m"
  },
  {
   "address": 8428,
   "type": "line",
   "text": "Ship slot Y fires its beam, if its $0409 bit 1 is clear and its type has a beam ($0C52, kept in $A9). The player's beam goes along the ship's own axis (the vector at $045D); a computer ship's goes toward its target, the direction worked out into $0896 ($7C52, $92CC, $9669); no target, no shot. trace_beam finds what it hits. A player with no target draws the beam ($2279) with effect 12 even when it hits nothing; a computer ship's miss, and the player's miss with a target, draw nothing. A hit on the shooter's target does the damage ($2222); the player's beam also hits a ship slot (0-5) it was not aimed at when that ship's type does damage ($0AEF) and its $0433 is not 0 (the player's own missiles, and ships of faction 0, are passed through). Each shot of the player's adds one to the beam heat $0D00, up to 8"
  },
  {
   "address": 8585,
   "type": "line",
   "text": "Follows the beam from ship slot $A8 in 50 steps along the direction at ($74) (scaled by $95A0 and $934B by the log $0300 with its sign turned, into $0896): at each step every object with a hit radius ($0635) other than the shooter is tested ($74A3) against its type's radius ($0A1D) plus 2. Returns the first slot hit, or $FF"
  },
  {
   "address": 8738,
   "type": "line",
   "text": "The beam from slot $B2 hits slot $B3 with power $B4: draws it ($2279); effect 12 when the player fired; effect 1 and $0835 = $FF when the player is hit, effect 0 when one computer ship hits another. The damage is the table entry at $2414 for the power's low three bits, halved once for each step of the player's beam heat ($0D00); power 4 passes A = $FF, so the shields do not reduce it, the others A = 1, so the shields count one step less. Ends in $6EA0 with the shooter in X and the victim in Y"
  },
  {
   "address": 8825,
   "type": "line",
   "text": "Draws a beam shot from slot $B2 at slot $B3 with power $B4, its pattern from $2410 ($8F80). From the player in the cockpit view ($0D3C = 0) it fills the two triangles of the cockpit's guns ($23F9 and $2405) between screen updates ($8EEB); a computer ship's beam that hits the player flashes the window ($901D). Otherwise it projects both ends ($23BA), skipping the shot when either is behind the viewer, and fills a thin triangle ($8288 with 3 corners at $FD00): the near end, the far end, and the far end moved 4 pixels along the shorter axis"
  },
  {
   "address": 9146,
   "type": "line",
   "text": "Projects the point at ($74) for the beam as the camera sees it ($58 its position, $5A its orientation): subtracts ($92CC), rotates into the view ($9160 into $0896) and projects ($6773); returns $089E's sign (negative when the point is in front)"
  },
  {
   "address": 9209,
   "type": "line",
   "text": "The two triangles draw_beam fills for the player's beam in the cockpit view, three corners of two words (x, y) each: (-2,0) (113,45) (23,0) from the top left, and at $2405 (252,0) (137,45) (227,0) from the top right, meeting near the view's centre"
  },
  {
   "address": 9221,
   "type": "line",
   "text": "The right-hand gun's triangle for cockpit_beam_shapes: (252,0) (137,45) (227,0)"
  },
  {
   "address": 9232,
   "type": "line",
   "text": "The fill value draw_beam passes to $8F80 for each power value 0-3"
  },
  {
   "address": 9236,
   "type": "line",
   "text": "The damage of a beam hit for each power value 0-3"
  },
  {
   "address": 9241,
   "type": "line",
   "text": "Called by do_key before the keys: reads the joysticks. Fire on the joystick in port 2 fires the selected weapon. Up and down on the joystick in port 1 change the player's speed ($0415) by one, held at $46 and -$46, and refuse to cross zero in one push (a push from zero needs $0D01 clear); in Newtonian flight ($0D02) neither changes the speed. The direction pushed is kept in $0D01 (1, $FF or 0). Then, while $0D03 is set (no key pressed since a stick was used), the port 2 stick's smoothed position ($A3B1) sets the pitch ($0508) and turn ($0516) rates directly through joy_rates"
  },
  {
   "address": 9260,
   "type": "line",
   "text": "The fire and speed part of joystick_flight: fire from port 2 (read_joystick2), up and down from port 1 (read_joystick1); returns X = $FF after a push forward, 1 after a pull back, 0 otherwise"
  },
  {
   "address": 9348,
   "type": "line",
   "text": "Sets the pitch and turn rates from the stick's smoothed X and Y ($A3B1), each divided by 8 and looked up in joy_rates, while $0D03 is set"
  },
  {
   "address": 9379,
   "type": "line",
   "text": "Rotation rate for each sixteenth of the stick's smoothed travel: -10 -6 -4 -3 -2 -1 0 0 0 1 2 3 4 6 10 10"
  },
  {
   "address": 9395,
   "type": "line",
   "text": "The main loop's call for the sector's hazards. While the sector has hazard entries ($0782), now and then (a random number up to $8B coming out $80 or more) it draws a flash of pattern 5 at a random place in the view ($8B24) with a random size from 1 to $C0; one of size $AD or more also plays effect 11 and strikes the ship ($6E8D)"
  },
  {
   "address": 9462,
   "type": "line",
   "text": "Scatters debris where the object in slot Y was: up to ten objects of type $18 created at its position, each with a random velocity ($251E)"
  },
  {
   "address": 9502,
   "type": "line",
   "text": "Gives slot Y a random velocity: each of its three 3-byte components in the velocity block at $0545 gets a random low byte and a top word of 0 or $FFFF by a second random number's sign"
  },
  {
   "address": 9538,
   "type": "line",
   "text": "explode's count of debris objects still to make"
  },
  {
   "address": 9539,
   "type": "line",
   "text": "Key N, Navigation Control. Prints \"Switching to navigation panel\", shows the $C000 bitmap, loads NAV.PAC as the picture ($1BEE) and NAV.TIL to $4000 ($26B1), loads the system's map ($2E7A), sets the full-screen window ($8810), copies the ship's sector ($071E/$071F) to the chart's cursor ($C6/$C7) and to the map's entry 0 ($5510/$5530), plots the course ($2880), counts in $0D07 the ships in slots 1-5 whose target is the player (slot 0) and greys the menu's HELM line by it ($26C0), then loops: date, time, the chart ($2669) and the menu ($25CA). COCKPIT leaves the loop by dropping its return address ($2634)"
  },
  {
   "address": 9674,
   "type": "line",
   "text": "The Navigation Control menu: CHART, HELM, STATUS, QUERY, SCAN, COCKPIT (strings from $26F1; HELM is offered only when no ship is near, $0D07, and the chart's destination is set, $FC00 positive). The choice jumps to CHART $2787, HELM $2728, STATUS $2694, QUERY $2A69, SCAN $2619 or COCKPIT $2634"
  },
  {
   "address": 9753,
   "type": "line",
   "text": "SCAN: moves the chart cursor with the keys or the stick ($A33F, $264D), naming its sector ($27D6) and redrawing the chart with the cursor's brackets ($0D2F), until Return, Space or fire ends it"
  },
  {
   "address": 9780,
   "type": "line",
   "text": "COCKPIT: when the ship has moved ($C8), takes the new sector from $5510/$5530 and sets it up (enter_sector); then leaves navigation by dropping the menu's return address and going back to the cockpit ($2E71)"
  },
  {
   "address": 9805,
   "type": "line",
   "text": "Moves the chart cursor ($C6, $C7) by X across and Y up (the chart's rows count from the bottom), unless that leaves the 32 by 32 chart: carry set then, and the cursor stays"
  },
  {
   "address": 9833,
   "type": "line",
   "text": "Redraws the chart around the cursor: marks the cursor's sector ($3069 with 5, $2F9C), draws ($8638, $28DD, $8658), and moves the frame counter $5E on every other call"
  },
  {
   "address": 9876,
   "type": "line",
   "text": "STATUS: the status page is in the base overlay, so this forgets the models, loads SEG1 over SEG0, runs its status page ($AB87 with X = $1D, Y = $AE, A = 7), then loads SEG0 back and reloads the models"
  },
  {
   "address": 9905,
   "type": "line",
   "text": "Loads NAV.TIL, the navigation chart's tiles, to $4000"
  },
  {
   "address": 9920,
   "type": "line",
   "text": "Colours the HELM line of the menu: $5C, or $78 when X is nonzero, written to 7 cells of two screen rows at $E1FD and $E225"
  },
  {
   "address": 9939,
   "type": "line",
   "text": "\"Switching to navigation panel\""
  },
  {
   "address": 9969,
   "type": "line",
   "text": "Pointers to the six menu items' names"
  },
  {
   "address": 9981,
   "type": "line",
   "text": "The menu items' names: CHART, HELM, STATUS, QUERY, SCAN, COCKPIT"
  },
  {
   "address": 10018,
   "type": "line",
   "text": "One flag a menu item: 1 offered, 0 greyed out (HELM's, at $2723, is set by nav_menu)"
  },
  {
   "address": 10019,
   "type": "line",
   "text": "HELM's enabled flag in nav_item_enabled, written by nav_menu"
  },
  {
   "address": 10024,
   "type": "line",
   "text": "HELM, the autopilot: flies the course in $FC00/$FC20 a sector at a time from the ship's chart position ($5510/$5530). When the course runs out it prints \"Ship has arrived at destination\" ($2847) and returns. Each step: draws the move ($30D7), marks that the ship moved ($C8), moves the ship's position, lets the time pass ($290F), recomputes the rest of the course ($2880), and stops when ships are near after an encounter ($0D07, recolouring the menu) or when helm_step_time returns nonzero ($B4: fire or a key during the step or its encounter)"
  },
  {
   "address": 10119,
   "type": "line",
   "text": "CHART: the cursor starts on the ship; the cursor keys or the stick move it ($A33F, move_cursor) and each move makes it the destination ($072C/$072D) and recomputes the course ($2880). Return, Space or fire leaves; with a course set it prints \"Course laid in Nav computer\" ($282B). $072C is $FF (no destination) from opening the chart until the cursor first moves"
  },
  {
   "address": 10198,
   "type": "line",
   "text": "Prints \"SC\" and the cursor's sector coordinates on the chart's info line ($9F56), and below it \"-message-\" when the sector at the cursor is one of the 31 entries of the system map's list at $5510/$5530 whose message word at $55D1 is not $FF, or blanks otherwise"
  },
  {
   "address": 10283,
   "type": "line",
   "text": "\"Course laid in Nav computer\", then \"Ship has arrived at destination\" at $2847, \"SC\" at $2867, \"-message-\" at $286C and a blank line at $2876"
  },
  {
   "address": 10368,
   "type": "line",
   "text": "Works out the course from the ship's sector ($5510/$5530) to the destination ($072C/$072D) as a list of sectors: each step moves one sector along each axis that still differs, so diagonally until one coordinate matches; the X list goes to $FC00 and the Y list to $FC20, ended by $FF. No destination ($072C negative), no course"
  },
  {
   "address": 10461,
   "type": "line",
   "text": "Marks each sector of the course on the chart: for each one visible ($3013) it plots ($8763) and changes the chart cell at $FA00 from $7D to 7"
  },
  {
   "address": 10511,
   "type": "line",
   "text": "The time one HELM step takes: $29CA gives the hours (5 straight, 7 diagonal, doubled in slow sectors and with a damaged drive); the clock advances an hour at a time with the time and date redrawn and, until the trip is stopped, the chart ($2669); fire, or a key waiting, stops it ($AB, counted up each hour from then). When the day changes: damage repairs itself ($2A53), the daily lists $07AE-$07BB and $0783 are cleared and the random generator reseeded ($A2DC). Then the chances of the step: spoiled cargo ($2A15), the map's entries moved ($2D38), the message line (window 1) cleared, the counters $0832-$0834 cleared and an encounter ($2991). Returns $AB, nonzero to stop"
  },
  {
   "address": 10641,
   "type": "line",
   "text": "Checks for an encounter in the step's sector ($2C1E with the hours); when one comes, prints \"Under attack\" (with ships near, $0D07) or \"Space craft detected\", plays effect 4 and waits 20 ticks of wait_ticks (about two seconds); fire during the wait, or a key waiting after it, sets $AB to stop the autopilot. With ships near, nav_helm stops anyway ($277A). Sets $0D04 to $FF first"
  },
  {
   "address": 10698,
   "type": "line",
   "text": "The hours a HELM step costs: 5 for a straight step, 7 for a diagonal one (A nonzero); doubled when the sector's kind ($2F75, divided by 16) has bit 7 in sector_kind_flags, and doubled again when the player's $0409 has bit 2 (a damaged drive)"
  },
  {
   "address": 10739,
   "type": "line",
   "text": "\"Under attack\", then \"Space craft detected\" at $2A00"
  },
  {
   "address": 10773,
   "type": "line",
   "text": "Per HELM step, with A the step's hours: a random 0-100 ($A298, 101 outcomes) under A / 2, rounded down, and four times that when the sector has a map entry of type $64 (an ion storm, query_hazard_names), spoils cargo: the hold is searched from its last slot ($0777 - 1) down, and the first slot holding a kind that spoils (cargo_spoils negative) becomes kind $14"
  },
  {
   "address": 10835,
   "type": "line",
   "text": "When $0740 is set, a new day clears random bits of the player's damage flags ($0409 ANDed with two random numbers ORed together)"
  },
  {
   "address": 10857,
   "type": "line",
   "text": "QUERY: describes the sector under the chart cursor. Prints the system's name from the map ($5505) and the coordinates, then builds the rest in the text buffer at $FA00 ($9DEE appends): \"FEATURES \" with a name for each of the sector's map entries that is a real object ($2BC0), and the sector kind's text (sector_kind_texts, a disk text when its high byte is $C0-$CF); then \"SHIPS \" with, for the ship's own sector, the objects it met there ($0D04-$0D06 after a HELM trip) or the ships present in slots 1-5 whose type's $0AEF is zero; \"none\" where a list is empty. Prints the buffer ($9AFA). Then it searches the sector's entries from the last one back and prints the message of the first whose message word's high byte ($55D1 + 2 * entry) is not $FF, and waits for a key"
  },
  {
   "address": 11167,
   "type": "line",
   "text": "Ends a QUERY list: after names it takes off the last \", \"; with none it appends \"none\""
  },
  {
   "address": 11200,
   "type": "line",
   "text": "Appends the name of map entry type A: types below $64 by the object type's name pointer ($0B12/$0B13), $64 and up from query_hazard_names ($2C12); then \", \""
  },
  {
   "address": 11249,
   "type": "line",
   "text": "\"none\", then \"FEATURES \" ($2BF6), \"SHIPS \" ($2C00), two carriage returns ($2C07), \", \" ($2C0A) and the line breaks at $2C0D"
  },
  {
   "address": 11271,
   "type": "line",
   "text": "Two carriage returns, the separator after each QUERY section"
  },
  {
   "address": 11282,
   "type": "line",
   "text": "Name pointers for map entry types from $64: type $64 is \"Ion Storm\" ($2C14)"
  },
  {
   "address": 11283,
   "type": "line",
   "text": "The high byte of query_hazard_names' pointer for type $64"
  },
  {
   "address": 11294,
   "type": "line",
   "text": "Rolls for an encounter after A hours of HELM travel: the chance grows with the hours and the system's danger level ($077C, both through $B451, less $495, $B5E0), kept in $96. Up to three ship types are drawn ($2C8C) into $0D04-$0D06 with their factions in $97-$99 (none: $FF); with at least one, $2CD2 decides whether they attack ($0D07). The BMI after the first draw reads the N of pick_ship's last load, the faction for a ship (never negative for the types the classes hold) or $FF for none. Returns the first type, negative for none"
  },
  {
   "address": 11402,
   "type": "line",
   "text": "Sets the chance in $96, then picks a ship type as pick_ship does"
  },
  {
   "address": 11404,
   "type": "line",
   "text": "A random number below 100 at or over the chance $96 gives no ship ($FF). Otherwise a second random number below 100 is spent across the system's five class weights ($077D-$0781, the last first) to choose a class, and one of the class's four entries in ship_class_types ($2D24) is picked: a random number from 0 to 15 under 4 picks that entry; otherwise a random number from 0 to the player's rank value ($0C79), halved, picks it, 3 at most, so a low rank gets the first entries and a higher one the third and fourth. Returns the type in A and its faction ($0C1E) in X"
  },
  {
   "address": 11474,
   "type": "line",
   "text": "Decides whether the encounter attacks: if the second or third ship is hostile to the first ($387E returns $FE) they fight each other and leave the player alone; with $073D set, a random number below $56 also lets them pass; otherwise the first ship's attitude to the player ($387E with X=4): hostile ($FE) means an attack ($0D07 counts up), $FF or a neutral faction 0 attacks half the time (a negative random number)"
  },
  {
   "address": 11556,
   "type": "line",
   "text": "Four object types for each of the five ship classes pick_ship chooses from: class 0 types 12 12 12 12, then 2 2 5 5, 7 8 7 8, 3 3 6 6, 1 1 4 4"
  },
  {
   "address": 11576,
   "type": "line",
   "text": "Once a day of HELM travel: every map entry with a motion kind (flags at $5550, bits 0-2) is moved by its kind's routine, the address from map_motion_routines written into the JSR at $2D56"
  },
  {
   "address": 11606,
   "type": "line",
   "text": "JSR whose operand move_map_objects rewrites to the entry's motion routine"
  },
  {
   "address": 11607,
   "type": "line",
   "text": "Low byte of the JSR operand move_map_objects rewrites"
  },
  {
   "address": 11608,
   "type": "line",
   "text": "High byte of the JSR operand move_map_objects rewrites"
  },
  {
   "address": 11616,
   "type": "line",
   "text": "When a system map is loaded: puts each entry of motion kind 3 or 4 (the orbits) at its place for the date, through the JSR at $2D82 rewritten the same way"
  },
  {
   "address": 11650,
   "type": "line",
   "text": "JSR rewritten by place_orbiting_objects to the orbit routine"
  },
  {
   "address": 11651,
   "type": "line",
   "text": "Low byte of the JSR operand place_orbiting_objects rewrites"
  },
  {
   "address": 11652,
   "type": "line",
   "text": "High byte of the JSR operand place_orbiting_objects rewrites"
  },
  {
   "address": 11657,
   "type": "line",
   "text": "Motion kind 1: the entry moves a random step of -1, 0 or 1 across and down, staying on the 32 by 32 chart"
  },
  {
   "address": 11705,
   "type": "line",
   "text": "Motion kind 2: an RTS, the entry stays where it is"
  },
  {
   "address": 11706,
   "type": "line",
   "text": "Motion kind 3: places the entry on the 16-step orbit at $2E11 by the day count ($0724/2 plus the system's phase $5610). An entry whose picture ($5570) is $6C-$6F gets the picture for its quarter of the orbit ($2DD2)"
  },
  {
   "address": 11755,
   "type": "line",
   "text": "Motion kind 4: places the entry on the 32-step orbit at $2E31 by the day count ($0724/4 plus $5611), then sets its picture like motion_small_orbit"
  },
  {
   "address": 11783,
   "type": "line",
   "text": "The BPL that ends motion_large_orbit; its two bytes are also where motion kind 0 would read its routine in map_motion_routines"
  },
  {
   "address": 11784,
   "type": "line",
   "text": "The BPL's offset byte, also the high byte motion kind 0 would read"
  },
  {
   "address": 11785,
   "type": "line",
   "text": "The motion routine of each kind from 1: $2D89 wander, $2DB9 none, $2DBA small orbit, $2DEB large orbit"
  },
  {
   "address": 11793,
   "type": "line",
   "text": "The 16 chart positions (x, y) of the small orbit, a circle of radius 3 around the centre of the chart (16,16)"
  },
  {
   "address": 11794,
   "type": "line",
   "text": "The y coordinates of orbit_small's positions, read in pairs with the x at $2E11"
  },
  {
   "address": 11825,
   "type": "line",
   "text": "The 32 chart positions (x, y) of the large orbit, a circle of radius 6 around the centre"
  },
  {
   "address": 11826,
   "type": "line",
   "text": "The y coordinates of orbit_large's positions, read in pairs with the x at $2E31"
  },
  {
   "address": 11889,
   "type": "line",
   "text": "Leaves navigation or a base screen for the cockpit: restores the picture and view ($1525), $A14C, and redraws the cockpit ($3102)"
  },
  {
   "address": 11898,
   "type": "line",
   "text": "Loads the system map of system $071D: the file \"Q\" with the system's digit ($2EA0) to $5100. Copies the system's six encounter bytes ($5612: danger level and five class weights) to $077C-$0781 and places the orbiting objects ($2D60)"
  },
  {
   "address": 11936,
   "type": "line",
   "text": "The system map's file name, \"Q\" and a digit load_system_map writes"
  },
  {
   "address": 11937,
   "type": "line",
   "text": "The system digit of str_system_file, written by load_system_map"
  },
  {
   "address": 11939,
   "type": "line",
   "text": "Puts cargo of kind A into the first empty hold slot from the top ($0767 negative), noting X, the price paid, in $076F. Carry set when the hold is full"
  },
  {
   "address": 11965,
   "type": "line",
   "text": "Called from the base overlay (SEG1, $AF57): finds the first hold slot from the top holding cargo kind A ($0767 counted from slot $0777) and empties it ($FF); returns with Z set when none was found"
  },
  {
   "address": 11983,
   "type": "line",
   "text": "Empties every hold slot ($0767-$076E set to $FF, $0777 slots)"
  },
  {
   "address": 11995,
   "type": "line",
   "text": "Counts the hold slots in use: returns 0 for none, $FF for a full hold, otherwise the count"
  },
  {
   "address": 12023,
   "type": "line",
   "text": "Prints the disk text $CF9C+A"
  },
  {
   "address": 12035,
   "type": "line",
   "text": "Takes the word $60/$61 off the credits ($0728/$0729) if there are enough: carry set when paid, clear (and nothing taken) when not"
  },
  {
   "address": 12066,
   "type": "line",
   "text": "Adds the word $60/$61 to the credits ($0728/$0729), stopping at $FFFF"
  },
  {
   "address": 12096,
   "type": "line",
   "text": "Clears the view window, x 24-199 and y 40-183 ($8E17), and draws it in pattern 1 ($8F80, $901D)"
  },
  {
   "address": 12149,
   "type": "line",
   "text": "The kind of the sector at X, Y on the loaded system map: the tile code in the 32 by 32 grid at $5100 (row 31-Y; the LDY's operand at $2F96 is rewritten), looked up in the tile set's table at $5000. The kind is a multiple of 16"
  },
  {
   "address": 12181,
   "type": "line",
   "text": "LDY from the map grid; sector_kind writes the address of row 31-Y into its operand, and X picks the column"
  },
  {
   "address": 12182,
   "type": "line",
   "text": "Low byte of sector_kind's rewritten LDY operand"
  },
  {
   "address": 12183,
   "type": "line",
   "text": "High byte of sector_kind's rewritten LDY operand: the grid row's page"
  },
  {
   "address": 12188,
   "type": "line",
   "text": "Puts the system map's entries into the chart window buffer at $FA00 around the cursor X, Y: each entry with a picture ($5570, a tile code) inside the window ($3013) replaces the cell ($8763 finds it) unless the cell's tile hides things (bit 3 of its attribute at $5000). An entry with a heading (flag bits 3-4, set by set_ship_heading) shows the tile for that heading, a quarter or half the heading value added as the tile's attribute bits 0-1 allow; a tile with attribute bit 2 animates by the frame counter's low bits unless the entry's flag bit 5 is set"
  },
  {
   "address": 12307,
   "type": "line",
   "text": "Carry clear when the sector X, Y lies in the chart window around ($51, $53): under 6 columns and 5 rows away. Returns X and Y as offsets from the centre"
  },
  {
   "address": 12336,
   "type": "line",
   "text": "Lists the system map entries (of the 32 at $5510/$5530) that lie in sector X, Y: their numbers go to $3061, the pointer to the list in $74/$75 and the count in Y"
  },
  {
   "address": 12385,
   "type": "line",
   "text": "The entry numbers sector_entries finds, up to eight"
  },
  {
   "address": 12393,
   "type": "line",
   "text": "Fills the chart window buffer ($FA00, 11 cells across by 9 down, filled from the end) with the map grid's tiles around X, Y: columns X-5 to X+5 and rows Y-4 to Y+4 (rows counted from the bottom). Cells off the chart get tile A, or, when A is $2C, the tiles $2C and $2D in a checkerboard"
  },
  {
   "address": 12455,
   "type": "line",
   "text": "The operand of CPY #: fill_chart_window writes $20 here for rows on the chart and 0 for rows off it, so a row off the chart takes the off-chart tile at every column"
  },
  {
   "address": 12466,
   "type": "line",
   "text": "The operand of CPY #: fill_chart_window writes the window's left column here (X-6), where each row stops"
  },
  {
   "address": 12503,
   "type": "line",
   "text": "Sets the heading of map entry A from the step X, Y: right 0, up 8, left $10, down $18, written into bits 3-4 of its flags ($5550); no step, no change"
  },
  {
   "address": 12546,
   "type": "line",
   "text": "Redraws the cockpit's instruments (from frame_update every seventh pass, and after keys that change them): $8810, the speed ($31B2), the hit points ($3240), the weapon ($329C), the attack lamp ($3129) and the threat lamps ($314D), then falls into draw_tac"
  },
  {
   "address": 12564,
   "type": "line",
   "text": "Redraws the TAC display: the data page ($336F) when $7C is 0, the target's picture ($3501) otherwise"
  },
  {
   "address": 12574,
   "type": "line",
   "text": "Clears the TAC display: pattern 1 ($8F80), then $B788 and $B839 in SEG0"
  },
  {
   "address": 12585,
   "type": "line",
   "text": "Lights the lamp at screen cell $E2F1 (and its copy at $62F1) in colour $8A when something in slots 1-5 whose type's $0AEF is not zero (a missile, or a ship that is no threat) has the player (slot 0) as its target; $C5 otherwise"
  },
  {
   "address": 12621,
   "type": "line",
   "text": "Sets the three lamps at $E33B, $E363 and $E38B (with copies at $63xx): for each of up to three ships in slots 1-5 whose type's $0AEF is zero, a level of 1 for present, 2 with a target, 3 with the player as its target; each level picks a colour from threat_colours ($319F). A fourth and fifth such ship count in $89 and $8A, which no lamp shows"
  },
  {
   "address": 12703,
   "type": "line",
   "text": "Colour for a threat lamp level X+1, 0-3, from threat_colours"
  },
  {
   "address": 12718,
   "type": "line",
   "text": "The threat lamps' colours for levels 0-3: $BC $C5 $24 $8A"
  },
  {
   "address": 12722,
   "type": "line",
   "text": "The speed readout. In Newtonian flight ($0D02) the shown speed is the ship's actual speed ($7C21, at most 99), also written to $0415; \"CF\" or \"NF\" (from $323A) is printed, a reversed mark when the drive is damaged ($0409 bit 2), then the number ($9F56); then the speed bar: $7C21's value (at most $42) fills the bar at x $18-$5A, row $21, in pattern 5 against pattern 1 ($8C23)"
  },
  {
   "address": 12858,
   "type": "line",
   "text": "\"CF\" for cruise flight and \"NF\" for Newtonian, the speed readout's labels"
  },
  {
   "address": 12864,
   "type": "line",
   "text": "The hit-points bar: a quarter of the player's hit points (bits 2-8 of $051D/$051E), plus one, at most $3C, drawn at x $4E, row $13, in pattern 4 against pattern 1, in pattern 7 (the warning colour) when under 15"
  },
  {
   "address": 12956,
   "type": "line",
   "text": "The weapon readout at column $1E, row $1E. For the beam: a reversed mark when it is damaged ($0409 bit 1), the heat level ($0D00/2, at most 3) as one of four symbols, A or M for automatic or manual fire, then \" -\". For a missile: its symbol ($7C), the count left and a space. The cells under the first character ($E366, $E33E) get colour $5D, or $2A when a missile cannot be fired (none left, or reloading, $0836). The launcher's damage ($0409 bit 0) was meant to reverse the count and stop it too, but the AND #$01 at $32F2 tests what print_char left in A, $BC or 0, so it never does. Then the weapon's two-character name ($3363) and its colours at $E36B/$E343 ($3367) and $E36C/$E344 ($336B), each also written to the copy at $63xx"
  },
  {
   "address": 13155,
   "type": "line",
   "text": "The first of the two characters naming each weapon (beam, then the three missile types), the second being the next character"
  },
  {
   "address": 13159,
   "type": "line",
   "text": "The screen colours of each weapon's name, two tables of four ($3367 and $336B)"
  },
  {
   "address": 13163,
   "type": "line",
   "text": "The second colour table of weapon_colours, written to $E36C/$E344"
  },
  {
   "address": 13167,
   "type": "line",
   "text": "The TAC's data page. With no target, an empty name line, the hit points of the player ($345D) and the systems ($3480). For a ship target (slots 0-5): name ($33B5), its label ($33EA), the range ($33F8), its tactic ($3435), hit points and systems. Any other target: name and range. Ends in $87FE"
  },
  {
   "address": 13237,
   "type": "line",
   "text": "Prints the target's type name ($0B12/$0B13) at column $0E, row $2E, padded with spaces to column $15; a reversed mark first when the target is a ship targeting the player"
  },
  {
   "address": 13290,
   "type": "line",
   "text": "Prints the target's own three-character label ($366D) at column $15, then turns reverse off"
  },
  {
   "address": 13304,
   "type": "line",
   "text": "Prints \"RAN \" and the range to the target: the distance from the player ($7947), a log, plus 2 (four times the distance) and made a number ($B5E0); $75 or more in the top byte prints \"30+ km\", otherwise the number ($9EBF) and \"m\""
  },
  {
   "address": 13365,
   "type": "line",
   "text": "Prints \"TAC \" and the ship's tactic ($043F), its name from the list of eight-byte names at $0CAE"
  },
  {
   "address": 13405,
   "type": "line",
   "text": "Prints \"ARM  \" and the slot's hit points ($051D, $9EBF)"
  },
  {
   "address": 13440,
   "type": "line",
   "text": "Prints \"SYS \" and six system letters, c f a e b m, for the bits $20 $10 $08 $04 $02 $01: a space for a system the ship's type does not have ($0C45), reversed for one damaged ($0409)"
  },
  {
   "address": 13500,
   "type": "line",
   "text": "One letter of tac_systems: bit A of the type's systems ($0C45) and of the slot's damage ($0409) decide blank, reversed or plain; Y holds the letter"
  },
  {
   "address": 13541,
   "type": "line",
   "text": "\"30+ km\", printed in place of the range when it is too great for the number ($75 or more in its top byte, tac_range); then the TAC labels \"RAN \" ($34EC), \"TAC \" ($34F1), \"ARM  \" ($34F6) and \"SYS \" ($34FC)"
  },
  {
   "address": 13548,
   "type": "line",
   "text": "\"RAN \", the TAC's label for the range, zero-ended; print_text's patched LDA at $9BAA still pointed here when the snapshot was taken"
  },
  {
   "address": 13569,
   "type": "line",
   "text": "The TAC's picture page: the player's target (or the player's own ship with none) drawn in the TAC window in 3D. Clears the window (pattern 1, $B788, $8E17 at x $70, y 9, $4F by $2D), sets the drawing scale ($66CA with $0200), draws the model ($354C), then $B839, puts back the main view's flag $3A and scale ($66CA with 0) and ends in $87FE"
  },
  {
   "address": 13644,
   "type": "line",
   "text": "Draws slot $A2's model in the TAC: the viewing distance is the type's $0A63 word plus $02CE (kept at $366A). The camera is the player's orientation (slot 0's block at $044B, or the identity at $0DA8 when the TAC shows the player's own ship) with its third row replaced by the way from the slot to the player ($92CC) and made orthonormal ($923E); that row times the distance ($95A0) is turned into the slot's frame by the slot's orientation (the identity past slot 6, $9160, $934B), and the two orientations are multiplied into $0D40 ($91B0). Then jumps into the model's own code through the type's model pointer ($08F8/$08F9) with the type's $0999 and $0A63 words in $76/$77 and $5F/$60"
  },
  {
   "address": 13924,
   "type": "line",
   "text": "Nine bytes whose address tac_draw_model passes to the model's code in $74/$75, with $0D40 in $78/$79"
  },
  {
   "address": 13930,
   "type": "line",
   "text": "The viewing distance tac_draw_model works out, three bytes"
  },
  {
   "address": 13931,
   "type": "line",
   "text": "tac_distance's middle byte"
  },
  {
   "address": 13932,
   "type": "line",
   "text": "tac_distance's top byte"
  },
  {
   "address": 13933,
   "type": "line",
   "text": "Prints the three-character label of ship slot A, kept at $0421+3*A (each ship has one, from fill_slot)"
  },
  {
   "address": 13961,
   "type": "line",
   "text": "The computer ships' minds, every 17th call (counter $3808, 16 down to -1): for each ship in slots 5-1 whose AI state ($041B) is not 0: works out the distance to its target ($7947, kept in $D0-$D4); every third time round (counter $3809), for a ship whose $0403 is clear, a ship without a target looks for one ($3701), one with a target reconsiders its attitude ($3739) and tactic ($375F). Every time, a ship with a target sets its speed ($37A8), steers ($3CAB) and may fire ($38C1). Then $3A2D"
  },
  {
   "address": 14081,
   "type": "line",
   "text": "A ship without a target takes the one in $0439 if it has been given one; otherwise looks for an enemy ($3811). Found: it becomes the target ($0445), and $C6. None: AI state 1, tactic 0 (cruise) at that tactic's speed ($0C9A), and one time in eight $3CDC"
  },
  {
   "address": 14137,
   "type": "line",
   "text": "Unless its AI state is 2, the ship decides how it stands to its target ($3BE0): AI state $FE to fight, or $FF with tactic 7 (flee)"
  },
  {
   "address": 14175,
   "type": "line",
   "text": "For a ship that is fighting ($041B = $FE): beyond $0861 in distance (a log: about 333 units) the tactic is 2 (pursue). Otherwise a ship cruising or pursuing takes the type's own tactic ($0C38), and one in any other tactic changes, one time in ten (a random number of $E6 or more), to one of seven drawn from ai_tactic_choices. The distance test is signed: a negative log (very close) counts as near"
  },
  {
   "address": 14248,
   "type": "line",
   "text": "Sets the ship's speed ($0415) from its tactic: the tactic's speed ($0C9A), or, against a ship target, by the tactic's speed rule ($0CA4): negative takes the target's speed ($7C21), 1 the average of the two, 2 one from the distance ($37E7), 0 leaves the tactic's speed"
  },
  {
   "address": 14311,
   "type": "line",
   "text": "Speed rule 2: 5 when the target is more than about 45 degrees off the nose (negative $D4 or $D2/$D3 below $FF7D), otherwise $4B while far ($D0/$D1, a log, at $0861 or over: about 333 units) and the tactic's speed while close"
  },
  {
   "address": 14344,
   "type": "line",
   "text": "Counts ship_ai's calls from 16 down; the minds run when it passes zero, on every 17th call"
  },
  {
   "address": 14345,
   "type": "line",
   "text": "Counts ship_ai's passes 2, 1, 0: target, attitude and tactic are reconsidered at 0"
  },
  {
   "address": 14346,
   "type": "line",
   "text": "The seven tactics ai_tactic draws from: close, follow, swerve, stand, circle, elude, ram"
  },
  {
   "address": 14353,
   "type": "line",
   "text": "Looks among ship slots 0-5 (not itself, in use, $0403 clear) for the one its faction most dislikes ($387E most negative, $FE before $FF); if none, takes the target of a ship of a faction it is allied to (attitude 2). Returns the slot in Y, negative for none"
  },
  {
   "address": 14462,
   "type": "line",
   "text": "How faction A stands to faction X: from the player (X = 4) it is the player's standing with that faction ($072E+A), except that a type-$0C ship (in Y) is unfriendly ($FF) while the player has a bounty ($0726/$0727), and otherwise takes the standing like any other ship (the LDA #0 at $3899 is overwritten by the next instruction); a negative faction gives 0. Between two computer factions it is faction_table entry A*4+X. $FE is hostile, $FF unfriendly, 0 neutral, 1 friendly, 2 allied"
  },
  {
   "address": 14513,
   "type": "line",
   "text": "How each of the four factions stands to each other, row by faction: 1 FF FF FE / 0 1 1 FF / FF 2 2 FE / FE FE FE 2"
  },
  {
   "address": 14529,
   "type": "line",
   "text": "A fighting or fleeing ship ($041B negative, $0403 clear) whose distance to its target is below $08A4 as a log (about 400 units, a beam's reach in trace_beam) fires three times in ten (a random number below $4D). The flag $BD is set when the value $7947 left in $D2-$D4 has a positive top byte and a low word at or above $FFCB as a signed comparison: the target within about 30 degrees of the nose. Then three times in ten a missile of its type's kind ($0C5F + 8; none with a damaged launcher, $0409 bit 0, or a type without missiles), a type 11 missile only with $BD set; otherwise the beam ($20EC), with $BD set or when its type's beam value ($0C52) has bit 7 set"
  },
  {
   "address": 14634,
   "type": "line",
   "text": "Key G, surrender. Clears the view and shows the surrender text ($CF88). It counts only with exactly one ship fighting the player and the first time ($0832): then the rank count $072B gains $072A. A faction hostile to the player refuses ($CF81); one time in five any other ignores it ($CF7F). The Imperium (faction 2) asks for the bounty ($0726/$0727) plus 50 credits ($CF87, Y/N $3BA1): paid, the bounty is cleared ($CF86) and that ship and every computer ship's missile leave; too little money, $CF85. Any other faction asks for the cargo ($CF84): yes with an empty hold gives $CF83, otherwise the hold is emptied ($CF82) and the ship and the missiles leave. After either, print_wrapped is called again with what clear_tac left in A and X. Refusing gives $CF80"
  },
  {
   "address": 14893,
   "type": "line",
   "text": "Checked after ship_ai: a badly damaged merchant offers its cargo. Only once per encounter ($0832), when the player's target is a ship of faction 1 targeting the player, with under a quarter of its type's hit points ($0AA9 word / 4), no other ship targeting it or the player. The chance is a random 0-100 ($A298, 101 outcomes) under $43, halved when the player has under a quarter of its own hit points and again when that faction is hostile to the player. Then the view shows the offer ($CF8D and a random cargo name, $2EF7 with 0-19, and \"?\") with AGREE or REFUSE ($3BA1): refused, $CF8C; agreed, $CF8B, and with room in the hold ($CF89 if full) one or two units of that cargo ($CF8A, cargo_add), every computer ship's missile and the ship leave, the standing with faction 1 may drop (one time in four), and $079A counts it when $079B is set"
  },
  {
   "address": 15265,
   "type": "line",
   "text": "Shows the two-item menu AGREE / REFUSE ($99DE with the list of pointers at $3BCF) centred on the message window, then prints character $11. Returns Z set for AGREE"
  },
  {
   "address": 15307,
   "type": "line",
   "text": "The closing quote and line breaks after an offer, then the pointers to \"AGREE\" and \"REFUSE\" ($3BD3) and the words themselves"
  },
  {
   "address": 15328,
   "type": "line",
   "text": "Whether ship X fights target Y: a score from 4 less than A, plus the ship's hit points in eighths of its type's maximum, plus half the difference of the two types' rank values ($0C79), plus one when the factions are hostile, plus two when the target already has a given target ($0439), minus two when the ship has one, minus one for faction 1, plus two for faction 2, and exactly 2 for faction 3. Returns it in A: negative means flee. A target past slot 5 always gives 1"
  },
  {
   "address": 15504,
   "type": "line",
   "text": "Changes the player's standing with faction Y by A, between -2 and 2; a negative faction or faction 3 is left alone"
  },
  {
   "address": 15531,
   "type": "line",
   "text": "Steers a computer ship once it has stopped rotating: by its tactic's steering mode ($0C86): negative none, 3 random rates ($3CDC), 2 turn to the target's heading (its forward vector, $045D+27*slot, or $0DBA past slot 6), 0 turn toward the target, 1 turn away from it"
  },
  {
   "address": 15580,
   "type": "line",
   "text": "Gives ship X random turn, pitch and roll rates, each -32 to 32 ($3D61)"
  },
  {
   "address": 15713,
   "type": "line",
   "text": "A random rate from -32 to 32: the random byte's low six bits less $1F, less one more when random's carry is clear"
  },
  {
   "address": 15721,
   "type": "line",
   "text": "Turns ship X toward the direction at ($74): rotates it into the ship's frame ($9160 with the ship's orientation), finds its two angles in 1024ths of a turn ($983B into $6F-$73), takes the tactic's offset (A, from $0C90) off the size of the first, so that the ship settles with the target that far to one side, and divides each angle by the type's turning step (its log less $0BE2's), clamped to a signed byte ($B447, $B5C5, $B771): the steps for the turn rate ($0516) and, its sign turned, the pitch rate ($0508)"
  },
  {
   "address": 15885,
   "type": "line",
   "text": "Makes a ship's three-character label in $85-$87 ($3E1D each)"
  },
  {
   "address": 15901,
   "type": "line",
   "text": "A random digit 0-9 or capital letter A-Z"
  },
  {
   "address": 15916,
   "type": "line",
   "text": "The 3D view's draw list, from $A488 each frame: clears every slot's on-screen flag ($0621), tests every object in use against the view ($3EB8 with the type's radius from $0A63), keeping up to 14 in view; then draws them from the farthest to the nearest: each time the remaining entry with the greatest depth ($0D7E/$0D70) is drawn ($6400 with carry set, then $7033) and taken off the list"
  },
  {
   "address": 16002,
   "type": "line",
   "text": "The operand of LDX #: build_draw_list writes the number of entries less one here, the index the search for the farthest entry starts from"
  },
  {
   "address": 16055,
   "type": "line",
   "text": "build_draw_list's count of entries still to draw"
  },
  {
   "address": 16056,
   "type": "line",
   "text": "Whether the object at ($58) relative to the viewer ($5A) is in the view: its distance along the view axis must be within its radius of the front ($94E7, $0D3E), and its sideways and vertical distances inside the view's slopes ($B398 with $0D6A-$0D6F and $0D68-$0D69). The three view coordinates go to $FF05-$FF0D + 9*entry. In view: depth to $0D7E/$0D70, the slot to $0D9A, on-screen flag $0621 set, and the size from $66AF to $0D8C; a far, small object (size under $0B) is drawn at once ($6400) and the carry comes back clear. Carry set when it is to be drawn later"
  },
  {
   "address": 16372,
   "type": "line",
   "text": "The last 12 bytes of SR, zeros that nothing reads"
  },
  {
   "address": 25600,
   "type": "line",
   "text": "Draws draw-list entry $0D3D (its slot from $0D9A to $5C, type to $5D). With the carry set and a slot below 7 (an object with an orientation): the position relative to the camera ($58) rotated into the object's frame ($92CC, $9160, $934B) into $0D5B, and the object's orientation times the camera's ($5A) into $0D40 ($91B0). Otherwise the plain linear difference into $0D5B and the orientation at $0DCC. Then ($74) = the entry's view coordinates at $FF05, ($76) = the type's draw-data word ($0999), $5F/$60 = its scale ($0A63), $4D = its screen size ($0D8C), and the type's draw routine ($08F8) is entered through ($94). A far, small 3D object (carry clear, type flag bit 7) is drawn as a dot instead ($8834 with $6518, half size); a type without flag bit 7 gets its colour pattern ($8F80) and its centre projected ($6773) first, unless it is behind the viewer"
  },
  {
   "address": 25880,
   "type": "line",
   "text": "The colour byte for draw_object's far objects: $99, read by $8834 as its draw data"
  },
  {
   "address": 25881,
   "type": "line",
   "text": "Moves the camera of the outside views, from the main loop: nothing in the cockpit ($0D3C = 0). Chase view (1): the camera at $668B is moved along $0896 by a step of sign(12 - d) * sqrt(|12 - d|) / 128, d its distance from the player (camera_offset). Cinematic view (2): once the ship is 100 or more away ($06A4 in log form) the camera is put back ahead of it (place_camera). Then both look at the ship: the offset becomes row 2 of the camera's orientation at $6694, $0DB1 (straight up) row 1, and mat_orthonormal finishes it"
  },
  {
   "address": 26032,
   "type": "line",
   "text": "Sets up the view mode in $0D3C (from the V key, $6B22 and INIT): the cockpit puts the camera at the player's position ($065D) with the player's orientation ($044B) and stops the player's own ship being drawn ($0649 = 0); the outside views draw it and use the camera at $668B/$6694, placed ahead (place_camera). Prints the view's name (view_names)"
  },
  {
   "address": 26099,
   "type": "line",
   "text": "Puts the outside camera ahead of the ship: the player's velocity ($0545) in log form, normalised, times 80 ($0652 in log form), back to linear, with 10 added to x's middle byte, plus the player's position ($065D), into $668B"
  },
  {
   "address": 26168,
   "type": "line",
   "text": "The camera's offset from the player in log form ($668B less $065D, $92CC) into $6B-$73, and its length ($9531) in $5F/$60"
  },
  {
   "address": 26206,
   "type": "line",
   "text": "Three pointers to the view names: cockpit, chase, cinematic"
  },
  {
   "address": 26207,
   "type": "line",
   "text": "The high bytes of the view name pointers, read at $665F + 2 * view"
  },
  {
   "address": 26212,
   "type": "line",
   "text": "\"Cockpit view\""
  },
  {
   "address": 26225,
   "type": "line",
   "text": "\"Chase view\""
  },
  {
   "address": 26236,
   "type": "line",
   "text": "\"Cinematic view\""
  },
  {
   "address": 26251,
   "type": "line",
   "text": "The outside views' camera position, 9 bytes (three linear 24-bit numbers)"
  },
  {
   "address": 26252,
   "type": "line",
   "text": "x's middle byte of camera_pos, where place_camera adds 10"
  },
  {
   "address": 26253,
   "type": "line",
   "text": "x's high byte of camera_pos, carried into by place_camera"
  },
  {
   "address": 26260,
   "type": "line",
   "text": "The outside views' camera orientation, 27 bytes: three rows of three log-form numbers; row 2 at $66A6 points from the ship to the camera"
  },
  {
   "address": 26287,
   "type": "line",
   "text": "An object's size on screen from its log depth in $5F/$60 (less the view's front $0D3E, from in_view): the antilog of $0D64 less it, $FF when that is 256 or more; returned in A"
  },
  {
   "address": 26314,
   "type": "line",
   "text": "Sets up the projection from the log-form zoom in $5F/$60 (0 from INIT, the TAC's own from $3532/$3549), kept in $0D68: $0D64 = zoom plus log2 of the view's width $41, $0D66 = $0D64 less $31/256 (a slightly smaller vertical scale), $0D6A = $0D66 less log2 of the height $42; $0D6C and $0D6E = log2 of sqrt(1 + v*v) for $0D68 and $0D6A ($675C), the view's edges for in_view"
  },
  {
   "address": 26460,
   "type": "line",
   "text": "log2 of sqrt(1 + v*v) for the log-form v in $5F/$60: the log doubled, 1 added ($B398 with 0), and halved"
  },
  {
   "address": 26483,
   "type": "line",
   "text": "Projects the log-form point at ($74) to the screen: x and y each divided by twice z (their logs less z's plus one), scaled by $0D64 and $0D66; when either log is 13 or more both are pulled in by the excess so the larger lands at 8192, which keeps the direction for clipping. Back to linear ($B5C5): x plus the centre $56 into $51/$52, y plus $57 into $53/$54"
  },
  {
   "address": 26624,
   "type": "line",
   "text": "Mid-instruction in MAIN. SR's $154B jumps here as WON's entry, after the ending has loaded WON over MAIN at $6800"
  },
  {
   "address": 26643,
   "type": "line",
   "text": "The missiles' built-in model (types 9 and 10; type 10 recoloured by its draw data at $0A16): the prologue every model starts with, which puts its header's address ($681E) in $7A/$7B and jumps to draw_model"
  },
  {
   "address": 26654,
   "type": "line",
   "text": "model_missile's header, 36 bytes copied to $9A-$BD: $9A set once its normals are made, then the counts (10 points, 2 reference points, 4 normals, 7 polygons, 10 axis vectors) and the pointers to its tables at $6842-$6929"
  },
  {
   "address": 26690,
   "type": "line",
   "text": "model_missile's tables: point parents and axes, the axis vectors in log form, reference points, normals (filled in on first use), the polygons' order, normal and colours, their vertex counts and vertex lists"
  },
  {
   "address": 26922,
   "type": "line",
   "text": "The player's Sunracer, type 0's built-in model: prologue with its header at $6935"
  },
  {
   "address": 26933,
   "type": "line",
   "text": "model_sunracer's header: 19 points, 3 reference points, 8 normals, 10 polygons, 11 axis vectors, and the pointers to its tables at $6959-$6AB2"
  },
  {
   "address": 26969,
   "type": "line",
   "text": "model_sunracer's tables, laid out as model_missile's"
  },
  {
   "address": 27315,
   "type": "line",
   "text": "Tests every pair of objects for contact, once a pass from the main loop. For each ship slot 5..0 with a hit radius ($0635), against every slot 19..0 with one: the two types' radii ($0A1D words) are added and within_range ($74A3) checks the two positions box-wise against the sum; on contact on_contact ($6B22) handles the pair. Each ship slot's collision cooldown $040F counts down by one. $0837 starts each pass at $FF: on_contact sets it to the base the player touched"
  },
  {
   "address": 27329,
   "type": "line",
   "text": "The ship's radius in $C8/$C9"
  },
  {
   "address": 27377,
   "type": "line",
   "text": "($74) the ship's position, ($76) the other object's position; $60/$61 the sum of the radii"
  },
  {
   "address": 27410,
   "type": "line",
   "text": "The ship's collision cooldown ($040F) counts down to zero"
  },
  {
   "address": 27426,
   "type": "line",
   "text": "Slot $C6 (a ship) touches slot $C7. In an outside view ($0D3C nonzero) touching a base (type flag bit 0) just puts the view back in the cockpit (set_view). In the cockpit view, when one of the two is the player and the other's type has flag bit 7 (a 3D model) without bit 5 (not a missile), the other's slot goes in $0837 and nothing else happens here: dock_check ($7033) settles the touch when that object is drawn, so something out of view cannot be rammed. Every other pair goes to collide ($6B6C)"
  },
  {
   "address": 27500,
   "type": "line",
   "text": "The collision proper between slot X and slot Y ($B2/$B3, their types in $B8/$B9; Y's type is also kept in $0835 as the last thing that hit). By the second object's type: type $1B blows up the first (hit_shard); a Malir gate ($14) touched by the player goes to gate_contact ($6C54); when either is a missile (flag bit 5) missile_hit ($6C7E); a hazard (flag bit 6) hazard_hit ($6CC5); anything else is a ram ($6BC3)"
  },
  {
   "address": 27562,
   "type": "line",
   "text": "Type $1B (a hazard and a particle): it explodes and the first object takes its damage ($0AEF, 33) through blow_up ($6E4B); a new $1B is made at the origin ($0DC3), which place_particles ($7772) then moves near the camera"
  },
  {
   "address": 27587,
   "type": "line",
   "text": "Two objects ram each other. Each ship's cooldown is checked (contact_cooldown, which leaves when it was already running); when the player is one of them the window flashes (set_colour with the code in $8C, fill_window) and sound 9 plays. The damage is the relative speed: the two velocities ($0545 blocks) subtracted (vec_sub_to_log), the difference's length (vec_length) times 8 (3 added to the log's whole part), back to a whole number (log_to_lin), of which only the low byte is kept in $B7. Each takes that damage from the other (damage, $6EA0), then the two bounce apart ($6D08)"
  },
  {
   "address": 27691,
   "type": "line",
   "text": "X attacker, Y victim, A = 0 (shields count fully)"
  },
  {
   "address": 27717,
   "type": "line",
   "text": "Bounce: $7A/$7B point at the difference vector at $BA"
  },
  {
   "address": 27732,
   "type": "line",
   "text": "The player touches a Malir gate: the dot product (vec_dot) of the ship's third orientation row ($045D) with the unit z axis ($0DBA) must be at least 0.8 either way (its log above $FFAE), that is the ship must be lined up with the gate's axis, and the speed (speed_of) 20 or more; then the trip starts (gate_jump, $7134). Otherwise nothing happens"
  },
  {
   "address": 27774,
   "type": "line",
   "text": "A missile is in the collision. The missile is made the first object ($B2, slots and types swapped when it was the second), its type kept in $0835. A missile does not hit the ship that launched it ($0433). Touching anything in slot 6 and up, or a ship other than the one it is aimed at ($0445), it just turns into an explosion (type $22 at its position, the missile freed); a missile with no target hits any ship. A hit explodes the missile against the ship with its type's damage ($0AEF: 100 for type 9, 250 for type 10, 75 for type 11, the plasma torpedo by its death text) through blow_up ($6E4B)"
  },
  {
   "address": 27845,
   "type": "line",
   "text": "The second object is a hazard (flag bit 6: planets, the black hole, type $1A, which the death texts make a corrosive gas cloud, and the stars $1C and $1D). The player hears sound 11; the first object takes the hazard's damage ($0AEF; 255 for planets and the black hole) with no attacker (X = $FF) and A = $FF (no shield reduction). A gas cloud ($1A) touched is replaced by a new one at the origin"
  },
  {
   "address": 27894,
   "type": "line",
   "text": "For a ship slot X (below 6): sets its collision cooldown $040F to 2 and, when it was already running, drops the caller's return address so the caller (ram) leaves at once. This keeps one contact from doing damage on every frame"
  },
  {
   "address": 27912,
   "type": "line",
   "text": "Separates slot X and slot Y ($94/$95) after a ram: both are backed off one step along their velocities (back_off) and given a random turn (jolt_turn). When the second has flag bit 4 (it moves) the bounce is an elastic collision with the radii ($0A1D) as the masses: with d the relative velocity at ($7A) (first less second), the first's velocity becomes the second's plus d (r1-r2)/(r1+r2) and the second's becomes its own plus d 2r1/(r1+r2), the textbook head-on result. Against something that does not move, the first just reverses its velocity (reverse_velocity)"
  },
  {
   "address": 28113,
   "type": "line",
   "text": "Velocity of slot Y = the second's velocity (at ($76)) plus the vector at ($7A) times the log-form ratio in $5F-$61 (vec_scale_signed, vec_log_to_lin, vec_add_lin)"
  },
  {
   "address": 28164,
   "type": "line",
   "text": "Negates the velocity of slot Y (its $0545 block, vec_neg_lin)"
  },
  {
   "address": 28189,
   "type": "line",
   "text": "Moves slot Y back one step: its position less its velocity (vec_sub_lin)"
  },
  {
   "address": 28217,
   "type": "line",
   "text": "A computer ship (slot 1-5) gets a random turn rate ($0516) after a ram"
  },
  {
   "address": 28235,
   "type": "line",
   "text": "Slot X (a missile or a type $1B hazard) explodes against slot Y, which takes damage A ($AA). When Y is the player the window flashes (code $12), the ship is jolted (jolt_player) and sound 5 plays, otherwise sound 6. An explosion (type $17) is made at X's position, Y takes the damage (damage, attacker X, with A = 1 when X is a type 11 missile so the shields count one step less), and X's slot is freed"
  },
  {
   "address": 28301,
   "type": "line",
   "text": "Puts random numbers in the low bytes of the player's three velocity components ($0545, $0548, $054B): a small random jolt"
  },
  {
   "address": 28320,
   "type": "line",
   "text": "Slot Y takes damage $80 from slot X (X = $FF for no attacker); A ($A0) is 0 normally, 1 for a type 11 missile (one step of the shields less), $FF for no shield reduction. Nothing for zero damage. A slot 6 and up is never damaged, but a base (type flag bit 0) hit by the player sets $0783, which the base code reads when you dock ($A5B1 in SEG1) and which is cleared when the day changes. A ship with $0403 set is simply freed. Otherwise the ship may remember its attacker in $0439 ($6EDC: the player, a missile's launcher, or a ship that was aiming at it, unless the attacker is in slot 6 and up or is already its target), the damage is cut by the shields (shield_reduce), and a computer ship is sent spinning (random_rates) when a random number from 0 to the damage comes out 6 or more. A hit of 10 or more knocks out a system one time in five ($6F4B) instead of reaching the armour; any other hit comes off the armour word ($051D/$051E), and below zero the ship is destroyed (destroy_object) with the credit going to the attacker (or a missile's launcher, $0433)"
  },
  {
   "address": 28380,
   "type": "line",
   "text": "Records the attacker in $0439, the code above having left out an attacker in slot 6 and up or one that is already this ship's target: the player is recorded; a missile ($0403 set) whose launcher byte ($0433) is 0 or more records its launcher, whatever the missile was aimed at; any other ship is recorded only when it was aiming at this one ($0445)"
  },
  {
   "address": 28427,
   "type": "line",
   "text": "A hit of 10 or more knocks out a system one time in five"
  },
  {
   "address": 28440,
   "type": "line",
   "text": "The armour word of slot Y less the damage"
  },
  {
   "address": 28491,
   "type": "line",
   "text": "Knocks out a random system ($6FC7; picked again when the first pick is the laser or the launcher): sets its bit in $0409, and for the player prints \"<system> hit\" on the message line ($9E4C, $9ADC) when the ship has that system ($0C45). The armour is spared; a system already out passes the damage on to the armour instead"
  },
  {
   "address": 28552,
   "type": "line",
   "text": "The damage after the shields, in A. With A = $FF ($A0 negative) the damage stands. Otherwise bearing ($7947) gives the dot product of the victim's third orientation row with the line from attacker to victim; ROR $61 puts bit 0 of its sign in the carry, set for a hit from behind (the third row points to the ship's rear). A hit from behind uses the low nibble of the type's shield strengths ($0C6C), unless the aft shield is out ($0409 bit 3); from the front the high nibble, unless the fore shield is out (bit 4). Each step of strength halves the damage, one step less when $A0 is 1"
  },
  {
   "address": 28615,
   "type": "line",
   "text": "A random system 0-5 in $A3 and its bit (1 shl $A3) in $A4: launcher, laser, engine, aft shield, fore shield, ECM"
  },
  {
   "address": 28633,
   "type": "line",
   "text": "Pointers to the six \"<system> hit\" messages, indexed by the bit number of $0409"
  },
  {
   "address": 28634,
   "type": "line",
   "text": "The high bytes of the system message pointers, read at $6FDA + 2 * bit"
  },
  {
   "address": 28645,
   "type": "line",
   "text": "The messages, zero-ended: \"Launcher hit\", \"Laser hit\", \"Engine hit\", \"Aft Shield hit\", \"Fore Shield hit\", \"ECM Unit hit\""
  },
  {
   "address": 28723,
   "type": "line",
   "text": "Called by build_draw_list ($3EA6) after each object is drawn, for the object the player touched in the cockpit view ($0837 against the drawn slot in $5C), when its face signs are fresh. facing_face finds the first group of the model's faces all turned toward the player: none, and nothing happens; group 0 (a base's docking face) with a base (flag bit 0) and the player's speed (speed_of) under 21 docks (dock, dropping the caller's return); any other group is a collision (collide)"
  },
  {
   "address": 28770,
   "type": "line",
   "text": "Walks the model's face groups (($BC) the size of each, ending with 0; ($BA) the normals they list): returns in Y the first group whose faces all have a negative sign in $FA36 (face_signs: turned toward the viewer), Z set for group 0; Y = $FF (N set) when there is none"
  },
  {
   "address": 28820,
   "type": "line",
   "text": "Docks. In system 9 ($071D, the Manchi system) the game is won: load_won. Otherwise the models are reset, the screen cleared to colour 1 and bank 3 shown, the hum stopped ($1E = 0), SEG1 loaded over SEG0 and the base run (station_run, $A49A) until the player leaves. Then the slot models and SEG0 come back, the speed is set to 0, the ship is backed off twice along its velocity, its velocity made a unit vector away from the base (times 4 at a base whose map byte $5610 is $10), backed off once more, reversed, and given a collision cooldown of 8; the view goes back to the cockpit"
  },
  {
   "address": 28978,
   "type": "line",
   "text": "The log of the speed the ship leaves a base with: $0000 (1) normally, $0200 (4) at a base whose map byte $5610 is $10"
  },
  {
   "address": 28979,
   "type": "line",
   "text": "The whole part of the exit speed's log: 0 for speed 1, 2 for speed 4"
  },
  {
   "address": 28980,
   "type": "line",
   "text": "The Malir gate trip. No base touched, no destination ($072C = $FF), speed $7F, the player's thrust doubled ($0C05 + 1), and 256 passes of flying with the particles streaming past (the flight routines without the keys). Then the current system's map is loaded and the gate in this sector found in it (type $14 at the sector $071E/$071F); its entry ($55B0) points to four bytes at $5630: the system, the sector across and down it leads to, and the number of rings to pass, kept in gate_dest. \"Entering worm hole\" ($CF1D) is printed, every slot but the player's freed, the ship turned to face along z at speed 5 and put at the origin with no velocity, the wormhole made (make_wormhole) and flown ($0838 = 1) until wormhole_rings says it is over. Enough rings passed: the system and sector become the gate's, the new map is loaded, \"Entering \" ($CF1B) and the system's name ($5505) printed; too few: \"Faulty jump!\" ($CF1C) and the old map reloaded. The sector is then entered ($0D04-$0D06 = $FF, the navigation tiles, an encounter roll of $10, enter_sector), and the thrust put back"
  },
  {
   "address": 29000,
   "type": "line",
   "text": "256 frames of the jump: thrust, movement, then unless the frame is skipped (frame_skip3), the camera, the particles, drawing and showing the frame"
  },
  {
   "address": 29035,
   "type": "line",
   "text": "Finds the Malir gate (type $14) in the current sector among the map's 32 entries"
  },
  {
   "address": 29088,
   "type": "line",
   "text": "$CF1D printed, then everything but the player cleared away"
  },
  {
   "address": 29149,
   "type": "line",
   "text": "The wormhole loop: thrust, turning, movement, drawing unless skipped (frame_skip5), the keys, wormhole_step and wormhole_rings, while it returns carry set"
  },
  {
   "address": 29195,
   "type": "line",
   "text": "Rings passed against the number needed ($72C0)"
  },
  {
   "address": 29287,
   "type": "line",
   "text": "Shows the buffer just drawn: bank 3 or bank 1 by $3A bit 7, and flips the drawing buffer (flip_draw_buffer)"
  },
  {
   "address": 29304,
   "type": "line",
   "text": "Each wormhole frame: the ship moves a quarter unit along -z ($0663-$0665), and every 8th frame, unless $0741 is set, the armour word $051D/$051E loses one; below zero the player dies ($0835 = $1A, player_destroyed), with the corrosive-gas death text. Then the panel's speed and armour are redrawn"
  },
  {
   "address": 29373,
   "type": "line",
   "text": "Where the gate leads, from the system map: the system, the sector across, the sector down, and the number of rings to pass"
  },
  {
   "address": 29374,
   "type": "line",
   "text": "The sector across that the gate leads to"
  },
  {
   "address": 29375,
   "type": "line",
   "text": "The sector down that the gate leads to"
  },
  {
   "address": 29376,
   "type": "line",
   "text": "The rings of type $21 the gate needs passed for the jump to work"
  },
  {
   "address": 29377,
   "type": "line",
   "text": "Carry set while the trip goes on. When the ship reaches the next ring position ($749C/$749D, every 14 units along -z): finds the rearmost and the foremost ring within 224 units; if the ship is not inside the rearmost (within_range with type $1F's radius, $0A5B) the trip is over (carry clear). Otherwise the rearmost is freed, counted when it is a type $21 ring, and unless enough are passed a new ring is made 14 units beyond the foremost, its x and y drifted by the bend (ring_drift)"
  },
  {
   "address": 29571,
   "type": "line",
   "text": "A new bend: random length 0..19, half of it, random direction 0..7, from straight"
  },
  {
   "address": 29636,
   "type": "line",
   "text": "The bend's amount grows by 2 a ring for the first half, then falls"
  },
  {
   "address": 29671,
   "type": "line",
   "text": "Adds the bend amount ($74A0) to the new ring's x (Y = 1) or y (Y = 4) integer part, with the sign for the bend direction from drift_signs"
  },
  {
   "address": 29740,
   "type": "line",
   "text": "The first eight rings, one every 14 units along -z from the origin, and the ring counters set: next ring position 14 units ahead of the ship, none passed"
  },
  {
   "address": 29823,
   "type": "line",
   "text": "The type of ring number $749B: $1F for an odd number, $20 for 2 mod 4, $21 (the rings that count) for 0 mod 4"
  },
  {
   "address": 29841,
   "type": "line",
   "text": "Signs of the drift for the eight bend directions, overlapped: y signs from $7491 (0, 1, 1, 1, 0, -1, -1, -1), x signs from $7493 (1, 1, 0, -1, -1, -1, 0, 1)"
  },
  {
   "address": 29843,
   "type": "line",
   "text": "The x signs of the drift for the eight bend directions (1, 1, 0, -1, -1, -1, 0, 1), overlapping the y signs two bytes on"
  },
  {
   "address": 29851,
   "type": "line",
   "text": "Rings made in this bend sequence; $749C/$749D the next ring position; $749E/$749F the bend's length and half; $74A0 the bend amount; $74A1 the bend direction; $74A2 the rings passed"
  },
  {
   "address": 29852,
   "type": "line",
   "text": "Low byte of the next ring position along -z, moved 14 units on for each ring"
  },
  {
   "address": 29853,
   "type": "line",
   "text": "High byte of the next ring position along -z"
  },
  {
   "address": 29854,
   "type": "line",
   "text": "Rings left in the current bend, counted down; below zero a new bend starts with a random length of 0 to 19"
  },
  {
   "address": 29855,
   "type": "line",
   "text": "Rings left in the bend's first half, while its amount grows by 2 a ring; after that it falls by 2"
  },
  {
   "address": 29856,
   "type": "line",
   "text": "The bend amount, added to each new ring's x and y with the direction's signs"
  },
  {
   "address": 29857,
   "type": "line",
   "text": "The bend direction, 0 to 7, an index into the drift signs"
  },
  {
   "address": 29858,
   "type": "line",
   "text": "Rings of type $21 passed in this trip, compared with the gate's count at $72C0"
  },
  {
   "address": 29859,
   "type": "line",
   "text": "Carry set when the positions at ($74) and ($76) are within the distance in $60/$61 on every axis, clear as soon as one axis is not: the integer parts of z, y and x (bytes 7-8, 4-5, 1-2) compared one by one, a box rather than a sphere. Used for collisions and the wormhole's rings"
  },
  {
   "address": 29907,
   "type": "line",
   "text": "Speeds up or slows every ship toward its set speed: computer ships 5..1 always in cruise (cruise_thrust); the player in cruise when $0D02 is 0. In Newtonian flight ($0D02 set) the player's velocity changes only while the speed keys are held ($0D01 the direction): the type's thrust ($0C04, a quarter with the engine out) along the ship's axis is added, unless the new speed would pass the limit (a length of about 4.4 units a frame, 70 in the game's speed units)"
  },
  {
   "address": 30016,
   "type": "line",
   "text": "Cruise flight for ship X: the wanted velocity is minus the third orientation row times the set speed ($0415) / 16; the velocity moves toward it by at most the type's thrust ($0C04 log word, a quarter with the engine out) each frame, or takes it when closer than that"
  },
  {
   "address": 30152,
   "type": "line",
   "text": "The third orientation row of ship $94 times the log-form number in $5F-$61, as a linear vector at $0896"
  },
  {
   "address": 30190,
   "type": "line",
   "text": "Divides the log-form number in $5F/$60 by 4 when ship $94's engine is out ($0409 bit 2)"
  },
  {
   "address": 30204,
   "type": "line",
   "text": "Adds each moving object's velocity ($0545 block) to its position ($065D block): every slot 19..0 in use whose type has flag bit 4"
  },
  {
   "address": 30260,
   "type": "line",
   "text": "Turns the ships and the planet: slots 6..1 with a pitch, turn or roll rate are turned by turn_ship (slot 6, the planet, has its turn rate stepped up each frame so it keeps spinning). Then the player's three rates ($050F roll, $0516 turn, $0508 pitch, in 1024ths of a turn) become radians and turn the player's orientation ($044B, turn_by_rates), and the camera's orientation is transposed into $0DCC for drawing"
  },
  {
   "address": 30401,
   "type": "line",
   "text": "The signed byte in A, an angle in 1024ths of a turn, to log-form radians: int16_to_log, less $0759 (log2 of 1024 / 2 pi)"
  },
  {
   "address": 30429,
   "type": "line",
   "text": "Turns computer ship X: its type's turning step ($0BE2, a log word in 1024ths of a turn) is used on each axis whose rate is nonzero, with the rate's sign, and the rate counted one step toward zero; the angles turn the ship's orientation ($044B block, turn_by_rates)"
  },
  {
   "address": 30578,
   "type": "line",
   "text": "Re-places the space particles (types with flag bit 2) in slots 19..6 that are off screen or too close: their on-screen value $0621 (set by build_draw_list) 0 or 7 and more. They go around a point ahead of the camera (place_particle), so the particles always stream past the viewer"
  },
  {
   "address": 30622,
   "type": "line",
   "text": "A particle in slot Y: a moving one (flag bit 4) has its velocity cleared ($0DC3). The first one this frame works out the centre: a point 37 units ahead of the camera ($7838), pushed 21 units further along the way that point has moved since last time ($7872); every particle then goes to the centre plus a random offset of up to 10 (random_offset)"
  },
  {
   "address": 30776,
   "type": "line",
   "text": "The point 37 units ahead of the camera ($011D): the camera's position ($58) plus its third orientation row ($5A + 18) times -37 (log $0533, sign $FF)"
  },
  {
   "address": 30834,
   "type": "line",
   "text": "The point ahead of the camera from the last time particles were placed (9 bytes, a linear position)"
  },
  {
   "address": 30843,
   "type": "line",
   "text": "Gravity. For each object in slots 19..6 whose type has flag bit 1 (planets, the black hole and the stars $1C and $1D), each ship slot 5..0 with a radius is pulled toward it (gravity_pull) and the pull added to its velocity. The strength is from the type's $0A63 log word, less 2, doubled"
  },
  {
   "address": 30956,
   "type": "line",
   "text": "The pull of object ($74) on ship ($76) at $6B: the unit vector toward the object times the strength over the distance squared (log: $96/$97 less twice the log of the distance), so it falls with the square of the distance. When the pull on the player reaches 2^-9 (log $F700) \"Warning: nearing strong gravity well\" ($CF1E) is printed, once ($0834, cleared each HELM step)"
  },
  {
   "address": 31047,
   "type": "line",
   "text": "For slot X and slot Y: the vector from X to Y in log form at $0896, its length in log form in $80/$81 (also $5F/$60), made a unit vector, and its dot product with Y's third orientation row ($045D block) in $5F-$61. Y is saved into the operand at $797D for that last step"
  },
  {
   "address": 31100,
   "type": "line",
   "text": "The LDY operand at $797D is the slot saved at $7947"
  },
  {
   "address": 31101,
   "type": "line",
   "text": "The slot bearing saves at $7947, the LDY operand that picks Y's orientation for the dot product"
  },
  {
   "address": 31119,
   "type": "line",
   "text": "The four arrowheads that point to the player's target ($0445). The target's position relative to the player, turned into the ship's frame (mat_times_vec with $044B) and projected; each screen coordinate held to the window, counting how many were inside. When the target is ahead (its z sign in $08A7 negative) and on screen, the arrowheads sit on the four edges pointing in at its x and y; otherwise they are drawn 5 pixels (3 rows) in and point outward, toward where it lies"
  },
  {
   "address": 31343,
   "type": "line",
   "text": "An arrowhead 9 rows high at x $47, row $53 (the target's y) as its middle: one pixel wide at the top widening to 5 and back, pointing right"
  },
  {
   "address": 31455,
   "type": "line",
   "text": "The same arrowhead pointing left, ending at x $47"
  },
  {
   "address": 31567,
   "type": "line",
   "text": "An arrowhead at the target's x ($51, even) and row $4B: 8 pixels wide narrowing over 4 rows upward"
  },
  {
   "address": 31669,
   "type": "line",
   "text": "The same arrowhead pointing down from row $4B"
  },
  {
   "address": 31777,
   "type": "line",
   "text": "The speed of slot Y, a whole number in A: its velocity's length times 16 (4 added to the log's whole part), back from log form. Docking wants under 21, a Malir gate 20 or more"
  },
  {
   "address": 31826,
   "type": "line",
   "text": "Points ($74) at slot Y's position: $065D plus 9 * Y ($0846)"
  },
  {
   "address": 31841,
   "type": "line",
   "text": "Every 3D model's code starts by putting its 36-byte header's address in $7A/$7B and jumping here, with ($74) its position relative to the camera (log form), ($78) its orientation, ($76) an optional colour table and $5F/$60 its scale. The header is copied to $9A-$BD; the first time ($9A = 0) the model is prepared (prepare_model). Then the points are placed (place_points), the faces tested (face_signs) and the polygons drawn (draw_polygons)"
  },
  {
   "address": 31899,
   "type": "line",
   "text": "A model's first use: each axis vector's log has the scale in $5F/$60 less $06A4 (100) added, unless the component is near zero (whole part below -10); the points are worked out in the model's own frame (place_points with the identity at $0DA8 and the zero vector at $0DAB); the reference points ($A0) are stored, linear and negated, in the table at ($A8); and each normal ($AA) is made as the cross product of two edges of its polygon, from the vertex list ($B6, the counts at $B8)"
  },
  {
   "address": 32171,
   "type": "line",
   "text": "Places the model's points: each axis vector ($A4, $9F of them) is turned by the orientation ($96, vec_times_rows) into $FA52; then each point ($9B of them) is its parent (the position ($98) for a negative entry in ($A6), else an earlier point) plus or minus an axis vector (($A2), negative to subtract), into $FB00 + 9 * n; a point in front of the viewer (z negative) is projected ($6773) and its screen x and y kept at $FC20 + 4 * n"
  },
  {
   "address": 32358,
   "type": "line",
   "text": "For each reference point ($9C), its offset from the viewer ($0D5B) in log form into $FA00; for each normal ($9D), the sign of its dot product with its reference point's offset (($AC) says which) into $FA36: negative when that face is turned toward the viewer"
  },
  {
   "address": 32470,
   "type": "line",
   "text": "Draws the model's polygons ($9E) in three passes for a painter's order: first those on the far side of the plane that ($AE) names for them (by its normal's sign in $FA36, a negative entry reversing the test), then those with 0 in ($AE), then the near ones (draw_polygon)"
  },
  {
   "address": 32566,
   "type": "line",
   "text": "Draws polygon Y: the colour from ($B4) when its normal ($B0) faces the viewer, else from ($B2), $FF meaning not drawn from that side ($8F80 sets the pattern); its vertex count from ($B8) and its vertex list found by summing the counts before it in ($B6). Then on to clip_polygon"
  },
  {
   "address": 32622,
   "type": "line",
   "text": "Points ($74) at model point A: $FB00 plus 9 * A"
  },
  {
   "address": 32638,
   "type": "line",
   "text": "Copies the polygon's vertex numbers to $FD40 and clips it to the wedge in front of the viewer: none in front, it is dropped; all in front, it goes straight to fill; else clip_edges runs twice (the planes y = -4z and y = 4z, $86 = $FF then 0), new points made from $1C on are projected, and the screen coordinates of the vertices go to $FD00 (4 bytes each) for fill_polygon ($8288)"
  },
  {
   "address": 32739,
   "type": "line",
   "text": "Walks the polygon's vertices at $FD40 testing each against one plane (plane_side): an edge crossing it gets a new vertex at the crossing (new_vertex), vertices inside are kept; the survivors go back to $FD40. None left: the polygon is dropped (the return address pulled)"
  },
  {
   "address": 32826,
   "type": "line",
   "text": "The crossing of the edge from point X to point Y with the plane, by intersect_far or intersect_near ($86), written as a new point at $85 (from $1C up) and added to the vertex list at $FD50"
  },
  {
   "address": 32908,
   "type": "line",
   "text": "Counts the polygon's vertices with z negative (in front) from $FB08: none, the polygon is dropped (the caller's return address pulled); all of them, clipping is skipped (on to $80B6); otherwise clipping goes ahead"
  },
  {
   "address": 32950,
   "type": "line",
   "text": "Copies each vertex's screen coordinates from $FC20 to $FD00 in order and fills the polygon ($8288)"
  },
  {
   "address": 32999,
   "type": "line",
   "text": "Which side of a clipping plane vertex Y of $FD40 is on, in $83 (1 inside, 0 outside): y's log against z's plus 2 (four times z), with the signs; $86 negative tests y <= -4z, else y >= 4z, the two together keeping only the wedge in front of the viewer. The final test is the BPL or BMI patched in at $8146"
  },
  {
   "address": 33094,
   "type": "line",
   "text": "The BPL here becomes BMI (opcode $30) for the other plane: plane_side writes $10 or $30 into it"
  },
  {
   "address": 33099,
   "type": "line",
   "text": "The crossing with the plane y = -4z: intersect_core with $68-$6A = $0200, sign $FF, then the new point's z sign inverted"
  },
  {
   "address": 33120,
   "type": "line",
   "text": "The crossing with the plane y = 4z: intersect_core with $68-$6A = $0200, sign 0"
  },
  {
   "address": 33132,
   "type": "line",
   "text": "Where the edge from ($74) to ($76) meets the plane: the edge vector ($96DE into $6B-$73, its signs flipped), the fraction along it from the ends' distances to the plane ($B35B), x and y of the crossing ($B392), and z set to y / 4 (y's log less $0200)"
  },
  {
   "address": 33416,
   "type": "line",
   "text": "Fills the polygon of $55 vertices (2 to 8) whose screen coordinates are at $FD00 (x and y, 16 bits each): when all of them are inside the window ($43 wide, $44 high) it goes straight to scan_fill; otherwise it is clipped to y 0 to $42 and x 0 to $41 (clip_side four times) first"
  },
  {
   "address": 33527,
   "type": "line",
   "text": "Clips the polygon at $FD00 against one side of the window: A is the branch opcode (BMI or BPL) patched into $8320 and $8343 to say which side is inside, X the limit and Y the coordinate given to new vertices, $81 0 for x or 2 for y. Vertices inside are kept and each edge that crosses the side adds a vertex on it (clip_point), into $FD80 and back to $FD00; with none left the polygon is dropped"
  },
  {
   "address": 33568,
   "type": "line",
   "text": "The branch clip_side patches: BMI or BPL for the side being clipped"
  },
  {
   "address": 33603,
   "type": "line",
   "text": "The second branch clip_side patches, for the edge's other end"
  },
  {
   "address": 33714,
   "type": "line",
   "text": "Where the edge from vertex X to vertex Y crosses the window side: on an x side ($81 = 0) x is the side's value and y is interpolated, y1 + (y2 - y1) * (x - x1) / (x2 - x1), with logs ($B447, $B5C5); on a y side the other way round. Appended to $FD80"
  },
  {
   "address": 34037,
   "type": "line",
   "text": "Copies vertex 0 after the last (at X) so the edge walk can close the polygon"
  },
  {
   "address": 34062,
   "type": "line",
   "text": "Fills the polygon at $FD00 row by row: from the lowest vertex (the greatest y, rows counting up from the bottom) it walks the edges on the two sides (left_edge, right_edge), stepping x by the slope with an error term and INX or DEX patched into $854C and $855D, and draws each row's span ($8C9C) until the two sides meet"
  },
  {
   "address": 34196,
   "type": "line",
   "text": "Starts the next edge on one side of scan_fill: the previous vertex, the edge's height in $83 and width in $82, and INX or DEX ($E8/$CA) patched in at $854C for its direction; edges of no height are skipped, and running out of vertices ends the fill"
  },
  {
   "address": 34279,
   "type": "line",
   "text": "The same for the other side of scan_fill: the next vertex, height in $85, width in $84, the step patched in at $855D"
  },
  {
   "address": 34360,
   "type": "line",
   "text": "Animates the chart window buffer at $FA00 (99 cells): a cell whose tile's attribute ($5000) has bit 2 clear and a frame count in bits 0-1 gets that count ANDed with the frame counter $5E added to its tile number"
  },
  {
   "address": 34392,
   "type": "line",
   "text": "Draws the chart window at $FA00 into the bitmap: 9 rows of 11 tiles, each tile 16 pixels high and two bytes wide, its pixel row r at $4080 + $100 * r + tile (left byte) and $4000 + $100 * r + tile (right byte), patched into the loads at $871A and $8711; then each cell's colour from $5080 + tile into the screen matrix. The row stride and the bitmap position come from $0D30-$0D32, and the cursor brackets are drawn on the middle row when $0D2F is set ($8779)"
  },
  {
   "address": 34527,
   "type": "line",
   "text": "Low byte of the chart's column in a bitmap row (8 * $0D30), patched in by draw_chart and added to each pixel row's address"
  },
  {
   "address": 34534,
   "type": "line",
   "text": "High byte of the chart's column offset in a bitmap row (the carry out of 8 * $0D30), patched in by draw_chart"
  },
  {
   "address": 34572,
   "type": "line",
   "text": "The tile being drawn on the chart row, counted down from 10 to 0 (11 tiles): draw_chart's LDX operand"
  },
  {
   "address": 34574,
   "type": "line",
   "text": "Low byte of the address of the chart row's 11 tile numbers in the window buffer at $FA00, moved on 11 for each tile row"
  },
  {
   "address": 34575,
   "type": "line",
   "text": "High byte of the address of the chart row's tile numbers"
  },
  {
   "address": 34579,
   "type": "line",
   "text": "High byte of the address of a tile's right-half pixel byte ($4000 + $100 * pixel row + tile): stepped for each pixel row and set back for each tile row; the first tile row starts $0D32 rows in"
  },
  {
   "address": 34588,
   "type": "line",
   "text": "High byte of the address of a tile's left-half pixel byte ($4080 + $100 * pixel row + tile), stepped with $8713"
  },
  {
   "address": 34614,
   "type": "line",
   "text": "The tile being coloured, counted down from 10 to 0: the LDX operand of the screen matrix pass, made once every 8 pixel rows"
  },
  {
   "address": 34616,
   "type": "line",
   "text": "Low byte of the tile row's address for the colour pass, kept in step with $870E"
  },
  {
   "address": 34617,
   "type": "line",
   "text": "High byte of the tile row's address for the colour pass"
  },
  {
   "address": 34659,
   "type": "line",
   "text": "The chart window cell for column X and row Y relative to the cursor: X + 5 plus the row's offset from $0D33 (4 - Y), returned in Y"
  },
  {
   "address": 34681,
   "type": "line",
   "text": "Draws the chart cursor's brackets on the middle cell: 16 pixel rows, each masked with tile $7E's bytes ($407E, $40FE) and ORed with tile $7F's ($407F, $40FF), at 10 columns right of $0D30"
  },
  {
   "address": 34762,
   "type": "line",
   "text": "Low byte of the brackets' column in a bitmap row (8 * ($0D30 + 10)), patched by draw_brackets"
  },
  {
   "address": 34769,
   "type": "line",
   "text": "High byte of the brackets' column offset, the carry out, patched by draw_brackets"
  },
  {
   "address": 34777,
   "type": "line",
   "text": "Low byte of the mask for the brackets' first byte, the left one: tile $7E's left half ($40FE onward)"
  },
  {
   "address": 34778,
   "type": "line",
   "text": "High byte of the first byte's mask address, stepped once a pixel row"
  },
  {
   "address": 34780,
   "type": "line",
   "text": "Low byte of the pattern ORed into the brackets' first byte: tile $7F's left half ($40FF onward)"
  },
  {
   "address": 34781,
   "type": "line",
   "text": "High byte of the first byte's pattern address, stepped once a pixel row"
  },
  {
   "address": 34789,
   "type": "line",
   "text": "Low byte of the mask for the brackets' second byte, the right one: tile $7E's right half ($407E onward)"
  },
  {
   "address": 34790,
   "type": "line",
   "text": "High byte of the second byte's mask address, stepped once a pixel row"
  },
  {
   "address": 34792,
   "type": "line",
   "text": "Low byte of the pattern ORed into the brackets' second byte: tile $7F's right half ($407F onward)"
  },
  {
   "address": 34793,
   "type": "line",
   "text": "High byte of the second byte's pattern address, stepped once a pixel row"
  },
  {
   "address": 34814,
   "type": "line",
   "text": "Sets the drawing window to the 3D view: 251 by 102 pixels from x 34, row 73 counted from the bottom (set_window)"
  },
  {
   "address": 34832,
   "type": "line",
   "text": "Sets the drawing window to $41 = $3F, $42 = 199 from (0, 0) (set_window)"
  },
  {
   "address": 34850,
   "type": "line",
   "text": "Sets the drawing window to $41 = $9F, $42 = 199 from x $A0, row 0 (set_window), the screen's right half"
  },
  {
   "address": 34868,
   "type": "line",
   "text": "A 2D object's draw routine: a filled disc of diameter $4D centred on the projected point $51-$54 (a single point below 2), drawn as horizontal spans ($8C73) with a midpoint circle. Used by types 21, 22, 25, 26 and 34 and by distant 3D objects"
  },
  {
   "address": 35044,
   "type": "line",
   "text": "Types 31-33's draw routine: a circle's outline of diameter $4D, the two ends of each row plotted as short spans ($899B); nothing at 250 or more"
  },
  {
   "address": 35189,
   "type": "line",
   "text": "draw_ring's top and bottom rows as spans ($8C73)"
  },
  {
   "address": 35227,
   "type": "line",
   "text": "Plots the two ends of draw_ring's row Y, one pixel wide each ($8C79)"
  },
  {
   "address": 35279,
   "type": "line",
   "text": "Types 28 and 29's draw routine: a ragged disc (draw_ragged); below size 4 a full-size disc in colour 2 over it; from 4 up a disc smaller by s = size/8 + 1 in colour $DE when the type's colour code ($8FC9) is $D9 (type 29), else $D6, then one smaller again by s in colour 2"
  },
  {
   "address": 35336,
   "type": "line",
   "text": "Type 30's draw routine: a disc in the colour code read from $0099, then, from size 4 up, a disc three-quarters its size in colour 0, leaving a ring"
  },
  {
   "address": 35369,
   "type": "line",
   "text": "Type 11's draw routine (the third missile) and draw_burst's: below size 12 a plain disc; otherwise a disc whose rows are each moved by 0-2 pixels from the 16-entry table at $8B0B, read from a position at $8B0A that moves on each time, so the edge shimmers"
  },
  {
   "address": 35594,
   "type": "line",
   "text": "draw_ragged's position in its table, counted up each row"
  },
  {
   "address": 35595,
   "type": "line",
   "text": "draw_ragged's 16 row offsets: 0 1 0 2 1 2 0 1 0 2 1 1 0 2 0 2"
  },
  {
   "address": 35611,
   "type": "line",
   "text": "Type 23's draw routine: seven random triangles the size of $4D (spray_triangles with a shift of 1)"
  },
  {
   "address": 35620,
   "type": "line",
   "text": "Draws Y small triangles of size A around the projected point (also from $24E5 for explosions): each has one corner at a random offset within the size and two close to the centre, $A3 (the size shifted right by X + 3) either side, in a random pattern ($8F5B), filled ($8288)"
  },
  {
   "address": 35642,
   "type": "line",
   "text": "One triangle of spray_triangles: two random offsets ($A298) centred on zero into $9E/$A0, the three corners into $FD00-$FD0B, the near pair set across the longer offset"
  },
  {
   "address": 35823,
   "type": "line",
   "text": "Types 24 and 27's draw routine: one triangle with its three corners at random offsets from the projected point, up to the size, filled ($8288); a new shape each frame"
  },
  {
   "address": 35875,
   "type": "line",
   "text": "Draws a bar 8 rows high at row Y from x X to X + A, its first four rows into one display buffer and the next four into the other ($8EEB flips between them), for the cockpit's gauges"
  },
  {
   "address": 35955,
   "type": "line",
   "text": "Draws the span from x $47/$48 to $49/$4A on row $4B/$4C, clipped to the 3D view: nothing for a row of 103 or more or a span off either side, the ends held to 0 and 251"
  },
  {
   "address": 35961,
   "type": "line",
   "text": "span_clipped's entry with the row already in Y"
  },
  {
   "address": 35962,
   "type": "line",
   "text": "The window's height plus one (set_window), the first row span_clipped refuses"
  },
  {
   "address": 35974,
   "type": "line",
   "text": "The window's width plus one, the first x span_clipped holds a right end back from"
  },
  {
   "address": 35978,
   "type": "line",
   "text": "The window's last x (its width less one), where span_clipped puts a right end that is past it"
  },
  {
   "address": 35988,
   "type": "line",
   "text": "The window's width plus one, the first x at which span_clipped drops a span off the right side"
  },
  {
   "address": 35996,
   "type": "line",
   "text": "Draws one row of a fill from x $45 to X on window row Y: the bitmap address from EXTERN's row tables (their operands made window-relative by set_window), its high byte EORed with $3A so it lands in the buffer being drawn; the screen matrix colours of each cell it covers are masked with $17 and set from $18. The two patterns $3D and $3E alternate on odd and even rows (offsets patched from $8E11-$8E16). One byte, partial bytes at the ends, and whole bytes in between with an unrolled store every 8 bytes"
  },
  {
   "address": 35997,
   "type": "line",
   "text": "Low byte of span's row address table: EXTERN's $EB00 plus the window's bottom row"
  },
  {
   "address": 35998,
   "type": "line",
   "text": "High byte of span's row address table, with the carry from adding the bottom row"
  },
  {
   "address": 36002,
   "type": "line",
   "text": "Low byte of span's row address high-byte table: $EC00 plus the window's bottom row"
  },
  {
   "address": 36003,
   "type": "line",
   "text": "High byte of the table of row address high bytes"
  },
  {
   "address": 36011,
   "type": "line",
   "text": "Low byte of span's text-row table: $ECC8 (n divided by 8) plus the window's bottom row"
  },
  {
   "address": 36012,
   "type": "line",
   "text": "High byte of span's text-row table"
  },
  {
   "address": 36052,
   "type": "line",
   "text": "Low byte of the x byte offset table ($EE08) plus the window's left x, for the bitmap's low byte"
  },
  {
   "address": 36053,
   "type": "line",
   "text": "High byte of the x byte offset table plus the window's left x"
  },
  {
   "address": 36062,
   "type": "line",
   "text": "Low byte of the x byte offset table again, its second read for the bitmap's high byte"
  },
  {
   "address": 36063,
   "type": "line",
   "text": "High byte of the second read of the x byte offset table"
  },
  {
   "address": 36071,
   "type": "line",
   "text": "Low byte of the column table ($ECC8, x divided by 8) plus the window's left x, for the span's first screen cell"
  },
  {
   "address": 36072,
   "type": "line",
   "text": "High byte of the column table read for the first screen cell"
  },
  {
   "address": 36097,
   "type": "line",
   "text": "Low byte of the column table read for the span's right end"
  },
  {
   "address": 36098,
   "type": "line",
   "text": "High byte of the column table read for the right end"
  },
  {
   "address": 36101,
   "type": "line",
   "text": "Low byte of the column table read subtracted for the left end, giving the cells the span covers"
  },
  {
   "address": 36102,
   "type": "line",
   "text": "High byte of the column table read for the left end"
  },
  {
   "address": 36106,
   "type": "line",
   "text": "Low byte of the right mask table ($F088) plus the window's left x, for a span inside one byte"
  },
  {
   "address": 36107,
   "type": "line",
   "text": "High byte of the right mask table read for a one-byte span"
  },
  {
   "address": 36109,
   "type": "line",
   "text": "Low byte of the left mask table ($EF48) plus the window's left x, for a one-byte span"
  },
  {
   "address": 36110,
   "type": "line",
   "text": "High byte of the left mask table read for a one-byte span"
  },
  {
   "address": 36116,
   "type": "line",
   "text": "The branch offset span patches by row parity (from $8E11) to use $3D or $3E for a span inside one byte"
  },
  {
   "address": 36136,
   "type": "line",
   "text": "span's single-byte case with the odd-row pattern $3E"
  },
  {
   "address": 36186,
   "type": "line",
   "text": "The branch offset span patches (from $8E13) for the left partial byte's pattern"
  },
  {
   "address": 36190,
   "type": "line",
   "text": "Low byte of the right mask table read for the right end's partial byte, even rows"
  },
  {
   "address": 36191,
   "type": "line",
   "text": "High byte of the right mask table read for the right end, even rows"
  },
  {
   "address": 36203,
   "type": "line",
   "text": "Low byte of the right mask table read for the right end's partial byte, odd rows"
  },
  {
   "address": 36204,
   "type": "line",
   "text": "High byte of the right mask table read for the right end, odd rows"
  },
  {
   "address": 36212,
   "type": "line",
   "text": "The branch offset span patches to enter the unrolled stores at the right place for the span's length"
  },
  {
   "address": 36348,
   "type": "line",
   "text": "The branch offset span patches (from $8E15) for the right partial byte's pattern"
  },
  {
   "address": 36352,
   "type": "line",
   "text": "Low byte of the left mask table read for the left end's partial byte, even rows"
  },
  {
   "address": 36353,
   "type": "line",
   "text": "High byte of the left mask table read for the left end, even rows"
  },
  {
   "address": 36362,
   "type": "line",
   "text": "Low byte of the left mask table read for the left end's partial byte, odd rows"
  },
  {
   "address": 36363,
   "type": "line",
   "text": "High byte of the left mask table read for the left end, odd rows"
  },
  {
   "address": 36369,
   "type": "line",
   "text": "span's branch offsets by row parity for its three patterned writes, at $8E11, $8E13 and $8E15: 0 for even rows ($3D), the jump to the $3E version for odd rows"
  },
  {
   "address": 36371,
   "type": "line",
   "text": "The branch offsets for the left partial byte, even and odd rows"
  },
  {
   "address": 36373,
   "type": "line",
   "text": "The branch offsets for the right partial byte, even and odd rows"
  },
  {
   "address": 36375,
   "type": "line",
   "text": "Sets the drawing window: Y its bottom row, A/X its left x, $41/$42 its width and height. The left edge and bottom are added into the operands of span's table reads ($8C9D-$8E0B) so callers work in window coordinates; $43/$44 = width and height plus one, $56/$57 = half of each, the centre"
  },
  {
   "address": 36563,
   "type": "line",
   "text": "The end of a 3D frame: colour 1 is set ($8F80), whose clear byte $3B the view clears use; then the buffer just drawn is shown and the other cleared for the next frame: with $3A set, bank 1 is shown ($8F1A) and the $C000 view cleared ($B981); else bank 3 ($8EF6) and the $4000 view cleared ($BAF2); then $3A is flipped"
  },
  {
   "address": 36587,
   "type": "line",
   "text": "Flips bit 7 of $3A, the buffer drawing goes to ($C000 or $4000), keeping A and the flags"
  },
  {
   "address": 36598,
   "type": "line",
   "text": "Shows the VIC's bank 3: bitmap $C000, screen $E000 ($DD00 bits 0-1 cleared)"
  },
  {
   "address": 36634,
   "type": "line",
   "text": "Shows the VIC's bank 1: bitmap $4000, screen $6000 ($DD00 bits 0-1 = 2)"
  },
  {
   "address": 36672,
   "type": "line",
   "text": "Copies $C000-$E3FF (the bitmap and its screen) to $4000-$63FF, so both buffers hold the same picture ($A2F6)"
  },
  {
   "address": 36699,
   "type": "line",
   "text": "A random pair of patterns for a spark: one of three ($A298), or of the next three when $F1DC is negative, into $3D/$3E from $8F74/$8F7A"
  },
  {
   "address": 36724,
   "type": "line",
   "text": "spark_pattern's even-row patterns: $44 $55 $DD $88 $AA $EE"
  },
  {
   "address": 36730,
   "type": "line",
   "text": "spark_pattern's odd-row patterns: $11 $55 $77 $22 $AA $BB"
  },
  {
   "address": 36736,
   "type": "line",
   "text": "Sets the drawing colour from code X (kept at $8FC9): codes below $13 go through the palette at $F1E6, others use their low three bits plus one; the two row patterns $3D/$3E and the clear byte $3B come from $F1C8/$F1D2/$F1DC, and the screen matrix's nybble mask $17 and value $18 from $8FDD/$8FFD by $8FCA (codes below $13) or the code shifted down three"
  },
  {
   "address": 36797,
   "type": "line",
   "text": "Sets the value $9002 gives set_colour, $80 or $70 by the buffer in $3A"
  },
  {
   "address": 36809,
   "type": "line",
   "text": "The last colour code set_colour was given"
  },
  {
   "address": 36810,
   "type": "line",
   "text": "For colour codes 0-$12: which entry of $8FDD/$8FFD sets the screen matrix"
  },
  {
   "address": 36829,
   "type": "line",
   "text": "32 masks for the screen matrix byte: $FF, $F0 or $0F keep the nybble that stays"
  },
  {
   "address": 36861,
   "type": "line",
   "text": "32 values ORed into the screen matrix byte; entry 5 is $9002"
  },
  {
   "address": 36866,
   "type": "line",
   "text": "colour_cell_value's entry 5, rewritten each frame by set_flash_colour"
  },
  {
   "address": 36893,
   "type": "line",
   "text": "Fills the whole drawing window with the current colour, every row from $42 down to 0 ($8C9C)"
  },
  {
   "address": 36919,
   "type": "line",
   "text": "Turns the orientation at ($78) by the three log-form angles at ($74): each angle that is not tiny (whole part -8 or more) rotates one pair of rows (rows 1 and 2, 2 and 0, 0 and 1; $9094/$9095)"
  },
  {
   "address": 37012,
   "type": "line",
   "text": "turn_by_rates' row offsets for each angle: 9 and 18, 18 and 0, 0 and 9 (read as $9094 + n and $9095 + n)"
  },
  {
   "address": 37013,
   "type": "line",
   "text": "turn_by_rates' second row offset for each angle (18, 0, 9)"
  },
  {
   "address": 37016,
   "type": "line",
   "text": "Rotates the rows at ($74) and ($78) by the small log-form angle in $5F-$61: b = normalise(b + angle * a), a = normalise(a - angle * b), with the products in $089F and $08A8"
  },
  {
   "address": 37110,
   "type": "line",
   "text": "Copies the 27-byte identity orientation at $0DA8 (three rows of three log-form numbers: 1 on the diagonal, $E69C elsewhere) to ($78)"
  },
  {
   "address": 37128,
   "type": "line",
   "text": "Sums the rows at ($76) (three of 9 bytes) weighted by the components of the log-form vector at ($74): out = v0*row0 + v1*row1 + v2*row2, written to ($78). A component whose whole part is below -7 ($F9) is skipped; the first one kept starts the sum ($95A0), later ones add to it ($9711)"
  },
  {
   "address": 37216,
   "type": "line",
   "text": "Multiplies the log-form vector at ($74) by the three rows at ($76): each output component is a dot product ($94E7) with one row, stored at ($78)+0, +3 and +6. Leaves ($76) pointing at the third row"
  },
  {
   "address": 37296,
   "type": "line",
   "text": "Multiplies two orientations: the first two rows of ($74) times the matrix at ($76) ($9160 twice) into ($78), and the third row as the cross product of those two ($93DC)"
  },
  {
   "address": 37370,
   "type": "line",
   "text": "Copies the 3 by 3 log-form matrix at ($74) to ($78) transposed: row r column c goes to row c column r"
  },
  {
   "address": 37438,
   "type": "line",
   "text": "Straightens the orientation at ($78) so it stays a rotation: row 0 becomes row 1 cross row 2, row 1 becomes row 2 cross row 0 ($93DC), and each row is normalised ($9669)"
  },
  {
   "address": 37580,
   "type": "line",
   "text": "Subtracts the linear position at ($76) from the one at ($74), component by component, and writes the difference at ($78) in log form ($B45A)"
  },
  {
   "address": 37707,
   "type": "line",
   "text": "Converts the log-form vector at ($74) to linear at ($78), signs kept ($B5C5), last component first"
  },
  {
   "address": 37746,
   "type": "line",
   "text": "Converts the linear vector at ($74) to log form at ($78) ($B45A)"
  },
  {
   "address": 37852,
   "type": "line",
   "text": "The cross product of the log-form vectors at ($74) and ($76), written to ($78): (a1*b2 - a2*b1, a2*b0 - a0*b2, a0*b1 - a1*b0). ($76) is copied to $6B-$73 first, so ($78) may be either input"
  },
  {
   "address": 38119,
   "type": "line",
   "text": "The dot product of the log-form vectors at ($74) and ($76): each pair of components multiplied by adding their logs and combining signs, and the three products summed ($B392). Result in log form in $5F-$61"
  },
  {
   "address": 38193,
   "type": "line",
   "text": "The length of the log-form vector at ($74), in log form in $5F/$60: each log doubled (the square), the three squares added ($B398), and the log halved (the square root)"
  },
  {
   "address": 38248,
   "type": "line",
   "text": "Copies the 9 bytes at $0DAB to ($78) ($9570)"
  },
  {
   "address": 38256,
   "type": "line",
   "text": "Copies 9 bytes from ($74) to ($78): one position or one log-form vector"
  },
  {
   "address": 38304,
   "type": "line",
   "text": "Multiplies the log-form vector at ($74) by the log-form number in $5F-$61: adds its log to each component's and combines the signs; the result at ($78)"
  },
  {
   "address": 38373,
   "type": "line",
   "text": "Multiplies the log-form vector at ($74) by the positive log-form number in $5F/$60, signs unchanged; the result at ($78)"
  },
  {
   "address": 38436,
   "type": "line",
   "text": "Divides the log-form vector at ($74) by the log-form number in $5F-$61 (subtracts its log, combines the signs) into ($78). No code in this run's snapshots calls it"
  },
  {
   "address": 38505,
   "type": "line",
   "text": "Normalises the log-form vector at ($74) into ($78): finds its length ($9531) and divides by it ($966C)"
  },
  {
   "address": 38508,
   "type": "line",
   "text": "Divides the log-form vector at ($74) by the positive log-form number in $5F/$60 (subtracts its log from each component's), signs unchanged; the result at ($78)"
  },
  {
   "address": 38571,
   "type": "line",
   "text": "Adds the log-form vectors at ($74) and ($76) component by component ($B392) into ($78)"
  },
  {
   "address": 38622,
   "type": "line",
   "text": "Subtracts the log-form vector at ($76) from the one at ($74) component by component ($B35B) into ($78)"
  },
  {
   "address": 38673,
   "type": "line",
   "text": "For vec_times_rows: ($78) = s * ($74) + ($76), with the log-form number s in $5F-$61 kept at $65-$67, component by component ($B392)"
  },
  {
   "address": 38745,
   "type": "line",
   "text": "Adds the linear vectors at ($74) and ($76) into ($78), three 24-bit additions"
  },
  {
   "address": 38814,
   "type": "line",
   "text": "Subtracts the linear vector at ($76) from the one at ($74) into ($78)"
  },
  {
   "address": 38883,
   "type": "line",
   "text": "Negates the linear vector at ($74) into ($78)"
  },
  {
   "address": 38952,
   "type": "line",
   "text": "Finds the length of the log-form vector at ($74) ($9531) and stores it, positive, in the first three bytes at ($78), then runs on into vec_angles. No code in this run's snapshots calls it"
  },
  {
   "address": 38971,
   "type": "line",
   "text": "The two angles of the log-form vector at ($74), stored at ($78)+3 and +6, in units of 1024 to the turn: the first from x over z with z's sign inverted in $64 ($9981, a full turn), the second from y over the horizontal length sqrt(x*x + z*z) ($98ED)"
  },
  {
   "address": 39106,
   "type": "line",
   "text": "The arcsine of the log-form number in $5F-$61, as arctan(x / sqrt(|x*x - 1|)): keeps the log in $65/$66, gets log(|x*x - 1|) from twice the log through SEG0's subtraction entry $B2E7, halves it, subtracts it from the kept log and runs on into arctan_log. Part of a group ($98C2-$99BD) nothing outside it calls in this run's snapshots"
  },
  {
   "address": 39149,
   "type": "line",
   "text": "The angle whose tangent is the log-form number in $5F-$61, in units of 1024 to the turn (128 is 45 degrees), as a 24-bit number with the angle in $60/$61: a ratio of 1 or more has its log negated (the ratio inverted); the log plus $04F4 (the ratio times about 31), back to linear, indexes the arctangent table at $99BE; an inverted ratio gives 256 less the angle, and a negative sign negates it"
  },
  {
   "address": 39236,
   "type": "line",
   "text": "Unused: the arcsine of the log-form number in radians, log form ($98C2, $99A8); below about 0.33 (log $FE67) the number is returned as it is, the arcsine of a small number being close to it"
  },
  {
   "address": 39252,
   "type": "line",
   "text": "Unused: the arctangent in radians ($98ED, $99A8); below about 0.2 (log $FDAE) the number is returned as it is"
  },
  {
   "address": 39268,
   "type": "line",
   "text": "Unused: the arccosine, 256 (90 degrees) less the arcsine ($98C2), in units of 1024 to the turn"
  },
  {
   "address": 39287,
   "type": "line",
   "text": "Misplaced label: $9977 is the operand of the SBC at $9976. The unused arccosine in radians starts at $997B (JSR arccos_units, JMP units_to_radians)"
  },
  {
   "address": 39297,
   "type": "line",
   "text": "arctan_log for a vector's angle from two components: when $64 has bit 7 set the angle moves to the other half of the turn, 512 less it, or -512 less it when negative"
  },
  {
   "address": 39336,
   "type": "line",
   "text": "Converts an angle in units of 1024 to the turn to radians in log form: to log form ($B45A), then less $0759, log2 of 1024 over two pi. Y is kept in the operand at $99AF"
  },
  {
   "address": 39343,
   "type": "line",
   "text": "The caller's Y, kept in the LDY operand at $99AE while units_to_radians calls lin_to_log"
  },
  {
   "address": 39358,
   "type": "line",
   "text": "32 angles for tangents 0 to 31/32, in units of 1024 to the turn: 0, 5, 10 ... 126 (just under 45 degrees, 128)"
  },
  {
   "address": 39390,
   "type": "line",
   "text": "A menu of A items ($8B), each Y characters wide ($8A): ($7A) points to the items' text addresses (two bytes each), and when $79 is nonzero ($78) to a flag for each, 0 for an item that cannot be chosen (drawn dimmed). Draws the items one text line apart from the cursor ($9A62), lets the player choose ($99F2), blanks them ($9AAF) and returns the choice in Y"
  },
  {
   "address": 39406,
   "type": "line",
   "text": "The choosing part alone, for a menu already on the screen (A items, Y wide): called by the base and Hive! code ($AFB7 and others in SEG1)"
  },
  {
   "address": 39410,
   "type": "line",
   "text": "Waits for the fire button to be let go, puts the bar on the first item ($9F8F) and loops: up and down (keys or joystick, $9AA3) move the bar a line ($50 + or - 9), Return, Space or fire chooses. A chosen item whose flag is 0 is refused; the bar blinks three times and the item's number is returned in Y"
  },
  {
   "address": 39488,
   "type": "line",
   "text": "Chosen: wait for fire to be let go, refuse a disabled item, then blink the bar"
  },
  {
   "address": 39522,
   "type": "line",
   "text": "Prints the $8F items from the cursor down, one text line (9 pixel rows) apart, each at the same column, dimming ($9FF3) those whose flag is 0; the cursor row is put back after"
  },
  {
   "address": 39587,
   "type": "line",
   "text": "Reads the keys or the joystick as a direction ($A33F): returns the up-down step in A (1 up, $FF down, 0 none); Return or Space jumps straight to choosing"
  },
  {
   "address": 39599,
   "type": "line",
   "text": "Blanks the menu's lines: Y spaces on each of the $8B lines from the first item's position"
  },
  {
   "address": 39644,
   "type": "line",
   "text": "Prints the text at A (high byte) and X (low byte) as a message: $0D29 set to 10, the current window (callers select window 0, the message line, first) scrolled up two lines or, when it is one line high, blanked ($A178), and the text printed from its bottom left corner (print_text)"
  },
  {
   "address": 39674,
   "type": "line",
   "text": "Prints the text at A (high byte) and X (low byte), disk text included ($9BB7), word-wrapped to the current window: each line is cut at the last space that fits ($9B19), put at $FF05 and printed"
  },
  {
   "address": 39705,
   "type": "line",
   "text": "Copies the next line of the text at ($74) from offset Y into $FF05, as much as fits between the cursor and the window's right edge ($0D21): leading spaces skipped, cut back to the last space when the room runs out, and ended with $0D. Carry set at the end of the text. A $0D in the text straight after an automatic break is dropped ($9B84). A word wider than the whole window is cut back to nothing every time, so print_wrapped prints new lines for ever"
  },
  {
   "address": 39812,
   "type": "line",
   "text": "Set when wrap_line broke a line itself"
  },
  {
   "address": 39813,
   "type": "line",
   "text": "The length of the text at ($74), disk text included, in Y; the address is patched into the LDA at $9B95"
  },
  {
   "address": 39830,
   "type": "line",
   "text": "Low byte of the text's address, patched by text_length into the LDA at $9B95"
  },
  {
   "address": 39831,
   "type": "line",
   "text": "High byte of the text's address for text_length ($FF until patched)"
  },
  {
   "address": 39835,
   "type": "line",
   "text": "Prints the zero-ended text at Y (high byte) and X (low byte) character by character (print_char), after resolving a disk-text number ($9BB7); the address is patched into the LDA at $9BAA"
  },
  {
   "address": 39851,
   "type": "line",
   "text": "Low byte of the text print_text prints, patched in after resolve_text"
  },
  {
   "address": 39852,
   "type": "line",
   "text": "High byte of the text print_text prints"
  },
  {
   "address": 39863,
   "type": "line",
   "text": "Turns a text address in Y/X into one that can be read. $FFFF means no text: the caller's return address is dropped, so the caller returns at once. An address from $C000 to $CFFF is a disk-text number, (Y - $C0) * 256 + X: the text is fetched from disk, decoded into $BF00 and X/Y returned as $BF00. Anything else is returned as it is"
  },
  {
   "address": 39882,
   "type": "line",
   "text": "Disk text: subtracts the counts in SPB's table at $BD00 (one word for each 512-byte block of text) until the number goes negative, giving the block (Y/2) and the text's place in it; the text that is the last in its block may run on into the next, which $9CB2 notes"
  },
  {
   "address": 39948,
   "type": "line",
   "text": "Two blocks are kept: $F600 holds block $9CB0 and $F800 block $9CB1. A block already in one buffer is moved or kept; otherwise it is read from disk into $F600 ($9CB6)"
  },
  {
   "address": 40027,
   "type": "line",
   "text": "A text that may run over the block's end gets the next block in $F800"
  },
  {
   "address": 40056,
   "type": "line",
   "text": "Decodes from the block's buffer ($9D40): a block that does not start with a fresh text first skips the end of the one before, then the texts before ours are skipped, and ours decoded into $BF00 up to its zero"
  },
  {
   "address": 40112,
   "type": "line",
   "text": "The text block held in $F600 ($FF none); $9CB1 the block in $F800; $9CB2 set when the text may run into the next block; $9CB3 the block wanted; $9CB4 the block to read"
  },
  {
   "address": 40113,
   "type": "line",
   "text": "The text block held in $F800 ($FF none)"
  },
  {
   "address": 40114,
   "type": "line",
   "text": "Set when the text wanted is the last in its block and may run on into the next"
  },
  {
   "address": 40115,
   "type": "line",
   "text": "The text block wanted, from SPB's counts"
  },
  {
   "address": 40116,
   "type": "line",
   "text": "The text block to read from disk, a word ($9CB4/$9CB5)"
  },
  {
   "address": 40118,
   "type": "line",
   "text": "Reads text block $9CB4 into the buffer whose page is in X ($F6 or $F8): two disk blocks, numbers $01AD + 2 * block and the one after, through read_block"
  },
  {
   "address": 40142,
   "type": "line",
   "text": "The disk block number of text block $9CB4: $01AD + 2 * block, in X (low) and Y (high)"
  },
  {
   "address": 40160,
   "type": "line",
   "text": "Decodes one character with the Huffman tree at $9D66: from its root, each bit read ($9D1E) picks the left (0) or right (1) entry; an entry below $80 is the distance from that entry to the next pair, one with bit 7 set is a character in its low 7 bits. The character $1B (entry $9B) is an escape: the next 7 bits, high bit first, are the character itself. Returns it in A, Z set for the zero that ends a text"
  },
  {
   "address": 40218,
   "type": "line",
   "text": "decode_char's caller's X, kept in the LDX operand at $9D19 and given back on return"
  },
  {
   "address": 40222,
   "type": "line",
   "text": "The next bit of the text, in Y (0 or 1): from the byte whose address is patched into the LDA at $9D20, low bit first (masks at $9D5E). After the eighth bit the address moves on; past $F7FF it skips $F800, the next block's first byte, so a text runs on from $F600 into $F800"
  },
  {
   "address": 40225,
   "type": "line",
   "text": "Low byte of the address of the byte read_bit is reading, set by start_bits and moved on after every eighth bit"
  },
  {
   "address": 40226,
   "type": "line",
   "text": "High byte of the address read_bit reads: $F6, $F7, then $F8 from $F801 on, skipping that block's first byte"
  },
  {
   "address": 40256,
   "type": "line",
   "text": "Starts the bit reader at the block in page A ($F6 or $F8). The block's first byte gives where its first fresh text begins: below 8, bit (that value) of byte 1; otherwise bit (value AND 7) of byte 2. Bit 7 of it, returned in N, says whether the block starts with a fresh text"
  },
  {
   "address": 40264,
   "type": "line",
   "text": "The page start_bits starts in ($F6 or $F8), so the LDA at $9D46 reads that block's first byte"
  },
  {
   "address": 40285,
   "type": "line",
   "text": "The bit within the current byte the reader is at"
  },
  {
   "address": 40286,
   "type": "line",
   "text": "$01, $02, $04 ... $80: the bit masks, low bit first"
  },
  {
   "address": 40294,
   "type": "line",
   "text": "The text compression's Huffman tree, 136 bytes: pairs of entries (left, right) from the root; below $80 the distance on to the next pair, $80 and up a character plus $80, $9B the escape to a 7-bit literal"
  },
  {
   "address": 40430,
   "type": "line",
   "text": "Appends the text at ($74), disk text included, to the zero-ended text at ($78) (at most 255 bytes in all); the source address is patched into the LDA at $9E06"
  },
  {
   "address": 40455,
   "type": "line",
   "text": "Low byte of the text append_text copies, patched in after resolve_text"
  },
  {
   "address": 40456,
   "type": "line",
   "text": "High byte of the text append_text copies"
  },
  {
   "address": 40471,
   "type": "line",
   "text": "Looks for the text at ($78) inside the text at ($74), either one possibly a disk text: Z set when it is found, otherwise Y = $FF with N set. Called by the base's conversation code ($E714 in SEG1A) to match a typed keyword"
  },
  {
   "address": 40512,
   "type": "line",
   "text": "Z set when the text at ($78) matches the start of ($76)"
  },
  {
   "address": 40524,
   "type": "line",
   "text": "Makes text window Y current (0 the message line at the top, 1 a single line near the bottom, 2 the bottom four lines, 3-6 larger panels): its lines before a pause ($0D24, $0D26), left and right columns ($0D20, $0D21), top and bottom pixel rows counted from the bottom ($0D22, $0D23), from the tables at $9E9C-$9EBE; the cursor goes to its top left ($4F, $50)"
  },
  {
   "address": 40565,
   "type": "line",
   "text": "Puts back the cursor saved for the current window ($9E91 and $9E96 by the window number in $9E9B). Nothing in any loaded state calls this or save_cursor"
  },
  {
   "address": 40579,
   "type": "line",
   "text": "Saves the cursor ($4F, $50) for the current window, at $9E91 and $9E96 by the window number in $9E9B"
  },
  {
   "address": 40592,
   "type": "line",
   "text": "$60, save_cursor's RTS, shown here as data under a misplaced label; the saved columns are at $9E91-$9E95 and the rows at $9E96-$9E9A"
  },
  {
   "address": 40593,
   "type": "line",
   "text": "The cursor columns saved for the windows (save_cursor, which nothing calls)"
  },
  {
   "address": 40598,
   "type": "line",
   "text": "The cursor rows saved for the windows (save_cursor, which nothing calls)"
  },
  {
   "address": 40603,
   "type": "line",
   "text": "The text window selected last"
  },
  {
   "address": 40604,
   "type": "line",
   "text": "The seven windows: lines before a pause, then from $9EA3 the left columns, $9EAA the right columns, $9EB1 the top rows and $9EB8 the bottom rows (pixel rows counted from the bottom; one line is 9)"
  },
  {
   "address": 40611,
   "type": "line",
   "text": "Each of the seven text windows' left column"
  },
  {
   "address": 40618,
   "type": "line",
   "text": "Each of the seven text windows' right column"
  },
  {
   "address": 40625,
   "type": "line",
   "text": "Each of the seven text windows' top pixel row"
  },
  {
   "address": 40632,
   "type": "line",
   "text": "Each of the seven text windows' bottom pixel row"
  },
  {
   "address": 40639,
   "type": "line",
   "text": "Prints the unsigned 16-bit number in $60/$61 as five decimal digits, leading zeros as spaces (the last digit always shown): counts ten-thousands, thousands, hundreds, tens and units into $88-$84 by repeated subtraction"
  },
  {
   "address": 40790,
   "type": "line",
   "text": "Prints the signed byte in A: a minus sign when negative, then its tens and units digits ($9F7A); the hundreds are dropped"
  },
  {
   "address": 40826,
   "type": "line",
   "text": "Splits A into hundreds (Y), tens (X) and units (A) by repeated subtraction"
  },
  {
   "address": 40847,
   "type": "line",
   "text": "Inverts the menu bar at the cursor: 9 pixel rows from $50 up, Y + 2 character cells from column $4F - 1 (one either side of the item), with only the right two pixels of the first cell and the left four of the last inverted, so the bar has narrow ends; in both buffers when text is mirrored ($0D28)"
  },
  {
   "address": 40883,
   "type": "line",
   "text": "Low byte of the menu bar's column in a bitmap row (8 * (cursor column - 1)), patched by invert_bar"
  },
  {
   "address": 40892,
   "type": "line",
   "text": "High byte of the menu bar's column offset, the carry out, patched by invert_bar"
  },
  {
   "address": 40909,
   "type": "line",
   "text": "The menu bar's last cell, the item's width plus one (invert_bar's LDX operand)"
  },
  {
   "address": 40947,
   "type": "line",
   "text": "Dims Y characters of the text line at the cursor: each byte shifted right and masked with $55 leaves every other pixel, so the item looks greyed out"
  },
  {
   "address": 40980,
   "type": "line",
   "text": "Low byte of the dimmed item's column in a bitmap row (8 * cursor column), patched by dim_item"
  },
  {
   "address": 40989,
   "type": "line",
   "text": "High byte of the dimmed item's column offset, patched by dim_item"
  },
  {
   "address": 41004,
   "type": "line",
   "text": "The dimmed item's last cell, its width less one (dim_item's LDX operand)"
  },
  {
   "address": 41031,
   "type": "line",
   "text": "Prints character A at the cursor ($4F column, $50 row) in the current window and moves on. Controls: $0D a new line, the window scrolling ($A178) when at its bottom and waiting for a key ($A431) when a page has filled ($0D26); $0E waits for a key and clears the window; $0F reverse on, $10 reverse off ($0D25); $11 clears the window and homes the cursor; $12 fills the rest of the line with character $7B. Other codes are drawn from the font at $F200 (8 bytes each, bit 7 ignored), into the drawing buffer and, when mirrored, the other one; a cell with any pixels gets colour $BC in the screen matrix"
  },
  {
   "address": 41153,
   "type": "line",
   "text": "Drawing a character: its font address ($F200 + 8 * (A AND $7F): the first ASL drops bit 7) goes into the LDA at $A12F, the row into the LDY at $A0F9 and the column's byte offset into the ADCs at $A0FF and $A108; eight pixel rows"
  },
  {
   "address": 41210,
   "type": "line",
   "text": "The pixel row print_char draws, set from the cursor row ($50) and stepped up for each of the glyph's 8 rows"
  },
  {
   "address": 41216,
   "type": "line",
   "text": "Low byte of the character cell's offset in its bitmap row (8 * cursor column), patched by print_char"
  },
  {
   "address": 41225,
   "type": "line",
   "text": "High byte of the character cell's offset in its bitmap row"
  },
  {
   "address": 41262,
   "type": "line",
   "text": "The glyph byte print_char draws next, counted down from 7 so the glyph's bottom row lands on the cursor row"
  },
  {
   "address": 41264,
   "type": "line",
   "text": "Low byte of the glyph's address in the font ($F200 + 8 * (character AND $7F)), patched by print_char"
  },
  {
   "address": 41265,
   "type": "line",
   "text": "High byte of the glyph's address in the font"
  },
  {
   "address": 41271,
   "type": "line",
   "text": "The opcode of print_char's second pixel store: $81, STA (zp,X), while text is mirrored; $EA, NOP, otherwise"
  },
  {
   "address": 41272,
   "type": "line",
   "text": "The second pixel store's operand: $82, the same byte in the other bitmap, or $EA when it is a NOP"
  },
  {
   "address": 41279,
   "type": "line",
   "text": "The opcode of print_char's second colour store: $81, STA (zp,X), while text is mirrored; $EA, NOP, otherwise"
  },
  {
   "address": 41280,
   "type": "line",
   "text": "The second colour store's operand: $1B, the same cell in the other screen matrix, or $EA when it is a NOP"
  },
  {
   "address": 41292,
   "type": "line",
   "text": "Text goes into both bitmaps ($0D28 = 1): the second STA instructions at $A137 and $A13F become STA ($82,X) and STA ($1B,X)"
  },
  {
   "address": 41316,
   "type": "line",
   "text": "Text goes only into the drawing buffer ($0D28 = 0): the second STA instructions at $A137 and $A13F become NOPs"
  },
  {
   "address": 41336,
   "type": "line",
   "text": "Scrolls the current window up A lines, one pixel row at a time (9 to a line), so the text rolls smoothly; a window one line high is simply blanked ($A210). Works on the $C000 bitmap, copying to the $4000 one as well when text is mirrored"
  },
  {
   "address": 41405,
   "type": "line",
   "text": "Moves every pixel row of the window up by one, from the top row down to the bottom one ($0D23)"
  },
  {
   "address": 41417,
   "type": "line",
   "text": "Low byte of the window's left edge in a bitmap row (8 * left column), added to the source row's address by scroll_window"
  },
  {
   "address": 41424,
   "type": "line",
   "text": "High byte of the left edge offset for the source row"
  },
  {
   "address": 41432,
   "type": "line",
   "text": "Low byte of the left edge offset for the destination row, the one above"
  },
  {
   "address": 41441,
   "type": "line",
   "text": "High byte of the left edge offset for the destination row"
  },
  {
   "address": 41445,
   "type": "line",
   "text": "$80 while text is mirrored, so scroll_window's second destination is the same row in the $4000 bitmap; 0 otherwise"
  },
  {
   "address": 41488,
   "type": "line",
   "text": "Blanks a one-line window with spaces, which leaves the cursor one column past its right edge: wrap_line then finds no room, so print_wrapped prints new lines for ever there when a text needs a second line"
  },
  {
   "address": 41508,
   "type": "line",
   "text": "Fills every line of the current window with spaces, from the top row down"
  },
  {
   "address": 41536,
   "type": "line",
   "text": "Spaces from the cursor to the window's right edge"
  },
  {
   "address": 41549,
   "type": "line",
   "text": "Takes a key from the keyboard buffer: carry set and the key in A, a to z made capitals; carry clear (A = $FF) when none is waiting"
  },
  {
   "address": 41566,
   "type": "line",
   "text": "The keyboard buffer: $03 keys waiting at $05 onward; the first is taken and the rest moved down"
  },
  {
   "address": 41597,
   "type": "line",
   "text": "A random 16-bit number from 0 to $60/$61 in $62/$63: the high byte from 0 to $61, and the low byte from 0 to $60 when the high byte came out at its limit, any value otherwise"
  },
  {
   "address": 41624,
   "type": "line",
   "text": "A random number from 0 to A (inclusive) in A and Y: a mask covering A's highest bit is made, and random bytes ($A2C5's sum, inline) are masked until one is not above A"
  },
  {
   "address": 41669,
   "type": "line",
   "text": "The next random byte, in A: the constant $A2F1 is added into $A2F0, that into $A2EF and that into $A2EE, the carries running through, and $A2EE is the result"
  },
  {
   "address": 41692,
   "type": "line",
   "text": "Seeds the random generator: X, Y and $A2F4 into $A2EE-$A2F0 (from the HELM clock when the day changes, $296D)"
  },
  {
   "address": 41710,
   "type": "line",
   "text": "The generator's three bytes ($A2EE-$A2F0), the constant added each time ($A2F1, $A9) and the seed bytes ($A2F2-$A2F4)"
  },
  {
   "address": 41711,
   "type": "line",
   "text": "The generator's middle byte, which takes $A2F0's sum each step"
  },
  {
   "address": 41712,
   "type": "line",
   "text": "The generator's low byte, to which the constant at $A2F1 is added each step"
  },
  {
   "address": 41713,
   "type": "line",
   "text": "The constant $A9 added into the generator each step"
  },
  {
   "address": 41714,
   "type": "line",
   "text": "The seed's first byte (random_seed's X), copied to $A2EE"
  },
  {
   "address": 41715,
   "type": "line",
   "text": "The seed's second byte (random_seed's Y), copied to $A2EF; then $A2F4, $F4, copied to $A2F0"
  },
  {
   "address": 41718,
   "type": "line",
   "text": "Copies $85 whole pages and then $84 bytes from ($80) to ($82)"
  },
  {
   "address": 41751,
   "type": "line",
   "text": "Waits A ticks of about a tenth of a second each (76 x 256 turns of a delay loop), noting whether fire was pressed meanwhile: returns $C0 if it was, else 0. The three RTS at $A46D-$A46F it calls are empty hooks"
  },
  {
   "address": 41791,
   "type": "line",
   "text": "A key or the joystick as a direction: X across (-1 left, 1 right) and Y up and down (1 up, -1 down). Keys from the table at $A375: W, 8 or code $0B up; X, 2 or $0A down; A, 4 or $08 left; D, 6 or $15 right; Q, E, Z, C or 7, 9, 1, 3 the diagonals. Return or Space give carry set (choose), other keys nothing. With no key, the joystick is read ($A406) when it has been used ($0D03)"
  },
  {
   "address": 41845,
   "type": "line",
   "text": "The 20 direction keys, then from $A389 their X steps and from $A39D their Y steps"
  },
  {
   "address": 41865,
   "type": "line",
   "text": "Each direction key's step across: -1, 0 or 1"
  },
  {
   "address": 41885,
   "type": "line",
   "text": "Each direction key's step up and down: -1, 0 or 1"
  },
  {
   "address": 41905,
   "type": "line",
   "text": "The joystick as a position 0-$7F on each axis ($3F centred), eased: with A = 1 each call moves the kept position ($A404, $A405) an eighth of the way toward where the stick is (centre, or $00 or $7F at either side). Used for flying by joystick ($2484)"
  },
  {
   "address": 41907,
   "type": "line",
   "text": "With A = 0 the stick's position is returned as it is"
  },
  {
   "address": 41987,
   "type": "line",
   "text": "1 to ease the joystick position; $A404 and $A405 the eased position across and up-down"
  },
  {
   "address": 41988,
   "type": "line",
   "text": "The eased joystick position across, $00 left to $7F right, $3F centred"
  },
  {
   "address": 41989,
   "type": "line",
   "text": "The eased joystick position up and down, $00 down to $7F up, $3F centred"
  },
  {
   "address": 41990,
   "type": "line",
   "text": "The joystick as -1, 0 or 1 across (X) and up-down (Y), from its position without easing ($A416)"
  },
  {
   "address": 42006,
   "type": "line",
   "text": "A position below $2B gives -1, below $55 0, otherwise 1"
  },
  {
   "address": 42023,
   "type": "line",
   "text": "$C0 in A (Z clear) while the fire button of the joystick in port 2 is pressed, else 0"
  },
  {
   "address": 42033,
   "type": "line",
   "text": "Empties the keyboard buffer, then waits for a key (carry set) or a press of fire, which it waits to see released"
  },
  {
   "address": 42052,
   "type": "line",
   "text": "Waits until the fire button is let go"
  },
  {
   "address": 42060,
   "type": "line",
   "text": "Reads the joystick in port 1 ($DC01): its five switches, 1 for closed, in A, with $0D03 set when any is; the I/O is banked in for the read"
  },
  {
   "address": 42070,
   "type": "line",
   "text": "The same for the joystick in port 2 ($DC00)"
  },
  {
   "address": 42093,
   "type": "line",
   "text": "Three empty hooks, RTS each, called by wait_ticks"
  },
  {
   "address": 42096,
   "type": "line",
   "text": "Frame pacing for the main loop: 3 frames are taken off the lag count $2E and the interrupt's frame counter $16 restarted at 1. Carry set (the lag was 3 or more) tells the loop to skip drawing this pass"
  },
  {
   "address": 42108,
   "type": "line",
   "text": "The same with 5 frames, for the wormhole"
  },
  {
   "address": 42120,
   "type": "line",
   "text": "Draws the frame (set_flash_colour, then build_draw_list) and adds the frames it took ($16) to the lag count: the count was left below zero by frame_skip, so it ends up zero when the drawing took no longer than allowed and holds the frames it overran otherwise"
  },
  {
   "address": 42138,
   "type": "line",
   "text": "The base, after SEG1 is loaded (from dock). Shows bank 3 with text in one buffer, sets up SEG1 ($A55D), loads the base's map file (name at $0778) to $5100, sets $0D30-$0D32, runs SEG1's and SEG1A's set-up ($A575, $A54E, $A584, $E46C), waits for a key, then loops: draw the view ($A4EB) and SEG1's step ($A674) until $A673 is set"
  },
  {
   "address": 42219,
   "type": "line",
   "text": "Draws the base's view: window 2, then the chart window filled with tile $2C around the player's place in the map ($5510, $5530); the routine runs on into SEG1 at $A500, which is only there in a base: the LDY at $A4FE takes its high byte from $A500"
  },
  {
   "address": 48384,
   "type": "line",
   "text": "SPB: the number of texts in each 512-byte block of disk text, one word a block for 115 blocks; resolve_text subtracts them from a text number to find its block"
  },
  {
   "address": 48385,
   "type": "line",
   "text": "The high bytes of SPB's counts, read at $BD01 + 2 * block"
  },
  {
   "address": 60160,
   "type": "line",
   "text": "EXTERN's row address table, low bytes: the address in the $C000 bitmap of each of the 200 pixel rows, the bottom row first (EORed with $3A for the $4000 bitmap)"
  },
  {
   "address": 60161,
   "type": "line",
   "text": "The row address low bytes one row up, read by scroll_window for the row a pixel row moves to"
  },
  {
   "address": 60233,
   "type": "line",
   "text": "The row address low bytes from row 73, the 3D view's bottom row, where set_window last pointed span"
  },
  {
   "address": 60360,
   "type": "line",
   "text": "The screen matrix row addresses, low bytes, for the 25 text rows, the bottom row first"
  },
  {
   "address": 60385,
   "type": "line",
   "text": "The screen matrix row addresses, high bytes ($E3 down to $E0, EORed with $3A for $6000)"
  },
  {
   "address": 60416,
   "type": "line",
   "text": "EXTERN's row address table, high bytes, for each of the 200 pixel rows, the bottom row first"
  },
  {
   "address": 60417,
   "type": "line",
   "text": "The row address high bytes one row up, for scroll_window's destination"
  },
  {
   "address": 60489,
   "type": "line",
   "text": "The row address high bytes from row 73, the 3D view's bottom row"
  },
  {
   "address": 60616,
   "type": "line",
   "text": "n divided by 8 for n from 0 to 319: a pixel row's text row, or an x position's column"
  },
  {
   "address": 60650,
   "type": "line",
   "text": "The column table from x 34, the 3D view's left edge, where set_window last pointed span"
  },
  {
   "address": 60689,
   "type": "line",
   "text": "The text row table from row 73, the 3D view's bottom row"
  },
  {
   "address": 60936,
   "type": "line",
   "text": "For x from 0 to 319, the offset of x's byte in a bitmap row (8 * (x / 8)): its low byte in the top five bits, its high byte in the bottom three"
  },
  {
   "address": 60970,
   "type": "line",
   "text": "The x byte offsets from x 34, the 3D view's left edge"
  },
  {
   "address": 61256,
   "type": "line",
   "text": "For x from 0 to 319, the mask of the pixels from x to the right end of its byte ($FF, $7F ... $01), for a span's left end"
  },
  {
   "address": 61290,
   "type": "line",
   "text": "The left masks from x 34, the 3D view's left edge"
  },
  {
   "address": 61576,
   "type": "line",
   "text": "For x from 0 to 319, the mask of the pixels from the left of its byte to x ($80, $C0 ... $FF), for a span's right end"
  },
  {
   "address": 61610,
   "type": "line",
   "text": "The right masks from x 34, the 3D view's left edge"
  },
  {
   "address": 61896,
   "type": "line",
   "text": "The even-row fill pattern of each of the 10 drawing colours (set_colour)"
  },
  {
   "address": 61906,
   "type": "line",
   "text": "The odd-row fill pattern of each of the 10 drawing colours"
  },
  {
   "address": 61916,
   "type": "line",
   "text": "The clear byte of each of the 10 drawing colours, for $3B; spark_pattern tests colour 0's, which is 0 and never written, so the second three spark patterns are never used"
  },
  {
   "address": 61926,
   "type": "line",
   "text": "The palette: the colour (0 to 9) for each drawing code below $13"
  },
  {
   "address": 61952,
   "type": "line",
   "text": "The font: 128 glyphs of 8 bytes, the top row first, drawn by print_char (codes $20 and up; those below are controls)"
  },
  {
   "address": 62824,
   "type": "line",
   "text": "Inside the font, glyph $6D: the address left in print_char's patched LDA when the snapshot was taken"
  },
  {
   "address": 65530,
   "type": "line",
   "text": "The processor's vectors, used while the ROMs are banked out: NMI to $0E9E and reset to $0E9F, both an RTI, and IRQ to $0EA0 (setup_irq)"
  }
 ]
}
