Function Registry - smeagol44/MKMSZ-Randomizer GitHub Wiki

Function registry

Inventory-HUD proof trace (2026-10-05): 0x8006643C is an unchecked arena bump allocator: it aligns size to 8, returns cursor+8, advances by size+8, then writes boundary metadata. Custom ensure 0x800742F0 in v14/v16/v18/v19 omitted size initialization on the null branch; v20 sets a0=0x1200 in delay slot 0x80074308. Runtime-confirmed bounded: that one-word correction removes the TEST LAB Inventory hang. Native Inventory 0x80073588 suspends/restores gameplay lists through 0x80028870/0x800288A8; 0x8002830C clones parent controller state without permanently replacing current-controller global 0x802ECE20. See TEST LAB Inventory diagnosis.

Scope: This page is the canonical owner for function semantics: what a routine does, its relevant calling/behavioral meaning, evidence level, and stage/overlay scope where applicable.

It does not own continuous allocation ranges or exact ROM patch guards/replacements. Those belong to Memory and allocation map and Address and patch-site registry. Address quick reference is derivative only.

Unless marked PS1, addresses are N64 USA Rev. 0. Overlay functions are stage-specific even when displayed as absolute VAs. A function that is patched may still appear here for semantics; the edit itself remains canonical in the patch-site registry.

Global N64 functions

Address Function Evidence Notes
0x8007D3FC Native audio-frame work wrapper Static-confirmed Calls frame builder for the current AudioInfo, publishes lastInfo, rotates three output buffers, and swaps command lists for a produced task. The lower AI-enqueue failure does not stop this producer advance. See bounded Inventory/audio investigation.

