{
  "notes": [
    "Names describe observed responsibilities; they are research annotations, not recovered debug symbols.",
    "Disassembly follows direct branches and calls from the entry point, known interpreter tables and data-object callback candidates. Indirect destinations, self-modifying code and dynamically loaded overlays require further tracing."
  ],
  "symbols": {
    "0x71090": {
      "name": "initialise mission session",
      "category": "game flow",
      "evidence": "called by launch_game after constructing mission arguments"
    },
    "0x72018": {
      "name": "run flight session",
      "category": "game flow",
      "evidence": "launch_game invokes this between music start and stop"
    },
    "0x72588": {
      "name": "launch_game",
      "category": "game flow",
      "evidence": "presentation type 5 calls via 0xb27a8; includes command parsing, setup, flight and teardown"
    },
    "0x72b24": {
      "name": "blend VGA palette",
      "category": "renderer",
      "evidence": "interpolates 224 RGB triples with divisor 50 and masks DAC components to 6 bits"
    },
    "0xb0bde": {
      "name": "terrain world-to-cell lookup",
      "category": "terrain",
      "evidence": "divides X/Z by 2048 and reverses the stored Z index"
    },
    "0xb0c39": {
      "name": "combine terrain grid bytes",
      "category": "terrain",
      "evidence": "X*200 + 199-Z, paired low/high arrays"
    },
    "0xb1da0": {
      "name": "presentation text",
      "category": "presentations",
      "evidence": "type 2 runtime handler"
    },
    "0xb1e38": {
      "name": "presentation bitmap",
      "category": "presentations",
      "evidence": "type 1 runtime handler"
    },
    "0xb1f90": {
      "name": "presentation animation",
      "category": "presentations",
      "evidence": "type 0 runtime handler"
    },
    "0xb2214": {
      "name": "presentation audio control",
      "category": "presentations",
      "evidence": "type 11 runtime handler"
    },
    "0xb22d8": {
      "name": "presentation branch",
      "category": "presentations",
      "evidence": "type 3 runtime handler; ordinary equality uses retail gate 0xab41, retained debugger prints condition/current value and accepts Space=yes/Enter=no; six native cases"
    },
    "0xb27a8": {
      "name": "presentation launch_game bridge",
      "category": "presentations",
      "evidence": "tokenises statement arguments and calls 0x72588"
    },
    "0xb2b44": {
      "name": "execute presentation graph",
      "category": "presentations",
      "evidence": "statement dispatch, polling and service loop"
    },
    "0xb3168": {
      "name": "load saved parser graph",
      "category": "presentations",
      "evidence": "native per-node payload sizes and string/buffer loads"
    },
    "0xb4000": {
      "name": "play CD audio track",
      "category": "audio",
      "evidence": "Builds MSCDEX function 0x1510 request command 0x84; native index n selects physical CD track n+1; isolated request capture checked"
    },
    "0xb40c8": {
      "name": "stop CD audio",
      "category": "audio",
      "evidence": "MSCDEX stop request paired with 0xb4000"
    },
    "0xb49a0": {
      "name": "load scenery name table",
      "category": "scenery",
      "evidence": "reads ss/ssinfo.fn"
    },
    "0xb4bc8": {
      "name": "load scenery definition",
      "category": "scenery",
      "evidence": "loads SSD after formatting resource pathname"
    },
    "0xb4da8": {
      "name": "instantiate scenery actor",
      "category": "scenery",
      "evidence": "allocates header, 29-byte parts and custom storage"
    },
    "0xb52d4": {
      "name": "execute scenery event",
      "category": "scenery",
      "evidence": "word-relative SSD entry table and opcode dispatch"
    },
    "0xb62ec": {
      "name": "assign model to actor part",
      "category": "scenery",
      "evidence": "SSD opcode 3 helper"
    },
    "0xb631c": {
      "name": "assign rotated actor part",
      "category": "scenery",
      "evidence": "SSD opcode 5 helper"
    },
    "0xb6438": {
      "name": "draw actor part at anchor",
      "category": "scenery",
      "evidence": "SSD opcode 6 helper"
    },
    "0xb65b0": {
      "name": "draw actor part at origin",
      "category": "scenery",
      "evidence": "SSD opcode 7 helper"
    },
    "0xb668c": {
      "name": "draw culled actor part at anchor",
      "category": "scenery",
      "evidence": "SSD opcode 8 helper"
    },
    "0xb6c84": {
      "name": "install part parameter stream",
      "category": "scenery",
      "evidence": "stores word offset in one of eight part stream slots"
    },
    "0xb6ce0": {
      "name": "advance part parameter stream",
      "category": "scenery",
      "evidence": "seven stream commands update parameter byte and cursor"
    },
    "0xb7768": {
      "name": "axis-aligned collision test",
      "category": "collision",
      "evidence": "SSD opcodes 12/13 rectangular coordinate operands"
    },
    "0xb9434": {
      "name": "transform and project vertices",
      "category": "renderer",
      "evidence": "32-byte native vertex slots, camera translation and perspective"
    },
    "0xb9895": {
      "name": "compose component matrix",
      "category": "renderer",
      "evidence": "parent matrix multiplied by transposed component matrix"
    },
    "0xb9f3f": {
      "name": "convert shape program",
      "category": "models",
      "evidence": "big-endian disk words, slot strides and handler offsets rewritten in place"
    },
    "0xb9f90": {
      "name": "convert shape header",
      "category": "models",
      "evidence": "LOD distances, kinds and relative pointers"
    },
    "0xbb574": {
      "name": "shape relative jump",
      "category": "models",
      "evidence": "drawing dispatcher helper"
    },
    "0xbb584": {
      "name": "shape relative call",
      "category": "models",
      "evidence": "drawing dispatcher helper"
    },
    "0xbb598": {
      "name": "select shape parameter",
      "category": "models",
      "evidence": "byte array 0x47cb0 to current parameter 0x47cae"
    },
    "0xbb81c": {
      "name": "shape projected facing test",
      "category": "models",
      "evidence": "nonnegative screen determinant branches"
    },
    "0xbc2a8": {
      "name": "draw rotated anchored component",
      "category": "models",
      "evidence": "opcode 73"
    },
    "0xbc380": {
      "name": "select bound texture and UV coordinates",
      "category": "models",
      "evidence": "opcode 71 reads handle slot at 0x47c84"
    },
    "0xbc8f0": {
      "name": "draw bound external shape",
      "category": "models",
      "evidence": "opcode 81 uses actor handles at 0x47c94"
    },
    "0xbcb24": {
      "name": "project vertex range",
      "category": "models",
      "evidence": "opcode 97"
    },
    "0xbcb64": {
      "name": "define absolute vertex",
      "category": "models",
      "evidence": "opcode 98"
    },
    "0xbcbf8": {
      "name": "append XYZ delta vertex",
      "category": "models",
      "evidence": "opcode 99"
    },
    "0xc5214": {
      "name": "load sampled effect",
      "category": "audio",
      "evidence": "samples/name.sam and raw buffer load"
    },
    "0xc6c84": {
      "name": "load war bitmap",
      "category": "media",
      "evidence": "war signature, palette and pixel conversion"
    },
    "0xc93bc": {
      "name": "load shape",
      "category": "models",
      "evidence": "calls shape converter 0xb9f3f"
    },
    "0xca0c4": {
      "name": "initialise animation",
      "category": "media",
      "evidence": "palette, frame count and initial block; internal argument comparisons DAVE_FADE, SLOW_FADE, MEDIA_BREAK_FIX, INTROGEN_FIX"
    },
    "0xdabd8": {
      "name": "generate alternate orientation matrix",
      "category": "renderer",
      "evidence": "shape opcodes 119/120 load conversion"
    },
    "0xdad88": {
      "name": "generate component orientation matrix",
      "category": "renderer",
      "evidence": "shape opcode 73 load conversion; 205 emulator comparison cases"
    },
    "0xdd0e4": {
      "name": "start sampled playback",
      "category": "audio",
      "evidence": "sample channel priority, rate and DMA segments"
    },
    "0xdd22c": {
      "name": "prepare sampled playback",
      "category": "audio",
      "evidence": "descriptor rate and buffer fields"
    },
    "0xde8cc": {
      "name": "decompress animation block",
      "category": "media",
      "evidence": "word-bit LZ; all 1,606 stored blocks match native emulation"
    },
    "0xdef78": {
      "name": "apply planar animation delta",
      "category": "media",
      "evidence": "four planes of relative word-sized runs"
    },
    "0x79b20": {
      "name": "select player craft from mission",
      "category": "game flow",
      "evidence": "plane 1/2/3 reads EFA/F-117/F-22 name tables and stores the zero-based craft index"
    },
    "0x7b58c": {
      "name": "load entity type definitions",
      "category": "simulation",
      "evidence": "WAYBIN/CRAFTYPE.CFG; native record lengths 74/58/46/34 for kinds 14\u201317"
    },
    "0x7b4e0": {
      "name": "entity definition record length",
      "category": "simulation",
      "evidence": "type byte masked with 0x7f; dispatches kinds 14\u201317"
    },
    "0x7b51c": {
      "name": "find entity type by numeric ID",
      "category": "simulation",
      "evidence": "searches loaded definitions by word at record offset 0x20"
    },
    "0x7d550": {
      "name": "install standard player update callback",
      "category": "flight dynamics",
      "evidence": "writes 0x8f56c to callback slot at data-object offset 0x12bcc"
    },
    "0x8f56c": {
      "name": "update player aircraft",
      "category": "flight dynamics",
      "evidence": "callback installed at 0x7d550; invoked indirectly at 0x8697e; includes airborne, landed and special flight branches"
    },
    "0x8e5a8": {
      "name": "alternate flight integration",
      "category": "flight dynamics",
      "evidence": "player updater selects this when data byte 0x86ce is nonzero; floating position, orientation and speed updates"
    },
    "0x8c6e8": {
      "name": "alternate speed and engine calculations",
      "category": "flight dynamics",
      "evidence": "called by alternate flight integration; x87 arithmetic and control-dependent throttle changes"
    },
    "0x9feb4": {
      "name": "special flight transition",
      "category": "flight dynamics",
      "evidence": "player updater selects this when data byte 0x86cf is nonzero; distance and orientation calculations"
    },
    "0x95f3c": {
      "name": "initialise player flight state",
      "category": "flight dynamics",
      "evidence": "selects distinct presets and initialises floating flight state"
    },
    "0x96918": {
      "name": "initialise F-22 flight preset",
      "category": "flight dynamics",
      "evidence": "zero-based player craft index 2 selects this routine"
    },
    "0x97598": {
      "name": "initialise F-117 flight preset",
      "category": "flight dynamics",
      "evidence": "zero-based player craft index 1 selects this routine"
    },
    "0x98234": {
      "name": "initialise Eurofighter flight preset",
      "category": "flight dynamics",
      "evidence": "zero-based player craft index 0 selects this routine"
    },
    "0x75114": {
      "name": "copy player pose to simulation coordinates",
      "category": "simulation",
      "evidence": "floating XYZ converted to fixed/integer coordinates; orientation words and shifted speed copied"
    },
    "0x75784": {
      "name": "advance moving entity groups",
      "category": "simulation",
      "evidence": "two 50-entry groups updated once per elapsed tick"
    },
    "0x71fd4": {
      "name": "advance projectiles in bounded steps",
      "category": "simulation",
      "evidence": "splits elapsed tick count into chunks of at most 10; calls update and collision passes"
    },
    "0xa31cc": {
      "name": "update active projectile list",
      "category": "simulation",
      "evidence": "walks linked list, copies previous position and calls per-projectile update callback"
    },
    "0xa373c": {
      "name": "test projectile trajectories",
      "category": "collision",
      "evidence": "previous/current positions passed to scenery collision routine 0xb752c; specialised projectile responses follow"
    },
    "0x71328": {
      "name": "player collision and damage responses",
      "category": "collision",
      "evidence": "scenery hit queries, SSD events, landing/death state and mission exit variable"
    },
    "0xb0ba8": {
      "name": "render terrain neighbourhood",
      "category": "renderer",
      "evidence": "flight session calls it with camera position and view parameters"
    },
    "0x73cd0": {
      "name": "prepare camera transform",
      "category": "renderer",
      "evidence": "invokes orientation/projection helpers before drawing terrain"
    },
    "0x7cf34": {
      "name": "draw visible moving objects",
      "category": "renderer",
      "evidence": "projects coordinates and calls actor drawing helper 0xb4fd0"
    },
    "0xc03cc": {
      "name": "prepare x87 integer rounding",
      "category": "runtime",
      "evidence": "called immediately before FISTP conversions"
    },
    "0xb4f44": {
      "name": "advance scenery actor animation",
      "category": "scenery",
      "evidence": "ticks one or eight parameter streams per part on the shared animation update flag"
    },
    "0xa6134": {
      "name": "read resident simulation timer",
      "category": "timing",
      "evidence": "driver function 0x19 returns counter pointer; fallback 0x46c"
    },
    "0x74654": {
      "name": "measure elapsed timer ticks",
      "category": "timing",
      "evidence": "difference of resident counter and data-object previous value 0x10bfc"
    },
    "0x8c43c": {
      "name": "measure and clamp player simulation interval",
      "category": "timing",
      "evidence": "waits for 2 ticks, mode-dependent adjustments, maximum 18 and optional fivefold speed-up"
    },
    "0xb0708": {
      "name": "instantiate terrain cells from scenery alternatives",
      "category": "terrain",
      "evidence": "native rand modulo tag variant count; instantiates one SSD per cell at 0xb07df"
    },
    "0xc0ef8": {
      "name": "draw four-plane sprite-bank frame",
      "category": "renderer",
      "evidence": "frame offsets, half-width/height, four VGA plane masks; 242 isolated native frames match decoded sprite pixels"
    },
    "0xc488d": {
      "name": "restore tick-gated renderer jitter seed",
      "category": "renderer",
      "evidence": "flag 0xac90 gates saved seeds at 0x4862e/0x48630; every frame restores working words at 0x48632/0x48634"
    },
    "c73a4": {
      "name": "load raw texture page",
      "category": "renderer",
      "evidence": "Requests a .TM resource and loads its bytes into paged storage."
    },
    "c7424": {
      "name": "bind a shape texture by name",
      "category": "renderer",
      "evidence": "Model cache fields and !-prefixed TM versus SPR pathname handling."
    },
    "c7588": {
      "name": "load global texture atlas slots",
      "category": "renderer",
      "evidence": "Loops global_1 through global_8; stores eight handles at code-relative 0x47c84."
    },
    "bdc38": {
      "name": "rasterise textured polygon",
      "category": "renderer",
      "evidence": "Screen positions and UV buffer feed native edge and affine scanline routines."
    },
    "bd95c": {
      "name": "rasterise shaded polygon",
      "category": "renderer",
      "evidence": "Opcode 50 uses shade attributes at code-relative 0x47fac, not the UV buffer."
    },
    "e5dd8": {
      "name": "draw affine indexed texture scanlines",
      "category": "renderer",
      "evidence": "V*256+U texel addressing; lighting lookup and post-lookup zero transparency."
    },
    "74060": {
      "name": "upload four-plane HUD bitmap",
      "category": "renderer",
      "evidence": "Copies the four contiguous source planes under VGA masks 1/2/4/8."
    },
    "74104": {
      "name": "compose compiled HUD viewport",
      "category": "renderer",
      "evidence": "Passes VGA segment and horizontal/vertical offsets to a drawing overlay."
    },
    "742a0": {
      "name": "load HUD overlay code and bitmap companions",
      "category": "renderer",
      "evidence": "Loads code/data references from the 29-entry HUD viewport table."
    },
    "7dc7c": {
      "name": "load instrument sprite banks",
      "category": "renderer",
      "evidence": "Explicit filenames and handles for native HUD artwork."
    },
    "86a60": {
      "name": "load cockpit-map drawing overlay",
      "category": "renderer",
      "evidence": "Explicit dat/cockmap.bin resource request."
    },
    "7d5c0": {
      "name": "load player cockpit and effect shapes",
      "category": "renderer",
      "evidence": "Explicit refuelling cockpit model names for the three player aircraft; their air-to-air refuelling use was identified in the original game."
    },
    "0xb3984": {
      "name": "run selected presentation program",
      "category": "game flow",
      "evidence": "Optional leading NAME=value argument is passed to putenv; next argument supplies the PAR basename."
    },
    "0xb38d0": {
      "name": "load selected parser graph",
      "category": "game flow",
      "evidence": "Builds DID\\\\basename.par from getenv(DID) and the program argument."
    },
    "0xa664c": {
      "name": "read TFX.CFG",
      "category": "configuration",
      "evidence": "Reads the config text, splits KEY=value lines and dispatches recognised entries."
    },
    "0xa65f0": {
      "name": "dispatch configuration entry",
      "category": "configuration",
      "evidence": "Fifteen keyword/handler pairs at data offset 0xa468; sentinel ignores unknown keywords."
    },
    "0xa6184": {
      "name": "read HUD intensity setting",
      "category": "configuration",
      "evidence": "Parses HUDCOL as an integer into the word at data offset 0xa4ec."
    },
    "0xa61c8": {
      "name": "write HUD intensity setting",
      "category": "configuration",
      "evidence": "Formats HUDCOL=%d using the word at data offset 0xa4ec."
    },
    "0xa6490": {
      "name": "read realism settings",
      "category": "configuration",
      "evidence": "Seven integer fields: G effects, precipitation, crashing, gear damage, wind, temperature, auto recovery; temporary values start at zero."
    },
    "0xa6560": {
      "name": "write realism settings",
      "category": "configuration",
      "evidence": "Formats the seven REALISM fields in the same order as the config reader."
    },
    "0xa6808": {
      "name": "save flight preferences to TFX.CFG",
      "category": "configuration",
      "evidence": "Replaces REALISM, DETAIL, JOYSCALE and HUDCOL lines while preserving other config text."
    },
    "0x86820": {
      "name": "adjust HUD intensity",
      "category": "input",
      "evidence": "Raw Y/U scan codes 0x15/0x16 increment/decrement HUD palette index; clamp is 90..127. Fifteen native captures match."
    },
    "0x839d0": {
      "name": "initialise flight key callbacks",
      "category": "input",
      "evidence": "Installs per-scan-code callbacks in the table at data offset 0x13030, including Z -> 0x8445c."
    },
    "0x8445c": {
      "name": "laser designator key",
      "category": "input",
      "evidence": "Scan code 0x2c callback: enters designator through 0x859fc or signals target selection in view 0x13."
    },
    "0x9407c": {
      "name": "flight realism menu",
      "category": "configuration",
      "evidence": "Native labels and option bindings establish G effects followed by precipitation, crashing, gear damage, wind and temperature."
    },
    "0xd59b0": {
      "name": "initialise fixed VGA display",
      "category": "renderer",
      "evidence": "Sets BIOS modes 0x12 then 0x13 and programs VGA for unchained 320x200, 256-colour drawing; native mode/register capture recorded."
    },
    "0x838dc": {
      "name": "recognise PLOP cheat sequence",
      "category": "input",
      "evidence": "Right Shift gates scan sequence 19 26 18 19; toggles data word 0x13250 and consumes matching key events. Native captures verify both toggle states and left Shift exclusion."
    },
    "0x841ec": {
      "name": "save numbered screen grab key",
      "category": "input",
      "evidence": "Number-row 4 callback calls 0xd0c24."
    },
    "0xd0c24": {
      "name": "save numbered LBM screen grab",
      "category": "graphics utility",
      "evidence": "Finds first absent GRAB_XX.LBM filename, then passes framebuffer 0x21000 and format 2 to 0xdfe64. Native filename/save-call capture uses intercepted file I/O."
    },
    "0x85e54": {
      "name": "toggle auto stick pressure",
      "category": "input",
      "evidence": "Number-row 5 toggles data byte 0x8f32 and emits AUTO STICK PRESSURE ON/OFF; documented in retail README."
    },
    "0x85e3c": {
      "name": "restore autopilot cruise speed preset",
      "category": "input",
      "evidence": "Number-row 6 multiplies preset Mach 0x14698 by local speed of sound 0x14790 into autopilot target speed 0x8d40."
    },
    "0x85c78": {
      "name": "flight details and arming shortcuts",
      "category": "input",
      "evidence": "Plain D toggles flight information; Shift+D installs default loadout and restores 15 chaff/flares; Ctrl+D with cheat active enters arming workflow and reloads related assets."
    },
    "0x847ec": {
      "name": "toggle instrument landing system",
      "category": "input",
      "evidence": "Backslash callback and I wrapper at 0x84908 share this ILS toggle/setup path."
    },
    "0x84908": {
      "name": "instrument landing system key",
      "category": "input",
      "evidence": "I callback wraps the Backslash handler at 0x847ec."
    },
    "0x846e8": {
      "name": "select cannon and navigation mode",
      "category": "input",
      "evidence": "Shared callback for F and Ctrl; configures cannon/navigation flight state."
    },
    "0x84a78": {
      "name": "select air-to-ground weapon",
      "category": "input",
      "evidence": "Shared callback for O and Backspace."
    },
    "0xa1ee0": {
      "name": "enter pilot name field and report Ctrl state",
      "category": "menus",
      "evidence": "Enter confirms the text; the return value reads held scan code 0x1d. Only the callsign return is retained by enrolment. Native eight-case enrolment capture."
    },
    "0xa2234": {
      "name": "enrol new pilot and assign qualification rank",
      "category": "menus",
      "evidence": "Resets parser variables, enters firstname/pilotname/callsign and stores the final Ctrl result in rank. WAYTXT/A word 0x1736 overrides rank to 1. Native eight-case capture."
    },
    "0xa24bc": {
      "name": "write persistent training completion marker",
      "category": "game flow",
      "evidence": "The strain launch argument dispatches here. Creates WAYTXT/A and writes little-endian 0x1736 (36 17); native file-call capture intercepts all I/O."
    },
    "0xc70b1": {
      "name": "Watcom atoi",
      "category": "C runtime",
      "evidence": "Skips ctype whitespace, handles a sign and accumulates decimal digits. Native five-case capture; matches the Watcom convert/atoi.c algorithm."
    },
    "0xc7104": {
      "name": "Watcom strcmp",
      "category": "C runtime",
      "evidence": "NUL-terminated comparison with word-at-a-time zero detection. Native five-case comparison capture."
    },
    "0xc7286": {
      "name": "Watcom strcat",
      "category": "C runtime",
      "evidence": "Scans the destination NUL and appends the source including its terminator; preserves the original destination return. Native three-case capture."
    },
    "0xc92a9": {
      "name": "Watcom sprintf",
      "category": "C runtime",
      "evidence": "Variadic stack arguments feed the shared formatter at 0xdc3c0 with the memory-output callback at 0xc929b; appends NUL. Native percent-s/zero-padded-integer capture returns scene/007 and length 9."
    },
    "0xc9602": {
      "name": "Watcom strcpy",
      "category": "C runtime",
      "evidence": "Two-byte-unrolled copy matches the 386 small-data pragma in upstream clib/string/c/strcpy.c, with caller-register preservation. Six native string/canary captures."
    },
    "0xc96a3": {
      "name": "Watcom strlen",
      "category": "C runtime",
      "evidence": "REPNE SCASB counts through the NUL and excludes the terminator. Six native cases, with the flat selectors normally supplied by DOS/4GW initialised."
    },
    "0xc96bc": {
      "name": "Watcom abs",
      "category": "C runtime",
      "evidence": "Signed integer test/negate; three non-overflow native cases."
    },
    "0xd36ef": {
      "name": "Watcom near free",
      "category": "C runtime",
      "evidence": "Passes the block and current data selector to the runtime heap release helper at 0xe0ff4. Static identification; full heap runtime has not been initialised in an isolated capture."
    },
    "0xd3820": {
      "name": "Watcom near malloc",
      "category": "C runtime",
      "evidence": "Allocates through 0xe0f44 and retries runtime heap growth at 0xe1af5/0xe1c83. Used by putenv and asset allocation. Static identification."
    },
    "0xd22e7": {
      "name": "x87 sine helper",
      "category": "math runtime",
      "evidence": "Consumes ST(0), uses FSIN when the coprocessor flag is 3 and has an older-coprocessor reduction fallback. Seven native hardware-path cases checked against sine."
    },
    "0x70d6c": {
      "name": "retail presentation branch gate",
      "category": "presentations",
      "evidence": "returns AL=1; parser init stores in data 0xab41, bypassing interactive equality debugger"
    },
    "0xa6944": {
      "name": "initialise default high scores",
      "category": "game flow",
      "evidence": "ten 16-byte pointer/score records at data 0xa518 copied into ten 67-byte records; native capture"
    },
    "0xa69b0": {
      "name": "encode high scores and checksum",
      "category": "game flow",
      "evidence": "670 bytes XOR with reset native RNG; second draw and ciphertext form additive checksum; native roundtrip"
    },
    "0xa6a10": {
      "name": "decode high scores and checksum",
      "category": "game flow",
      "evidence": "inverse of 0xa69b0; native roundtrip restores all records and identical checksum"
    },
    "0xa6a7c": {
      "name": "write high-score file",
      "category": "game flow",
      "evidence": "DID environment path plus tfx.hs; 670 encoded bytes and 32-bit checksum, then restores memory"
    },
    "0xa6aec": {
      "name": "load high scores or embedded defaults",
      "category": "game flow",
      "evidence": "reads tfx.hs; absent file/checksum mismatch restores table via 0xa6944"
    },
    "0xb0144": {
      "name": "parse terrain authoring list",
      "category": "terrain",
      "evidence": "ASCII entry count, path and ten integer authoring values; 73-byte runtime records"
    },
    "0xb0358": {
      "name": "check terrain-tag buffer extent",
      "category": "terrain",
      "evidence": "cursor minus start >16384 raises Jamie has bodged it again; three native boundary cases"
    },
    "0xb0408": {
      "name": "append terrain-tag string",
      "category": "terrain",
      "evidence": "strcpy, advance cursor by strlen+1, call extent check"
    },
    "0xb0434": {
      "name": "read terrain-tag string",
      "category": "terrain",
      "evidence": "strcpy from cursor, advance by strlen+1, call extent check"
    },
    "0xb0468": {
      "name": "append terrain-tag word",
      "category": "terrain",
      "evidence": "store 16-bit value, advance cursor by two, call extent check"
    },
    "0xb0488": {
      "name": "read terrain-tag word",
      "category": "terrain",
      "evidence": "load 16-bit value, advance cursor by two, call extent check"
    },
    "0xb0604": {
      "name": "load or assemble terrain tags",
      "category": "terrain",
      "evidence": "data 0xaad4 selects precompiled DAT tag buffer versus SSS enumeration and tag writing"
    },
    "0xb21cc": {
      "name": "evaluate presentation equality branch",
      "category": "presentations",
      "evidence": "numeric parser-variable comparison; optional GOSUB return-node push; six native branch cases"
    },
    "0xb2a68": {
      "name": "initialise presentation runtime",
      "category": "presentations",
      "evidence": "graph state and return stack reset; installs variable pointers and retail branch gate from 0x70d6c"
    },
    "0xb2fc8": {
      "name": "initialise parser variables",
      "category": "presentations",
      "evidence": "numeric defaults zero; allocates 21-byte string defaults containing DAVE"
    },
    "0xb35d0": {
      "name": "load parser subflow",
      "category": "presentations",
      "evidence": "single strip; type-14 Ultra choice node triggers fatal Found an Ultra box!; four native synthetic-load cases"
    },
    "0xb388f": {
      "name": "reject Ultra node in subflow",
      "category": "presentations",
      "evidence": "subflow loading dispatch type 14; calls fatal routine 0xb0eb0 with literal at 0xf27b8"
    },
    "0xb2724": {
      "name": "execute Ultra conditional choice",
      "category": "presentations",
      "evidence": "type-14 execution: tests up to three numeric conditions in priority order and selects from matching choice list; native priority cases"
    },
    "0xb2620": {
      "name": "choose unused Ultra branch",
      "category": "presentations",
      "evidence": "tracks selected indices; retries/fallback avoid repeats and reset after a complete group; native four-choice cycle"
    },
    "0xb25e0": {
      "name": "select Ultra branch destination",
      "category": "presentations",
      "evidence": "index times list stride traverses node links; optional return/skip state"
    },
    "0xb26dc": {
      "name": "evaluate indexed numeric condition",
      "category": "presentations",
      "evidence": "parser numeric variable index, six comparison kinds"
    },
    "0xb29cc": {
      "name": "enter parser subflow",
      "category": "presentations",
      "evidence": "rejects nested subflow; saves outer graph state and calls 0xb35d0"
    },
    "0xb0eb0": {
      "name": "fatal formatted engine error",
      "category": "runtime",
      "evidence": "formats message and CRLF into temporary buffer, sets fatal state and calls runtime exit with -1"
    },
    "0xb3451": {
      "name": "load Ultra conditional-choice payload",
      "category": "presentations",
      "evidence": "top-level loading type 14: 42-byte payload with three conditions and up to three 17-byte choice-list records"
    },
    "0xb3efc": {
      "name": "read CD track start sectors",
      "category": "audio",
      "evidence": "Queries physical tracks 1 through 24 and stores their start sectors"
    },
    "0xa5d68": {
      "name": "select resident synthesised music",
      "category": "audio",
      "evidence": "Native OSL load/allocate calls; indices 10+ preselect the bank for the next request, checked in 16 native cases"
    },
    "0xa5b64": {
      "name": "start resident OSL song slot",
      "category": "audio",
      "evidence": "AH=4 playback request; starting order zero, volume argument 75"
    },
    "0x75690": {
      "name": "dispatch compiled actor records",
      "category": "mission logic",
      "evidence": "192 programs and 2716 native record dispatches verified; types 14 aircraft,16 surface,18 player waypoints"
    },
    "0x75228": {
      "name": "unpack player waypoint route",
      "category": "mission logic",
      "evidence": "Type18 count and low-byte X/high-byte Z packed cells; 690 native conversions checked"
    },
    "0x77d64": {
      "name": "execute aircraft waypoint commands",
      "category": "AI",
      "evidence": "Native command table, branches and 25-byte initial state; original operands preserved in compiled-route browser"
    },
    "0x772a0": {
      "name": "advance timed AI manoeuvre",
      "category": "AI",
      "evidence": "Six-byte CBN steps; signed pitch/heading, roll multiplied by4, speed change by256;259 native steps checked"
    },
    "0x75408": {
      "name": "load AI manoeuvre banks",
      "category": "AI",
      "evidence": "CBN category-specific pointer banks, up to40 sequences per category"
    },
    "0x747fc": {
      "name": "parse environment palette configuration",
      "category": "renderer",
      "evidence": "33 native environment captures recover flags, palette filenames, schematic bindings and numerical distance fields"
    },
    "0x803e8": {
      "name": "compose HUD instrument readouts",
      "category": "cockpits",
      "evidence": "Four synthetic-telemetry cases capture98 drawing calls; world-dependent MFD helpers omitted explicitly"
    },
    "0x87154": {
      "name": "draw embedded mini HUD text",
      "category": "cockpits",
      "evidence": "Character &63 lookup,51 bitmask glyphs, three-pixel space and per-glyph advances; all glyph masks natively checked"
    },
    "0xb19c8": {
      "name": "draw presentation text glyphs",
      "category": "presentations",
      "evidence": "Ten font styles;1104 successful glyph captures and26 explicitly unsupported/unresolved cases"
    },
    "0xb1b5c": {
      "name": "reveal presentation text",
      "category": "presentations",
      "evidence": "Fast elapsed counter clamped1..50; one character per two ticks with frame-dependent minimum"
    },
    "0xca2f4": {
      "name": "fade palette in over40 retraces",
      "category": "presentations",
      "evidence": "All64 DAC values match integer source*step/40"
    },
    "0xca35c": {
      "name": "fade palette in over80 retraces",
      "category": "presentations",
      "evidence": "Slow palette fade-in; exact64-value ramp validation"
    },
    "0xca3c0": {
      "name": "fade palette out over40 retraces",
      "category": "presentations",
      "evidence": "Descending native DAC steps followed by palette clear"
    },
    "0xca428": {
      "name": "fade palette out over80 retraces",
      "category": "presentations",
      "evidence": "Slow fade-out; total240 palette uploads184320 DAC values checked"
    },
    "0xd7954": {
      "name": "load sixteen colour-index remaps",
      "category": "renderer",
      "evidence": "Initialises identity tables then reads root coltab.dat;4096 bytes, distinct from dat/coltab.dat"
    },
    "0xa2ae8": {
      "name": "load fired and secondary weapon definitions",
      "category": "weapons",
      "evidence": "27 records,48-byte stride; x-prefixed primary and secondary names;54 native calls checked for model-use classification"
    },
    "0x8a6c0": {
      "name": "load weapon inventory models",
      "category": "weapons",
      "evidence": "Primary definition and matching .3 model from the weapon table, starting at entry1"
    },
    "0xb4b2c": {
      "name": "normalise scenery definition pathname",
      "category": "resources",
      "evidence": "Lowercase stem, stop at dot or eight characters, append .ssd;54 weapon-name cases checked"
    },
    "0x7d270": {
      "name": "handle player death and crash effects",
      "category": "game flow",
      "evidence": "Ordinary crash handle at data 0x12bfc is replaced by plop handle 0x12bfa at file 0x7d4dd for surface result 2 or flags bit 0x40, except death state 2. Sea scenery type 1 maps to surface result 2 at 0x7d490. Native branch captures verify six cases."
    },
    "0x88e38": {
      "name": "first outer MFD dispatcher",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x8905c": {
      "name": "third outer MFD dispatcher",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x88ecc": {
      "name": "central radar and map dispatcher",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x8723c": {
      "name": "MFD weapons page",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x87854": {
      "name": "MFD engine and fuel gauges",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x874dc": {
      "name": "MFD flight data",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x87b3c": {
      "name": "MFD fuel page",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x876e8": {
      "name": "MFD system warnings",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x87eac": {
      "name": "MFD aircraft systems schematic",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x88378": {
      "name": "MFD FLIR and DLIR camera",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x88530": {
      "name": "MFD ground target data bank",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x88778": {
      "name": "MFD flight controls",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x880e4": {
      "name": "embedded MFD world-camera view",
      "category": "HUD and MFD",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0xa2cf4": {
      "name": "select next timed weapon stage",
      "category": "weapons and raster",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0xa2d80": {
      "name": "construct fired projectile",
      "category": "weapons and raster",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0x95dc8": {
      "name": "accumulate carried-store mass drag and moments",
      "category": "weapons and raster",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0xe5d5c": {
      "name": "select special raster mode",
      "category": "weapons and raster",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0xbfd0e": {
      "name": "draw integer-span circle",
      "category": "weapons and raster",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0xbc498": {
      "name": "set triangle vertex shade indices",
      "category": "weapons and raster",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0xbc4b8": {
      "name": "set quad vertex shade indices",
      "category": "weapons and raster",
      "evidence": "Mapped from native call/dispatch paths; related controlled captures and tests are documented in the HUD, weapons and lighting reports."
    },
    "0xa422c": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa42bc": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa42c8": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa4380": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa4414": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa3b6c": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa3fd8": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa4080": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa3f14": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa3d70": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0xa41a0": {
      "name": "weapon stage callback",
      "category": "projectiles",
      "evidence": "Recovered timed weapon-stage table; see analysis/weapons/data.json"
    },
    "0x8b3d4": {
      "name": "assign loadout slot and carried model handle",
      "category": "projectiles",
      "evidence": "Thirty original setter cases verify ten weapon slots and the handle table used by shape opcode 81."
    },
    "0xdaf50": {
      "name": "generate rounded model corner arc",
      "category": "shape drawing",
      "evidence": "Called by opcode 62; 44 original native curve cases match the inspection recurrence."
    }
  }
}
