{
 "schema": 1,
 "platform": "c64",
 "game": "a-view-to-a-kill/paris",
 "build": null,
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    1024,
    2047,
    "screen RAM"
   ],
   [
    2048,
    4095,
    "not the game's: a BASIC line SYS 2067 with the text MAGIC and the RLE depacker it runs (the earlier crack's unpacker, which ends LDA #$37 / STA $01 / CLI / JMP $43B0), then the tail of its packed stream; build_3d_view reuses $0D09-$0E36 as its picture buffer"
   ],
   [
    26880,
    27135,
    "the live object table, copied from the templates at $6800 by init_game at the start of every chase"
   ],
   [
    27392,
    27424,
    "build_3d_view's buffer of the 33 map cells in view, rewritten every time the map moves a cell"
   ],
   [
    2024,
    2039,
    "screen RAM between the 1000 cells and the sprite pointers: not written or read by the part; the bytes are whatever the loader left"
   ],
   [
    16636,
    16703,
    "RTS padding after init_game, then bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    16732,
    16751,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (a copy of part_entry's LDA #3 / STA $02E0 / JMP $4F30)"
   ],
   [
    16881,
    16895,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    16979,
    16991,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    17280,
    17327,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing"
   ],
   [
    17575,
    17663,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    17754,
    17775,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (after the damage gauge tables)"
   ],
   [
    17837,
    17919,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    18493,
    18511,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    18678,
    18687,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing"
   ],
   [
    18746,
    18751,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    18765,
    18783,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    18813,
    18815,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    18844,
    18847,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing"
   ],
   [
    18871,
    18879,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    18932,
    18943,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    19012,
    19023,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    19109,
    19119,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (a copy of divide_16_8's first bytes)"
   ],
   [
    19163,
    19199,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing"
   ],
   [
    19296,
    19359,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    19427,
    19455,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    19870,
    19967,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    20154,
    20159,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    20176,
    20223,
    "$FF fill after the car_cell_update tables"
   ],
   [
    20262,
    20271,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (a copy of the start of the landing tables)"
   ],
   [
    20414,
    20415,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    20456,
    20462,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing"
   ],
   [
    20514,
    20517,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    20553,
    20555,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (JMP $518A, unreachable)"
   ],
   [
    20642,
    20654,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (four JMP $51E0, unreachable)"
   ],
   [
    20954,
    20959,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    20981,
    20991,
    "$FF fill"
   ],
   [
    21015,
    21015,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    21341,
    21471,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine (the byte before, $535C, is altimeter_divider)"
   ],
   [
    21493,
    21499,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    21548,
    21548,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    21742,
    21743,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing"
   ],
   [
    21750,
    21759,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (JMP $53E0 and a copy of the option colours)"
   ],
   [
    22400,
    22527,
    "space codes after the instruction text, then bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    22652,
    22655,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    22682,
    22719,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (a copy of clear_screen's loop)"
   ],
   [
    22744,
    22759,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (five JMP $58E8, unreachable)"
   ],
   [
    22784,
    23039,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    23113,
    23115,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (STY $0345, unreachable)"
   ],
   [
    23128,
    23135,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    23184,
    23199,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (JMP $5A30 copies) and padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    23204,
    23215,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    23262,
    23263,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    23331,
    23332,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    23483,
    23551,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path, with an unreachable copy of car_draw's sprite call at $5BCE"
   ],
   [
    23739,
    23741,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    23965,
    23967,
    "padding between routines (runs of NOP $EA or RTS $60), not reached by any traced path"
   ],
   [
    24004,
    24575,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (copies of place_sprite at $5DF0-$5E3F), then bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    27425,
    27439,
    "bytes after the 33-cell view buffer; not read"
   ],
   [
    29729,
    31231,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    31232,
    31255,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine (before the music variables)"
   ],
   [
    31289,
    31295,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    31691,
    32767,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    32777,
    32807,
    "the tail of a copy of the telex's first line (JAMES BOND 007 ON LOCATION.), overlaid by the CBM80 header; typing starts at $8028"
   ],
   [
    33208,
    33535,
    "space codes after the telex, then bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ],
   [
    33536,
    33587,
    "a stale fragment of an older version of nearby code or data (the bytes read as instructions or table values similar to the live ones), reached by nothing (JSR $7A40 / JSR $7AAB / RTS ...), never copied by init_game"
   ],
   [
    33792,
    35623,
    "bytes in the power-on pattern of uninitialised RAM ($FF/$00 runs with stray bits), part of the saved memory image but read by no routine"
   ]
  ],
  "extra": [
   [
    12288,
    14335,
    "character set"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 4095,
   "type": "Undefined"
  },
  {
   "start": 4096,
   "end": 4232,
   "type": "Code"
  },
  {
   "start": 4233,
   "end": 4234,
   "type": "Undefined"
  },
  {
   "start": 4235,
   "end": 4238,
   "type": "Code"
  },
  {
   "start": 4239,
   "end": 4239,
   "type": "Undefined"
  },
  {
   "start": 4240,
   "end": 16383,
   "type": "Byte"
  },
  {
   "start": 16384,
   "end": 16635,
   "type": "Code"
  },
  {
   "start": 16636,
   "end": 16703,
   "type": "Undefined"
  },
  {
   "start": 16704,
   "end": 16721,
   "type": "Code"
  },
  {
   "start": 16722,
   "end": 16731,
   "type": "Byte"
  },
  {
   "start": 16732,
   "end": 16751,
   "type": "Undefined"
  },
  {
   "start": 16752,
   "end": 16880,
   "type": "Code"
  },
  {
   "start": 16881,
   "end": 16895,
   "type": "Undefined"
  },
  {
   "start": 16896,
   "end": 16978,
   "type": "Code"
  },
  {
   "start": 16979,
   "end": 16991,
   "type": "Undefined"
  },
  {
   "start": 16992,
   "end": 17034,
   "type": "Code"
  },
  {
   "start": 17035,
   "end": 17039,
   "type": "Undefined"
  },
  {
   "start": 17040,
   "end": 17194,
   "type": "Code"
  },
  {
   "start": 17195,
   "end": 17199,
   "type": "Undefined"
  },
  {
   "start": 17200,
   "end": 17279,
   "type": "Code"
  },
  {
   "start": 17280,
   "end": 17327,
   "type": "Undefined"
  },
  {
   "start": 17328,
   "end": 17367,
   "type": "Code"
  },
  {
   "start": 17368,
   "end": 17375,
   "type": "Undefined"
  },
  {
   "start": 17376,
   "end": 17383,
   "type": "Code"
  },
  {
   "start": 17384,
   "end": 17391,
   "type": "Undefined"
  },
  {
   "start": 17392,
   "end": 17399,
   "type": "Code"
  },
  {
   "start": 17400,
   "end": 17407,
   "type": "Undefined"
  },
  {
   "start": 17408,
   "end": 17445,
   "type": "Code"
  },
  {
   "start": 17446,
   "end": 17447,
   "type": "Undefined"
  },
  {
   "start": 17448,
   "end": 17485,
   "type": "Code"
  },
  {
   "start": 17486,
   "end": 17487,
   "type": "Undefined"
  },
  {
   "start": 17488,
   "end": 17527,
   "type": "Code"
  },
  {
   "start": 17528,
   "end": 17535,
   "type": "Undefined"
  },
  {
   "start": 17536,
   "end": 17574,
   "type": "Code"
  },
  {
   "start": 17575,
   "end": 17663,
   "type": "Undefined"
  },
  {
   "start": 17664,
   "end": 17705,
   "type": "Code"
  },
  {
   "start": 17706,
   "end": 17711,
   "type": "Undefined"
  },
  {
   "start": 17712,
   "end": 17743,
   "type": "Code"
  },
  {
   "start": 17744,
   "end": 17753,
   "type": "Byte"
  },
  {
   "start": 17754,
   "end": 17775,
   "type": "Undefined"
  },
  {
   "start": 17776,
   "end": 17836,
   "type": "Code"
  },
  {
   "start": 17837,
   "end": 17919,
   "type": "Undefined"
  },
  {
   "start": 17920,
   "end": 18492,
   "type": "Code"
  },
  {
   "start": 18493,
   "end": 18511,
   "type": "Undefined"
  },
  {
   "start": 18512,
   "end": 18677,
   "type": "Code"
  },
  {
   "start": 18678,
   "end": 18687,
   "type": "Undefined"
  },
  {
   "start": 18688,
   "end": 18745,
   "type": "Code"
  },
  {
   "start": 18746,
   "end": 18751,
   "type": "Undefined"
  },
  {
   "start": 18752,
   "end": 18764,
   "type": "Code"
  },
  {
   "start": 18765,
   "end": 18783,
   "type": "Undefined"
  },
  {
   "start": 18784,
   "end": 18812,
   "type": "Code"
  },
  {
   "start": 18813,
   "end": 18815,
   "type": "Undefined"
  },
  {
   "start": 18816,
   "end": 18843,
   "type": "Code"
  },
  {
   "start": 18844,
   "end": 18847,
   "type": "Undefined"
  },
  {
   "start": 18848,
   "end": 18870,
   "type": "Code"
  },
  {
   "start": 18871,
   "end": 18879,
   "type": "Undefined"
  },
  {
   "start": 18880,
   "end": 18931,
   "type": "Code"
  },
  {
   "start": 18932,
   "end": 18943,
   "type": "Undefined"
  },
  {
   "start": 18944,
   "end": 19011,
   "type": "Code"
  },
  {
   "start": 19012,
   "end": 19023,
   "type": "Undefined"
  },
  {
   "start": 19024,
   "end": 19108,
   "type": "Code"
  },
  {
   "start": 19109,
   "end": 19119,
   "type": "Undefined"
  },
  {
   "start": 19120,
   "end": 19162,
   "type": "Code"
  },
  {
   "start": 19163,
   "end": 19199,
   "type": "Undefined"
  },
  {
   "start": 19200,
   "end": 19295,
   "type": "Byte"
  },
  {
   "start": 19296,
   "end": 19359,
   "type": "Undefined"
  },
  {
   "start": 19360,
   "end": 19426,
   "type": "Code"
  },
  {
   "start": 19427,
   "end": 19455,
   "type": "Undefined"
  },
  {
   "start": 19456,
   "end": 19869,
   "type": "Code"
  },
  {
   "start": 19870,
   "end": 19967,
   "type": "Undefined"
  },
  {
   "start": 19968,
   "end": 20153,
   "type": "Code"
  },
  {
   "start": 20154,
   "end": 20159,
   "type": "Undefined"
  },
  {
   "start": 20160,
   "end": 20175,
   "type": "Byte"
  },
  {
   "start": 20176,
   "end": 20223,
   "type": "Undefined"
  },
  {
   "start": 20224,
   "end": 20261,
   "type": "Code"
  },
  {
   "start": 20262,
   "end": 20271,
   "type": "Undefined"
  },
  {
   "start": 20272,
   "end": 20413,
   "type": "Code"
  },
  {
   "start": 20414,
   "end": 20415,
   "type": "Undefined"
  },
  {
   "start": 20416,
   "end": 20455,
   "type": "Byte"
  },
  {
   "start": 20456,
   "end": 20462,
   "type": "Undefined"
  },
  {
   "start": 20463,
   "end": 20513,
   "type": "Code"
  },
  {
   "start": 20514,
   "end": 20517,
   "type": "Undefined"
  },
  {
   "start": 20518,
   "end": 20552,
   "type": "Code"
  },
  {
   "start": 20553,
   "end": 20555,
   "type": "Undefined"
  },
  {
   "start": 20556,
   "end": 20641,
   "type": "Code"
  },
  {
   "start": 20642,
   "end": 20654,
   "type": "Undefined"
  },
  {
   "start": 20655,
   "end": 20953,
   "type": "Code"
  },
  {
   "start": 20954,
   "end": 20959,
   "type": "Undefined"
  },
  {
   "start": 20960,
   "end": 20980,
   "type": "Code"
  },
  {
   "start": 20981,
   "end": 20991,
   "type": "Undefined"
  },
  {
   "start": 20992,
   "end": 21014,
   "type": "Code"
  },
  {
   "start": 21015,
   "end": 21015,
   "type": "Undefined"
  },
  {
   "start": 21016,
   "end": 21339,
   "type": "Code"
  },
  {
   "start": 21340,
   "end": 21471,
   "type": "Undefined"
  },
  {
   "start": 21472,
   "end": 21492,
   "type": "Code"
  },
  {
   "start": 21493,
   "end": 21499,
   "type": "Undefined"
  },
  {
   "start": 21500,
   "end": 21503,
   "type": "Byte"
  },
  {
   "start": 21504,
   "end": 21547,
   "type": "Code"
  },
  {
   "start": 21548,
   "end": 21548,
   "type": "Undefined"
  },
  {
   "start": 21549,
   "end": 21741,
   "type": "Code"
  },
  {
   "start": 21742,
   "end": 21743,
   "type": "Undefined"
  },
  {
   "start": 21744,
   "end": 21749,
   "type": "Code"
  },
  {
   "start": 21750,
   "end": 21759,
   "type": "Undefined"
  },
  {
   "start": 21760,
   "end": 22399,
   "type": "Byte"
  },
  {
   "start": 22400,
   "end": 22527,
   "type": "Undefined"
  },
  {
   "start": 22528,
   "end": 22651,
   "type": "Code"
  },
  {
   "start": 22652,
   "end": 22655,
   "type": "Undefined"
  },
  {
   "start": 22656,
   "end": 22681,
   "type": "Byte"
  },
  {
   "start": 22682,
   "end": 22719,
   "type": "Undefined"
  },
  {
   "start": 22720,
   "end": 22743,
   "type": "Code"
  },
  {
   "start": 22744,
   "end": 22759,
   "type": "Undefined"
  },
  {
   "start": 22760,
   "end": 22783,
   "type": "Code"
  },
  {
   "start": 22784,
   "end": 23039,
   "type": "Undefined"
  },
  {
   "start": 23040,
   "end": 23112,
   "type": "Code"
  },
  {
   "start": 23113,
   "end": 23115,
   "type": "Undefined"
  },
  {
   "start": 23116,
   "end": 23127,
   "type": "Code"
  },
  {
   "start": 23128,
   "end": 23135,
   "type": "Undefined"
  },
  {
   "start": 23136,
   "end": 23183,
   "type": "Code"
  },
  {
   "start": 23184,
   "end": 23199,
   "type": "Undefined"
  },
  {
   "start": 23200,
   "end": 23203,
   "type": "Byte"
  },
  {
   "start": 23204,
   "end": 23215,
   "type": "Undefined"
  },
  {
   "start": 23216,
   "end": 23261,
   "type": "Code"
  },
  {
   "start": 23262,
   "end": 23263,
   "type": "Undefined"
  },
  {
   "start": 23264,
   "end": 23330,
   "type": "Code"
  },
  {
   "start": 23331,
   "end": 23332,
   "type": "Undefined"
  },
  {
   "start": 23333,
   "end": 23482,
   "type": "Code"
  },
  {
   "start": 23483,
   "end": 23551,
   "type": "Undefined"
  },
  {
   "start": 23552,
   "end": 23738,
   "type": "Code"
  },
  {
   "start": 23739,
   "end": 23741,
   "type": "Undefined"
  },
  {
   "start": 23742,
   "end": 23964,
   "type": "Code"
  },
  {
   "start": 23965,
   "end": 23967,
   "type": "Undefined"
  },
  {
   "start": 23968,
   "end": 24003,
   "type": "Code"
  },
  {
   "start": 24004,
   "end": 24575,
   "type": "Undefined"
  },
  {
   "start": 24576,
   "end": 26879,
   "type": "Byte"
  },
  {
   "start": 26880,
   "end": 27135,
   "type": "Undefined"
  },
  {
   "start": 27136,
   "end": 27391,
   "type": "Byte"
  },
  {
   "start": 27392,
   "end": 27439,
   "type": "Undefined"
  },
  {
   "start": 27440,
   "end": 27903,
   "type": "Byte"
  },
  {
   "start": 27904,
   "end": 28167,
   "type": "Word"
  },
  {
   "start": 28168,
   "end": 29727,
   "type": "Byte"
  },
  {
   "start": 29728,
   "end": 31255,
   "type": "Undefined"
  },
  {
   "start": 31256,
   "end": 31295,
   "type": "Byte"
  },
  {
   "start": 31296,
   "end": 31687,
   "type": "Code"
  },
  {
   "start": 31688,
   "end": 31690,
   "type": "Byte"
  },
  {
   "start": 31691,
   "end": 32767,
   "type": "Undefined"
  },
  {
   "start": 32768,
   "end": 32776,
   "type": "Byte"
  },
  {
   "start": 32777,
   "end": 32807,
   "type": "Undefined"
  },
  {
   "start": 32808,
   "end": 33207,
   "type": "Byte"
  },
  {
   "start": 33208,
   "end": 33587,
   "type": "Undefined"
  },
  {
   "start": 33588,
   "end": 33791,
   "type": "Byte"
  },
  {
   "start": 33792,
   "end": 35623,
   "type": "Undefined"
  },
  {
   "start": 35624,
   "end": 53247,
   "type": "Byte"
  },
  {
   "start": 53248,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 57344,
   "end": 65535,
   "type": "Byte"
  }
 ],
 "symbols": [
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2,
   "name": "zp_temp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "speech_end_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 172,
   "name": "zp_ptr_ac",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 173,
   "name": "zp_ptr_ad",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 174,
   "name": "zp_ptr_ae",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 175,
   "name": "zp_ptr_af",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 201,
   "name": "car_cell_ptr",
   "type": "ZeroPagePointer",
   "kind": "user"
  },
  {
   "address": 202,
   "name": "car_cell_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 211,
   "name": "spiral_limit",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 217,
   "name": "music_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 218,
   "name": "music_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 234,
   "name": "mayday_ref_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 235,
   "name": "mayday_ref_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 236,
   "name": "mayday_ref_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 237,
   "name": "mayday_ref_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 251,
   "name": "zp_ptr_fb",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 252,
   "name": "zp_ptr_fc",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 253,
   "name": "stick_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 254,
   "name": "stick_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 736,
   "name": "sound_option",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 737,
   "name": "catch_allowed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 762,
   "name": "view_cell",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 763,
   "name": "a_02FB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 764,
   "name": "bullet_hits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 765,
   "name": "police_hits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 766,
   "name": "mayday_homing_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 767,
   "name": "irq_lock",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 768,
   "name": "var_page",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 772,
   "name": "basic_crunch_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 787,
   "name": "chase_result",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 788,
   "name": "irq_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 789,
   "name": "irq_vector_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 790,
   "name": "brk_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 791,
   "name": "brk_vector_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 792,
   "name": "nmi_vector",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 793,
   "name": "nmi_vector_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 820,
   "name": "last_step_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 821,
   "name": "last_step_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 822,
   "name": "view_dirty",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 823,
   "name": "view_ready",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 824,
   "name": "car_world_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 825,
   "name": "car_world_x_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 826,
   "name": "car_world_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 827,
   "name": "car_world_y_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 828,
   "name": "map_window",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 829,
   "name": "map_window_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 830,
   "name": "fine_scroll_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 831,
   "name": "fine_scroll_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 832,
   "name": "move_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 833,
   "name": "scroll_unused",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 834,
   "name": "move_countdown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 836,
   "name": "loop_div16",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 837,
   "name": "loop_div2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 838,
   "name": "crash_lock",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 839,
   "name": "last_move_heading",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 844,
   "name": "beep_countdown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 845,
   "name": "beep_interval",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 846,
   "name": "lamp_on_time",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 847,
   "name": "mayday_step_countdown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 848,
   "name": "step_cells_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 864,
   "name": "step_cells_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 880,
   "name": "step_fine_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 896,
   "name": "step_fine_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 912,
   "name": "clock_digits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 913,
   "name": "clock_hour_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 915,
   "name": "clock_min_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 916,
   "name": "clock_min_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 918,
   "name": "clock_sec_tens",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 919,
   "name": "clock_sec_units",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 921,
   "name": "frame_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 928,
   "name": "heading",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 929,
   "name": "damage",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 930,
   "name": "pursuit_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 932,
   "name": "reverse_gear",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 935,
   "name": "coarse_pending",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 936,
   "name": "car_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 960,
   "name": "sprite_clear_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 968,
   "name": "sprite_bit_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 992,
   "name": "mayday_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1033,
   "name": "f_0409",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1064,
   "name": "f_0428",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1073,
   "name": "f_0431",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1113,
   "name": "f_0459",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1153,
   "name": "f_0481",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1184,
   "name": "f_04A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1193,
   "name": "f_04A9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1224,
   "name": "f_04C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1233,
   "name": "f_04D1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1264,
   "name": "f_04F0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1267,
   "name": "f_04F3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1268,
   "name": "a_04F4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1269,
   "name": "a_04F5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1273,
   "name": "f_04F9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1304,
   "name": "f_0518",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1313,
   "name": "f_0521",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1344,
   "name": "f_0540",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1398,
   "name": "f_0576",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1446,
   "name": "f_05A6",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1504,
   "name": "f_05E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1584,
   "name": "f_0630",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1624,
   "name": "f_0658",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1664,
   "name": "f_0680",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1704,
   "name": "f_06A8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1744,
   "name": "f_06D0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1784,
   "name": "f_06F8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1864,
   "name": "f_0748",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1904,
   "name": "f_0770",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1944,
   "name": "f_0798",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2023,
   "name": "f_07E7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2039,
   "name": "f_07F7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2044,
   "name": "a_07FC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2045,
   "name": "a_07FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3337,
   "name": "f_0D09",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3377,
   "name": "f_0D31",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3417,
   "name": "f_0D59",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3457,
   "name": "f_0D81",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3497,
   "name": "f_0DA9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3537,
   "name": "f_0DD1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3577,
   "name": "f_0DF9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 3617,
   "name": "f_0E21",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 4096,
   "name": "play_speech",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4098,
   "name": "speech_addr_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4102,
   "name": "speech_addr_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4103,
   "name": "speech_play_body",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4136,
   "name": "j_1028",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4140,
   "name": "j_102C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4150,
   "name": "b_1036",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4156,
   "name": "j_103C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 4185,
   "name": "b_1059",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4190,
   "name": "b_105E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4195,
   "name": "b_1063",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 4203,
   "name": "speech_bit_on",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4224,
   "name": "speech_bit_off",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4235,
   "name": "speech_delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 4240,
   "name": "speech_1090",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4644,
   "name": "speech_gap_1224",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4645,
   "name": "speech_1225",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5632,
   "name": "speech_1225_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6409,
   "name": "speech_gap_1909",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6410,
   "name": "speech_190A",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7424,
   "name": "speech_190A_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8099,
   "name": "speech_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8192,
   "name": "spr_car",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8704,
   "name": "spr_police",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9216,
   "name": "spr_mayday",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9728,
   "name": "spr_unused_98",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10240,
   "name": "spr_wheel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10752,
   "name": "spr_unused_a8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11008,
   "name": "spr_bullet",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11264,
   "name": "spr_unused_b0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12288,
   "name": "charset_cockpit",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13312,
   "name": "charset_cockpit_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14336,
   "name": "charset_map",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15360,
   "name": "charset_map_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "init_game",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16386,
   "name": "b_4002",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16389,
   "name": "b_4005",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16547,
   "name": "b_40A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16626,
   "name": "b_40F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16704,
   "name": "patch_map",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16706,
   "name": "b_4142",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16722,
   "name": "map_patch_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16727,
   "name": "map_patch_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 16752,
   "name": "update_clock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16835,
   "name": "b_41C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16864,
   "name": "b_41E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16866,
   "name": "b_41E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16896,
   "name": "place_sprite",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 16903,
   "name": "b_4207",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16916,
   "name": "b_4214",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16959,
   "name": "b_423F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 16966,
   "name": "j_4246",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 16992,
   "name": "read_joystick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17010,
   "name": "b_4272",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17014,
   "name": "b_4276",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17018,
   "name": "b_427A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17022,
   "name": "b_427E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17023,
   "name": "b_427F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17032,
   "name": "b_4288",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17040,
   "name": "objects_to_sprites",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17042,
   "name": "j_4292",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17071,
   "name": "b_42AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17127,
   "name": "b_42E7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17168,
   "name": "b_4310",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17175,
   "name": "b_4317",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17181,
   "name": "r_431D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 17182,
   "name": "object_offscreen",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 17188,
   "name": "j_4324",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 17200,
   "name": "object_reset",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 17239,
   "name": "object_hide",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 17269,
   "name": "object_flags_trim",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17328,
   "name": "part_entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17360,
   "name": "restart_to_menu",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17376,
   "name": "restart_to_success",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17392,
   "name": "restart_stub_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 17408,
   "name": "gun_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17445,
   "name": "r_4425",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 17448,
   "name": "crash_sound",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17485,
   "name": "r_444D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 17488,
   "name": "screech_sound",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17525,
   "name": "b_4475",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17536,
   "name": "type_click",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17664,
   "name": "draw_speed_gauge",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17678,
   "name": "b_450E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17712,
   "name": "draw_damage_gauge",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 17744,
   "name": "damage_gauge_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17752,
   "name": "damage_gauge_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 17776,
   "name": "fire_bullet",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17836,
   "name": "r_45AC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 17920,
   "name": "build_3d_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 17926,
   "name": "b_4606",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17959,
   "name": "b_4627",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 17977,
   "name": "b_4639",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18002,
   "name": "b_4652",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18020,
   "name": "b_4664",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18030,
   "name": "j_466E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18069,
   "name": "j_4695",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18103,
   "name": "b_46B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18105,
   "name": "b_46B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18118,
   "name": "b_46C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18129,
   "name": "b_46D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18148,
   "name": "b_46E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18159,
   "name": "j_46EF",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18160,
   "name": "b_46F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18236,
   "name": "b_473C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18253,
   "name": "b_474D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18264,
   "name": "j_4758",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18265,
   "name": "b_4759",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18366,
   "name": "b_47BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18428,
   "name": "copy_3d_view",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18434,
   "name": "b_4802",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18436,
   "name": "b_4804",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18512,
   "name": "mayday_distance",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18556,
   "name": "b_487C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18563,
   "name": "j_4883",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18581,
   "name": "b_4895",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18596,
   "name": "j_48A4",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18608,
   "name": "b_48B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18615,
   "name": "j_48B7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18633,
   "name": "b_48C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18648,
   "name": "j_48D8",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18688,
   "name": "place_roadblock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18715,
   "name": "b_491B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18721,
   "name": "b_4921",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18752,
   "name": "roadblock_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18784,
   "name": "roadblock_hit_across",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 18804,
   "name": "b_4974",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18816,
   "name": "roadblock_hit_along",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 18837,
   "name": "b_4995",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18848,
   "name": "add_damage",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 18867,
   "name": "b_49B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18880,
   "name": "clear_roadblock",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18901,
   "name": "b_49D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18907,
   "name": "b_49DB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18944,
   "name": "draw_cockpit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 18974,
   "name": "j_4A1E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 18976,
   "name": "b_4A20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 18994,
   "name": "b_4A32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19005,
   "name": "j_4A3D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19024,
   "name": "locator_beep",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19056,
   "name": "b_4A70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19076,
   "name": "b_4A84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19079,
   "name": "j_4A87",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19105,
   "name": "b_4AA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19120,
   "name": "divide_16_8",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19134,
   "name": "b_4ABE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19148,
   "name": "b_4ACC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19150,
   "name": "j_4ACE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19158,
   "name": "b_4AD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19200,
   "name": "roadblock_kind",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19232,
   "name": "roadblock_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19264,
   "name": "roadblock_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 19360,
   "name": "speak_result",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 19383,
   "name": "b_4BB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19387,
   "name": "j_4BBB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19403,
   "name": "b_4BCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19419,
   "name": "j_4BDB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19456,
   "name": "police_ai",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19463,
   "name": "j_4C07",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19475,
   "name": "b_4C13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19492,
   "name": "b_4C24",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19502,
   "name": "b_4C2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19519,
   "name": "b_4C3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19535,
   "name": "b_4C4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19546,
   "name": "b_4C5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19632,
   "name": "b_4CB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19634,
   "name": "j_4CB2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19662,
   "name": "b_4CCE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19676,
   "name": "b_4CDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19700,
   "name": "b_4CF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19714,
   "name": "b_4D02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19724,
   "name": "j_4D0C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 19734,
   "name": "r_4D16",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 19735,
   "name": "multiply_8_8",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19745,
   "name": "b_4D21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19752,
   "name": "b_4D28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19763,
   "name": "police_dying",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 19771,
   "name": "b_4D3B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19795,
   "name": "b_4D53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 19828,
   "name": "police_shot",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 19858,
   "name": "police_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 19968,
   "name": "car_cell_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20001,
   "name": "b_4E21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20014,
   "name": "b_4E2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20037,
   "name": "b_4E45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20050,
   "name": "b_4E52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20077,
   "name": "b_4E6D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20090,
   "name": "b_4E7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20096,
   "name": "b_4E80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20119,
   "name": "j_4E97",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20128,
   "name": "b_4EA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20148,
   "name": "b_4EB4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20160,
   "name": "block_step_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20164,
   "name": "block_step_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20168,
   "name": "junction_marks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20172,
   "name": "no_count_cells",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20224,
   "name": "pick_landing_point",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20272,
   "name": "title_page",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20351,
   "name": "j_4F7F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 20377,
   "name": "b_4F99",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20385,
   "name": "b_4FA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20388,
   "name": "b_4FA4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20390,
   "name": "b_4FA6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20392,
   "name": "b_4FA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20411,
   "name": "b_4FBB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20416,
   "name": "landing_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20424,
   "name": "landing_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20432,
   "name": "landing_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20440,
   "name": "landing_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20448,
   "name": "landing_spiral",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 20463,
   "name": "sid_random",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20480,
   "name": "install_game_irq",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 20518,
   "name": "game_irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20534,
   "name": "b_5036",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20542,
   "name": "b_503E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20550,
   "name": "b_5046",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20556,
   "name": "raster_bands",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 20573,
   "name": "b_505D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20655,
   "name": "raster_map_band",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 20729,
   "name": "raster_map_colours",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20791,
   "name": "hit_sprite",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20823,
   "name": "b_5157",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20839,
   "name": "b_5167",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20848,
   "name": "hit_background",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20861,
   "name": "bullet_stop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20874,
   "name": "irq_exit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20880,
   "name": "car_hits_police",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 20898,
   "name": "car_crash",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 20923,
   "name": "b_51BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20939,
   "name": "b_51CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20960,
   "name": "irq_sound",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 20969,
   "name": "b_51E9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20978,
   "name": "b_51F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20992,
   "name": "mayday_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21014,
   "name": "r_5216",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 21016,
   "name": "mayday_drift",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 21049,
   "name": "b_5239",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21063,
   "name": "b_5247",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21087,
   "name": "b_525F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21101,
   "name": "b_526D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21136,
   "name": "b_5290",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21142,
   "name": "j_5296",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21150,
   "name": "b_529E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21153,
   "name": "b_52A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21156,
   "name": "mayday_homing",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 21174,
   "name": "b_52B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21184,
   "name": "j_52C0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21201,
   "name": "b_52D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21215,
   "name": "b_52DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21228,
   "name": "b_52EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21238,
   "name": "j_52F6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21255,
   "name": "b_5307",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21269,
   "name": "altimeter_tick",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 21286,
   "name": "b_5326",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21304,
   "name": "b_5338",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21325,
   "name": "r_534D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 21326,
   "name": "b_534E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21333,
   "name": "r_5355",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 21334,
   "name": "b_5356",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21340,
   "name": "altimeter_divider",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 21472,
   "name": "highlight_option",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 21476,
   "name": "b_53E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21500,
   "name": "option_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21501,
   "name": "f_53FD",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21502,
   "name": "a_53FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21503,
   "name": "a_53FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 21504,
   "name": "clear_screen",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21527,
   "name": "b_5417",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 21529,
   "name": "j_5419",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21549,
   "name": "redraw_title_page",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21552,
   "name": "draw_title_text",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 21554,
   "name": "j_5432",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 21741,
   "name": "r_54ED",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 21744,
   "name": "show_title_page",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 21760,
   "name": "title_text",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21800,
   "name": "title_line_01",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21840,
   "name": "title_line_02",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21880,
   "name": "title_line_03",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21920,
   "name": "title_line_04",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 21960,
   "name": "title_line_05",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22000,
   "name": "title_line_06",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22040,
   "name": "title_line_07",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22080,
   "name": "title_line_08",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22120,
   "name": "title_line_09",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22160,
   "name": "title_line_10",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22200,
   "name": "title_line_11",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22240,
   "name": "title_line_12",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22280,
   "name": "title_line_13",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22320,
   "name": "title_line_14",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22360,
   "name": "title_line_15",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22528,
   "name": "mission_complete",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 22618,
   "name": "b_585A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22649,
   "name": "j_5879",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 22656,
   "name": "telex_rows_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22672,
   "name": "telex_rows_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22720,
   "name": "type_line",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22722,
   "name": "b_58C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22736,
   "name": "b_58D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22760,
   "name": "type_delay",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 22766,
   "name": "b_58EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22768,
   "name": "b_58F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23040,
   "name": "game_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23088,
   "name": "main_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 23116,
   "name": "main_loop_counts",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 23122,
   "name": "b_5A52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23136,
   "name": "main_loop_steer",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 23142,
   "name": "world_update",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 23178,
   "name": "b_5A8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23181,
   "name": "b_5A8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23200,
   "name": "steer_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23201,
   "name": "steer_hold",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23202,
   "name": "handbrake_steps",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23203,
   "name": "handbrake_heading",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23216,
   "name": "steer_car",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 23229,
   "name": "b_5ABD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23238,
   "name": "b_5AC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23264,
   "name": "steer_by_stick",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 23284,
   "name": "b_5AF4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23300,
   "name": "b_5B04",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23312,
   "name": "b_5B10",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23318,
   "name": "b_5B16",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23333,
   "name": "car_draw",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23338,
   "name": "j_5B2A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23360,
   "name": "speed_and_fire",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 23377,
   "name": "b_5B51",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23391,
   "name": "j_5B5F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23407,
   "name": "b_5B6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23430,
   "name": "b_5B86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23433,
   "name": "b_5B89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23442,
   "name": "j_5B92",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23477,
   "name": "b_5BB5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23480,
   "name": "b_5BB8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23552,
   "name": "scroll_map",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23582,
   "name": "b_5C1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23599,
   "name": "b_5C2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23602,
   "name": "b_5C32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23618,
   "name": "b_5C42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23635,
   "name": "b_5C53",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23659,
   "name": "b_5C6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23665,
   "name": "b_5C71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23682,
   "name": "b_5C82",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23685,
   "name": "b_5C85",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23702,
   "name": "b_5C96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23708,
   "name": "b_5C9C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23725,
   "name": "b_5CAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23742,
   "name": "map_coarse_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 23773,
   "name": "b_5CDD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23783,
   "name": "b_5CE7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23789,
   "name": "b_5CED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23803,
   "name": "b_5CFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23813,
   "name": "b_5D05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23816,
   "name": "b_5D08",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23847,
   "name": "b_5D27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23857,
   "name": "b_5D31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23863,
   "name": "b_5D37",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23877,
   "name": "b_5D45",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23887,
   "name": "b_5D4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23890,
   "name": "b_5D52",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23914,
   "name": "b_5D6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23916,
   "name": "b_5D6C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23917,
   "name": "map_copy_src",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23918,
   "name": "a_5D6E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23920,
   "name": "map_copy_dst",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23921,
   "name": "a_5D71",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 23922,
   "name": "map_copy_next_row",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23939,
   "name": "b_5D83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23953,
   "name": "b_5D91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23968,
   "name": "car_move_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23990,
   "name": "b_5DB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23993,
   "name": "r_5DB9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23994,
   "name": "j_5DBA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24576,
   "name": "strips_6000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 25088,
   "name": "strips_6200",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26112,
   "name": "strips_6600",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26624,
   "name": "obj_x_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26640,
   "name": "obj_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26656,
   "name": "obj_shape",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26672,
   "name": "obj_heading",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 26688,
   "name": "obj_x_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26704,
   "name": "obj_wait",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26720,
   "name": "obj_speed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26736,
   "name": "obj_blinks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26752,
   "name": "obj_y_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26768,
   "name": "obj_blink_timer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26784,
   "name": "police_shapes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26800,
   "name": "heading_dx",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26808,
   "name": "heading_dy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26816,
   "name": "obj_y_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26832,
   "name": "obj_unused_d0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26848,
   "name": "obj_threshold",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26864,
   "name": "mayday_spiral_init",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 26880,
   "name": "f_6900",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26895,
   "name": "a_690F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26896,
   "name": "f_6910",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26911,
   "name": "a_691F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26912,
   "name": "f_6920",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26927,
   "name": "a_692F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26928,
   "name": "f_6930",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26943,
   "name": "a_693F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26944,
   "name": "f_6940",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26959,
   "name": "a_694F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26960,
   "name": "f_6950",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26976,
   "name": "f_6960",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26992,
   "name": "f_6970",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27008,
   "name": "f_6980",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27023,
   "name": "a_698F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27024,
   "name": "f_6990",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27040,
   "name": "f_69A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27056,
   "name": "f_69B0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27064,
   "name": "f_69B8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27072,
   "name": "f_69C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27087,
   "name": "a_69CF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27104,
   "name": "f_69E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27128,
   "name": "a_69F8",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27129,
   "name": "a_69F9",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27132,
   "name": "a_69FC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27133,
   "name": "a_69FD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27134,
   "name": "a_69FE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27135,
   "name": "a_69FF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 27136,
   "name": "wall_ptr_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27200,
   "name": "wall_ptr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27264,
   "name": "wall_first_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27328,
   "name": "wall_end_col",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27392,
   "name": "f_6B00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27393,
   "name": "f_6B01",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27402,
   "name": "f_6B0A",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27403,
   "name": "f_6B0B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27440,
   "name": "view_list_offset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27448,
   "name": "view_tables_spare",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27600,
   "name": "view_uses_y_step",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27608,
   "name": "view_tables_spare2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 27648,
   "name": "cell_strip_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27776,
   "name": "cell_strip_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 27904,
   "name": "view_offsets",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28036,
   "name": "view_offsets_south",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28168,
   "name": "view_offsets_pad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28416,
   "name": "cell_attr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 28672,
   "name": "strips_7000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29696,
   "name": "strips_7400",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31256,
   "name": "music_attack",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31257,
   "name": "a_7A19",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31258,
   "name": "a_7A1A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31259,
   "name": "music_wave",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31260,
   "name": "a_7A1C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31261,
   "name": "a_7A1D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31262,
   "name": "music_pulse",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31263,
   "name": "a_7A1F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31264,
   "name": "a_7A20",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31265,
   "name": "music_swing",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31266,
   "name": "music_tick_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31267,
   "name": "music_ptr_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31268,
   "name": "a_7A24",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31269,
   "name": "a_7A25",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31270,
   "name": "music_ptr_hi3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31271,
   "name": "a_7A27",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31272,
   "name": "a_7A28",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31273,
   "name": "music_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31274,
   "name": "a_7A2A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31275,
   "name": "a_7A2B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31276,
   "name": "music_freq_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31279,
   "name": "music_cur",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31280,
   "name": "a_7A30",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31281,
   "name": "a_7A31",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31282,
   "name": "a_7A32",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31283,
   "name": "a_7A33",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31284,
   "name": "a_7A34",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31285,
   "name": "a_7A35",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 31286,
   "name": "music_shimmer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 31296,
   "name": "init_music",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31361,
   "name": "music_rewind",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31403,
   "name": "music_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31421,
   "name": "j_7ABD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31440,
   "name": "b_7AD0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31443,
   "name": "b_7AD3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31456,
   "name": "music_step_voices",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31458,
   "name": "b_7AE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31522,
   "name": "r_7B22",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 31523,
   "name": "music_voice_note",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31593,
   "name": "b_7B69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31603,
   "name": "music_read",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31622,
   "name": "j_7B86",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31639,
   "name": "r_7B97",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 31640,
   "name": "music_pitch_fx",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31645,
   "name": "b_7B9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31670,
   "name": "j_7BB6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31682,
   "name": "j_7BC2",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31688,
   "name": "voice_reg_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32768,
   "name": "cbm80_header",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32808,
   "name": "telex_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32848,
   "name": "telex_line_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32888,
   "name": "telex_line_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32928,
   "name": "telex_line_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32968,
   "name": "telex_line_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33008,
   "name": "telex_line_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33048,
   "name": "telex_line_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33088,
   "name": "telex_line_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33128,
   "name": "telex_line_8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33168,
   "name": "telex_line_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33536,
   "name": "f_8300",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 33588,
   "name": "var_templates",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33652,
   "name": "var_templates_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33716,
   "name": "var_templates_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35624,
   "name": "cockpit_screen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36624,
   "name": "cockpit_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37624,
   "name": "map_row_000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38632,
   "name": "map_row_008",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 39640,
   "name": "map_row_016",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40648,
   "name": "map_row_024",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40687,
   "name": "map_patch_cells_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40956,
   "name": "map_patch_cells_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40960,
   "name": "map_at_A000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41656,
   "name": "map_row_032",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 41937,
   "name": "map_copy_src_image",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 42664,
   "name": "map_row_040",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 43672,
   "name": "map_row_048",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 44680,
   "name": "map_row_056",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 45688,
   "name": "map_row_064",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46696,
   "name": "map_row_072",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47704,
   "name": "map_row_080",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48712,
   "name": "map_row_088",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49152,
   "name": "map_at_C000",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49720,
   "name": "map_row_096",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50728,
   "name": "map_row_104",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51736,
   "name": "map_row_112",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52744,
   "name": "map_row_120",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53246,
   "name": "f_CFFE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55299,
   "name": "a_D803",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55336,
   "name": "f_D828",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55456,
   "name": "f_D8A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55496,
   "name": "f_D8C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55536,
   "name": "f_D8F0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55576,
   "name": "f_D918",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55616,
   "name": "f_D940",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55776,
   "name": "f_D9E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55856,
   "name": "f_DA30",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55896,
   "name": "f_DA58",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55936,
   "name": "f_DA80",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55976,
   "name": "f_DAA8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56016,
   "name": "f_DAD0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56056,
   "name": "f_DAF8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56136,
   "name": "f_DB48",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56176,
   "name": "f_DB70",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56216,
   "name": "f_DB98",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "tune_v1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58368,
   "name": "tune_v1_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59392,
   "name": "tune_v1_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60113,
   "name": "tune_v2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61120,
   "name": "tune_v2_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62144,
   "name": "tune_v2_c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63168,
   "name": "tune_v2_d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63317,
   "name": "tune_v3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64256,
   "name": "tune_v3_b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64738,
   "name": "kernal_reset",
   "type": "Jump",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 1,
   "type": "line",
   "text": "6510 processor port: init_game clears bit 0 (BASIC ROM out, $36); music_read sets 0 (all RAM) for one read of the tune under the KERNAL and puts the old value back."
  },
  {
   "address": 2,
   "type": "line",
   "text": "Scratch byte with many users: the fire flag from read_joystick (1 = held), the low byte of a speech sample's end address, place_sprite's X bit 8 flag, a divisor or multiplier, a loop index in build_3d_view."
  },
  {
   "address": 3,
   "type": "line",
   "text": "High byte of the current speech sample's end address (play_speech)."
  },
  {
   "address": 172,
   "type": "line",
   "text": "Scratch pointer/bytes $AC/$AD: roadblock cell address (place_roadblock, clear_roadblock), police object index in police_ai, place_sprite's Y, colour RAM pointer in clear_screen, distance sums in mayday_distance."
  },
  {
   "address": 173,
   "type": "line",
   "text": "High byte of the $AC pointer; also the window X offset (low) in objects_to_sprites."
  },
  {
   "address": 174,
   "type": "line",
   "text": "Scratch pointer $AE/$AF: map cell pointer (car_cell_update, roadblock_check, build_3d_view), damage gauge cell, screen pointer in draw_cockpit and clear_screen; $AE alone is place_sprite's shape pointer and the dividend shift byte in divide_16_8."
  },
  {
   "address": 175,
   "type": "line",
   "text": "High byte of the $AE pointer; place_sprite's X low byte."
  },
  {
   "address": 201,
   "type": "line",
   "text": "Map address of the cell under the car ($C9 low, $CA high), kept by car_cell_update and read by roadblock_check."
  },
  {
   "address": 202,
   "type": "line",
   "text": "High byte of car_cell_ptr."
  },
  {
   "address": 211,
   "type": "line",
   "text": "May Day's spiral limit, from the landing table ($4FE0): when her circling radius $69F9 reaches it she starts to home on the landing point."
  },
  {
   "address": 217,
   "type": "line",
   "text": "Note stream pointer of the voice being stepped ($D9 low, $DA high; music_step_voices, music_voice_note). On the instruction page $D9 is instead the stepping colour of the PRESS FIRE TO START line (title_page, draw_title_text)."
  },
  {
   "address": 218,
   "type": "line",
   "text": "High byte of music_ptr."
  },
  {
   "address": 234,
   "type": "line",
   "text": "May Day's X minus $88 (16 bits, $EA/$EB), for mayday_distance."
  },
  {
   "address": 235,
   "type": "line",
   "text": "High byte of mayday_ref_x."
  },
  {
   "address": 236,
   "type": "line",
   "text": "May Day's Y minus $32 (16 bits, $EC/$ED), for mayday_distance."
  },
  {
   "address": 237,
   "type": "line",
   "text": "High byte of mayday_ref_y."
  },
  {
   "address": 251,
   "type": "line",
   "text": "Scratch pointer $FB/$FC: speech sample pointer, telex source line, map view base in build_3d_view, sprite bit mask in place_sprite, police cell address in police_ai."
  },
  {
   "address": 252,
   "type": "line",
   "text": "High byte of the $FB pointer; also a column index in build_3d_view."
  },
  {
   "address": 253,
   "type": "line",
   "text": "Stick up/down from read_joystick ($FF up, 1 down, 0); also scratch: speech length, telex destination pointer ($FD/$FE), divide_16_8's quotient, multiply_8_8's low byte."
  },
  {
   "address": 254,
   "type": "line",
   "text": "Stick left/right from read_joystick ($FF left, 1 right, 0); also scratch: divide_16_8's remainder, multiply_8_8's high byte."
  },
  {
   "address": 736,
   "type": "line",
   "text": "Sound choice on the instruction page: 1 THEME TUNE ONLY, 2 SOUND EFFECTS ONLY, 3 BOTH (set to 3 by part_entry). Bit 0 enables the music in irq_sound, bit 1 the effects and the locator beep."
  },
  {
   "address": 737,
   "type": "line",
   "text": "Non-zero once the altimeter reads below 060 (altimeter_tick); hit_sprite accepts the car touching May Day as a catch only then. Cleared by init_game."
  },
  {
   "address": 762,
   "type": "line",
   "text": "The map cell build_3d_view looks from ($02FA high, $02FB low); written every rebuild, read by nothing found."
  },
  {
   "address": 763,
   "type": "line",
   "text": "Low byte of view_cell (build_3d_view's view point), never read."
  },
  {
   "address": 764,
   "type": "line",
   "text": "Police sprites (bits 0-2) the bullet has hit, from hit_sprite; used and cleared by police_ai/police_update."
  },
  {
   "address": 765,
   "type": "line",
   "text": "Police sprites (bits 0-2) that touched the car or each other, from hit_sprite; such cars wait $C0 passes (police_ai); cleared by police_update."
  },
  {
   "address": 766,
   "type": "line",
   "text": "0 while May Day circles, 1 once her radius has reached the spiral limit and she heads for the landing point (mayday_update). Cleared by init_game."
  },
  {
   "address": 767,
   "type": "line",
   "text": "When non-zero, game_irq ignores collisions and car_move_tick does nothing. init_game clears it and nothing found sets it."
  },
  {
   "address": 768,
   "type": "line",
   "text": "Base of init_game's copy of the variable templates: $8300+Y to $0300+Y for Y = $34-$FF, so $0334-$03FF start every chase from the values at $8334-$83FF."
  },
  {
   "address": 772,
   "type": "line",
   "text": "Low byte of the BASIC tokeniser vector ($0304/$0305); part_entry writes $B0 here (only the low byte). Nothing in the part uses BASIC, so the purpose is unknown."
  },
  {
   "address": 787,
   "type": "line",
   "text": "How the chase ended: 0 while it runs; $80 caught May Day (hit_sprite); $40 the altimeter reached 000 (altimeter_tick); 40 or $27 the damage gauge is full (add_damage, car_crash). Read by world_update and speak_result."
  },
  {
   "address": 788,
   "type": "line",
   "text": "KERNAL IRQ vector: irq_exit ($518A) on the instruction and success pages, game_irq ($5026) during the chase."
  },
  {
   "address": 789,
   "type": "line",
   "text": "High byte of the IRQ vector."
  },
  {
   "address": 790,
   "type": "line",
   "text": "KERNAL BRK vector, set to part_entry ($43B0) by part_entry."
  },
  {
   "address": 791,
   "type": "line",
   "text": "High byte of the BRK vector."
  },
  {
   "address": 792,
   "type": "line",
   "text": "KERNAL NMI vector, set to part_entry ($43B0): the RESTORE key restarts the part at the instruction page."
  },
  {
   "address": 793,
   "type": "line",
   "text": "High byte of the NMI vector."
  },
  {
   "address": 820,
   "type": "line",
   "text": "Last coarse scroll step in X: 1, 0 or $FF (map_coarse_step); build_3d_view and car_cell_update adjust by it."
  },
  {
   "address": 821,
   "type": "line",
   "text": "Last coarse scroll step in Y: 1, 0 or $FF (map_coarse_step)."
  },
  {
   "address": 822,
   "type": "line",
   "text": "Set by map_coarse_step when the map has moved a cell; build_3d_view rebuilds the 3D view and clears it."
  },
  {
   "address": 823,
   "type": "line",
   "text": "Set by build_3d_view when its buffer holds a new picture; copy_3d_view copies it in the IRQ and clears it."
  },
  {
   "address": 824,
   "type": "line",
   "text": "The car's world X in pixels (16 bits, $0338/$0339; $0190 at the start), stepped by 2 by scroll_map."
  },
  {
   "address": 825,
   "type": "line",
   "text": "High byte of car_world_x."
  },
  {
   "address": 826,
   "type": "line",
   "text": "The car's world Y in pixels (16 bits, $033A/$033B; $01BC at the start)."
  },
  {
   "address": 827,
   "type": "line",
   "text": "High byte of car_world_y."
  },
  {
   "address": 828,
   "type": "line",
   "text": "Map address of the top-left cell of the 13 x 40 map window on screen ($033C/$033D; $AF35 at the start)."
  },
  {
   "address": 829,
   "type": "line",
   "text": "High byte of map_window."
  },
  {
   "address": 830,
   "type": "line",
   "text": "The map band's X fine scroll, 0-6 in steps of 2 (scroll_map; written to $D016 by raster_map_band)."
  },
  {
   "address": 831,
   "type": "line",
   "text": "The map band's Y fine scroll, 1-7 in steps of 2 (scroll_map; written to $D011 by raster_map_band)."
  },
  {
   "address": 832,
   "type": "line",
   "text": "The car's speed as a delay, 1 (fastest) to $3F (starts at $3F): car_move_tick waits delay/4+1 frames between 2-pixel moves. Changed by speed_and_fire, raised by car_crash, shown by draw_speed_gauge."
  },
  {
   "address": 833,
   "type": "line",
   "text": "Cleared by scroll_map on every move; nothing found reads it."
  },
  {
   "address": 834,
   "type": "line",
   "text": "car_move_tick's frame countdown to the next 2-pixel move."
  },
  {
   "address": 836,
   "type": "line",
   "text": "main_loop's pass counter: every 16th pass runs speed_and_fire."
  },
  {
   "address": 837,
   "type": "line",
   "text": "main_loop's second counter: every other speed pass also steers."
  },
  {
   "address": 838,
   "type": "line",
   "text": "Set by car_crash; while non-zero read_joystick returns no direction and no fire and further crashes are ignored. Cleared by scroll_map when the car next moves, and by title_page."
  },
  {
   "address": 839,
   "type": "line",
   "text": "The heading of the car's last move (car_move_tick); car_crash puts the heading back to it."
  },
  {
   "address": 844,
   "type": "line",
   "text": "locator_beep's countdown to the next beep."
  },
  {
   "address": 845,
   "type": "line",
   "text": "Locator beep interval, distance to May Day / 40, OR 1 (mayday_distance)."
  },
  {
   "address": 846,
   "type": "line",
   "text": "How many more locator_beep calls the lamp stays purple (2 per beep)."
  },
  {
   "address": 847,
   "type": "line",
   "text": "mayday_update's pass countdown: 7 while circling, 8 while homing."
  },
  {
   "address": 848,
   "type": "line",
   "text": "Coarse X step per heading for map_coarse_step: entries 0-7 forward, 8-15 reverse; 1 = one column right, $81 = one column left, 0 = none."
  },
  {
   "address": 864,
   "type": "line",
   "text": "Coarse Y step per heading: $7E one map row down, $FE (negative, taken as -$7E) one row up, 0 none; 0-7 forward, 8-15 reverse."
  },
  {
   "address": 880,
   "type": "line",
   "text": "Fine X direction per heading for scroll_map: 1 or $81 (bit 7 = the other way), 0 none; 0-7 forward, 8-15 reverse."
  },
  {
   "address": 896,
   "type": "line",
   "text": "Fine Y direction per heading for scroll_map, same coding as step_fine_x."
  },
  {
   "address": 912,
   "type": "line",
   "text": "The cockpit clock as eight characters less $64: hour tens and units ($0390, $0391), separator $0A, minute tens and units ($0393, $0394), separator, second tens and units ($0396, $0397); $0398 unused, $0399 the frame count (update_clock)."
  },
  {
   "address": 913,
   "type": "line",
   "text": "Clock hour units digit."
  },
  {
   "address": 915,
   "type": "line",
   "text": "Clock minute tens digit."
  },
  {
   "address": 916,
   "type": "line",
   "text": "Clock minute units digit."
  },
  {
   "address": 918,
   "type": "line",
   "text": "Clock second tens digit."
  },
  {
   "address": 919,
   "type": "line",
   "text": "Clock second units digit."
  },
  {
   "address": 921,
   "type": "line",
   "text": "Frames 0-59 of the current clock second (update_clock); place_roadblock uses its low five bits as a random site."
  },
  {
   "address": 928,
   "type": "line",
   "text": "The car's heading, 0-7: 0 up, then clockwise in 45-degree steps (steer_car)."
  },
  {
   "address": 929,
   "type": "line",
   "text": "Damage, 0-39: +1 per crash or roadblock; at 40 the chase is lost. Shown by draw_damage_gauge."
  },
  {
   "address": 930,
   "type": "line",
   "text": "Pursuit counter, raised by car_cell_update when the car enters a new block; police cars start once it reaches their threshold, and at 20 a roadblock appears and it drops to 18."
  },
  {
   "address": 932,
   "type": "line",
   "text": "0 in forward gear, 8 in reverse; ORed into the heading as the index of the step tables."
  },
  {
   "address": 935,
   "type": "line",
   "text": "scroll_map's flags: bit 0 a coarse X step is due, bit 1 a coarse Y step."
  },
  {
   "address": 936,
   "type": "line",
   "text": "Sprite pointers of the map car for headings 0-7: $80-$87 (shapes at $2000-$21FF)."
  },
  {
   "address": 960,
   "type": "line",
   "text": "AND masks $FE, $FD ... $7F that clear one sprite's bit, indexed by sprite number."
  },
  {
   "address": 968,
   "type": "line",
   "text": "Bit masks 1, 2, 4 ... $80, one per sprite."
  },
  {
   "address": 992,
   "type": "line",
   "text": "Sprite pointers of May Day's parachute for drift directions 0-7: $90-$97 (shapes at $2400-$25FF)."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "Digitised speech (credited on screen to B.-Jones), one bit per sample: interrupts off, SID volume 0, reads a 16-bit length at the sample address (LDA # operands at $1002 low and $1006 high, poked by the caller), then plays the bytes after it MSB first, each 1 bit setting the volume $D418 to $0F (speech_bit_on) and each 0 bit to 0 (speech_bit_off), so the click of the volume register is the sound. Stops at the address plus the length, volume 0, CLI. Samples: $1090 (length $194), $1225 ($6E4), $190A ($699)."
  },
  {
   "address": 4098,
   "type": "line",
   "text": "Operand of LDA #: the low byte of the speech sample's address, rewritten by speak_result and mission_complete before each call ($0A in the image, i.e. sample $190A)."
  },
  {
   "address": 4102,
   "type": "line",
   "text": "Operand of LDA #: the high byte of the speech sample's address, rewritten with speech_addr_lo ($19 in the image)."
  },
  {
   "address": 4103,
   "type": "line",
   "text": "play_speech continued: volume 0, the length word at the sample address is added to the address to give the end in $02/$03, then the bit loop ($1028) plays eight bits per byte until the pointer reaches the end."
  },
  {
   "address": 4203,
   "type": "line",
   "text": "A 1 bit of speech: SID volume $0F, then fifteen NOPs that make the bit as long as a 0 bit."
  },
  {
   "address": 4224,
   "type": "line",
   "text": "A 0 bit of speech: SID volume 0, then speech_delay, padding the bit to the length of a 1 bit."
  },
  {
   "address": 4235,
   "type": "line",
   "text": "Three NOPs and RTS: timing padding called once per bit by play_speech and inside speech_bit_off."
  },
  {
   "address": 4240,
   "type": "line",
   "text": "Speech sample: length word $0194, then 402 bytes of 1-bit sound (MSB first) to $1223. Played by speak_result when the damage gauge is full, before sample $190A. What it says is not established."
  },
  {
   "address": 4644,
   "type": "line",
   "text": "One byte between speech samples, not played."
  },
  {
   "address": 4645,
   "type": "line",
   "text": "Speech sample: length word $06E4, then 1762 bytes of 1-bit sound to $1908. Played at the start of the success telex (mission_complete)."
  },
  {
   "address": 5632,
   "type": "line",
   "text": "Speech sample $1225 continued ($1600-$1908)."
  },
  {
   "address": 6409,
   "type": "line",
   "text": "The byte after sample $1225 ends ($1908) and before sample $190A starts; not played."
  },
  {
   "address": 6410,
   "type": "line",
   "text": "Speech sample: length word $0699, then 1687 bytes of 1-bit sound to $1FA2. Played by speak_result after a lost chase (altimeter at 000, or after sample $1090)."
  },
  {
   "address": 7424,
   "type": "line",
   "text": "Speech sample $190A continued ($1D00-$1FA2)."
  },
  {
   "address": 8099,
   "type": "line",
   "text": "$1FA3-$1FFF after the last sample: bytes no routine reads (a remnant of a longer sample, or fill)."
  },
  {
   "address": 8192,
   "type": "line",
   "text": "Sprite shapes $80-$87: the player's car seen from above in the eight headings (0 up, clockwise), sprite 7 on the map."
  },
  {
   "address": 8704,
   "type": "line",
   "text": "Sprite shapes $88-$8F: the police car in the eight headings (police_ai via $69A0)."
  },
  {
   "address": 9216,
   "type": "line",
   "text": "Sprite shapes $90-$97: May Day under her parachute, one per drift direction (mayday_drift via $03E0)."
  },
  {
   "address": 9728,
   "type": "line",
   "text": "Shapes $98-$9F ($2600-$27FF): $98 and $99 are scattered dots, $9A-$9F striped fill; no pointer found uses them."
  },
  {
   "address": 10240,
   "type": "line",
   "text": "Shapes $A0-$A3: the steering wheel's left and right halves, straight ($A0/$A1) and turned ($A2/$A3), sprites 4 and 5 in the cockpit; $A4-$A7 ($2900-$29FF) are near copies of them that nothing selects."
  },
  {
   "address": 10752,
   "type": "line",
   "text": "Shapes $A8-$AB ($2A00-$2AFF): striped fill, not used."
  },
  {
   "address": 11008,
   "type": "line",
   "text": "Shapes $AC-$AF: $AC the bullet (a single dot), $AD/$AE the two blink frames of a shot police car, $AF a third debris frame nothing selects."
  },
  {
   "address": 11264,
   "type": "line",
   "text": "$2C00-$2FFF (shapes $B0-$BF): striped fill like uninitialised RAM; not used."
  },
  {
   "address": 12288,
   "type": "line",
   "text": "Character set of the cockpit, the instruction page and the telex (selected at the bottom raster split and by title_page), glyphs $00-$7F: the dashboard and windscreen frame pieces the cockpit picture is built from ($04-$50), and the digits 0-9 and : at $64-$6E (clock, altimeter)."
  },
  {
   "address": 13312,
   "type": "line",
   "text": "Cockpit character set, glyphs $80-$FF: the letters A-Z at $80-$99 and . , / ! - [ ] + at $9A-$A1 used by every page of text, more cockpit pieces at $A2-$A7, the 3D view pieces the strips use ($A8-$BB, $D0-$F4) and the damage gauge fills $C4-$CB."
  },
  {
   "address": 14336,
   "type": "line",
   "text": "Character set of the map band (selected by raster_map_band), glyphs $00-$7F, multicolour: the map uses $00-$4F and $FF (roofs and building blocks, road pieces, the junction markers $12-$19) plus the roadblock hatches $48/$49 placed in play; the glyphs above include an alphabet and digits the map does not use."
  },
  {
   "address": 15360,
   "type": "line",
   "text": "Map character set, glyphs $80-$FF: a byte-for-byte copy of glyphs $00-$7F ($3800-$3BFF)."
  },
  {
   "address": 16384,
   "type": "line",
   "text": "Start-of-chase setup: clears the 32 roadblock sites (clear_roadblock), stops timer A of both CIAs, sets the fine scroll start values $033E = 4 and $033F = 1, puts May Day's start ($01FA, $01FA) into object 0's template, volume 15, pick_landing_point, clears $02E1 and $0313, enables sprites 4 and 5 (the steering wheel, pointers $A0/$A1, white, at X $5E/$75, Y $75), copies the object templates $6800-$68FF to the live table $6900, sprite multicolours yellow/red, sprite 7 light blue, character set $3800, border blue, background dark grey, multicolour text, BASIC ROM out ($01 bit 0 cleared), patch_map, and the variable templates $8334-$83FF to $0334-$03FF."
  },
  {
   "address": 16704,
   "type": "line",
   "text": "Writes five bytes from $4152 (00 00 00 01 01) to map cells $9EEF-$9EF3 (row 24, columns 39-43) and five from $4157 (05 09 09 09 09) to $9FFC-$A000 (row 26, columns 56-60). In this image the first spot holds $4D $4F $4E $2A $01 at the hand-over, so four cells become road; the second already matches. Why they are rewritten is open."
  },
  {
   "address": 16722,
   "type": "line",
   "text": "patch_map's five cell values for map $9EEF-$9EF3 (row 24, columns 39-43): 00 00 00 01 01."
  },
  {
   "address": 16727,
   "type": "line",
   "text": "patch_map's five cell values for map $9FFC-$A000 (row 26, columns 56-60): 05 09 09 09 09."
  },
  {
   "address": 16752,
   "type": "line",
   "text": "The cockpit clock, once a frame from the IRQ: frames $0399 to 60, then seconds $0397/$0396, minutes $0394/$0393 and hours $0391/$0390, one decimal digit each, wrapping 24:00 to 00:00; writes the eight characters $0390-$0397 (digits and the separators at $0392/$0395, each plus $64) to screen $05A6-$05AD. Starts at 10:18:00 (template $8390); one clock second is 60 frames, 1.2 s on a PAL machine."
  },
  {
   "address": 16896,
   "type": "line",
   "text": "Positions and switches on one sprite: A = sprite number + 1, X = X low byte, Y = Y, carry = X bit 8, $AE = shape pointer. Builds the sprite's bit in $FB, stores the pointer at $07F7+A (screen $0400's pointer table) and the position at $CFFE+2A (= $D000 + 2 x sprite), sets or clears its $D010 bit and sets its $D015 bit. A is kept."
  },
  {
   "address": 16992,
   "type": "line",
   "text": "Reads joystick port 2 ($DC00, active low): $FD = $FF up / 1 down / 0, $FE = $FF left / 1 right / 0, and $02 = 1 while fire is held. While the crash lock $0346 is non-zero the port is not read: no direction and no fire."
  },
  {
   "address": 17040,
   "type": "line",
   "text": "Shows the 16 world objects (live table $6900: 0 May Day, 1-14 police cars, 15 the bullet) on hardware sprites, object 15 down to 0. An object within the window (X - $0338 below $140, Y - $033A below $70) that is not shown gets its sprite (flags bits 0-2) if that sprite is free, else is marked waiting (bit 6); a shown one (bit 7) is placed with place_sprite at X offset + 7, Y offset + $90 with pointer $6920. A shown object that leaves the window loses its sprite (and multicolour); if flag bit 4 is set the object is reset from its template in $6800; the flags are cut back to the sprite number."
  },
  {
   "address": 17182,
   "type": "line",
   "text": "Object outside the window: a shown one has its sprite and multicolour bits cleared; then flag bit 4 selects a reset of all six coordinates from the template page $6800. Oddity: for a shown object the bit-4 test reads $6910,Y with Y = its sprite number, not the object's own flags."
  },
  {
   "address": 17200,
   "type": "line",
   "text": "Resets an object that left the window with flag bit 4 set: X, Y (low and high), shape and direction are copied back from its template in $6800-$68FF, so a shot police car reappears at its starting place."
  },
  {
   "address": 17239,
   "type": "line",
   "text": "A shown object leaving the window: its sprite's bits in $D015 and $D01C are cleared (masks $03C0), then the flags for the bit-4 test are read as $6910,Y with Y = the sprite number (see object_offscreen)."
  },
  {
   "address": 17269,
   "type": "line",
   "text": "Cuts an object's flags back to its sprite number (bits 0-2) and goes on to the next object."
  },
  {
   "address": 17328,
   "type": "line",
   "text": "Hand-over entry (the depacker jumps here) and the BRK/RESTORE target: sets the sound option $02E0 to 3 (theme and effects), points the BRK vector $0316 and the NMI vector $0318 back here, so RESTORE restarts the part at the instruction page, writes $B0 into $0304 (the low byte only of the BASIC tokeniser vector; why is unknown), sets the SID volume to 0 and falls into restart_to_menu."
  },
  {
   "address": 17360,
   "type": "line",
   "text": "Stack reset stub: SEI, stack pointer $FF, CLD, then the instruction page (title_page, $4F30). Reached from part_entry and from world_update when a chase ends without a catch ($0313 = $40 or a damage count)."
  },
  {
   "address": 17376,
   "type": "line",
   "text": "Stack reset stub for the good ending: SEI, stack pointer $FF, CLD, then mission_complete ($5800). world_update jumps here when $0313 = $80 (May Day caught)."
  },
  {
   "address": 17392,
   "type": "line",
   "text": "A third stack reset stub, byte for byte like restart_to_menu (jumps to $4F30). No jump, vector or table found names it; probably a spare."
  },
  {
   "address": 17408,
   "type": "line",
   "text": "Gunshot, if effects are on ($02E0 bit 1): voice 3 noise at frequency $FAAA, attack/decay $09, sustain/release 0, gate on."
  },
  {
   "address": 17448,
   "type": "line",
   "text": "Crash, if effects are on: voice 1 noise at frequency $04AA, attack/decay $1C, sustain/release $01, gate on. Used for roadblock hits and for a police car being shot."
  },
  {
   "address": 17488,
   "type": "line",
   "text": "Tyre screech for a handbrake-turn step, if effects are on: voice 3 control $61 (pulse and sawtooth, gate) at frequency $24AA, attack/decay $12; then back to world_update."
  },
  {
   "address": 17536,
   "type": "line",
   "text": "Called for each non-space character the success telex types: volume 15, $D417 = $0F, voice 1 frequency $3AAA, attack/decay $08, sustain/release $07 then $11, but control register 0 (no waveform, no gate), so no note is started here; whether the telex clicks audibly is open."
  },
  {
   "address": 17664,
   "type": "line",
   "text": "Speed gauge: fills screen cells $0576-$057D with character 4, then writes character (delay / 2) AND 3 into cell $0576 + 7 - delay / 8 (delay = $0340), so the mark moves along the gauge with the speed; continues into draw_damage_gauge."
  },
  {
   "address": 17712,
   "type": "line",
   "text": "Damage gauge: damage $03A1 (0-39) / 8 picks one of five screen cells up a column (damage_gauge_lo/hi: $0515, $04ED, $04C5, $049D, $0475) and writes character $C4 + (damage AND 7) there, so the gauge rises an eighth of a cell per point."
  },
  {
   "address": 17744,
   "type": "line",
   "text": "Low bytes of the damage gauge's five screen cells, bottom to top: $0515, $04ED, $04C5, $049D, $0475."
  },
  {
   "address": 17752,
   "type": "line",
   "text": "High bytes of the damage gauge's five screen cells (05 04 04 04 04)."
  },
  {
   "address": 17776,
   "type": "line",
   "text": "Fires the car's gun unless sprite 6 (the bullet) is already on: object 15 goes to the car's world position plus ($AA, $31), flags $C6 (shown, sprite 6), pointer $AC, heading = the car's $03A0; plays gun_sound."
  },
  {
   "address": 17920,
   "type": "line",
   "text": "The first-person view through the windscreen, rebuilt when the map has moved a cell ($0336). The view point is the map window pointer $033C nudged one cell along the last coarse scroll (Y $0335 for headings with $6BD0 = 1, else X $0334), kept in $02FA/$02FB (never read). Reads the 33 cells named by the heading's offset list ($6D00 + $6B30[heading]) into $6B00-$6B20; the first cell with a non-zero attribute ($6F00) scanning $6B15 down to $6B0B gives the wall's type and depth (1-11, or 0 for none). Columns 9-0 come from cells $6B01-$6B0A and 12-21 from $6B17-$6B20: eight screen codes each from the cell type's strip ($6C00/$6C80) at 8 x a column number. The wall ahead comes from $6A00-$6AFF by type and depth. The 22 x 8 result lands in the buffer at $0D09 and $0337 tells copy_3d_view."
  },
  {
   "address": 18428,
   "type": "line",
   "text": "From the IRQ: when build_3d_view has finished a picture ($0337 non-zero), copies its 22 x 8 characters from the buffer at $0D09 (40-byte rows) to the screen at $0409 (rows 0-7, columns 9-30) and clears $0337."
  },
  {
   "address": 18512,
   "type": "line",
   "text": "Distance from the car to May Day for the locator: |object 0 X - $88 - car X $0338| + |object 0 Y - $32 - car Y $033A| (16 bits, via $EA-$ED), divided by 40 (divide_16_8); the quotient OR 1 becomes the beep interval $034D."
  },
  {
   "address": 18688,
   "type": "line",
   "text": "Places a roadblock: site ($0399 AND $1F, the frame counter as the random choice) of roadblock_kind/_lo/_hi. Kind $48 fills three cells side by side, kind $49 three cells one above the other (126 apart), with that character."
  },
  {
   "address": 18752,
   "type": "line",
   "text": "Car against a roadblock: if the car's cell ($C9) holds a roadblock character ($48 or $49), the three cells around the new cell pointer $AE are cleared and damage is added; otherwise nothing."
  },
  {
   "address": 18784,
   "type": "line",
   "text": "Roadblock of kind $48: clears the cells at $AE, $AE+1 and $AE-1, then add_damage."
  },
  {
   "address": 18816,
   "type": "line",
   "text": "Roadblock of kind $49: clears the cells at $AE, $AE+126 and $AE-126, then add_damage."
  },
  {
   "address": 18848,
   "type": "line",
   "text": "Adds one to damage $03A1; at 40 the chase ends ($0313 = 40); otherwise crash_sound."
  },
  {
   "address": 18880,
   "type": "line",
   "text": "Clears roadblock site X (0-31): writes 0 (open road) into the three cells place_roadblock would fill. init_game runs it for all 32, which also wipes the marker cells $1C-$1F the map holds at each site at the hand-over."
  },
  {
   "address": 18944,
   "type": "line",
   "text": "Copies the cockpit picture: 1000 screen codes from cockpit_screen ($8B28) to the screen at $0400 and 1000 colours from cockpit_colours ($8F10) to colour RAM $D800."
  },
  {
   "address": 19024,
   "type": "line",
   "text": "Locator lamp and beep, from irq_sound: while the lamp (colour RAM $D803, row 0 column 3) is red, $034C counts down; at zero the lamp turns purple for two calls ($034E), $034C is reloaded from the interval $034D and voice 2 beeps (triangle, frequency $3A04, attack/decay $98, sustain/release $DF); when the lamp goes red again the gate is released. Nearer May Day, shorter interval, faster beeps."
  },
  {
   "address": 19120,
   "type": "line",
   "text": "Unsigned division of Y:A (high:low) by X, eight quotient bits: quotient in $FD, remainder in $FE (non-restoring: subtracts or adds back the divisor by the last result's sign; uses $AE and $02). Correct only while the quotient fits in a byte."
  },
  {
   "address": 19200,
   "type": "line",
   "text": "The 32 roadblock sites, kind: $48 three cells side by side, $49 three cells one above the other (place_roadblock, clear_roadblock)."
  },
  {
   "address": 19232,
   "type": "line",
   "text": "The 32 roadblock sites, low byte of the map address of each site's first cell."
  },
  {
   "address": 19264,
   "type": "line",
   "text": "The 32 roadblock sites, high byte of the map address of each site's first cell ($95-$CC)."
  },
  {
   "address": 19360,
   "type": "line",
   "text": "Speech for the way the last chase ended, from the instruction page loop: $0313 = $80 (caught; only reachable after RESTORE on the success screen) plays sample $1225; $40 (altimeter reached 000) plays $190A; any other value (damage full) plays $1090 and then $190A. The sample address is poked into play_speech at $1002 (low) and $1006 (high). Then clears $0313 and resumes the loop at $4F7F."
  },
  {
   "address": 19456,
   "type": "line",
   "text": "Police cars, objects 14 down to 1, and the bullet's movement (object 15 only moves). A shown car hit by the bullet (its sprite bit in $02FC) goes to police_shot, a dying one (flag bit 5) to police_dying. A car stays idle until the pursuit counter $03A2 reaches its threshold ($69E0); a car that touched the player or another car ($02FD) waits $C0 passes. Otherwise its countdown $6950 runs down; when it expires it is reloaded from $6960 (4-7, the car's speed), the cell under the car is read ((Y/8) x 126 + X/8 + $9372, multiply_8_8), a junction marker $12-$19 there sets its heading to the marker AND 7, and it moves one pixel along its heading (dx $69B0, dy $69B8) with that heading's shape from $69A0. The bullet moves every pass."
  },
  {
   "address": 19735,
   "type": "line",
   "text": "Unsigned multiply A x X by shift-and-add: product high byte in A and $FE, low byte in X and $FD (uses $02)."
  },
  {
   "address": 19763,
   "type": "line",
   "text": "A shot police car: every $18 passes ($6990) its blink count $6970 drops and the shape alternates $AD/$AE; when the count runs out its sprite and multicolour bits are cleared and its flags become sprite | $50 (waiting, reset from the template when next outside the window)."
  },
  {
   "address": 19828,
   "type": "line",
   "text": "The bullet hit this police car: its sprite goes multicolour, $02FC is cleared, flags | $70 (dying, waiting, reset), blink count $6970 = 16, crash_sound."
  },
  {
   "address": 19858,
   "type": "line",
   "text": "Runs police_ai, then clears the collision flags it has used: $02FD and $02FC."
  },
  {
   "address": 19968,
   "type": "line",
   "text": "The map cell under the car: pointer = $033C, moved by the last coarse scroll ($0335 by 126, $0334 by 1), plus $0308 (row 6, column 20 of the window). When the car has moved exactly one 3-cell block since the last call (-378, +3, +378, -3: up, right, down, left), the cell it left is examined: a junction marker $12-$19 is rewritten with the marker of the direction taken ($18, $12, $14, $16), and police_ai steers by those markers, so the police follow the car's route; any other cell except that direction's $1F/$1C/$1D/$1E adds one to the pursuit counter $03A2, and each time it reaches 20 a roadblock is placed (place_roadblock) and it drops to 18."
  },
  {
   "address": 20160,
   "type": "line",
   "text": "Low bytes of the four one-block moves car_cell_update recognises: -378 (up), +3 (right), +378 (down), -3 (left)."
  },
  {
   "address": 20164,
   "type": "line",
   "text": "High bytes of the four one-block moves ($FE, $00, $01, $FF)."
  },
  {
   "address": 20168,
   "type": "line",
   "text": "The junction marker written for the direction the car left a junction by: $18 up, $12 right, $14 down, $16 left (police_ai takes marker AND 7 as a heading: 0, 2, 4, 6)."
  },
  {
   "address": 20172,
   "type": "line",
   "text": "Per direction, the one cell value that does not raise the pursuit counter when left that way: $1F up, $1C right, $1D down, $1E left."
  },
  {
   "address": 20224,
   "type": "line",
   "text": "Chooses May Day's landing point: a random number from the SID (sid_random), bits 0-2, picks one of eight entries; target X from $4FC0/$4FC8 and Y from $4FD0/$4FD8 go to $69FC-$69FF, the spiral limit from $4FE0 to $D3."
  },
  {
   "address": 20272,
   "type": "line",
   "text": "The instruction page and its loop. Installs the do-nothing IRQ ($0314 = irq_exit), text mode with character set $3000, sprites off, stops timer A of CIA 1 (no KERNAL keyboard scan), SID volume 0, clears the crash lock $0346 and draws the page (show_title_page). Loop: read_joystick; fire jumps to $FCE2, the KERNAL's reset entry, which finds the CBM80 signature at $8004 and enters the game through the cold-start vector at $8000 (= game_start, $5A00); stick down/up steps the sound option $02E0 between 1 and 3; a delay of $50 x $FF loops; the title colour $D9 steps; the page is redrawn (redraw_title_page). A non-zero $0313 (result of the last chase) sends it to speak_result first."
  },
  {
   "address": 20416,
   "type": "line",
   "text": "May Day's eight landing points, X low byte (pick_landing_point)."
  },
  {
   "address": 20424,
   "type": "line",
   "text": "Landing points, X high byte (0-3)."
  },
  {
   "address": 20432,
   "type": "line",
   "text": "Landing points, Y low byte."
  },
  {
   "address": 20440,
   "type": "line",
   "text": "Landing points, Y high byte (0-3)."
  },
  {
   "address": 20448,
   "type": "line",
   "text": "Landing points, the spiral limit copied to $D3 ($F0-$FC): how wide she circles before homing."
  },
  {
   "address": 20463,
   "type": "line",
   "text": "Random byte: voice 3 set to noise at frequency $FFFF with the gate off; returns the oscillator output $D41B in A."
  },
  {
   "address": 20480,
   "type": "line",
   "text": "Points the IRQ vector $0314 at game_irq ($5026), sets the raster compare to line $8B (bit 8 cleared) and enables the raster interrupt in $D01A."
  },
  {
   "address": 20518,
   "type": "line",
   "text": "The chase's interrupt handler (entered through the KERNAL, which has pushed A, X and Y). A raster interrupt goes to raster_bands. Otherwise, unless $02FF is non-zero (nothing found sets it), a sprite-background collision goes to hit_background and a sprite-sprite collision to hit_sprite."
  },
  {
   "address": 20556,
   "type": "line",
   "text": "Acknowledges the raster interrupt and splits the screen by the current line: below $8F raster_map_band, below $9C raster_map_colours, otherwise (line $FB, bottom of the map) this part: collision interrupts off, next compare $8D, Y scroll 3 with 25 rows, X scroll 0 with 40 columns, background light grey, multicolours 8 and 9, character set $3000 for the cockpit; then the frame's work: copy_3d_view, car_move_tick, update_clock and irq_sound."
  },
  {
   "address": 20655,
   "type": "line",
   "text": "Raster line $8B/$8D, just above the map: background, multicolours and sprite multicolours blue, next compare $9A, character set $3800, the map's fine scroll (Y from $033F, X from $033E; the Y value also clears $D011 bit 3, 24 rows), sprites 0-3 and 6 blue."
  },
  {
   "address": 20729,
   "type": "line",
   "text": "Raster line $9A, the map's colours: background dark grey, multicolours yellow and green, sprite multicolours red and yellow, sprite 0 light red, 1 light grey, 2 white, 3 and 6 black; next compare $FB, and the sprite-background and sprite-sprite collision interrupts are switched on for the map band."
  },
  {
   "address": 20791,
   "type": "line",
   "text": "Sprite-sprite collision ($D01E). Anything involving sprites 4-5 (the steering wheel) is ignored. May Day's sprite 3 with the car's sprite 7 ends the chase as caught ($0313 = $80), but only once the catch flag $02E1 is set (altimeter below 060). Sprite 7 with a police car goes to car_hits_police. Sprite 6 (the bullet) with police sprites stores them in $02FC and stops the bullet; other collisions among sprites 0-2 go to $02FD."
  },
  {
   "address": 20848,
   "type": "line",
   "text": "Sprite-background collision ($D01F): the car (sprite 7) hitting scenery is a crash (car_crash); the bullet (sprite 6) hitting scenery stops it (bullet_stop)."
  },
  {
   "address": 20861,
   "type": "line",
   "text": "Stops the bullet: object 15's X and Y high bytes ($694F, $69CF) become $FF, so the next objects_to_sprites finds it outside the window and frees sprite 6."
  },
  {
   "address": 20874,
   "type": "line",
   "text": "Interrupt exit: pulls Y, X and A as the KERNAL pushed them, RTI. On the instruction page and the success screen the whole IRQ is this ($0314 = $518A), so nothing runs in the interrupt there."
  },
  {
   "address": 20880,
   "type": "line",
   "text": "The car (sprite 7) touched a police car: police sprites 0-2 not in multicolour (not already shot) are stored in $02FD, which makes those cars wait, and the crash is handled (car_crash); if any of them is multicolour (already shot) the collision is ignored."
  },
  {
   "address": 20898,
   "type": "line",
   "text": "The car hits a building (hit_background) or a police car: ignored while the crash lock $0346 is set; otherwise the gear flips ($03A4 EOR 8, so the car bounces back the way it came), the move delay grows by 3 (at most $3F), damage $03A1 grows by one (at 40 the chase ends with $0313 = $27), the crash lock is set (read_joystick ignores the stick until scroll_map next moves the car) and the heading returns to $0347, that of the last move."
  },
  {
   "address": 20960,
   "type": "line",
   "text": "Sound, once a frame from the bottom raster interrupt: the theme (music_tick) when $02E0 bit 0 is set (options 1 and 3) and the locator beep (locator_beep) when bit 1 is set (options 2 and 3); then irq_exit."
  },
  {
   "address": 20992,
   "type": "line",
   "text": "May Day's parachute (object 0), while $0313 is 0. Before homing ($02FE = 0), every 7th call: one pixel along her drift direction $6930 (dx/dy tables $69B0/$69B8), shape from $03E0; when the countdown $69F8 runs out the radius $69F9 grows by 2 and the direction turns one step anticlockwise, so she circles outwards; when the radius equals the spiral limit $D3 homing starts. Homing (every 8th call, mayday_homing): one pixel in X and in Y towards the landing point $69FC-$69FF. Then altimeter_tick."
  },
  {
   "address": 21016,
   "type": "line",
   "text": "Circling phase of mayday_update: reload the countdown with 7, move object 0 one pixel along drift direction $6930 (dx $69B0, dy $69B8), set her shape from $03E0, and on each expiry of $69F8 widen the radius $69F9 by 2 (homing starts when it equals $D3) and turn the drift direction one step anticlockwise."
  },
  {
   "address": 21156,
   "type": "line",
   "text": "Homing phase of mayday_update: reload the step countdown with 8 and move object 0 one pixel towards the target X ($69FC/$69FD) and one towards the target Y ($69FE/$69FF), stopping in each axis when equal."
  },
  {
   "address": 21269,
   "type": "line",
   "text": "Every 20th call ($535C) counts the altimeter, screen $04F3-$04F5 (digits $64-$6D), down by one. Once it reads below 060 the catch flag $02E1 is set; at 000 $0313 = $40: May Day has landed before the car reached her."
  },
  {
   "address": 21340,
   "type": "line",
   "text": "Countdown byte (20 calls) inside the code area, used only by altimeter_tick."
  },
  {
   "address": 21472,
   "type": "line",
   "text": "Sound option highlight: sets the colours of the three option lines ($53FD-$53FF) to green ($05), the one chosen by $02E0 (1 theme only, 2 effects only, 3 both) to light green ($0D), then draws the page (draw_title_text)."
  },
  {
   "address": 21500,
   "type": "line",
   "text": "Colour RAM values for the instruction page's three sound-option lines at $53FD-$53FF (green $05, the chosen one light green $0D, indexed by the option 1-3); $53FC itself is only the index-0 slot."
  },
  {
   "address": 21501,
   "type": "line",
   "text": "Colour of the THEME TUNE ONLY line (option 1), set by highlight_option."
  },
  {
   "address": 21502,
   "type": "line",
   "text": "Colour of the SOUND EFFECTS ONLY line (option 2), set by highlight_option."
  },
  {
   "address": 21503,
   "type": "line",
   "text": "Colour of the BOTH line (option 3), set by highlight_option."
  },
  {
   "address": 21504,
   "type": "line",
   "text": "Fills screen $0400-$07E7 with the space code $15 and colour RAM $D800-$DBE7 with light blue $0E (four pages from $03E8/$D7E8 with Y starting at $18)."
  },
  {
   "address": 21549,
   "type": "line",
   "text": "One JMP to highlight_option: the title loop's per-pass redraw of the instruction page."
  },
  {
   "address": 21552,
   "type": "line",
   "text": "Draws the sixteen 40-character lines of the instruction page (title_text, $5500-$577F) to screen rows 1, 4-8, 12, 14-19 and 21-23 with their colour RAM: row 1 in the stepping colour $D9 (the flashing PRESS FIRE TO START), the story red, JOYSTICK CONTROLS yellow, the controls light blue and the three sound options from $53FD-$53FF."
  },
  {
   "address": 21744,
   "type": "line",
   "text": "Clears the screen (clear_screen), then colours and draws the instruction page (highlight_option)."
  },
  {
   "address": 21760,
   "type": "line",
   "text": "Instruction page text, line 1 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"PRESS FIRE TO START\"."
  },
  {
   "address": 21800,
   "type": "line",
   "text": "Instruction page text, line 2 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"MAYDAY HAS JUMPED FROM THE EIFFEL\"."
  },
  {
   "address": 21840,
   "type": "line",
   "text": "Instruction page text, line 3 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"TOWER AND IS NOW PARACHUTING TO\"."
  },
  {
   "address": 21880,
   "type": "line",
   "text": "Instruction page text, line 4 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"HER DROP POINT. FOLLOW HER AND GET\"."
  },
  {
   "address": 21920,
   "type": "line",
   "text": "Instruction page text, line 5 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"THERE FIRST! WATCH OUT FOR THE\"."
  },
  {
   "address": 21960,
   "type": "line",
   "text": "Instruction page text, line 6 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"POLICE AND ROAD BLOCKS.\"."
  },
  {
   "address": 22000,
   "type": "line",
   "text": "Instruction page text, line 7 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"JOYSTICK CONTROLS\"."
  },
  {
   "address": 22040,
   "type": "line",
   "text": "Instruction page text, line 8 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"FORWARD ACCELERATE\"."
  },
  {
   "address": 22080,
   "type": "line",
   "text": "Instruction page text, line 9 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"BACKWARD REVERSE BRAKE\"."
  },
  {
   "address": 22120,
   "type": "line",
   "text": "Instruction page text, line 10 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"LEFT STEER LEFT\"."
  },
  {
   "address": 22160,
   "type": "line",
   "text": "Instruction page text, line 11 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"RIGHT STEER RIGHT\"."
  },
  {
   "address": 22200,
   "type": "line",
   "text": "Instruction page text, line 12 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"FIRE SHOOT\"."
  },
  {
   "address": 22240,
   "type": "line",
   "text": "Instruction page text, line 13 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"REUERSE+FIRE HANDBRAKE TURN\"."
  },
  {
   "address": 22280,
   "type": "line",
   "text": "Instruction page text, line 14 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"THEME TUNE ONLY\"."
  },
  {
   "address": 22320,
   "type": "line",
   "text": "Instruction page text, line 15 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"SOUND EFFECTS ONLY\"."
  },
  {
   "address": 22360,
   "type": "line",
   "text": "Instruction page text, line 16 of 16 (40 codes, $80-$99 = A-Z, $15 space): \"BOTH\"."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "The good ending: do-nothing IRQ, text mode with character set $3000, sprites off, clear_screen, speech sample $1225, then the ten lines of the telex at $8028 are typed onto rows 3, 6, 8, 10, 11, 13, 14, 15, 17 and 19 (tables $5880/$5890) by type_line, and it stops in the endless JMP at $5879. The City Hall code in the telex, CCPHJ, is fixed text: nothing computes it."
  },
  {
   "address": 22656,
   "type": "line",
   "text": "High bytes of the screen rows the ten telex lines are typed on (mission_complete)."
  },
  {
   "address": 22672,
   "type": "line",
   "text": "Low bytes of the telex rows: $0478, $04F0, $0540, $0590, $05B8, $0608, $0630, $0658, $06A8, $06F8."
  },
  {
   "address": 22720,
   "type": "line",
   "text": "Types one 40-character line from ($FB) to ($FD), with a delay of about $3F x $FF loops after each character; a non-space character calls type_click, a space writes 0 to voice 1's control register."
  },
  {
   "address": 22760,
   "type": "line",
   "text": "type_line's per-character pause: saves X and Y, counts $3F x $FF, restores them and moves to the next of the 40 characters."
  },
  {
   "address": 23040,
   "type": "line",
   "text": "The chase begins here, entered through the KERNAL reset: fire on the instruction page jumps to $FCE2, which sees CBM80 at $8004 and jumps through $8000. Runs init_game, init_music, draw_cockpit, install_game_irq, pick_landing_point a second time (init_game has already run it once) and car_draw, then falls into main_loop."
  },
  {
   "address": 23088,
   "type": "line",
   "text": "The chase's main loop, free-running (not synchronised to the raster). Every pass runs world_update ($5A66). Counter $0344 (16) sends every 16th pass through speed_and_fire first; counter $0345 (2) makes every second of those a steering pass too: read_joystick and steer_car ($5A60), which continue into speed_and_fire."
  },
  {
   "address": 23116,
   "type": "line",
   "text": "main_loop's counter stores: the not-yet pass goes straight to world_update, the 16th pass to speed_and_fire."
  },
  {
   "address": 23136,
   "type": "line",
   "text": "main_loop's steering pass: read_joystick, then steer_car."
  },
  {
   "address": 23142,
   "type": "line",
   "text": "One pass of the world: objects_to_sprites, draw_speed_gauge (and the damage gauge), build_3d_view, mayday_distance, mayday_update, police_update, car_cell_update, roadblock_check. Then the end test on $0313: 0 loops to main_loop, $80 goes to restart_to_success, any other value to restart_to_menu."
  },
  {
   "address": 23200,
   "type": "line",
   "text": "The stick's left/right value at the last steering pass (car_draw), to tell a fresh push from a held one."
  },
  {
   "address": 23201,
   "type": "line",
   "text": "Held-stick allowance: 1 when the stick was centred on a straight heading, 0 on a diagonal; a held stick turns while it stays non-negative."
  },
  {
   "address": 23202,
   "type": "line",
   "text": "Steps left in a handbrake turn (4 at the start, one 45-degree step per steering pass)."
  },
  {
   "address": 23203,
   "type": "line",
   "text": "The heading the handbrake turn has reached so far."
  },
  {
   "address": 23216,
   "type": "line",
   "text": "Steering, every 32nd main-loop pass. A handbrake turn in progress ($5AA2 non-zero) turns the car one step anticlockwise per call from $5AA3; on the last of its four steps the reverse flag $03A4 is cleared and the car's heading $03A0 takes the new direction; the sprite is redrawn and screech_sound played. Otherwise the stick's left/right ($FE) turns the heading $03A0 (0 = up, then clockwise, 8 directions) one step: a fresh push turns at once, a held stick turns again only while $5AA1 allows, so holding it stops at the next straight heading."
  },
  {
   "address": 23264,
   "type": "line",
   "text": "Stick steering in steer_car: centred stick clears steer_last and sets steer_hold from the heading's parity; a held stick spends steer_hold; a push turns the heading one step (right +1, left -1, wrapping 0-7) and redraws the car."
  },
  {
   "address": 23333,
   "type": "line",
   "text": "Remembers the stick's left/right value in $5AA0 and draws the map car as sprite 7 at the fixed screen position X $AB, Y $BD with the pointer for its heading from $03A8 ($80-$87); falls into speed_and_fire."
  },
  {
   "address": 23360,
   "type": "line",
   "text": "Speed, gear and fire, every 16th main-loop pass. While the stick is pushed sideways the two steering-wheel sprites swap shapes ($07FD toggles $A1/$A3, $07FC = one less). Forward gear: stick up lowers the move delay $0340 (faster, not below 1), down raises it, and at $40 the gear flips to reverse ($03A4 = 8, delay $3F); in reverse down speeds up and up slows down and flips back. Fire starts a handbrake turn (four steps, $5AA2 = 4, from the current heading) when in reverse with a delay below $15 and no turn running; otherwise fire shoots (fire_bullet)."
  },
  {
   "address": 23552,
   "type": "line",
   "text": "Moves the car two pixels along its heading (index $03A0 OR $03A4: reverse uses entries 8-15) by scrolling the map under the fixed car sprite. X: table $0370 (0, 1, or $81 = negative) steps the fine scroll $033E by 2 and the car's world X $0338 by 2 the other way, flagging a coarse step (bit 0 of $03A7) when the fine scroll wraps; Y likewise with $0380, $033F, $033A and bit 1. Clears $0341 and the crash lock $0346. On a coarse step (map_coarse_step) the map moves a whole cell and is redrawn."
  },
  {
   "address": 23742,
   "type": "line",
   "text": "A whole-cell scroll: the map window pointer $033C moves by the heading's cell step ($0350: 1 column, $0360: $7E, one row; negative entries move back), $0334/$0335 record the last X/Y step (-1, 0, 1), then the 13 rows of 40 cells are copied from the 126-cell-wide map to screen rows 12-24 ($05E0-$07E7), the copy's source and destination operands at $5D6C-$5D71 being advanced row by row; $03A7 is cleared and $0336 asks for a new 3D view."
  },
  {
   "address": 23917,
   "type": "line",
   "text": "Operand of LDA abs,Y in the map-window copy: the map address of the current row minus one, set from $033C and advanced by $7E per row."
  },
  {
   "address": 23918,
   "type": "line",
   "text": "High byte of the map_copy_src operand, carried into by the row step."
  },
  {
   "address": 23920,
   "type": "line",
   "text": "Operand of STA abs,Y in the map-window copy: the screen address of the current row minus one, starting at $05DF (row 12) and advanced by 40 per row."
  },
  {
   "address": 23921,
   "type": "line",
   "text": "High byte of the map_copy_dst operand, carried into by the row step."
  },
  {
   "address": 23922,
   "type": "line",
   "text": "Tail of the map-window copy: after each 40-cell row the source operand advances by $7E (one map row) and the destination by 40 (one screen row), 13 rows in all (X from $0D)."
  },
  {
   "address": 23968,
   "type": "line",
   "text": "Car movement clock, once a frame from the IRQ: counts $0342 down; when it passes zero it is reloaded with the move delay $0340 / 4, the heading is saved in $0347 and scroll_map moves the car two pixels, so the car moves every delay/4 + 1 frames. Skipped while $02FF is set (never, as far as found)."
  },
  {
   "address": 24576,
   "type": "line",
   "text": "3D view column graphics, 8 screen codes per column at 8 x the column number: the strips for map cell types at $6000 (types 4, 6, 8, $0E-$11, $1B), $60B0 (0, $12-$1A, $1C-$1F) and $6160 (2, 9-$0D, $20-$23), per cell_strip_lo/hi; the depth-0 wall piece at $6100 lies inside the $60B0 strip."
  },
  {
   "address": 25088,
   "type": "line",
   "text": "3D view graphics $6200-$65FF: the wall-ahead pieces for wall type 0 at depths 1-11 ($6210, $6220, $6240, $6270, $62B0, $6300, $6360, $63D0, $6450, $64E0, $6580; wall_ptr_lo/hi), each 8 codes per column it covers."
  },
  {
   "address": 26112,
   "type": "line",
   "text": "3D view graphics $6600-$67FF: the end of the nearest type-0 wall piece, the strip at $6630 for cell types 1, 3, 5 and 7, and at $66E0-$67FF more columns of the same form that no pointer found reaches."
  },
  {
   "address": 26624,
   "type": "line",
   "text": "Object templates, copied to the live table $6900 by init_game (object 0 May Day, 1-14 police cars, 15 the bullet): X low byte. init_game first sets object 0's X and Y here to $01FA."
  },
  {
   "address": 26640,
   "type": "line",
   "text": "Object templates: flags; bits 0-2 the sprite (May Day 3, police 0-2, bullet 6), bit 4 reset from template when off screen, bit 5 dying, bit 6 waiting for its sprite, bit 7 shown."
  },
  {
   "address": 26656,
   "type": "line",
   "text": "Object templates: sprite pointer (May Day $90, police $8A-$8E, bullet $AC)."
  },
  {
   "address": 26672,
   "type": "line",
   "text": "Object templates: heading 0-7 (May Day's drift direction, a police car's heading)."
  },
  {
   "address": 26688,
   "type": "line",
   "text": "Object templates: X high byte."
  },
  {
   "address": 26704,
   "type": "line",
   "text": "Object templates: police step countdown (1 each)."
  },
  {
   "address": 26720,
   "type": "line",
   "text": "Object templates: police step reload, passes per pixel (3-7; lower is faster)."
  },
  {
   "address": 26736,
   "type": "line",
   "text": "Object templates: blink count of a shot car (0; set to 16 by police_shot)."
  },
  {
   "address": 26752,
   "type": "line",
   "text": "Object templates: Y low byte."
  },
  {
   "address": 26768,
   "type": "line",
   "text": "Object templates: blink timer of a shot car ($0A; reloaded with $18 by police_dying)."
  },
  {
   "address": 26784,
   "type": "line",
   "text": "Police car sprite pointers for headings 0-7: $88-$8F (shapes $2200-$23FF); $68A8-$68AF, a near copy (88-8E, 00), are not read."
  },
  {
   "address": 26800,
   "type": "line",
   "text": "X step per heading 0-7 for police cars, the bullet and May Day: 0, 1, or $81 (one back)."
  },
  {
   "address": 26808,
   "type": "line",
   "text": "Y step per heading 0-7: $81 (up), 1 (down) or 0."
  },
  {
   "address": 26816,
   "type": "line",
   "text": "Object templates: Y high byte."
  },
  {
   "address": 26832,
   "type": "line",
   "text": "Sixteen bytes of the template page ($68D0-$68DF, copied to $69D0) that nothing found reads."
  },
  {
   "address": 26848,
   "type": "line",
   "text": "Object templates: the pursuit count ($03A2) a police car waits for before it moves (1 for all fourteen)."
  },
  {
   "address": 26864,
   "type": "line",
   "text": "Template tail: $68F0-$68F7 unread; $68F8/$68F9 May Day's spiral countdown and radius (1, 0); $68FC-$68FF her landing target, overwritten by pick_landing_point."
  },
  {
   "address": 27136,
   "type": "line",
   "text": "Wall-ahead pieces for build_3d_view, index = wall type (0, or $10 for cell attribute $90) + depth 0-11: low byte of the piece's column graphics ($6100-$65FF for type 0, $7000-$73FF for type $10)."
  },
  {
   "address": 27200,
   "type": "line",
   "text": "Wall-ahead pieces: high byte of the column graphics pointer ($61-$65, $70-$73)."
  },
  {
   "address": 27264,
   "type": "line",
   "text": "Wall-ahead pieces: first column (10 down to 0 as the wall comes nearer)."
  },
  {
   "address": 27328,
   "type": "line",
   "text": "Wall-ahead pieces: column after the last (12 up to 22), so a near wall fills the whole view."
  },
  {
   "address": 27440,
   "type": "line",
   "text": "Offset of each heading's cell list in view_offsets: 0, 0, $42, $42, $84, $84, $C6, $C6 (one list per pair of headings)."
  },
  {
   "address": 27448,
   "type": "line",
   "text": "$6B38-$6BCF: stale copies of wall-table rows and fill bytes; nothing found reads them."
  },
  {
   "address": 27600,
   "type": "line",
   "text": "Per heading: 1 when build_3d_view nudges its view point by the last Y scroll (headings 2, 3, 6, 7), 0 when by X."
  },
  {
   "address": 27608,
   "type": "line",
   "text": "$6BD8-$6BFF: another stale copy of wall-table rows; not read."
  },
  {
   "address": 27648,
   "type": "line",
   "text": "Per map cell type 0-$23: low byte of its 3D column graphics (build_3d_view adds 8 x the column); $6C24-$6C7F zero."
  },
  {
   "address": 27776,
   "type": "line",
   "text": "Per map cell type 0-$23: high byte of its 3D column graphics ($60, $61 or $66); $6CA4-$6CFF zero."
  },
  {
   "address": 27904,
   "type": "line",
   "text": "The cells in view, as 16-bit offsets from the view base (view point - $05D6): four lists of 33 words, for headings 0-1 ($6D00), 2-3 ($6D42), 4-5 ($6D84) and 6-7 ($6DC6), read by build_3d_view into $6B00-$6B20."
  },
  {
   "address": 28036,
   "type": "line",
   "text": "view_offsets, the lists for headings 4-5 ($6D84) and 6-7 ($6DC6, to $6E07)."
  },
  {
   "address": 28168,
   "type": "line",
   "text": "$6E08-$6EFF after the offset lists: zeros, then $84 fill from $6EB0; not read."
  },
  {
   "address": 28416,
   "type": "line",
   "text": "Attribute of each map character for build_3d_view: $80 a building (a solid column; the first one ahead also sets the wall type 0), $90 for characters 2 and 4 (wall type $10), 0 for open ground (characters 0, $12-$1A, $1C-$1F, $F0-$FF)."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "3D view graphics $7000-$73FF: wall-ahead pieces for wall type $10 (cell attribute $90, characters 2 and 4) at depths 1-11 ($7000, $7010, $7030, $7060, $70A0, $70F0, $7150, $71C0, $7240, $72D0, $7370)."
  },
  {
   "address": 29696,
   "type": "line",
   "text": "The last 32 codes ($DD) of the nearest type-$10 wall piece, which runs from $7370 to $741F."
  },
  {
   "address": 31256,
   "type": "line",
   "text": "Per-voice attack/decay for the theme ($09, $19, $1A), set by init_music."
  },
  {
   "address": 31257,
   "type": "line",
   "text": "Voice 2's attack/decay ($19)."
  },
  {
   "address": 31258,
   "type": "line",
   "text": "Voice 3's attack/decay ($1A)."
  },
  {
   "address": 31259,
   "type": "line",
   "text": "Per-voice waveform control ($81 noise, $21 sawtooth, $41 pulse)."
  },
  {
   "address": 31260,
   "type": "line",
   "text": "Voice 2's waveform ($21 sawtooth)."
  },
  {
   "address": 31261,
   "type": "line",
   "text": "Voice 3's waveform ($41 pulse)."
  },
  {
   "address": 31262,
   "type": "line",
   "text": "Per-voice pulse width high byte ($00, $0E, $06)."
  },
  {
   "address": 31263,
   "type": "line",
   "text": "Voice 2's pulse width high ($0E)."
  },
  {
   "address": 31264,
   "type": "line",
   "text": "Voice 3's pulse width high ($06)."
  },
  {
   "address": 31265,
   "type": "line",
   "text": "Alternates 0/1 after each note step: 3 frames, then 2, then 3 ... (music_tick)."
  },
  {
   "address": 31266,
   "type": "line",
   "text": "Frames since the last note step."
  },
  {
   "address": 31267,
   "type": "line",
   "text": "Per-voice note stream pointer, low bytes ($7A23-$7A25)."
  },
  {
   "address": 31268,
   "type": "line",
   "text": "Voice 2's stream pointer, low byte."
  },
  {
   "address": 31269,
   "type": "line",
   "text": "Voice 3's stream pointer, low byte."
  },
  {
   "address": 31270,
   "type": "line",
   "text": "Per-voice note stream pointer, high bytes ($7A26-$7A28)."
  },
  {
   "address": 31271,
   "type": "line",
   "text": "Voice 2's stream pointer, high byte."
  },
  {
   "address": 31272,
   "type": "line",
   "text": "Voice 3's stream pointer, high byte."
  },
  {
   "address": 31273,
   "type": "line",
   "text": "Per-voice frames left in the current note ($7A29-$7A2B)."
  },
  {
   "address": 31274,
   "type": "line",
   "text": "Voice 2's frames left in its note."
  },
  {
   "address": 31275,
   "type": "line",
   "text": "Voice 3's frames left in its note."
  },
  {
   "address": 31276,
   "type": "line",
   "text": "Per-voice frequency low byte of the current note, the base for music_pitch_fx ($7A2C-$7A2E)."
  },
  {
   "address": 31279,
   "type": "line",
   "text": "Scratch for music_voice_note ($7A2F-$7A35): last low byte, then the voice's pulse, waveform, attack, countdown, saved $01 and voice index."
  },
  {
   "address": 31280,
   "type": "line",
   "text": "The stepped voice's pulse width high (music_step_voices to music_voice_note)."
  },
  {
   "address": 31281,
   "type": "line",
   "text": "The stepped voice's waveform control."
  },
  {
   "address": 31282,
   "type": "line",
   "text": "The stepped voice's attack/decay."
  },
  {
   "address": 31283,
   "type": "line",
   "text": "The stepped voice's note countdown, and the new note's length."
  },
  {
   "address": 31284,
   "type": "line",
   "text": "Saved processor port $01 during music_read."
  },
  {
   "address": 31285,
   "type": "line",
   "text": "Index 0-2 of the voice being stepped."
  },
  {
   "address": 31286,
   "type": "line",
   "text": "Per-voice shimmer step 0/4/8/12 of music_pitch_fx ($7A36-$7A38); $7A39-$7A3F not used."
  },
  {
   "address": 31296,
   "type": "line",
   "text": "Theme tune setup: per-voice attack/decay ($09, $19, $1A), waveform ($81 noise, $21 sawtooth, $41 pulse) and pulse width high byte ($00, $0E, $06) into $7A18-$7A20; filter cutoff $09/$73, $D417 = $05 (voices 1 and 3 through the filter), $D418 = $3F (volume 15, low- and band-pass); then music_rewind."
  },
  {
   "address": 31361,
   "type": "line",
   "text": "Points the three voices' note streams at $E000, $EAD1 and $F755 ($7A23-$7A28) and sets each note countdown ($7A29-$7A2B) to 8. Also the loop point when voice 1 reaches the end of its stream."
  },
  {
   "address": 31403,
   "type": "line",
   "text": "Theme tune, once a frame when chosen: music_pitch_fx, then the tick counter $7A22 steps the notes (music_step_voices) on alternately every 3rd and every 2nd frame ($7A21 toggles), and music_rewind restarts the tune when voice 1's stream pointer reaches $EAD1."
  },
  {
   "address": 31456,
   "type": "line",
   "text": "For voices 0-2: copies the voice's stream pointer into $D9/$DA and its attack/decay, waveform, pulse and countdown into $7A30-$7A33, runs music_voice_note, and stores the pointer and countdown back."
  },
  {
   "address": 31523,
   "type": "line",
   "text": "One voice: counts its note length down; at zero starts the next note: gate off, attack/decay, frequency high and low from the stream (the low byte also kept in $7A2C+voice), pulse width high, waveform with gate on, and the new length; notes are three bytes (frequency high, frequency low, length), read with music_read."
  },
  {
   "address": 31603,
   "type": "line",
   "text": "Reads byte Y of the current note at ($D9) with $01 = 0 (all RAM), because the tune lies in the RAM under the KERNAL at $E000-$FFFF, then restores $01."
  },
  {
   "address": 31640,
   "type": "line",
   "text": "Per-frame pitch effects: voice 1's frequency low byte climbs by $0A each frame (a rising noise), and voices 2 and 3 get 0, 4, 8, 12 in turn added to their note's low byte (a fast shimmer)."
  },
  {
   "address": 31688,
   "type": "line",
   "text": "SID register offsets of the three voices: 0, 7, 14."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "Cartridge signature header left in RAM: cold-start vector $5A00 (game_start), warm-start vector $6015, then C3 C2 CD 38 30 (CBM80). The KERNAL's reset code finds it and jumps through $8000, which is how fire on the instruction page (JMP $FCE2) starts the game."
  },
  {
   "address": 32808,
   "type": "line",
   "text": "Success telex, line 1 of 10 (typed by mission_complete): \"JAMES BOND 007 ON LOCATION.\"."
  },
  {
   "address": 32848,
   "type": "line",
   "text": "Success telex, line 2 of 10 (typed by mission_complete): \"[M]\"."
  },
  {
   "address": 32888,
   "type": "line",
   "text": "Success telex, line 3 of 10 (typed by mission_complete): \"HQ.\"."
  },
  {
   "address": 32928,
   "type": "line",
   "text": "Success telex, line 4 of 10 (typed by mission_complete): \"YOUR REF-AVTAK\"."
  },
  {
   "address": 32968,
   "type": "line",
   "text": "Success telex, line 5 of 10 (typed by mission_complete): \"OUR REF-RM/MP\"."
  },
  {
   "address": 33008,
   "type": "line",
   "text": "Success telex, line 6 of 10 (typed by mission_complete): \"WELL DONE 007\"."
  },
  {
   "address": 33048,
   "type": "line",
   "text": "Success telex, line 7 of 10 (typed by mission_complete): \"YOUR CODE FOR CITY HALL IS.....\"."
  },
  {
   "address": 33088,
   "type": "line",
   "text": "Success telex, line 8 of 10 (typed by mission_complete): \"CCPHJ.....STOP\"."
  },
  {
   "address": 33128,
   "type": "line",
   "text": "Success telex, line 9 of 10 (typed by mission_complete): \"GOOD LUCK!.....STOP\"."
  },
  {
   "address": 33168,
   "type": "line",
   "text": "Success telex, line 10 of 10 (typed by mission_complete): \"END OF MESSAGE.....STOP\"."
  },
  {
   "address": 33536,
   "type": "line",
   "text": "Source base of init_game's template copy ($8300+Y, Y from $34): $8300-$8333 are never copied and hold leftover bytes (JSR $7A40 / JSR $7AAB / RTS and others: an older copy of some code, not called)."
  },
  {
   "address": 33588,
   "type": "line",
   "text": "Start values of the variables $0334-$03FF, copied by init_game: scroll steps, world position ($0190, $01BC), map window $AF35, fine scroll 4/1, move delay $3F, step tables, clock 10:18:00, car shapes, sprite masks, May Day shapes."
  },
  {
   "address": 33652,
   "type": "line",
   "text": "Start values for $0374-$03B3: the rest of the fine-step tables, the clock digits and frame count, heading 0, damage 0, pursuit 0, gear forward, and the car shapes $80-$87."
  },
  {
   "address": 33716,
   "type": "line",
   "text": "Start values for $03B4-$03FF: the sprite clear and bit masks, bytes $03D0-$03DF that nothing found reads, May Day's shapes $90-$97, and $03E8-$03FF, also unread."
  },
  {
   "address": 35624,
   "type": "line",
   "text": "The cockpit picture, 1000 screen codes copied to $0400 by draw_cockpit: the 3D window (rows 0-7, columns 9-30), the dashboard with clock, altimeter, DAMAGE and speed gauges; rows 12-24 are overwritten by the map window."
  },
  {
   "address": 36624,
   "type": "line",
   "text": "The cockpit picture's 1000 colour RAM values, copied to $D800 by draw_cockpit."
  },
  {
   "address": 37624,
   "type": "line",
   "text": "The town map: 124 rows of 126 map characters (character set $3800), $92F8-$CFFF, streets between blocks three cells square; map_coarse_step shows 13 rows x 40 of it, police_ai reads it at $9372 + row x 126 + column. Rows 0-7 ($92F8-$96E7): rows 0-1 the top edge."
  },
  {
   "address": 38632,
   "type": "line",
   "text": "Town map rows 8-15 ($96E8-$9AD7)."
  },
  {
   "address": 39640,
   "type": "line",
   "text": "Town map rows 16-23 ($9AD8-$9EC7)."
  },
  {
   "address": 40648,
   "type": "line",
   "text": "Town map rows 24-31 ($9EC8-$A2B7)."
  },
  {
   "address": 40687,
   "type": "line",
   "text": "Map row 24, columns 39-43: the five cells patch_map rewrites at every start (00 00 00 01 01); the map runs on from here."
  },
  {
   "address": 40956,
   "type": "line",
   "text": "Map row 26, columns 56-60: the five cells patch_map rewrites (05 09 09 09 09, as the image has them); the map runs on."
  },
  {
   "address": 40960,
   "type": "line",
   "text": "Town map continued from row 26, column 60 (a label at the $A000 boundary of the memory map)."
  },
  {
   "address": 41656,
   "type": "line",
   "text": "Town map rows 32-39 ($A2B8-$A6A7)."
  },
  {
   "address": 41937,
   "type": "line",
   "text": "Map row 34, column 67: where map_copy_src points in the image (it is rewritten before every copy); the map runs on."
  },
  {
   "address": 42664,
   "type": "line",
   "text": "Town map rows 40-47 ($A6A8-$AA97)."
  },
  {
   "address": 43672,
   "type": "line",
   "text": "Town map rows 48-55 ($AA98-$AE87)."
  },
  {
   "address": 44680,
   "type": "line",
   "text": "Town map rows 56-63 ($AE88-$B277)."
  },
  {
   "address": 45688,
   "type": "line",
   "text": "Town map rows 64-71 ($B278-$B667)."
  },
  {
   "address": 46696,
   "type": "line",
   "text": "Town map rows 72-79 ($B668-$BA57)."
  },
  {
   "address": 47704,
   "type": "line",
   "text": "Town map rows 80-87 ($BA58-$BE47)."
  },
  {
   "address": 48712,
   "type": "line",
   "text": "Town map rows 88-95 ($BE48-$C237)."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "Town map continued from row 91, column 62 (a label at the $C000 boundary of the memory map)."
  },
  {
   "address": 49720,
   "type": "line",
   "text": "Town map rows 96-103 ($C238-$C627)."
  },
  {
   "address": 50728,
   "type": "line",
   "text": "Town map rows 104-111 ($C628-$CA17)."
  },
  {
   "address": 51736,
   "type": "line",
   "text": "Town map rows 112-119 ($CA18-$CE07)."
  },
  {
   "address": 52744,
   "type": "line",
   "text": "Town map rows 120-123 ($CE08-$CFFF)."
  },
  {
   "address": 53246,
   "type": "line",
   "text": "place_sprite's index base: $CFFE + 2 x (sprite + 1) is the sprite's position register pair at $D000. The two bytes here in RAM are the last two cells of the map."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "Theme tune, voice 1 (noise, the percussion): notes of three bytes (frequency high, frequency low, length in note steps) from $E000 to $EAD0, read with $01 = 0 by music_read. This stretch: $E000-$E3FF."
  },
  {
   "address": 58368,
   "type": "line",
   "text": "Theme tune, voice 1 notes continued ($E400-$E7FF)."
  },
  {
   "address": 59392,
   "type": "line",
   "text": "Theme tune, voice 1 notes continued to the end of its stream at $EAD0; music_tick restarts the whole tune when voice 1 reaches $EAD1."
  },
  {
   "address": 60113,
   "type": "line",
   "text": "Theme tune, voice 2 (sawtooth): notes from $EAD1 to $F754. This stretch: $EAD1-$EEBF."
  },
  {
   "address": 61120,
   "type": "line",
   "text": "Theme tune, voice 2 notes continued ($EEC0-$F2BF)."
  },
  {
   "address": 62144,
   "type": "line",
   "text": "Theme tune, voice 2 notes continued to $F754."
  },
  {
   "address": 63168,
   "type": "line",
   "text": "Theme tune, voice 2 notes, the last stretch $F6C0-$F754 before voice 3 begins."
  },
  {
   "address": 63317,
   "type": "line",
   "text": "Theme tune, voice 3 (pulse): notes from $F755 onward (the tune restarts with voice 1, before voice 3's data runs out at $FFFF). This stretch: $F755-$FAFF."
  },
  {
   "address": 64256,
   "type": "line",
   "text": "Theme tune, voice 3 notes continued ($FB00-$FCE1)."
  },
  {
   "address": 64738,
   "type": "line",
   "text": "Theme tune, voice 3 notes $FCE2-$FFFF (the hardware vectors' RAM included). The address is also the KERNAL ROM's reset entry, which title_page jumps to with the ROM banked in; the ROM, not this RAM, runs then."
  }
 ]
}