| 0x8008A500 | Native AI output-buffer enqueue | Static-confirmed | Checks full FIFO via 0x80092E90; returns -1 without AI address/length writes when full, zero when accepted. Existing diagnostic logs 135 additional actual failures between paired states; saved FIFO state alone still does not recover chronology. | | 0x80083D38 | Native WESS sequencer tick | Static-confirmed | Advances 16.16 millisecond accumulator by 0x85555 and tick counter, then services queue/sequence engine when enabled. Synthesis callback 0x8007DA34 requests another tick after 8,333 microseconds. | | 0x8000D0B8 | Debug stage-select menu | Runtime-confirmed | Production A-button title route | | 0x8000322C | Embedded image decompression dispatcher | Static-confirmed | Ordinary types come from header byte +3; exact header 0x05000000 is special-cased to fighter codec type 5. Type 4 dispatches to 0x80003428; type 5 dispatches through internal switch arm 0x80003314 (Ghidra switchD_80003278::caseD_5, not a distinct function entry), which calls 0x80065E00 | | 0x80003428 | Type-4 embedded image decoder | Static-confirmed | Separate control/token streams with a 1024-byte ring buffer; exact decode reproduced Water embedded Potion frames byte-for-byte against Fire external Potion payloads | | 0x80065E00 | Type-5 fighter-image decoder | Static-confirmed | Decodes native fighter data in 2-row x 4-pixel blocks from a per-image model/dictionary table; stock Sub-Zero frames use this path | | 0x80015088 | Shared Pause / stage-event dispatcher | Static-confirmed; Ghidra entry/decompilation maintainer-observed | Reads 0x800C255A gate; with process state 0x802ECE18=2 allocates native Pause menu callback 0x80016300 (class 0x400); with state 0x18 allocates stage reconstruction callback 0x80016080 (class 0x15). Stage transition path eventually stores native selected stage at 0x8009A910. Earlier label 'Stage transition handler' captured only one route. Exact full function bounds not independently exhaustively verified. | | 0x8001C528 | Presentation resource / palette-selector loader | Static/runtime-confirmed at known callers | Pickup manager calls it with record +0x28 presentation pointer + 4. Separately, animation token-0x0B switch arm 0x80030974 calls it with fixed record 0x800B1A24, a1=0x100, a2=0; on success the handler stores (return - 0x80) to the newly constructed actor +0x9E before insertion. This establishes the straight-Ice projectile's pre-insertion selector bind; broader internal resource semantics remain bounded to the traced callers. | | 0x80024650 | Active actor-list insertion helper | Static-confirmed | Links an already-constructed actor into list head 0x80111C98, sorting by signed actor +0x5C and then actor +0x30; writes only list-link field actor+0x00 / predecessor link. It performs no descriptor, palette, render-record, position, ownership, or allocation initialization. Used by Zap token-0x0B and helper actors. This makes list publication a distinct lifecycle seam from actor construction/frame binding. | | 0x800281A0 | Resource-entry resolver/actor setup wrapper | Static-confirmed | Receives pointer to one outer-selector entry, loads its file-relative descriptor offset, adds current stage resource base, then calls 0x80028128 | | 0x8002830C | Generic controller/process allocator/clone | Static-confirmed | Allocates a controller/process with supplied class/type and callback, links it into the controller list, and inherits current controller actor/animation/context fields; used by projectile bridge 0x8004CBC4 | | 0x80028128 | Resource-backed actor constructor helper | Static-confirmed | Consumes direct descriptor pointer produced by 0x800281A0 | | 0x8001BF70 | Synchronous fixed texture-slot initializer / uploader | Static-confirmed; Runtime-confirmed in v89 composition | Installs 16-byte slot metadata at 0x802E83F0 + id*0x10, updates backing pointer table 0x800ED940[id], queues pixels through 0x8001D6EC when source is nonzero, and immediately drains with 0x8001D7F0(1). Stock HUD uses it for slots 0x11..0x16; other traced loader code also uses it directly. Toasty v11 rejects one particular independent slot-0x17 recipe, not the helper's general synchronous semantics. v89 Runtime-confirms that using it as a disposable pre-publication projectile-slot preparation removes the stale one-frame texture while preserving the correct rocket. The exact proof allocation/storage recipe remains one-shot and is not yet a production lifetime contract. | | 0x8001C2B4 | Dynamic texture/screen-image allocator | Static-confirmed | Searches IDs 0x200..0x2FF. New allocations round width up to 32 for backing capacity, populate the 16-byte record at 0x802E83F0 + id*0x10, set +0x0E = 1, and publish 0x800ED940[id]. Reuse may return an inactive capacity-compatible record without refreshing +0x08; stock callers therefore rewrite record+0x08 with the current source-image width after allocation. | | 0x8001E578 | Context-specific render family | Static-confirmed | Not a universal gameplay-HUD API | | 0x8001F7A8 | Gameplay textured-node renderer | Static/runtime-confirmed | Used by the gameplay HUD queue. Node +0x4A is texture-slot ID; node +0x4C is palette selector. For the CI8 path the renderer reads slot-record +0x08 and emits it as the RDP SetTextureImage DRAM image width, then loads the node's +0x10/+0x12 .. +0x20/+0x22 source rectangle through load tile 7 and renders through tile 0. The stock Toasty-hook source node supplies S/T 0,0, step 1,1, and point-filter mode. Palette selector resolves through 0x80290A00 + id*8 and 0x802E73E0 + index*4 to a hardware-ready CI8 RGBA5551 TLUT. | | 0x8001EAE4 | Render-node submit | Runtime-confirmed | Gameplay HUD queue; v08 confirms additional textured-node submission, and v09 runtime-confirms texture slot binding through node halfword +0x4A | | 0x80017F80 | Actor motion/update integrator | Static-confirmed | Normal actor path (+0xDC==0) reads local velocity +0x14/+0x18, shifts >>8, rotates through actor orientation, and adds 3x transformed components to fixed8 world position +0x2C/+0x30/+0x34; called once per gameplay movement/render loop at 0x80014258 | | 0x8002018C | Render-node allocator | Runtime-confirmed | Allocates 0x58-byte node | | 0x80028F3C | Main player locomotion/state process | Static-confirmed | Normal horizontal state reads semantic input through controller +0x638, records active Left/Right at +0x68C, derives opposite-facing marker +0x704, and selects forward/backward locomotion | | 0x80028610 | Main process scheduler/dispatcher | Static-confirmed | Runs once per gameplay main-loop iteration on the normal route; decrements controller sleep +0x6DA by elapsed retrace count 0x802FCD44 + 1 on the ordinary path, context-switching runnable controllers through 0x8007CAF8. Main gameplay later waits for 0x802FCD44 >= 2, yielding the established ~30-Hz ordinary gameplay scheduler cadence. | | 0x80028794 | Process sleep/yield | Static-confirmed | Stores requested sleep at current controller +0x6DA and context-switches through 0x8007CAF8; ordinary Run calls it with 1 before each animation-rate advance. | | 0x8002FE54 | Fighter animation-table selector | Static-confirmed | Argument a0=0 indexes file-relative table 0 at +0x000; nonzero a0 adds 0x104 and indexes table 1. The loaded word is added to actor +0x98 and stored as the controller's current cursor +0x6E4. No bounds check is performed. Because MKMSZ table 0 has 65 entries, table-0 index 0x41+n aliases table-1 index n; stock code intentionally uses this aliasing. Computed reaction indices must be bounded before pruning roots. | | 0x8002EB38 | Ordinary Run setup | Static-confirmed | Selects primary animation slot 0x2B through 0x8002FE54, installs animation rate 2 through 0x80031724, then applies facing-aware horizontal velocity. Run loop caller at 0x800296B0 sleeps one process tick and invokes 0x8003174C once per active iteration. | | 0x80031724 | Animation-rate initializer | Static-confirmed | Stores period argument at controller +0x6A6; primes countdown +0x6A8 to 1 (or 0xFFF for never-advance). Ordinary Run passes 2; cadence audit identifies 3 as the donor-equivalent Sektor Run period on the ~30-Hz target scheduler. | | 0x8003174C | Rate-gated animation advance | Static-confirmed | Decrements controller +0x6A8; when zero, reloads period from +0x6A6 and advances the current script through 0x800304C0 or 0x800317C8 according to actor flags. Ordinary Run calls it once after each process_sleep(1). | | 0x80030178 | Forward locomotion setup | Static-confirmed | Loads fighter-specific forward movement parameters, sets movement state, and returns selector 1 for primary animation slot 0x01 | | 0x80030208 | Backward locomotion setup | Static-confirmed | Loads fighter-specific backward movement parameters, sets movement state, and returns selector 2 for primary animation slot 0x02 | | 0x8003188C | Actor facing flip | Static-confirmed | Toggles actor +0x8C bit 0x10 and runs native frame/setup helper 0x8001BDA0; preferred facing primitive over a raw bit write | | 0x8003D86C | Native turn-action routine | Static-confirmed | Selects secondary table-1 slot 0x03 (file 0x87 +0xE84) and runs the stock turn-action sequence through the current controller; the older primary-0x03 description was incorrect. Not intrinsically player-only. | | 0x8004A6E8 | Controller face-policy scanner | Static-confirmed | Scans controller classes 2..5 and returns 0x8000 if any located controller has +0x6BC & 0x0200, otherwise 0x4000; exact higher-level gameplay name/caller remains unresolved | | 0x80031D00 | Find nearest opponent controller | Static-confirmed | Scans the two opponent controller classes used by the player-facing helpers and returns the nearest X-distance candidate | | 0x80031EF0 | Face opponent | Static-confirmed | Resolves desired side through 0x80031DDC and calls 0x8003188C only when actor facing differs | | 0x8002B1EC | Player horizontal-velocity helper | Static-confirmed | Writes actor +0x14 and +0x58; corrected movement primitive | | 0x80016008 | Per-thousand random gate (randper) | Static-confirmed | Generates a native random value, reduces it modulo 1000, and returns 0x8000 when the result is below the unsigned argument, otherwise 0x4000; v43 Toasty uses argument 0x40 for the supplied-retail normal-background 6.4% gate. | | 0x8002DF28 | Successful/unblocked victim-reaction transfer seam | Static-confirmed | Reached only after the normal collision core has separated the blocked branch; immediately prior, stock reads strike-record +0x08 high byte, resolves 0x800A1190[reaction], and places the reaction callback in a0. Stock calls 0x8002E078 with victim controller in a1; v43 interposes here and preserves that transfer. | | 0x8002E078 | Victim reaction callback transfer | Static-confirmed | Installs the already-resolved reaction callback on the victim controller through 0x80032CD4 and marks the victim reacting; used by the narrow Toasty v43 seam. | | 0x8002E104 | Central XP award | Static-confirmed | Current XP at 0x8011200C | | 0x8002EC78, 0x8002ECF4 | Player construction path | Static-confirmed | Not enemy loader | | 0x8002FCDC | Lower-level fighter allocator | Static-confirmed | Stores fighter type at actor +0x78 | | 0x80031394 | Actor origin/facing/render-anchor aligner | Static-confirmed; unsafe v78 usage Runtime-confirmed | Copies owner +0x2C/+0x30 to child; branches on child +0x64 & 2, may call 0x8003188C, otherwise reads child render record +0x7C and adjusts X/Y by descriptor geometry. v78 direct use before the rocket descriptor hard-hung; prerequisite actor/descriptor state is unresolved. | | 0x80031208 | Facing-aware local-XY to world-position adjustment | Static-confirmed | On fresh projectile path +0xDC==0, consumes signed whole local X/Y, mirrors X for flip bit 0x10, rotates (x,y,0) by actor orientation with unity matrix scale, then adds integer world delta <<8 to actor +0x2C/+0x30/+0x34; stock straight-Ice call 0x8004AFF8 supplies +0x648, the same staged actor later transferred from +0x714 | | 0x80032CD4 | Special-action callback installer | Static-confirmed | Installed top-level callback must transfer/nonreturn | | 0x80034510 | Animation-stream resource actor creation helper | Static-confirmed | Consumes the resource entry following token 0x0B, reaches 0x800281A0 -> 0x80028128, and participates in staging a secondary actor while preserving the owner actor | | 0x80038770 | Generic stage key/crystal stock-award callback | Static-confirmed; Prison checkpoint behavior Runtime-confirmed | Stage-dispatches stock key/crystal award semantics. Prison parameters 0/1 award 0x1A/0x1B, write selector 7/8, and participate in the generic presentation path; Prison L1 v08 proves its acquired-bit credential must be preserved while pickup-created presentation/selector state can be suppressed. Fortress stage 9 awards IDs 0x20..0x22 and commits acquired bits while skipping the direct 0x80062D60 presentation request and pickup-created 0x802C18F8 selector writes. Wind records call their overlay wrapper instead; Earth/Water use their own overlay callbacks. | | 0x800393BC..0x800393D0 | Ordinary-pickup callback dispatch seam | Static-confirmed | Loads callback arguments from the destination record: a0 = +0x10 type, a1 = +0x14 parameter with native bit-15 masked, then jalrs the pointer at +0x18. The manager ordinal is live separately but is not passed to the native callback. This matters for a future location-aware award dispatcher: the current ABI identifies reward behavior, not destination ordinal. | | 0x80075448 | Ten-slot LIVE inventory insert primitive | Static-confirmed | Scans LIVE inventory at 0x800A600C for the first -1 slot, writes the supplied item ID, and returns success/failure. No Wind selector/checkpoint side effect was found in this primitive. It is therefore a candidate logical-award primitive, not by itself an accepted production dispatcher. | | 0x802F2CB4 | Wind mixed pickup callback | Static-confirmed; v01 suppression Rejected / failed | Parameter 0/1 request 0x80062D60 and advance 0x802C18F8; parameter 2 sets Wind-local byte 0x802F60A0. It separately maps parameters to Wind inventory IDs and inserts them through 0x80075448, then reaches generic pickup behavior. This callback mixes physical Wind stage/checkpoint state with logical reward award and must not be treated as a movable logical-item callback wholesale. | | 0x802EE9FC | Wind 60-byte spatial-trigger dispatcher | Static-confirmed | Iterates the stage trigger table published at 0x801114F4 with count 0x802F8228; tests player position against each record and dispatches by record event type/subtype. Physical Wind events reached from this family advance selector states 2/4/6/7/8/9 and set key-use gate bits independently of the pickup records. | | 0x80002588 | Common stage-data parser / scene-trigger publisher | Static-confirmed | Parses stage data and publishes the first 60-byte spatial trigger record at 0x801114F4 plus its record count at 0x802F8228. The exact Wind source-record catalog remains Pending, but the runtime table ownership and stride are statically established. | | 0x8003BF4C | Stage spawn-coordinate selector/initializer | Static-confirmed | Reads 0x802C18F8 at 0x8003BF54 / ROM 0x3CB54, selects a 20-byte stage spawn record through the stage table, and writes actor X/Y/Z plus initial coordinates. Player construction reaches it through 0x8002EC78 -> 0x8002ECF4 -> 0x8002EDFC; another actor-construction path calls it at 0x8002EF08, so any proof must guard player scope. | | 0x802EE320 | Prison scene-actor / credential-panel and door-movement process | Static-confirmed; maintainer Ghidra MIPS32 decompilation (2026-10-08); L1 first-group predicate Runtime-confirmed bounded | Loaded Prison overlay 0x9F at 0x802ECE30: current controller +0x6F4 supplies a scene configuration. The routine constructs up to three child/panel actors from stage assets and scene-record positions through *(0x80111FF8) (0x48-byte stride), stores active actor references, and after initial process_sleep(0x78) iterates the credential/presentation/movement process with process_sleep(2) polling. Each of three configured subentries has a +0x20 bit index into acquired credentials 0x802C0D54; its bit state updates the panel actor's +0x9E animation selector and dependent visuals. Player position, collision/input conditions, and panel state govern physical travel. Movement shifts both scene-record positions (+0x30), a 0xB8-stride collision/scene record in 0x800C2568, a 0x3C-stride stage record at 0x802E729C, associated visual actors, and camera-related state; invokes sound functions. First L1 group is already resolved in the Global Item owner to scene indices 0xFB/0xFC; acquired bit 0 is its panel enable credential (v08 bounded runtime-confirmed). Do not confuse enabling the panel with satisfying the additional physical/input movement predicates. The precise other-group route coverage remains bounded; no generalization to all Prison doors is claimed. | | 0x802F0754 | Prison captured staff-grunt scripted encounter/presentation process | Static-confirmed; maintainer Ghidra MIPS32 decompilation (2026-10-08); v01 resource-removal failure and corrected v02 Runtime-confirmed bounded | Prison overlay 0x9F / ROM 0xC8594. Reads file-0x8F resource slot 0x80112008, decodes presentation texture/asset data through 0x8001C528, and constructs two presentation actors through 0x800281A0 with differing +0x9C identifiers 0x21/0x22, animation/palette settings, opposite staged X positions, and scene insertion via 0x80024650. Repeatedly drives both actors using animation interpreter 0x800304C0 in a process_sleep(4) loop. Player-position and actor-script-state gates transition the encounter, schedule class-0x15 helper 0x8005ED88 via 0x8002830C, and invoke native audio routines. A later conditional route writes respawn/stage selector 0x802C18F8=5 and calls reconstruction owner 0x80035F38; precise stage-completion meaning of that route and decompiler's artificial giant stack arrays are not independently established. The 0x8F set-piece resource is mandatory even if ordinary 0x15 PRIS-GRUNT2 combat groups are replaced: proof v01 hung without it, and v02 retained 0x8F and completed the scripted capture. These capture actors are independent of ordinary enemy stream records. | | 0x802F1E44 | Prison stage-trigger process (initialization, spatial scan, callback dispatch) | Static-confirmed; Ghidra decompilation maintainer-observed (2026-10-08); first L1-door identity Pending | Independently imported Prison file 0x9F at VA 0x802ECE30 shows a valid MIPS32 function entry and coherent decompilation. This long-running stage process initializes several globals, loops over the 0x3C-byte spatial-trigger records at 0x801114F4 using count 0x802E8228, compares current player position against record bounds, selects a stage-local callback through table 0x802F26A8 using record flags, and calls the shared process sleep/yield 0x80028794(2) before scanning again. The historical prison_trigger_dispatch symbol remains a descriptive name for its main loop, not the entirety of its behavior. Candidate owner family for the first Prison L1 door remains Pending exact scene-record/index resolution through 0x80111FF8; do not equate one observed callback with the complete door gate. | | 0x8001D520 | Generic sprite-node builder | Static-confirmed | Consumes an ID-indexed sprite/resource entry, allocates a 0x58 render node through 0x8002018C, stores the sprite ID at node +0x4A, and submits through 0x8001EAE4. Shared rendering machinery; not a key-only patch seam. | | 0x800388FC | Potion pickup | Runtime-confirmed | Adds inventory ID 0x01 | | 0x8003892C | Shield pickup | Runtime-confirmed | Adds ID 0x06 | | 0x8003895C | Eye pickup | Static/runtime-confirmed | Adds ID 0x03 | | 0x8003898C | Formula pickup | Static/runtime-confirmed | Adds ID 0x02 | | 0x800389BC | Herbs pickup | Runtime-confirmed | Adds ID 0x04 | | 0x800389EC | Health urn pickup | Static/runtime-confirmed | Adds ID 0x05 | | 0x80038A1C | Extra-life urn pickup | Static-confirmed | Ordinary catalog callback | | 0x80038A58 | Mana pickup | Static-confirmed | Native mana, distinct from Herbs despite legacy Lua substitution | | 0x80038A90 | Strength urn pickup | Static-confirmed | Adds ID 0x0B | | 0x80038ACC | Pickup manager | Static/runtime-confirmed | Production restore hook | | 0x80038EF8 | Ordinary pickup action-eligibility seam | Static-confirmed; Ice Blast cancel v01 Runtime-confirmed bounded | Stock accepts the ordinary pickup action state 0x303. The post-1.0 proof additionally normalizes normal ground Ice Blast only into that accepted state when controller +0x6F0 == 0x8004AB84 and native Ice mode 0x80111F98 == 0, then leaves stock Pickup input/spatial gates authoritative. | | 0x80038FA4 | Ordinary pickup transition-commit seam | Static-confirmed; Ice Blast cancel v01 Runtime-confirmed bounded | Reached after stock pickup interaction/spatial gates. The proof replays the displaced player-controller load, rechecks normal Ice, clears special-action lock 0x800BF308, then returns to the stock pickup transition. Proof-only / Post-1.0. | | 0x800490CC | Shinnok Amulet pickup | Static-confirmed | Adds ID 0x23; outside ordinary tables | | 0x8004AA4C | Special-action scheduler context-transfer shim | Static-confirmed | Dispatch table at 0x800A1050; not a generic initializer | | 0x8004AB84 | Complete ice-projectile action root | Static-confirmed | Includes special lock behavior | | 0x8004AB0C | Ice blue screen-tint process callback | Static-confirmed | Calls 0x80044964(0x80,0x80,0xC0,0x80,6) then native process exit 0x80028564. Separate from companion actor and projectile child processes. | | 0x80062D60 | Timed sprite/effect presentation process | Static-confirmed; visible-banner identity unproven | Plays sound 0x3B, creates presentation state, submits sprite ID 0x398 via 0x8001D520 for ~60 iterations, then releases it. Generic key callback, Strength urn, stage scripts, and overlay code can spawn it. v01/v02 prove the three generic-key spawn sites are not a complete suppression seam. Do not globally patch it; sprite 0x398 has not been visually proven to be the surviving CHECK POINT banner. | | 0x80060A3C -> 0x80060D14 | Ice companion-actor constructor / per-process update | Static-confirmed | Class-0x100 helper allocates texture/palette, constructs and inserts two visible actors, advances and copies script frames; removes both and releases texture (no palette release in traced cleanup) at 0x80060E20..44 before process exit. Parent staging coordinates/script/secondary pointer are inputs, so its spawn is not a pure visual switch. | | 0x8004B82C | Ice-projectile flight callback | Static-confirmed | On straight mode zero loads file-0x87 +0xFD0 = +0xD90 rocket cursor, calls one-time 0x8004CC14, then v75 injects initial velocity and flight callback; the parent wrapper is bypassed | | 0x8004B584 | Parent preflight actor frame/strike check | Static-confirmed | Makes +0x714 current and calls stock 0x800304C0, consuming Ice entry +0xDC4 before child flight on normal mode zero; restores owner before strike/handoff | | 0x8001BDA0 | Actor descriptor/render-record binding | Static-confirmed | Writes +0x74/+0x7C descriptor geometry; initialized +0x8C bit 0x40 path marks +0xFA dirty and resolves +0x68/+0x80 from texture slot +0x9C and palette selector +0x9E; both relevant zero-preword entries mark dirty even on same-shape binds | | 0x800185B8, 0x8001D6EC, 0x8001D7F0 | Deferred image decode and texture upload | Static-confirmed | Active render/update pass consumes +0xFA, decodes +0x7C, queues slot upload, then frame dispatcher drains queue; 0x80024650 merely links into that active movement/render list | | 0x8001C528, 0x8001C64C | Palette source acquisition and owned handle release | Static-confirmed | Lookup/allocate returns handle; actor stores handle minus 0x80 at +0x9E; release takes original handle. Stock token acquires fixed Ice source, player type-4 acquires file-0x87 +0x4584C Sektor source through fighter table. Selector zero is handle 0x80, not the player palette | | 0x8004CBC4 | Projectile child-process bridge | Static-confirmed | Allocates a child through 0x8002830C with class/tag 0x700, copies parent/opponent context, binds parent +0x714 to child actor +0x6E0, tags that actor 0x700, and clears parent +0x648; parent +0x714 is not cleared here | | 0x8004CC14 | Projectile velocity/animation-rate setup helper | Static-confirmed | Writes facing-aware projectile actor +0x14, then calls 0x80031724 with the supplied rate; suitable as a setup primitive, not player propulsion and not yet established as the generic per-tick acceleration primitive | | 0x8004CC50 | Generic projectile flight/collision loop | Static-confirmed | Latches child callback +0x70C -> +0x680 once at entry; each iteration sleeps/updates animation, performs offscreen/lifetime checks, calls +0x680 when nonzero, then resolves strike semantics through 0x8004CE6C/0x8004CF3C; does not itself rewrite projectile actor +0x14 velocity between callbacks | | 0x8004CDF8 | Projectile actor/child process exit | Static-confirmed | Removes actor through 0x80028408/0x80024B00, then terminates the active projectile process through 0x80028564; reached on generic flight offscreen/lifetime paths. | | 0x8004B524 | Ice parent special-action exit | Static-confirmed | Clears special lock 0x800BF308 and invokes 0x800328FC on the current owner actor after parent recovery. | | 0x8004CE6C | Projectile strike-record resolver | Static-confirmed | Uses projectile fighter type plus supplied selector to resolve the target fighter strike table before dispatch | | 0x8000C6D8 | PRIS armed-grunt ranged aim selector | Static-confirmed | Shared permanent-code AI action for types 0x15/0x16/0x17; bounds horizontal separation to 450, derives target slope, and installs one of the common aim callbacks that enter 0x80043B18. Types 0x16/0x17 use this action exclusively across all four traced distance bands; 0x15 mixes it with two common-code alternatives in the two nearer bands. | | 0x80043B18 | Armed-grunt ranged action / projectile process setup | Static-confirmed | Indexes a 0x28-byte shot-parameter record by type-0x15, advances the parent attack animation, allocates class 0x806 with callback 0x80043EB0, copies shot fields, and continues parent recovery. | | 0x80043EB0 | Armed-grunt projectile flight/effect process | Static-confirmed | Owns type-specific SFX/offsets, starts common helpers 0x80060E68/0x80061220, constructs the visible shot through 0x80047160, applies velocity/aim fields, and loops through 0x8004CF3C collision until impact/range exit. | | 0x80046F74, 0x80047160 | Fighter-file projectile visual constructor | Static-confirmed for PRIS GRUNT2/3/4 | Resolves 0x800A0324[type] to the primary fighter-file base, acquires the palette at the type-specific 0x800A0FC0[type] relative offset, and constructs secondary animation slot 6. For 0x15/0x16/0x17 this binds files 0x8F/0x90/0x91; projectile art is not a Prison/Bridge stage-resource selector. | | 0x8004CF3C | Armed-grunt projectile strike dispatch | Static-confirmed | Uses projectile actor type to resolve 0x800AF340[type], indexes the supplied shot selector, and calls 0x8002BA04. PRIS projectile records select reactions 0x30/0x31/0x32 for types 0x15/0x16/0x17 respectively. | | 0x80057478 | Fighter-family morph/disarm helper | Static-confirmed for GRUNT2 and PRIS armed family | Existing 0x0F -> 0x0E morph remains valid. For 0x15/0x16/0x17, rebinds the fighter to base file 0x8E, changes type to 0x14, selects the base animation, and starts detached-weapon process 0x8005E1FC using the armed variant's original primary file. | | 0x8005E1FC | Detached fighter-weapon presenter | Static-confirmed for PRIS armed family | Acquires the palette from the supplied primary-file-relative record, constructs the primary file's secondary slot 0, positions it at the owner, runs the detached-object animation/physics, then removes/releases it. Decoded 0x8F slot-0 art is the long staff; 0x90 is the large cannon/launcher; 0x91 is a distinct Bridge weapon. | | 0x80060E68, 0x80061220 | Armed-projectile common effect helpers | Static-confirmed | Permanent-image effect processes used by 0x80043EB0; both acquire the shared source at 0x800B1808, build temporary effect actors, animate, and clean them up. No Prison/Bridge overlay resource is introduced in this traced helper pair. | | 0x80053DA8 | Ordinary fighter shared terminal presentation | Static-confirmed for Water stage ID 2 | Binds current stage resource base 0x802E82B8 to actor +0x98, resolves selector word +0x28 (selector 10) into the animation cursor, advances six frames, then decrements encounter count and releases/despawns. Dispatcher 0x80056F80..0x80057060 reaches this for Water MONK5/MONK6 and imported GRUNT2; Water cross-stage GRUNT2 runtime remains untested. | | 0x80053E8C | Fighter-file terminal presentation/cleanup | Static-confirmed for GRUNT1 and PRIS armed/base terminal routing | Type 0x0E reads file-0x22 +0x2555C and root 0x32 before cleanup. Types 0x15/0x16/0x17 reach this function but, while still armed, take its direct cleanup/despawn branch rather than a stage-selector presentation. If first disarmed by 0x80057478, they become type 0x14; the 0x14 path uses file-0x8E palette +0x1FB84 and root 0x32 at +0x134, a six-frame file-internal list, before encounter-count decrement/release. This closes selector-10 as unnecessary for the normal PRIS armed-family terminal route; it does not generalize every other type branch. | | 0x80057740..0x800577BC | GRUNT2-to-GRUNT1 type morph branch | Static-confirmed | For actor type 0x0F, loads file-0x22 base from slot 0x802E7DC4, writes it to actor +0x98, changes type to 0x0E, and selects animation root 0. Any Water GRUNT2 import requires file 0x22 to remain resident concurrently with file 0x23. | | 0x80071500 → 0x80071B20, 0x80070710 | Ordinary enemy process construction and state reset | Static-confirmed | The spawn interpreter schedules the 0x71 family through 0x8002830C; 0x80071B20 normalizes classes 0x71..0x74 to 2..5 through addiu -0x6F at 0x80071B64, zero-fills process+0x638 for 0xA0 bytes through 0x80070710, constructs actor +0x6E0, assigns target/player links and type dispatch, and installs ordinary callback 0x800039AC. This fill includes +0x6B2, even for a reused process; 0x8002830C alone does not clear it. | | 0x8002B690, 0x800328FC, 0x80053D28 | Shared action exit and conditional reaction animation | Static-confirmed mechanics; ordinary GRUNT edge Pending | 0x8002B690 returns 0x8000 exactly when current process signed halfword +0x6B2 is nonzero, otherwise 0x4000. 0x800328FC calls 0x80053D28 only on the former branch, before common cleanup. 0x80053D28 first calls 0x80057478 on its actor, then calls 0x800321D0 with fifth argument rate 5 and sixth argument root 0x1E. For type 0x0F, 0x80057478 performs the 0x0F → 0x0E file-0x22 morph before root selection. The separate direct 0x80059070 → 0x80053D28 call is after that callback clears its own +0x6B2; its reaction-table entries are 0x3A and 0x5A. | | 0x8002E078, 0x80032CD4 | Victim reaction callback replacement | Static-confirmed | Installs the collision-selected callback on the victim process and sets reacting bit +0x6BE:0x04; neither routine clears +0x6B2. The collision core selects 0x800A1190[high byte of strike+0x08] at 0x8002DF10..0x8002DF28 after its unblocked checks. Ordinary classes 2..4 are selectable victims; a Slide reaction 0x2D gives a hittable nonzero interval, but an overlapping reaction-0/0x19 strike schedule remains the 0x800328FC closure dependency. | | 0x800304C0, 0x8001BDA0 | Fighter script interpreter and frame descriptor reader | Static-confirmed | 0x800304C0 dispatches control words through 0x800AD450 and follows relative jumps (including type-conditional jumps); the ordinary frame path at 0x8001BDA0 reads a relative frame-record offset, then a relative image offset and frame metadata. This two-level traversal prevents a direct image-pointer scan alone from certifying dead bytes. | | 0x800321D0, 0x80032580 | Shared hit/reaction action with caller-selected fighter animation | Static-confirmed for selector mechanics and ordinary Water root 0x1E via Slide; other roots Pending | Both load the sixth caller stack argument into $s4 (new_sp+0x4C after -0x38, or +0x44 after -0x30) for the root selector; the low halfword of the fifth argument feeds the rate at 0x80031724. A negative sixth argument skips root selection. Otherwise its high halfword chooses the secondary bank, or its low 12 bits/signed halfword chooses the index. The earlier fifth-argument-as-root description was wrong. Type-4 Slide slot 0x10 selects reaction 0x2D → 0x8004E2D4, which morphs GRUNT2 and calls this function with root 0x1E for an ordinary unblocked victim. | | 0x8002E978 | Type-specific combat-record selector | Static-confirmed; complete GRUNT action closure Pending | Selects a type-specific pointer at 0x800AF340 + type*4 and indexes its four-byte records with the sixth caller stack argument loaded into $s5 (new_sp+0x46 low halfword after -0x30) before 0x8002BA04. $a3 is separately saved in $s0 for animation selection. GRUNT1's table pointer is 0x800B0430, GRUNT2's 0x800B0508. The controller-only 0xE/0xF sites at 0x8004D2C4/0x8004D420 do not establish ordinary-grunt reachability. | | 0x80016D1C, 0x80017024 | Ordinary-stage reset and delayed gameplay-enable process | Static-confirmed for normal Fire | Reset installs type 4, shared light/input defaults, 0x800EEC1C=1, 0x802C1A04=0; class 0x75 delayed callback waits eight ticks, class 0x101 completion and stage count before setting gameplay enable (0x802C1A04=1) and clearing suppression (0x800EEC1C=0) for normal Fire. Stage 7 omits this entry-order sequence; late addition in Stage-7 diagnostic v04 produced no observable change. See Stage flow and selector. | | 0x80015088, 0x80016300 | Pause entry gate and native Pause menu | Static-confirmed | Entry exits when 0x800C255A is nonzero; with process state 0x802ECE18=2 it allocates class 0x400 menu callback 0x80016300, which reads 0x800BF2EE and renders PAUSED. Normal Fire clears 0x800C255A in its finishing sequence; native Stage 7 has no matching entry-routine clear. The tested Stage-7 value and Start-event caller remain unresolved; do not infer this alone caused its inert Pause. | | 0x80014FC0, 0x80073588 | Inventory entry gate and native inventory process | Static-confirmed | Entry requires process state 0x802ECE18=2, semantic input bit 0x0800 clear at 0x800BF2EE, nonnegative stage, selector 0x802C18F8>0, live player and HP, and action +0x6AA in 0x302/0x303/0x30F or nonzero +0x6B0; then allocates class 0x100 inventory callback 0x80073588. Stage-7 actor/action and input-event state on the tested route remain unmeasured. | | 0x80028EAC → 0x80028F3C | Class-1 player-controller startup and live dispatch | Static-confirmed | Constructor 0x8002ECF4 installs 0x80028EAC using signed addiu -0x7154 (not 0x80038EAC). Startup replaces controller +0x6F0/+0x08 with 0x80028F3C, which reads suppression word 0x800EEC1C; its ordinary action path also polls 0x802C1A04 at 0x80029190. Stage-7 debug negative branch clears the latter after construction. | | 0x80065428, 0x80065668 | Normal Fire boss helper and Stage-7 debug helper | Static-confirmed | Normal helper loads file 0x21 and schedules boss-specific processes (including x-position clamp 0x800653B0 and delayed opponent monitor 0x8003BE94) plus delayed audio 0x800655EC. Stage-7 helper branches on test-character index 0x800C1F64; negative branch clears 0x802C1A04, loads file 0x3C and invokes immediate sound 0x22E; nonnegative branch instead assembles a test fighter and clears 0x800EEC1C. Stage-7 v03 added the normal delayed audio and duplicated presentation without restoring controls. | | 0x8005BFB0 | Gameplay HUD function | Static/runtime-confirmed for normal production; Stage-7 scheduling Static-confirmed | Contains 13 submit calls. Both normal Fire and Stage 7 schedule it as class 0x15; its frame loop reads player controller/health and checks a vertical position before render-node submissions. Stage-7 render visibility is not Runtime-confirmed. | | 0x800615D8 | Frontend fade/normalization | Static/runtime-confirmed | Preserved after logo bypass with argument 0x80 | | 0x8006352C | Auxiliary trigger-record spawner | Static-confirmed | Hardcodes fighter type 7 | | 0x80064C18 | Native gameplay SFX wrapper | Static-confirmed | Indexes 10-byte descriptor table at 0x800A1730; resolves raw sound ID and variation parameters, then calls 0x80080A88 | | 0x80080A88 | Raw sound-ID playback entry | Static-confirmed | Selects a 16-byte runtime sound definition by raw ID and dispatches through 0x8007EC4C | | 0x8007EC4C | Low-level sound-definition/voice allocator | Static-confirmed | Consumes resolved runtime sound definition and allocates/starts native audio voices | | 0x80065D64 | Raw global-file loader | Runtime-confirmed | Used by native bootstrap | | 0x80066360 | Cold arena initializer | Static-confirmed | Initializes both arena base/floor 0x800EECD0 and live bump cursor 0x80111ECC to the stock hardcoded arena start, with initial boundary bookkeeping | | 0x80066390 | Arena cursor reset | Static-confirmed | Copies persistent/reset arena base 0x800EECD0 into live bump cursor 0x80111ECC; production bootstrap uses this after relocating the arena floor | | 0x800663A8 | Arena base advance/set helper | Static-confirmed | Advances/sets the persistent arena base and then resets the live cursor to it; lifecycle/base management rather than a general allocator | | 0x800663E0 | Arena hard-reset helper | Static-confirmed | Restores the arena base to the hardcoded initial floor, then resets the live cursor; fresh stage setup reaches this family | | 0x80066410 | Arena next-payload peek | Static-confirmed | Returns cursor + 8 without allocating; usable as a checkpoint compatible with 0x80066478 rewind semantics | | 0x80066420 | Arena remaining-capacity query | Static-confirmed | Computes (0x80290990 - cursor) >> 3, i.e. remaining 8-byte units below the bump boundary | | 0x8006643C | Main arena bump allocator | Static-confirmed | Aligns request to 8 bytes, returns old_cursor + 8, advances the live cursor, and writes 8-byte allocation bookkeeping at the new cursor. No bounds check is performed internally. | | 0x80066478 | Arena rewind helper | Static-confirmed | Sets live cursor to pointer - 8; rewinds the arena to the state before the referenced allocation/checkpoint | | 0x8006648C | Top-allocation rewind/reallocate helper | Static-confirmed | Rewinds with 0x80066478 and immediately allocates again through 0x8006643C; no copy is performed | | 0x80073588 | Native Inventory process / input loop | Static-confirmed; in-Inventory box-switch composition Runtime-confirmed bounded | Owns Inventory lifetime, Items/Power-Ups mode, Use/Combine/R/close dispatch, native frame selection locals, and the loop seam at 0x80073724. Production box switching stays inside this process and must not rerun suspend/restore/termination. | | 0x800741B4 | Native ten-slot LIVE Inventory count | Static-confirmed; exercised by Runtime-confirmed switch path | Counts non-0xFFFFFFFF words in the active LIVE window; production menu switching reuses it after masked reconstruction. | | 0x80075320 | Native first-occupied Inventory-slot finder | Static-confirmed; exercised by Runtime-confirmed switch path | Given a physical-slot pointer, selects the first occupied LIVE slot. Production menu switching calls it only when count is positive and resets visible row to zero. | | 0x80071500 | Ordinary-enemy command interpreter | Static-confirmed | Stream pointer from 0x800C11E4 | | 0x800719F0 | Enemy spawn-parameter helper | Static-confirmed | Receives spawn index and type | | 0x80071B20 | Shared enemy/fighter constructor | Static/runtime-confirmed | Uses resource slot table 0x800B14C0 | | 0x80071FE8 | Bridge three-icon native use/completion check | Static-confirmed; four-box ownership correction Runtime-confirmed bounded | Item-use table ROM 0xA6E68 maps IDs 0x1D..0x1F here. Stock first requires (0x800C2406 & 7) == 7, then scans the ten-slot LIVE inventory for all three Bridge IDs; if all three are present, sets 0x802C0D54 = 7 and calls 0x8007EF30(0x801AF414). The four-box correction preserves the native gate/completion path and changes only the ownership scan base/count to the contiguous 40-word authoritative backing region 0x800A6048..0x800A60E7. v03 Runtime-confirms positive and negative cross-box ownership behavior with manual box switching; its proof-only physical-gate bypass does not reclassify the unchanged native use-site gate. Independent of Bridge pickup callback 0x802EF178, which is award-only. | | 0x8007206C | Fire three-icon native use/completion check | Static-confirmed; four-box ownership correction Runtime-confirmed bounded | Item-use table ROM 0xA6E68 maps IDs 0x17..0x19 here. Stock first requires the same low-three-bit use-site gate as Bridge, then scans the ten-slot LIVE inventory for all three Fire IDs; when all three are present it calls 0x8007EF30(0x801AF414) and sets 0x802C0D54 = 7. The four-box correction preserves the native gate/completion path and changes only the ownership scan base/count to the contiguous 40-word authoritative backing region 0x800A6048..0x800A60E7. v03 Runtime-confirms positive and negative cross-box ownership behavior with manual box switching; its proof-only physical-gate bypass does not reclassify the unchanged native use-site gate. This remains separate from pickup callback 0x802F0EBC. | | 0x800720F0, 0x8007213C, 0x80072188 | Earth per-icon native use handlers | Static-confirmed | Item-use table IDs 0x11/0x12/0x13 dispatch here. The handlers test gate bits 1/2/4 respectively in 0x800C2406; when allowed, OR the same bit into 0x802C0D54 and call 0x8007EF30(0x801AF414). This progression commit is independent of Earth pickup callback 0x802F52B0 and its parameter-0 checkpoint selector write. | | 0x800721D4, 0x8007226C, 0x80072220 | Wind per-icon native use handlers | Static-confirmed | Item-use table IDs 0x0E/0x0F/0x10 dispatch to the Circle / Three-Bars / Triangle handlers. They test gate bits 1/4/2 in 0x800C2406, OR the corresponding bit into 0x802C0D54, and call 0x8007EF30(0x801AF414). Native progression therefore has a use-time owner distinct from Wind pickup callback 0x802F2CB4. | | 0x800722B8, 0x80072304, 0x80072350 | Water per-icon native use handlers | Static-confirmed | Item-use table IDs 0x14/0x15/0x16 dispatch here and test gate bits 1/2/4; on success they OR the matching bit into 0x802C0D54 and call 0x8007EF30(0x801AF414). Native Water pickup callback parameter 0/1/2 awards IDs 0x14/0x15/0x16; against the cataloged visuals this resolves Triangle=0x14, Three Bars=0x15, Moon=0x16. | | 0x8007239C, 0x80072400, 0x80072464 | Fortress crystal native use handlers | Static-confirmed | Item-use table IDs 0x20/0x21/0x22 dispatch to three player-position-gated handlers which commit crystal progression bits 0x08/0x10/0x20 into 0x802C0D54; the third additionally requires the preceding crystal-bit state. These are separate from the boss-defeat reward-location activation path. | | 0x80073CEC | Native glyph draw | Static-confirmed | Per non-space glyph acquires 0x8001C528(font+4,0x100,0) and builds nodes through 0x8001E578; cached acquire does not upload. | | 0x80073E74 | Native text draw | Runtime-confirmed | Arbitrary custom RDRAM strings work | | 0x80074084 | Text-width helper | Static/runtime-confirmed | Native font at 0x800B1E20 | | 0x800741B4 | Inventory item count | Static-confirmed | Native ten-slot inventory | | 0x800750F0 | Native Power Ups strip builder | Static-confirmed; first-two order Runtime-confirmed in power-order v02 | Evaluates current power tier, stores the tier state used by the inventory UI, and renders the first N entries from the fixed power-icon table at 0x800A5FB0. v02 confirms presentation order is independent from gameplay eligibility unless the table is reordered with the gates. | | 0x80074FBC | XP tier evaluator/clamp | Static-confirmed | Uses cap table 0x800A63FC | | 0x80075320 | Find first inventory item | Static-confirmed | Inventory helper | | 0x80075448 | Insert inventory item | Runtime-confirmed | Called by fixed pickup callbacks | | 0x80078A18 | Save loader XP restore | Static-confirmed | XP in save record +0x7C | | 0x80078C40 | Title handoff after frontend flow | Static-confirmed | Called after fade normalization | | 0x80079510 | Owning legal/logo/title routine | Static-confirmed | Contains two logo presentations | | 0x800798A8 | Automatic stage-save flow | Static/runtime-confirmed | Generic routine remains intact | | 0x8007AD00 | Stock inventory sanitizer | Runtime-confirmed/replaced | Production replaces with stage-key mask copy | | 0x8007AD4C | Stock default-inventory loader; production filtered SAVE wrapper | Runtime-confirmed/replaced; ownership corrected statically | Current production computes active backing pointer and tail-calls 0xA01AF5F4: LIVE -> backing, skipping Glass. It does not reconstruct LIVE. Reconstruction is 0x80099B14 -> 0x8007AD00. |

Static lifecycle owners (2026-10-01)

These entries identify stock behavior and proposed seams, not an implemented v05. Detailed call ordering, guards, evidence and remaining limits: Lifecycle static closure.

Address Meaning Evidence / limit
0x80028F3C Player process including zero-HP death dispatch Static-confirmed: matching live-player process calls 0x80035578 at 0x80029124
0x80035578 Life/Continue/terminal presentation owner Static-confirmed: remaining-life branch bypasses configured reload; stock decrement store 0x80035CA0; accepted Continue reload 0x80035C8C
0x80016080 Stage callback reconstruction dispatcher Static-confirmed: class teardown, stage dispatch, stage-specific resource/player reconstruction; not a life reload owner
0x80016B10 Frontend/fresh-flow current-resource initialization Static-confirmed: configured continues/lives -> current at 0x80016BC0/8, lives minus one; called from 0x8000D260
0x80035D34 Alternate failure or valid-preserving reconstruction Static-confirmed: states 0x16/0x1B preserve carrier-valid; other paths decrement at 0x80035F04 or enter life/Continue owner
0x80035F38 Valid-preserving reconstruction owner Static-confirmed consumer flow; callback references indirect; stock HP-carrier producer not closed
0x80035FC0 Stage completion teardown/next-stage owner Static-confirmed: capture candidate before teardown and live-pointer clear, not after
0x8002EC78, 0x8002ECF4 Player wrapper and constructor Static-confirmed: zero-fill -> one-shot carrier/valid consume -> HP +0x654 (default 166); constructor-local candidate 0x8002ED84
0x80035BB4 Resolved terminal-choice yield before title dispatch Static-confirmed common terminal label; final reset additionally requires zero current lives, signed continues <= 0 and a latched real-run failure context

Global internal switch cases (not separate functions)

Address Owner Evidence Semantics
0x80030974 Animation interpreter 0x800304C0, token-0x0B case Static-confirmed clean-ROM jump table; maintainer Ghidra listing The jr v0 dispatcher at 0x80030584 indexes a table with entry 0x800AD478 = 0x80030974. This switch arm handles resource secondary-actor construction through 0x80034510, palette/resource selector via 0x8001C528, and actor insertion through 0x80024650. It relies on the parent's dispatch/register context. Label as an internal code block, not a distinct function.

Stage-overlay callbacks

Address Scope Meaning
0x802F0EBC Fire Three stage-icon awards, parameter 0..2; v01 Runtime-confirms bounded checkpoint-free composition when only its direct 0x80062D60 presentation request and 0x802C18F8=s0+2 respawn-selector store are suppressed
0x802F2CB4 Wind Circle/Triangle/Three Bars award callback
0x802F2448 Water Triangle/Three Bars/Moon award callback
0x802F52B0 Earth Square/Four Squares/Triangle award callback
0x802EF178 Bridge Omega/Rings/Arrow award callback
0x802EEC54 Temple Scripted Map/special-check actor callback. v01 Runtime-confirmed that its inventory award at 0x802EEE5C/60 is separable from the later elevator/progression path. v02 Runtime-confirms native Herbs visual materialization, dedicated MKSV special-check persistence, re-entry reconstruction, rope/elevator behavior, and Temple -> Wind while keeping the post-award loop location-owned.

PS1 counterparts

Address Meaning
0x8002A688 Level selector
0x80031E98 Selector confirm path
0x8003955C -> 0x80039A3C -> 0x80039B50 -> 0x80041BF0 Enemy interpreter/spawn/constructor/allocation chain
0x8004A920 Glyph renderer
0x8004ACD4 Text renderer
0x8004AEEC Text width
0x8004C0B0 Inventory insertion
0x8005499C Pickup manager
0x80090B94 Save checksum
0x80090BCC Save initialization

See N64–PS1 comparison before transferring any concept between ports.

Related canonical references

PR #129 materializer runtime helpers (2026-10-02)

Function / range Role Evidence Notes
0xA01B2310 (KSEG1 entry; cached 0x801B2310) PR #129 shared destination-aware award dispatcher Implementation/CI-confirmed; Runtime Pending Decodes logical award + destination-action fields from the masked callback parameter; awards inventory / Extra Life / Mana, immediately commits Prison key credential bits when stage 4 is live, and applies only the researched Wind/Water/Earth/Fire/Prison destination action.
reconstruction entry inside 0x801B2310..0x801B28EF Prison post-reset credential reconstruction wrapper Implementation/CI-confirmed; Runtime Pending Calls stock 0x802ED538, scans all four authoritative inventory boxes for IDs 0x1A..0x1C, and writes acquired bits 0..2 to 0x802C0D54. Permanent call site is ROM 0x00010E64.

Native audio release and RSP ownership (2026-10-08)

Address Meaning Evidence Contract
0x80000A70 OS scheduler message loop Static-confirmed Queue 0x802C1970, capacity 32; SP/DP/VI/software-dispatch/pre-NMI messages 1..5, priority 90.
0x80000E24 Native VI service Static-confirmed Promotes fresh audio before producing next; 0x80000EF4 invokes 0x8007D3FC, then input callback. One VI registration, no per-glyph audio callback.
0x80000F4C Audio-first RSP dispatcher Static-confirmed Queued→active audio, defers while active; requests graphics yield when needed. Single pointer slots, not unbounded queue.
0x80000B6C, 0x80000C5C SP/yield and DP completion handlers Static-confirmed Completion/resume bookkeeping; earlier generation replacement remains unobserved.
0x800011F0 Task writeback/load/start Static-confirmed Native RSP task submission.
0x8008910C Audio synthesis command builder Static-confirmed Advances ALSynth sample clock during command construction, before RSP completion/AI acceptance.
0x80015950 Native VI/input callback Static-confirmed Increments 0x802E7DC0; scheduler invokes after audio in captured configuration.

Full ownership/timeline evidence and limitations: upstream report.