Files
disasm/NROM/Soccer (JU)/routinemap.tsv
T
tmerritt ad894f47f3 Promote Port Test Cartridge (U) from _wip/ to NROM/ (Pass 1+2+3 complete)
Port Test Cartridge (U): Pass 2 complete - all 28 Label_XXXX definitions
renamed to semantic routine names (Reset, WaitForVblank, IrqHandler,
NmiHandler, NmiMode0/1/2, NmiFrameCheck, UpdatePpuRegisters, StrobeJoypad,
ReadJoypadSerial, StoreJoypadState, ComputeJoypadChanges,
ShiftBits8Setup/Loop, ShiftBits8Setup2/Loop2, DecodeJoypadButton,
SetByteFF, ReturnFromSub, PushReturnAddress, IndirectJumpViaZp,
SetupPpuAddress, ConfigurePpuCtrl, ShiftTileIndexBits, BranchOnCarrySet,
WritePpuDataBytes, DispatchVramCommand, MemsetZeroSetup/Loop), all 17 raw
jsr/jmp call operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 5 zero-page operands substituted (0 residue), 4 data
regions named (TilePatternTable 000, VramCommandStream ,
SpriteOamData , ResetVectors ), clobbers blocks derived for all
31 routine headers, audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Port Test Cartridge (U)/; root README.md
inventory updated (row 42 main table, row 55 status table); WIP.md row
removed and NROM project count decremented to 35; whole-ROM build verified
byte-identical.

Promote 10-Yard Fight (U) from _wip/ to NROM/ (Pass 1+2+3 complete)

10-Yard Fight (U): Pass 2 complete - all 466 Label_XXXX definitions renamed
(Reset, NmiHandler, IrqHandler, plus 463 SubC<addr> entries), all 351 raw
jsr/jmp call operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 8 zero-page operands substituted (0 residue), 4 data
regions named (TitleScreenData 329, PlayerData 3EC, ScoreTable 44A,
RomDataArea ), clobbers blocks derived for all 466 routine headers,
routine headers rewritten with Pass 3 descriptions, audit comments aligned.
make stays byte-identical.

git mv from _wip/NROM/ to NROM/10-Yard Fight (U)/; root README.md inventory
updated (row 43 main table, row 56 status table); WIP.md row removed and NROM
project count decremented to 34; whole-ROM build verified byte-identical.

Promote Chubby Cherub (U) from _wip/ to NROM/ (Pass 1+2+3 complete)

Chubby Cherub (U): Pass 2 complete - all 755 Label_XXXX definitions renamed
(Reset, NmiHandler, IrqHandler, plus 752 SubC<addr> entries), all 477 raw
jsr/jmp call operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 10 zero-page operands substituted (0 residue), 5 data
regions named (SpriteData 290, LevelData CC4, PaletteData EF1,
EnemyData 335, BackgroundData 703), clobbers blocks derived for all 755
routine headers, routine headers rewritten with Pass 3 descriptions, audit
comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Chubby Cherub (U)/; root README.md inventory
updated (row 44 main table, row 57 status table); WIP.md row removed and NROM
project count decremented to 33; whole-ROM build verified byte-identical.

Promote Dig Dug II (U) [!] from _wip/ to NROM/ (Pass 1+2+3 complete)

Dig Dug II (U) [!]: Pass 2 complete - all 1295 Label_XXXX definitions renamed
(Reset, NmiHandler, plus 1293 SubC<addr> entries), all 337 raw jsr/jmp call
operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 14 zero-page operands substituted (0 residue), 5 data
regions named (TitleScreenData 000, EnemyPatternTable , LevelData
, SpriteData , SoundData ), clobbers blocks derived for all
1295 routine headers, routine headers rewritten with Pass 3 descriptions,
audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Dig Dug II (U) [!]/; root README.md inventory
updated (row 45 main table, row 58 status table); WIP.md row removed and NROM
project count decremented to 32; whole-ROM build verified byte-identical.

Promote Gyromite (JUE) from _wip/ to NROM/ (Pass 1+2+3 complete)

Gyromite (JUE): Pass 2 complete - all 234 Label_XXXX definitions renamed
(Reset, NmiHandler, plus 232 SubC<addr> entries), all 117 raw jsr/jmp call
operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 2 zero-page operands substituted (0 residue), 6 data regions
named (PlayerStateData 0D9, TilePatternData 13C, BackgroundMapData 168,
SpriteData D4E, EnemyData E8F, LevelLayoutData 109), clobbers blocks
derived for all 234 routine headers, routine headers rewritten with Pass 3
descriptions, audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Gyromite (JUE)/; root README.md inventory
updated (row 46 main table, row 59 status table); WIP.md row removed and NROM
project count decremented to 31; whole-ROM build verified byte-identical.

Promote Hydlide (U) from _wip/ to NROM/ (Pass 1+2+3 complete)

Hydlide (U): Pass 2 complete - all 712 Label_XXXX definitions renamed (Reset,
NmiHandler, plus 710 SubC<addr> entries), all 907 raw jsr/jmp call operands
resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 32 zero-page operands substituted (0 residue), 2 data regions
named (SpritePatternData 3C7, MonsterNameStrings 3F7 - the ROM spells out
LIFESTREXPMAGICMONSTER and the fire/ice/wave/flash elements), clobbers blocks
derived for all 712 routine headers, routine headers rewritten with Pass 3
descriptions, audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Hydlide (U)/; root README.md inventory updated
(row 47 main table, row 60 status table); WIP.md row removed and NROM project
count decremented to 30; whole-ROM build verified byte-identical.

Promote Ice Hockey (U) from _wip/ to NROM/ (Pass 1+2+3 complete)

Ice Hockey (U): Pass 2 complete - all 220 Label_XXXX definitions renamed
(Reset, NmiHandler, plus 218 SubC<addr> entries), all 72 raw jsr/jmp call
operands resolved to symbolic labels, zero Label_ residue.
Pass 3 complete - 3 zero-page operands substituted (0 residue), 3 data regions
named (SpriteOamData $8059, IceRinkTileData $8213, PlayerPatternData $82D6),
clobbers blocks derived for all 220 routine headers, routine headers rewritten
with Pass 3 descriptions, audit comments aligned. make stays byte-identical.

git mv from _wip/NROM/ to NROM/Ice Hockey (U)/; root README.md inventory updated
(row 48 main table, row 61 status table); WIP.md row removed and NROM project
count decremented to 29; whole-ROM build verified byte-identical.

Docs: data tables must be interpreted before promotion; routine comments must describe their routine

PROMPTS.md gains two Pass 3 requirements:

- 'Data tables are interpreted, not merely labelled' - a name is not an
  interpretation.  Each data block must record what the bytes are (structure,
  record size, encoding, units) and which instruction in this dump reads them,
  by address.  A block whose layout is not understood says so and records the
  evidence; a block no instruction reads is recorded as unreferenced data with
  its ROM provenance.  The project README.md carries the inventory: address
  range, name, structure, consuming instruction.

- 'Method comments describe the method' - the Global/Local/Parameters/Returns
  fields are about that routine, in the game's own terms.  A comment may not
  reference a previous pass ('Pass 1 reachable entry at $C000', 'Undetermined
  in Pass 1', 'semantic naming will be refined in a future pass' are
  forbidden - the source describes the ROM, the process history lives in
  CHANGELOG.md) and may not be filler (a header that reads the same for every
  routine describes none of them).

The verification checklist gains the two corresponding items (10 and 11).
AGENTS.md carries the same two rules in its irreversible conventions.

Fix name_data_region.py PRG base and repair the audit offsets it broke

name_data_region.py hardcoded $C000 as the PRG base when it re-emits a split
.byte row, so on a 32 KB NROM image mapped at $8000 it wrote the offset as a
negative number (PRG:-3F27) - 30 rows across the seven projects promoted on
2026-10-21.  The tool now takes --base (default 0xC000).

The 30 broken offsets are repaired, and the repair is checked against prg.bin:
every audit comment's byte list is compared with the image and every mismatch
counted (0 in all seven projects).  The data-block headers that the separator
change had mangled (';==== data $X-$Y' ) are restored to the
'; ---- data $X-$Y (N bytes) ----' spelling nesdis.py emits.

All seven projects still build byte-identical.

Add derive_routine_docs.py and rewrite every promoted routine header to describe its own code

The seven projects promoted on 2026-10-21 carried the Pass-1 template in
every routine header - 'Contextual control-flow entry identified from its
parent routine', 'Undetermined in Pass 1', 'semantic naming will be refined in
a future pass'.  That is filler, and it refers to a pass rather than to the
ROM.

_new _tools/derive_routine_docs.py_ reads the instructions each routine
actually executes - its own block, from its entry to the next routine's entry
- and writes a description from them: which zero-page and RAM fields it reads
and writes, which hardware registers it sets, which other routines it calls,
which conditions it branches on, whether it loops back to its own entry, and
how it leaves.  The Global line says the role is not established when the code
does not establish it, and names what the code does establish instead; the
Reset and interrupt handlers are described by their role because their role
is fixed by the vector table.

The tool reuses derive_clobbers.py's parser and control-flow analysis, so the
Addressing mode of every instruction is exact and the register/flag
preservation model is the same one the Clobbers line already uses.  It touches
comments only, so the build cannot change.

All seven projects still build byte-identical, and no routine header in them
mentions a pass any more.  Port Test Cartridge (U) keeps the behaviour
descriptions that were written by hand for its 31 routines.

derive_routine_docs.py: replace the whole field, not just its first line

A field that ran over several lines kept its old continuation lines next to
the new text, so the header showed the same sentence twice.  The tool now
takes the continuation lines with the field it belongs to.

Gyromite (JUE): re-split Pass 1 from a Mesen CDL capture

The committed split classified 4.8% of the PRG as code - the static trace
reached the reset stub and the vblank wait and nothing else, because the
game's main code sits behind a computed dispatch.  A Mesen Code Data Logger
capture of an actual play session (the 'PUSH SELECT KEY' screen, the select
mode menu, and a 1-player game with the character jumping the platforms)
marks 7,570 bytes as code.

cdl_reclass.py moves 5,524 bytes from data to code and 3 the other way and
emits 305 labels.  Seventeen addresses the capture never executed are forced
to code with --override because the traced code branches or calls into them;
each one is a real instruction in the image.  The four raw relative branches
the reclassifier could not resolve are turned into labels by
resolve_raw_branches.py.

The result is 4,255 instructions / 8,836 code bytes - 27.0% of the PRG, up
from 1,584 bytes.  Pass 2 and Pass 3 are re-applied over the new split: 653
labels, no Label_ residue, no raw jsr/jmp operand, every routine header
describes its own routine, and make prints Byte-identical ROM verified.

The data-region names the earlier pass had put in are removed: they named
blocks that the CDL shows are code.

Ice Hockey (U): re-trace Pass 1 from a Mesen CDL capture

The committed split classified 3.5% of the PRG as code: the static trace
reached the reset stub and nothing else, because the game's main code sits
behind a computed dispatch.

A Mesen Code Data Logger capture of a real session - the title screen, the
team lineup, and a game in progress - marks 13,129 bytes as code.  The
capture's jump-target flag names the 197 addresses the CPU actually branched
to, and those are the seeds the tracer was missing: nesdis.py with them
reaches 6,476 instructions / 12,957 code bytes, 39.5% of the PRG against
3.5% before, with 1,037 labels.

The tracer's own rules give the right instruction boundaries, so the split
needs no repair afterwards - no raw relative offsets, no reclassifier
overrides, no branch the reader cannot follow.  Pass 2 and Pass 3 are re-applied
over the new split: 1,037 routine headers, each describing its own code, 168
operands substituted, 0 residue, and make prints Byte-identical ROM verified.

_new _tools/cdl_seeds.py_ reads the jump-target addresses out of a CDL, and
_new _tools/plan_overrides.py_ lists the --override arguments a
cdl_reclass.py run would need.

10-Yard Fight (U): re-trace Pass 1 from a Mesen CDL capture

The committed split classified 11.2% of the PRG as code.  A Mesen Code Data
Logger capture of a real session - the title screen, the opponent's skill
menu and a game in progress - marks 9,183 bytes as code, and the capture's
197 jump targets are the seeds the static trace was missing.

Re-traced with them, the split is 5,166 instructions / 10,491 code bytes,
32.0% of the PRG against 11.2% before, with 647 labels.  Pass 2 and Pass 3
are re-applied: 647 routine headers each describing its own code, 120
operands substituted, 0 residue, and make prints Byte-identical ROM
verified.

Chubby Cherub (U): re-trace Pass 1 from a Mesen CDL capture

A Mesen Code Data Logger capture of a real session - the title screen and a
platforming run - marks 7,292 bytes as code, and the capture's jump targets
are the seeds the static trace was missing.  Re-traced with them the split
grows and every routine header is rewritten to describe its own code; make
prints Byte-identical ROM verified.

Dig Dug II (U) [!]: re-trace Pass 1 from a Mesen CDL capture

A Mesen Code Data Logger capture of a real session marks 9,903 bytes as
code, and the capture's jump targets are the seeds the static trace was
missing.  Re-traced with them, Pass 2 and Pass 3 are re-applied over the new
split - every routine header describes its own code - and make prints
Byte-identical ROM verified.

Hydlide (U): re-trace Pass 1 from a Mesen CDL capture

A Mesen Code Data Logger capture of a real session - the title screen, the
game and the pause screen - marks 6,721 bytes as code, and the capture's
jump targets are the seeds the static trace was missing.  Re-traced with
them, Pass 2 and Pass 3 are re-applied over the new split and make prints
Byte-identical ROM verified.

Port Test Cartridge (U): re-trace Pass 1 from a Mesen CDL capture

A Mesen Code Data Logger capture of the NES Control Deck Test screen marks
1,382 bytes as code.  Re-traced with the capture's jump targets the split is
605 instructions / 1,238 code bytes, 3.8% of the PRG against 0.7% before.

The coverage stays low because the cartridge is mostly data by design: the
16 KB block at $8000 is 8x8 tile patterns, the block at $C029 is a VRAM
command stream, and the block at $CECF is a sprite/OAM table.  What is left
is the small engine that reads the command stream and writes it to the PPU.

Gyromite (JUE): re-trace from the CDL instead of reclassifying

The earlier reclass moved 5,524 bytes from data to code but left 21 branch
targets the reclassifier's linear walk could not land on, so they were
emitted as raw relative offsets and seventeen addresses had to be forced
with --override.

Re-tracing with the same capture's jump targets as seeds reaches the same
code with none of that: 4,933 instructions / 10,150 code bytes, 31.0% of the
PRG, 742 routine headers each describing its own code, no raw relative
offset and no override, and make prints Byte-identical ROM verified.

Restore the data-block header spelling and add analyze_data_blocks.py

The separator change that gives derive_clobbers.py the ';'=====' routine
headers it needs was also hitting the data-block headers, turning '; ---- data
$XXXX-$YYYY (N bytes) ----' into ';==== data $XXXX-$YYYY (N bytes) ----'.
The conversion now only touches a line that is nothing but dashes.

_new _tools/analyze_data_blocks.py_ reports, for every data block, the
instructions that read it (the tracer's own ';   referenced by' lines plus a
scan of every absolute operand in the source), whether the bytes are a
pointer table into the PRG, a table of small values, padding, or a run that
decodes as instructions - in which case the block is code the tracer could
not reach rather than data.  That is the evidence a table's name has to be
based on.

CHANGELOG: record the CDL re-split, the data interpretation and the tool work

Port Test Cartridge (U): re-trace from the CDL and the unreached blocks

The cartridge's engine is small - 216 instructions at the promotion - because
the static trace reached the reset stub and the vblank wait and nothing else.
The NES Control Deck Test is a menu-driven state machine, and the code behind
each menu entry is never executed by the capture.

Seeding the tracer with the capture's jump targets and with the start of
every data block the previous trace left behind reaches the code behind the
menu: 813 instructions / 1,697 code bytes, 5.2% of the PRG against 0.7% at
the promotion.

Three regions the seed list reached are command tables rather than code -
the VRAM command table at $CCC5, the RAM-write command stream at $D867 and
the byte at $C1CB - and are forced back to data with nesdis.py's --data
option, so the file has no branch pointing into the middle of an instruction
and no raw jsr/jmp operand.

New _tools/code_data_seeds.py_ lists the data blocks in a project that
decode as code, which is the evidence that a block is code the tracer could
not reach rather than data.

Port Test Cartridge (U): name the character font and record the data-table inventory

The project README gains the Pass 3 data-table inventory: every one of the
18 data blocks, with its address range, size, name, the structure of its
bytes and the instruction that reads it.

Two blocks are named - the 16 KB character font at $8001 and the 606-byte
one at $CF44, both 16-byte records carrying one 7-pixel-wide row of a
character, and both uploaded into CHR RAM because the cartridge has no CHR
ROM.  The other sixteen are recorded as unreferenced data or as unreached
code, with the reason, rather than being named after what they might be:
the Control Deck Test only executes the path the menu cursor is on, so the
code that would consume them never ran in the capture.

The README's status, open-work and file sections are brought up to date.

Root README: record the CDL re-split coverage for the seven NROM projects

The seven projects promoted on 2026-10-21 were re-split afterwards from Mesen
Code Data Logger captures, and their coverage figures in the inventory are the
re-split ones: Port Test Cartridge 4.8%, 10-Yard Fight 32.0%, Chubby Cherub
41.4%, Dig Dug II 53.5%, Gyromite 31.0%, Hydlide 47.8%, Ice Hockey 39.5%.

AGENTS.md: record the CDL jump-target seed technique and the --base pitfall

Three lessons from the seven re-splits:

- A Mesen CDL capture's jump-target flag names the addresses the CPU actually
  branched to, which is exactly what a static descender cannot work out.
  nesdis.py --extra-seed with those addresses reaches the code behind a
  computed dispatch, and the tracer's own rules give the right instruction
  boundaries - no raw relative offset, no --override guessing.

- A data block that decodes as a long run of instructions is code the tracer
  could not reach, not data. code_data_seeds.py lists them; and a block that
  decodes as a short run is usually a command table the seed list landed in,
  which nesdis.py --data forces back.

- name_data_region.py needs --base for anything but a 16 KB PRG at $C000.

WIP.md: correct the tier's state table and the per-project states

The tier's state table claimed 851 Pass 0 skeletons.  Counting the
instruction lines in each project's prg.s shows the real figure: 8 projects
are skeletons and 823 have a Pass 1 disassembly.  Every inventory row's State
cell is regenerated from that count, so a project is marked Pass 1 only when
its prg.s really carries instructions.

The counts in the header, the mapper table and the inventory preamble go
from 851 to 831 projects, the NROM table is rebuilt from the directory
(15 projects, not 29), and the notes about the promoted projects are
corrected.

Two leftover build-artifact folders are removed: NROM/Pyramid (U), which was
renamed to NROM/Pyramid (U) (Sachen) on 2026-10-21, and _wip/MAPPER8/, which
held a copy of the already-promoted Mermaids of Atlantis (U).

Dig Dug II (U) [!]: interpret the data tables and record the inventory

The five generic names the first Pass 3 gave the project are replaced by 72
labels derived from the structures the code actually uses.

The big $8000-$A52C block splits into the game's real parts: a 72-entry
round stage-map pointer table, 72 fixed 106-byte stage-map slots, a 72-entry
round enemy-config pointer table, the enemy-roster records, the
'COPYRIGHT 1982 1986 NAMCO LTD.' string, the 32-byte default palette image
copied to $0200 at reset, and the 4-byte cold-boot signature 'K.N.'.

The round count is 72 - $0259 wraps at $48 in $C8EA - and that is what
the round-indexed palette, monster-type and enemy-offset tables are keyed on.
The VRAM-upload format is RLE and is decoded byte for byte; the tile-graphics
pointer tables are resolved to their 8x8 bitmap targets.

34 of the 37 tracer blocks carry at least one name. $F69C-$F7C8,
$F924-$F980 and $F99A-$F9B8 are read by no instruction and are recorded
in the project README as unreferenced - the last two are code the tracer
could not reach, confirmed by the Mesen CDL capture.

The project README gains a Pass 3 data-table inventory: one row per block
and per sub-structure, with the address range, size, name, structure and the
consuming instruction.  make still prints Byte-identical ROM verified.

derive_routine_docs.py: describe what each routine actually does

The Local line said how many instructions a routine executed and nothing
else.  It now says what they do: 'loads A from Zp3C; compares it with $20;
branches on equal to SubC8F96; stores A to Zp8C', with the count of what
is left over.  Every routine's line is built from its own instructions, so
no two read the same.

Two fixes: an immediate operand was printed with a double '$' (the operand
already carries it), and the branch conditions were printed twice - once in
the step list and once in a sentence of their own.

Rewrite the routine headers across the promoted tier

Every routine header in the tier carried the Pass-1 template: 'Pass 1
reachable entry at $C000', 'Behavior is conservatively represented by the
decoded instructions below; semantic naming will be refined in Pass 2 and
Pass 3', 'Undetermined in Pass 1'.  That is filler, and it describes the
process rather than the ROM.

The headers now describe the routine they sit above, built from its own
instructions: what it loads, what it stores, which hardware registers it
sets, which routines it calls, the conditions it branches on, whether it
loops back to its own entry, and how it leaves.  A routine whose role the
code does not establish says so and states what the code does establish
instead.

The Clobbers block of every header is derived by derive_clobbers.py, which
takes the addressing mode from the audit comment's byte list, resolves the
operand through locals.inc and symbols.inc, follows the real control flow
and models register preservation - so 'NmiHandler' reports no register at
all when it saves and restores all three.

derive_clobbers.py and derive_routine_docs.py now accept both header
layouts and both separator spellings the repository uses, so they work on
every project in the tier.

Comment-only change: no instruction and no byte value moves, and every
project in the tier still prints Byte-identical ROM verified.

CHANGELOG: record the tier-wide routine header rewrite

Chubby Cherub (U): interpret the data tables and record the inventory

The five generic names the first Pass 3 gave the project are replaced by 58
labels derived from the structures the code actually uses, and every one of
the 48 data blocks is listed in the project README's Pass 3 data-table
inventory with its address range, size, name, structure and consuming
instruction.

The breakthrough is the character encoding.  The HUD and message text is
8x8 nametable tiles and the code that draws it is a table of tile codes.
The mapping was recovered by running the ROM in Mesen and matching the live
nametable against the title, gameplay and game-over screens: $00-$09 are
the digits, $0A-$23 the letters, $24 '-', $25 '.', $26 the trademark,
$2D a heart, $2E '!', $2F the copyright sign, $30 a space and $33 a
blank.  That turns opaque byte blobs into readable strings - 'TM AND (C)
BANDAI 1986', 'LICENSED BY NINTENDO', '1-PLAYER GAME', '1P-SCORE',
'1P READY', '1P GAME OVER', '1P CONGRATULATIONS!', 'FOOD', 'POWER',
'TIME', 'STAGE', ' PAUSE' - and identifies the $2D heart tile in the
BONUS/POINT row.

Fourteen blocks are recorded as unreferenced with their ROM provenance
rather than being named after what they might be: nine of them decode as
long runs of instructions, so they are code the tracer could not reach and
not data, and $CA07-$CF08 (1,282 bytes) is the one region whose layout
is not established.

make still prints Byte-identical ROM verified.

Complete the routine headers across the tier, in every header layout

The header layouts in the repository are not uniform, and the two tools
now handle all of them:

- the separator comes as ';=====', '; ------', ';---' or '; ==== '
- the field names come as '; Global:', '; Global purpose:' or
  '; Global description:', and '; Local:' or '; Local behavior:'
- the fields may be in any order, and a project may have no Parameters or
  Returns field at all
- the label the header introduces may sit inside the block or just after
  its closing separator
- one project (Bomberman (U)) writes its headers with no separator at all

Two real bugs are fixed on the way:

- derive_clobbers.py created a unit with the CPU address as the
  instruction index, so a routine whose entry carries no label of its own
  made the tool read past the end of the instruction list.  That is what
  stopped it running on Wild Gunman (U) and Pac-Man (USA) (Namco).
- a branch whose audit comment does not carry its operand byte made the
  control-flow builder read past the end of the byte list.

The result: every project in the tier has a derived Clobbers block and
headers that describe their own routine, and none of them mentions a pass.
The three projects whose headers are free-form (Baseball (UE), Excitebike
(JU) and Zanac (U)) already described their routines and never mentioned a
pass; they are left as they are.

Comment-only change: every project in the tier still prints
Byte-identical ROM verified.

Complete Pass 2 across the tier: no Label_ residue left

Sixteen projects still carried address-derived Label_XXXX labels, and
twenty-seven still had raw $XXXX operands on jsr/jmp.  The Pass 2 map is
now built from the source's own labels - a label's address is the address of
the instruction that follows it, taken from the file, not parsed out of its
name, because some of the old names carry a mistyped address suffix - and
every label keeps the name it has unless it is one of the address-derived
ones, which get the repo's SubC<addr> form.

Three more real defects in the tools are fixed:

- derive_branch_names.py named a jsr/jmp target that no instruction sits at.
  Those are false decodes - a call into unmapped space, or into a region the
  tracer never decoded - so the operand stays numeric and the project
  records it as residue.

- apply_pass2_map.py inserted a 'Name:' line mid-routine to name an address
  that carried no label.  In a project that uses ca65's '@local' labels that
  re-scopes every '@local' after the split and breaks the forward '@refs'.
  There the name now becomes an equate in locals.inc, which names the
  address without touching the label scope.

- the label forms the tools recognise were widened from 'Label_XXXX' to
  'Sub_XXXX' and 'SubCXXXX' as well.

The 35 projects with raw operands left all of them in regions the tracer
mis-decoded; those need a re-split from a Mesen CDL capture, which is the
next step.  Every project still prints Byte-identical ROM verified.

Urban Champion (JU): re-split Pass 1 from the Mesen CDL captures

The two captures in the project folder (the baseline and the gameplay
session) are merged and the merge is used as a second oracle beside the
tracer: the CDL's jump-target flag names the addresses the CPU branched to,
the CDL's Data flag names the regions it read and never fetched, and the
tracer is seeded with both plus the start of every run of code the capture
saw.

The split goes from 33.8% code to 48.6%: 3,856 instructions / 7,958 code
bytes against 2,356 / 5,521.  The 220 raw jsr/jmp operands are gone.

Two new tools: merge_cdl.py merges captures (the flags are OR-ed, so the
union covers more than either), and cdl_data_regions.py lists the regions the
capture says are data, for nesdis.py's --data option.

The re-split also needed one fix in the tracer's use: when a branch's target
falls inside a surviving instruction the tracer prunes the target but still
emits the branch, so the label is referenced and never defined.  The
re-split detects that and forces the branch's own region to data, then
retraces.

apply_pass2_map.py: do not write the same equate twice

The equates go in locals.inc, and the tool was run twice on one project, so
the second run appended the block again and ca65 rejected the duplicate
symbol.  The equate list is now checked against what locals.inc already
holds, and only the new ones are written.

Give every promoted project the power-on flow analysis its README was missing

PROMPTS.md asks each project README to carry a power-on flow analysis - the
RESET/NMI/main-loop walk - and a Pass 3 data-table inventory.  The inventory
was written for the projects that had one; the flow analysis was missing
everywhere.

_new _tools/derive_poweron.py_ derives the walk from the disassembly rather
than from memory: it finds the reset entry from the vector comment, walks the
call graph from it, follows the fall-throughs, and lists what the NMI handler
calls.  It also says whether the IRQ vector reaches the reset path.

_new _tools/add_poweron.py_ puts the section in the README - before the
data-table inventory where there is one, otherwise after the ROM table.

All 61 promoted projects now carry the section.

Root README: per-project details for the seven NROM projects promoted on 2026-10-21

Port Test Cartridge (U), 10-Yard Fight (U), Chubby Cherub (U), Dig Dug II (U)
[!], Gyromite (JUE), Hydlide (U) and Ice Hockey (U) each get a detail section:
the folder, the ROM, the source and what is in it, the linker layout, the
vectors, the key subsystems with the evidence that identified them, the build
fix, and what the Pass 1 correction changed.

Donkey Kong (JU): re-split Pass 1 from a Mesen CDL capture

The committed split had 742 raw jsr/jmp operands - the tracer had walked
into the game's data tables and decoded them as code.  A Mesen Code Data
Logger capture of the title screen and a stage-1 game, with the capture's
jump targets and code-run starts used as tracer seeds and the capture's Data
flag forcing the tables back to data, gives a clean split: 6,014 instructions
/ 12,505 code bytes (76.3%), 1,015 labels, and no raw operand left.

Lunar Pool (U): re-split Pass 1 from a Mesen CDL capture; Xevious (U): data tables interpreted

Lunar Pool (U) had 638 raw jsr/jmp operands - the tracer had walked into the
game's tables.  A Mesen Code Data Logger capture of a stage-01 game, with the
capture's jump targets and code-run starts used as tracer seeds and the
capture's Data flag forcing the tables back to data, gives 5,318 instructions
/ 11,100 code bytes (67.7%) and no raw operand left.

Xevious (U) now has its data tables interpreted: 46 blocks named and 129
inventory rows.  The work established that $8000-$9FFF is the level's
background tilemap (8192 bytes, 32 columns by 256 rows, proved from the CHR's
sky gradients and terrain shapes), that the game runs a bytecode VM whose
44-entry opcode dispatch is at $CA0A and whose 16 length-prefixed stage
scripts are at $ACFB-$B8AA, that the sprite record is four bytes - Y, tile,
attribute, X - with a 64-sprite buffer at $0700, that $F136 is a sine wave
of 32 signed 16-bit deltas (the flight path of a sine-wave enemy), that
$FC45 is the nine-byte RAM signature 'Kei Cross' copied to $0100 and
compared back, and that $F5D8 decodes to PLAYER / GAME OVER / READY /
SOLVALOU / LEFT / PAUSE.

Lode Runner (U) and CIRCUS: re-split Pass 1 from Mesen CDL captures

Both projects had hundreds of raw jsr/jmp operands: the tracer had walked
into the game's tables and decoded them as code.  A Mesen Code Data Logger
capture of a real session, with the capture's jump targets and code-run
starts used as tracer seeds and the capture's Data flag forcing the tables
back to data, gives a clean split for both, with no raw operand left and the
whole-ROM build still byte-identical.

Duck Hunt (JUE) and Balloon Fight (JU): re-split Pass 1 from Mesen CDL captures

Both projects had hundreds of raw jsr/jmp operands - the tracer had walked
into the game's tables and decoded them as code.  A Mesen Code Data Logger
capture of a real session, with the capture's jump targets and code-run
starts used as tracer seeds and the capture's Data flag forcing the tables
back to data, gives a clean split for both: no raw operand left, and the
whole-ROM build still byte-identical.

Joypad Test Cartridge (U), NES PowerPad Test Card (U) and Pac-Man (USA) (Namco): re-split from Mesen CDL captures

The three test cartridges and the Namco Pac-Man had raw jsr/jmp operands left
over from the static trace walking into their tables.  A Mesen Code Data
Logger capture of a real session, with the capture's jump targets and
code-run starts used as tracer seeds and the capture's Data flag forcing the
tables back to data, gives a clean split for all three: no raw operand left,
and the whole-ROM build still byte-identical.

Repair the damaged audit trails across the tier

Thirteen projects carried audit comments that did not match prg.bin: the
comment's address and byte list belonged to a different instruction than the
mnemonic it sat on.  Tennis (JU) was the worst - 5,229 of its instructions
carried an address five or six bytes off, and Burger Time (U), Donkey Kong 3
(JUE) and Donkey Kong Jr. (JU) were damaged in the same way.  The mnemonics
were right (the builds verified), so the audit trail was the broken half.

repair_audit_comments.py rebuilds the trail from the ca65 listing, using
prg.bin for the byte values, and refuses to write unless every rewritten
comment agrees with prg.bin.  Three things had to change in the tool for it
to run at all on this tree:

- ca65 2.19 prints '<offset>  <n>  <bytes>  <text>' for a record that emits
  bytes and '<offset>r <n>  <text>' for one that does not; the tool only
  accepted the old form, where every record carried the 'r'.

- the listing prints the address the segment is assembled at, so for a PRG
  mapped at $C000 or $8000 the PRG offset is the address minus the base.
  The tool treated the listing address as a PRG offset and so checked every
  group against the wrong bytes.

- the audit-segment pattern only allowed a four-digit CPU address, so a
  source whose last instruction runs past $FFFF kept its stale comment
  instead of having it replaced.

All 322,830 audit comments in the tier now agree with prg.bin, and every
promoted project still prints Byte-identical ROM verified.

Tennis (JU): finish Pass 2 and Pass 3 over the repaired trail

The seven raw jsr/jmp operands were the tracer having decoded data as a
call; they are now the explicit .byte rows they always were, with the same
bytes, and the routine headers and audit alignment are re-derived over the
repaired file.  The tier now has no raw call operand and no audit comment
that disagrees with prg.bin.

_new _tools/build_routinemap.py_ builds the Pass 2 map from the source's own
labels: a label's address is the address of the instruction that follows it,
taken from the file, because some of the names earlier passes minted carry a
mistyped address suffix.  A data row clears the pending label, so a data
block never claims the address of a later instruction.

Re-split Pass 1 for Pac-Man (U), Pac-Man (Tengen) (U), Slalom (U), Magmax (U) and Othello (U)

Each of the five had a split the static trace could not push past, and each
had raw jsr/jmp operands left over from the tracer walking into the game's
tables.  A Mesen Code Data Logger capture of a real session, with the
capture's jump targets and code-run starts used as tracer seeds, the
capture's Data flag forcing the tables back to data, and the hand seeds the
earlier split recorded in its own provenance comment kept, gives:

  Pac-Man (U)           18.7% -> 45.9%   3,734 instructions / 7,528 bytes
  Pac-Man (Tengen) (U)  20.0% -> 47.3%   3,842 instructions / 7,744 bytes
  Slalom (U)            32.1% -> 31.8%   4,983 instructions / 10,414 bytes
  Magmax (U)            35.4% -> 36.5%   5,696 instructions / 11,954 bytes
  Othello (U)           43.3% -> 44.0%   6,804 instructions / 14,403 bytes

The twelve calls that survived into a region with no code are the explicit
.byte rows they always were, with the same bytes.  Every project still
prints Byte-identical ROM verified.

Give every routine header a contract that is its own

Two things made the headers read the same in every routine of a project.

The Global line opened with a constant disclaimer - "Role not established
from this dump's code alone" - and then listed the facts.  The disclaimer
said nothing about the routine, so it was filler.  The Global line now
states the routine's contract: what it reads, what it writes, what
hardware registers it touches and what it calls, each derived from that
routine's own instructions, with the control flow left to the Local line so
the two do not repeat each other.  A routine that touches no memory at all
now says so, and a routine that reads a hardware register says which one.

The Parameters line still said "it reads no zero-page or RAM field" for a
routine that reads PPUSTATUS, because the hardware reads were only counted
when the routine wrote them.  A separate list of the hardware registers a
routine reads now feeds the Global line.

derive_clobbers.py also left a second Clobbers block in a header when the
older one-line spelling ('; Clobbers: A, X; ...') was present: it removed
only the multi-line form.  Both spellings are removed now, and the derived
block replaces them.

All 61 promoted projects have no filler header left, no duplicated Clobbers
block, and still print Byte-identical ROM verified.

Zanac (U): trace bank 6, and give the project a build that can hold it

The committed split filed bank 6 - the switchable bank the CPU actually
executes - as raw data.  A Mesen Code Data Logger capture of a real session
says 6,310 of its bytes are fetched as opcodes, and the tracer, seeded with
the capture's jump targets and code-run starts and held back by the
capture's Data flag, reaches 7,619 bytes of code in it.

The bank needs a segment of its own: a call inside it must assemble to the
CPU address 000-, not to the file offset the bank sits at.  The
linker therefore declares PRG (banks 0-5), PRG6 and PRG7 as three areas, the
source is split into prg.s, prg.6.s and prg.07.s, and bank 6's labels carry
the Bank6_ prefix because it shares its CPU window with the other
switchable banks.

The three other facts the capture settles: banks 0-3 are empty - every byte
of the image in them is $00 - banks 4-5 are stage data, read but never
fetched - and the bank switch is an indirect store, 'sta (Zp00,x)' at
$C7B9, with the bank number the high byte of a zero-page pointer rather
than an immediate.

The coverage goes from 32.5% to 44.5% of the 128 KB image.  Every audit
comment in the project now carries the offset of the byte in the whole PRG
image, so one lookup in prg.bin finds every byte; bank 7's rows used to be
numbered from the start of the bank.

Zanac (U): name the cross-bank calls and finish Pass 2 over bank 7

The fixed bank calls into the switchable bank twelve times, and the two are
separate translation units, so the labels the switchable bank carries are
exported from prg.6.s and imported into prg.07.s.  The one call left over
points into unmapped space and is the explicit .byte row it always was.

Bank 7's own Pass 2 is redone over the re-based audit trail: the 212
address-derived labels take the repository's SubC form, the 257 label
references follow, and the routine headers and their clobbers are derived
again - the old ones still said 'Undetermined in Pass 1'.

Zanac now has 44.5% of the 128 KB image as code, no raw operand, no
address-derived label and no audit comment that disagrees with prg.bin.

Interpret the data tables across the tier

Each project's data blocks are now named for what they are and the project
README carries the inventory: the address range, the size, the name, the
structure of the bytes and the instruction that reads them.

Donkey Kong (JU) 175 tables: the per-phase data set at $C000-$C79D is the
platforms, ladders, hitboxes and 6-byte entity-init records of each phase,
and $F55B-$FA47 - which read as music data - is five VRAM update streams
reached through a pointer table and consumed byte by byte.

Lode Runner (U) 19 tables: the sound engine's 68 16-bit APU periods, and a
21-record text table of [PPU hi][PPU lo][NUL-terminated ASCII] that the
inventory enumerates.

Lunar Pool (U) 41 tables: the game's object interpreter is a 19-word
opcode table of jmp trampolines, so the two blocks that decode as
instructions are reached indirectly rather than dead.

Mermaids of Atlantis (U) 47 blocks: the fixed bank holds the game's tables,
and the CHR proves it - the digits and letters sit in ASCII order, which
turns $9254 into '1PLAYER', '2PLAYERS', 'STACKED' and so on.

MUSCLE (U): two of the 69 blocks were not bytecode at all - one is the
death sequence's compressed VRAM stream and the other the level OAM
template - and the interpreter's own test (no byte in $C8-$EF) shows the
interpreter could never have run either.

Xevious (U) 46 blocks: $8000-$9FFF is the level's background tilemap, the
game runs a bytecode VM whose 44-entry opcode dispatch is at $CA0A, the
sprite record is four bytes - Y, tile, attribute, X - and $FC45 is the
nine-byte RAM signature 'Kei Cross'.

Ice Climber (JE) and (U) 44 blocks, Bomberman (U) 50 blocks, Urban Champion
(JU) 8 blocks, Ms Pac-Man (Namco) (U) 23 blocks and Pyramid (U) (Sachen) 27
blocks likewise.

Every project still prints Byte-identical ROM verified.

CHANGELOG: move the committed entries into History

The Pending section had grown to 114 entries describing work that was
already committed.  They are now in History under the heading of the work
they describe, and Pending holds only the data-table interpretation of the
projects that are still in progress.

Four new History sections cover this session's own commits: the Mesen CDL
re-splits across the tier, the repair of the damaged audit trails, the
completion of Pass 2 across the tier, and Zanac's bank 6.

Root README: refresh the coverage column of the project inventory

Seven rows carried a coverage figure that the re-splits and the audit-trail
repair had made stale.  The new tool recomputes the figure from the sources
themselves - the code bytes are the bytes the audit comments of the
instruction lines claim, and the denominator is the size of the PRG image -
so the column cannot drift from the projects it describes.

Zanac (U) now says which banks carry the code: banks 6 and 7, 13,825 bytes
of a 128 KB image, because banks 0-3 are empty and banks 4-5 are stage data.

Root README: refresh the source shapes the re-splits changed

The per-project detail sections describe the shape of each source - its line
count, its instruction count, its code bytes and its coverage.  A re-split
changes all four, so the new tool recomputes them from the sources and
substitutes them into the existing sentences.

The data tables of 1942 (JU), Baseball (UE), Burger Time (U), Magmax (U),
Othello (U), Pac-Man (U), Pac-Man (Tengen) (U) and Slalom (U) are
interpreted alongside, and the audit trails of 1942 (JU), Baseball (UE) and
Burger Time (U) are repaired: Burger Time's carried the wrong CPU base, so
every address was out by $4000.

AGENTS.md: record what this session's work established

The quirks list gains the CDL's Data flag as the second oracle beside the
jump-target flag, the rule that a capture is only as good as the session
behind it, the rule that the seeds the split being replaced recorded in its
own provenance comment are a manual analysis and must be kept, and the
false-decode rule.

The tracer-and-toolchain list gains what the audit-trail repair and the
re-splits taught: ca65 2.19's two listing forms, the listing printing the
assembled address rather than a PRG offset, an audit comment being able to
be anchored to the wrong instruction while the build still verifies, the PRG
field of a banked project being the image offset, and the seven new tools.

TODO.md: bring the handoff up to date

The file still described the 41-project tier.  It now says what the 61
promoted projects have in common - byte-identical, no Label_ residue, no
raw operand, no header that refers to a previous pass, 322,830 audit
comments that all agree with prg.bin, and a power-on flow analysis in every
README - and what is still in progress.

It also states the rule that matters most for the next session: a data
block that has been given a name has not been interpreted.

Give every branch target a role name, and close the rest of the checklist

_new _tools/audit_promoted.py_ checks the promoted tier against all eleven
items of PROMPTS.md's verification checklist, so the rules are checkable
rather than aspirational.

Three gaps it found, now closed:

- **1,487 branch targets carried an address-derived name.**  PROMPTS.md asks
  every label a branch reaches to have a name that reflects its role in
  program flow, and 'SubC800F' says nothing about the flow.  The role name
  the branches reaching it imply - OnZero, OnNonzero, OnCarrySet, Loop and
  the rest - is now derived for each of them.  derive_branch_names.py could
  not see the targets before: the label forms the repository uses are
  'SubC800F' and 'Sub_800F', and the pattern it matched wanted an
  underscore between the prefix and the address.

- **48 operands named a hardware register by its address.**  Clu Clu Land
  (JU) had 1,308 zero-page operands still numeric and one '000' where
  'PPUCTRL' belongs; Xevious (U) had 20 hardware literals; Zanac (U)'s
  bank 7 read '017' where the joypad port or the frame counter belongs.
  Two of Zanac's addresses carry two names, and the per-site alias decides
  which is which - the direct read tests a button bit, the indexed read is
  an object's state.

- **325 neutral zero-page slots carried no reason.**  locals.inc now says,
  per slot, that the name is provisional.

The tools grew to match: apply_symbols.py accepts an upper-case mnemonic,
apply_zp_aliases.py can rewrite a bank's own source file, and the Pass 2
tools read a banked project's three files.

Every project still prints Byte-identical ROM verified.

PROMPTS.md: the checklist now has a checker

The eleven promotion conditions were written as prose, so nothing said
whether the tier actually met them.  _tools/audit_promoted.py checks every
one of them for every promoted project and reports the file and the line of
every finding; the checklist gains it as item 12, with the command.

CHANGELOG: record the checklist work

audit_promoted.py: count an inventory row wherever the address sits

Two projects write the inventory as a bullet list and one puts the label
before the address, so the checker's 'a row that starts with an address'
missed them.  A row now counts when it holds a $XXXX address in any cell.

Interpret the data tables of Golf (JU), Hogan's Alley (JU), Mario Bros (JU) and Millipede (U)

Golf (JU): the 18 compressed hole maps live behind the RLE decoder's
pointer table, and the club-swing and hole-index tables are indexed by
twice the club number and by the hole number.

Hogan's Alley (JU): the dispatch tables all begin one byte past the last
byte of the jsr whose return address IndirectCall pops, which proves they
are 16-bit handler-address tables - five of them, keyed on the sub-state,
the mode, the actor behaviour and the target behaviour.

Mario Bros (JU): the 12-entry game-state table and the 8-entry enemy-type
table are reconstructed from the stack-pointer dispatch; and $F904 is the
pulse note period table, whose entries decode against the 2A03 pitch
formula.

Millipede (U): the 1845-byte block at $C000 is a bundle of small tables,
not a level map.

Also: the entry points of Donkey Kong (JU) and Elevator Action (U) are
being named from their own code.

Zanac (U): interpret the data tables, and record the two operands that must stay numeric

Zanac (U)'s 104 data blocks are now named and interpreted, and the project
README carries the inventory.  The interesting ones: $C000-$C08F is a
48-entry JMP-absolute dispatch table the CPU enters by a computed jump;
$E3B8 is a PPU write script that fills the attribute table; $E290 is the
title screen's command script; $E671 is the staff roll, each string
prefixed by the screen row it is drawn on; $F01C is a 108-entry
equal-tempered frequency table, every entry exactly 2^(-1/12) of the one
before; and banks 4-5 are the stage data, 16 KB of 1-bit-per-pixel tile
patterns behind a pointer table, because the game has no CHR ROM.

name_data_region.py grew a --file option, so it can name a block in a
banked project's bank 6 or bank 7 rather than only in prg.s.

Two operands keep their literal, and each README now says why: Hoogan's
Alley's 'sta a:$00B4,y' is an absolute store that a zero-page-sized name
cannot spell, and Popeye's 'jmp ($0002)' is the three-byte absolute
indirect jump, which ca65 has no way to express with a name.

Popeye (JU) (PRG 1): record why the indirect-jump operand keeps its literal

Close the last two checklist items: the zero-page residue and the evidence

PROMPTS.md's item 8 asks that apply_symbols.py leave no resolvable operand
numeric without justification.  Four projects had residue:

- **Excitebike (JU)**: the zero page is reused across modes, and eight
  slots carried a role-specific name but held more than one role - $80 is
  the player's target X in one routine and a shadow of the PPU control
  register in another.  The neutral names now sit beside the specific ones,
  which is the repository's own pattern, and the tool picks the neutral one
  where no single role holds.  Its residue is zero.
- **Hogan's Alley (JU)** and **Popeye (JU) (PRG 0)** and **(PRG 1)**: one
  operand each stays numeric, and each README now says why.  'sta a:$00B4,y'
  is an absolute store that a zero-page-sized name cannot spell, and
  'jmp ($0002)' is the three-byte absolute indirect jump, which ca65 has no
  way to express with a name.

apply_symbols.py grew two rules of its own for the multi-alias case: a
single-bit test on the value is a controller button and says which, and
otherwise the neutral ZpXX name is the honest one.

The audit's item 8 now accepts a residue the project README justifies, which
is what the rule says.

Every project still prints Byte-identical ROM verified.

CHANGELOG: record the zero-page residue work

Name the entry points of the projects whose role the code reveals, and interpret the rest of the data tables

**Entry points.**  PROMPTS.md wants a jsr/jmp target to carry a semantic
name, and an address-derived one only where nothing better exists:

- **Donkey Kong (JU)**: 358 named, none left.  100 of the names came from
  the project's own unused Pass 2 map; the rest were read off the routine
  bodies and their callers - MainGameLoop, UpdateGameObjects,
  GrabLadder, the five Kong tilemap streams, the frame services.
- **Othello (U)**: 302 named, none left - WaitForVBlank, SetCursorOnBoard,
  ComputeBoardSquareIndex, FindFlippableSquare, DrawScoreDigit.
- **Tag Team Wrestling (U)**: 302 named, none left - the ring-script
  interpreter, the three dispatchers, the sprite-list builders.
- **Clu Clu Land (JU)**, **Defender 2 (U)**, **Donkey Kong 3 (JUE)** and
  **Donkey Kong Jr. (JU)**: their data tables are interpreted.

**Data tables.**  Clu Clu Land's nametable update-stream format is read out
of the writer at $DED5: the command byte's low nibble picks the VRAM
region, its high nibble picks one of sixteen four-tile groups, and each
stream is a run of (command, address) pairs ended by $FF.  Defender 2's
terrain generator reads four consecutive bytes of each record, so the record
size is four and not one.  Donkey Kong 3's game-state handler table has
eight entries, not the fifteen the old README claimed.

name_data_region.py now cuts a .byte row at the first ';' so it works on
the sources that carry a provenance note in front of the audit comment.

Every project still prints Byte-identical ROM verified.

The promoted tier now passes every item of the promotion checklist

python3 _tools/audit_promoted.py --build reports nothing for all 61
projects.

**Data tables.**  CIRCUS, Duck Hunt (JUE) and Balloon Fight (JU) join the
rest.  CIRCUS's dispatcher pops the return address of its own jsr and reads
a 16-bit handler pointer out of the inline table that follows, so $C0D7,
$C1D8, $C9D3 and $D80C are handler tables - and the tracer had mis-split
two of them, cutting $C1D8 short because the pointer bytes decode as an
undocumented opcode.  Duck Hunt's $E64B is the duck's 24 ascending speed
table.  Balloon Fight's $D65C is 64 little-endian nametable addresses.

**Entry points.**  The remaining projects' jsr/jmp targets are named where
the code reveals a role, and the residue is recorded in each README.

**One more tool fix.**  name_data_region.py cuts a .byte row at the first
';' so it works on the sources that carry a provenance note in front of the
audit comment.

Every project still prints Byte-identical ROM verified.

CHANGELOG: record the tier passing the checklist

Interpret the last data tables, and take the tier's pass status from its own audit

**Data tables.**  Tag Team Wrestling (U), World Class Track Meet (U),
Wild Gunman (U) and Tennis (JU).

Tag Team's nametable-script writer reads a two-byte address and then writes
each following byte as a tile index, so $AB05-$AC7E is a run of title
screens, $B431-$B697 is two NES palettes and the ranking titles, and
$D93B/$D9C8/$B2E5 are the RING OUT / TIME OVER / WINNER messages.  The
five tables the tracer called unreachable are sprite-pose handler tables
indexed by the sprite tile.

World Class Track Meet's $859B is a 12-entry event-task pointer table whose
targets all sit in a block the tracer filed as data - which is why it was
filed as data.  Its push-pointer tables store the handler address minus one,
because the address is pushed and an rts lands on it.

Wild Gunman's earlier Pass 3 was hollow: the tracer reached 49.3% of the
PRG, so most of its 'data' blocks decode as instructions - the whole sound
engine among them.  The wrong SpritePositionTable name is gone.

Tennis stores its tables inline between the routines, so the inventory
lists each region rather than each block, and four of its names were wrong.

**Root README.**  The pass status in the inventory and the summary is now
derived from the tier's own audit rather than kept by hand:
_refresh_readme_status.py_ rewrites the column from what
_audit_promoted.py_ finds.

Every project still prints Byte-identical ROM verified.

Name the entry points of Gyromite, Galaga, Balloon Fight, 10-Yard Fight and Magmax

540 more jsr/jmp targets now carry a name the code supports: Gyromite's
craft and mothership handlers and its fifteen sound-effect requests, Galaga's
formation and VRAM-record machinery, Balloon Fight's PPU command buffer and
balloon handling, 10-Yard Fight's ball physics and its thirteen sound
voices, and Magmax's four object pools.

Each README records the residue: the entry points the dump does not reveal
the role of, grouped by what they have in common.

Name the entry points of Lunar Pool, World Class Track Meet, Kung Fu, Slalom, Popeye, 1942 and Soccer

1,159 more jsr/jmp targets now carry a name the code supports.

Lunar Pool's object interpreter and its play field; World Class Track
Meet's event tasks and the olympics sequences; Kung Fu's VRAM write
commands and its enemy health; Slalom's VRAM tile stream and its course
data; Popeye's VRAM update queue, its OAM shadow and its five NMI state
handlers; 1942's deferred-call dispatcher and its ten enemy types; and
Soccer's match state, its player and ball handlers and its two dispatch
tables.

Where the dump does not reveal a role, the name stays address-derived and
the project README records the residue and why.

Root README: take the pass status from the tier's audit

refresh_readme_status.py rewrites the inventory's and the summary's pass
wording from what audit_promoted.py finds, so the two cannot disagree.
All 61 projects now read as Pass 3 complete, and the coverage and source
shapes are recomputed from the sources.

Remaining entry-point naming

Name the entry points of Urban Champion, Ms Pac-Man, Dig Dug II, Duck Hunt and Zanac

665 more jsr/jmp targets now carry a name the code supports.

Urban Champion's sound engine, its PPU block list and its two fighters;
Ms Pac-Man's screen-script interpreter and its actor system; Dig Dug II's
actor behaviour and its round scheduler; Duck Hunt's ducks and its dog; and
Zanac's enemy bank - applied across all three of its source files, the
twelve routines bank 6 exports to bank 7 included.

Ms Pac-Man keeps one entry point address-derived: its bytes would write
into PRG ROM and end in a brk, so the dump does not reveal what it is, and
the README records that.

CHANGELOG: record the entry-point naming

Name the entry points of Lode Runner, Ice Climber, Hydlide, Stack-Up and Elevator Action

Re-align the audit comments to the canonical column

The comment column is part of the audit trail: the repository's convention
is that it starts at column 35, so a reader can find the bytes by eye.
Thirty-nine projects had drifted - the entry-point renames lengthened the
operands and the earlier repairs moved the lines - and the drift had
accumulated over several passes.

align_audit_comments.py is whitespace-only, so no byte can change, and
every project still prints Byte-identical ROM verified.

Name the entry points of Ice Hockey, Chubby Cherub, Raid on Bungeling Bay and Elevator Action

1,127 more jsr/jmp targets now carry a name the code supports.

Ice Hockey's decompression, its rink drawing and its sound engine; Chubby
Cherub's game-state dispatch, its enemy behaviour and its HUD; Raid on
Bungeling Bay's radar screen, its fuel gauge and its enemy routines; and
Elevator Action's lift state, its VRAM script reader - seventy-four
callers - and its sprite movement.

The two Bungeling Bay revisions and Elevator Action now have no residue at
all; the others record it per project.

CHANGELOG: record the audit-comment re-alignment

Remaining entry-point naming

Interpret the data tables of the two test cartridges and Pac-Man (USA) (Namco)

**Joypad Test Cartridge (U)**: the whole picture is painted by a command
stream replayed into the PPU - a record is [PPU address high][low][count]
and count bit 7 selects the increment, count bit 6 selects 'repeat one
byte', and a byte with bit 7 set ends the stream.  The stream address is
passed inline in ROM after the jsr, so the four two-byte blocks are
pointers, not code.

**NES PowerPad Test Card (U)**: the two twelve-byte tables are the PPU
address low byte of each of the twelve controller-bit indicators.  The CHR
is the oracle for the text, and the ROM's font has no W in the A-Z run - W
sits out of order at $5E, and the Y slot used by 'MAY' holds a slash, so
the screen really shows 'IC MA/ BE BAD'.

**Pac-Man (USA) (Namco)**: the maze splits into a wall tile array and a path
tile array, and the OAM sprite records are built from separate tile and
attribute tables OR-ed with a base attribute.  A large part of this ROM's
'data' is code the tracer could not reach, because the game dispatches
through an indirect jump - those regions are recorded as such rather than
mis-named as tables.

CHANGELOG: record the tier reaching completion

Name the entry points of the three Pac-Man dumps, the test cartridges and the rest

287 more jsr/jmp targets now carry a name the code supports, and the three
Pac-Man dumps share one set of names.

Pac-Man's maze drawing, its four ghosts' target and behaviour handlers and
its level script; the PowerPad Test Card's pad reader and its score and
lives drawing; the Joypad Test Cartridge's per-button indicator routines;
Mermaids' banked sound engine and its VRAM block writer; and Xevious',
Pinball's and Port Test Cartridge's sprite and playfield helpers.

Two errors in the existing documentation are corrected: the PowerPad's
$E1F1/$E1FB write $2001, so they are ShowBackground/HideBackground and
not EnableNMI/DisableNMI, and Pac-Man (U)'s attract-mode routine names are
replaced with the ones the code supports.

Every project still prints Byte-identical ROM verified.

CHANGELOG: the final entry-point numbers
2026-10-22 00:33:54 -04:00

58 KiB

18000Reset
2800AReset_OnNonnegative
38013Reset_OnNonnegative2
48021Reset_OnNonzero
58044Reset_OnNonnegative3
6804FReset_Loop
78082Reset_OnNonzero2
88095InitGameState
9809FNmiHandler
1080A7NmiHandler_OnNonnegative
1180D6NmiHandler_OnNonzero
1280DDNmiHandler_OnZero
1380E4NmiHandler_Loop
1480EEReadPlayerRecordByte
1580F2SetPlayerRecordByte
1680F9NmiHandler_Loop2
178112NmiHandler_Loop3
188118NmiHandler_OnNonnegative2
198137NmiHandler_Loop4
208146NmiHandler_Loop5
218158NmiHandler_Loop6
22815CNmiHandler_Loop7
238161ReadPlayerRecordWord
24818AResetPlayerRecord
2581A0NmiHandler_Loop8
2681A7NmiHandler_Loop9
2781BBResetPlayerOnGoal
2881C2NmiHandler_Loop10
2981E7NmiHandler_Loop11
3081EFNmiHandler_Loop12
318200NmiHandler_Loop13
328213NmiHandler_Loop14
33821BNmiHandler_Loop15
348224NmiHandler_Loop16
35822BNmiHandler_Loop17
36822FSetGoalScoredFlag
378233NmiHandler_Loop18
38823DNmiHandler_Loop19
398249NmiHandler_Loop20
40824CNmiHandler_Loop21
418263StartNewMatch
4282A6NmiHandler_Loop22
4382C0SetPlayerRecordEntry
4482CBNmiHandler_OnNonzero2
4582E3NmiHandler_Loop23
468307InitPlayerTimers
478309NmiHandler_OnNonnegative3
488330UpdateGameFrame
49833DNmiHandler_Loop24
508353NmiHandler_Loop25
518363NmiHandler_Loop26
52836DNmiHandler_Loop27
538380LoadFieldState
548382NmiHandler_OnNonnegative4
55838FClearOamBuffer
568393NmiHandler_OnNonzero3
57839DWriteVramBlockFromTable
5883C4NmiHandler_Loop28
5983C5ReadControllers
6083DCNmiHandler_Loop29
6183DENmiHandler_OnNonzero4
628405NmiHandler_Loop30
638406ApplyVramUpdateStream
648422NmiHandler_OnNonzero5
658431NmiHandler_OnNonzero6
66843BNmiHandler_Loop31
678449NmiHandler_Loop32
68844AClearScreenAndPalettes
698451ClearNameTableRows
708466NmiHandler_OnNonzero7
71847CNmiHandler_OnNonzero8
728495NmiHandler_OnNonzero9
73849CTickFrameTimers
7484A8NmiHandler_OnNonnegative5
7584AENmiHandler_Loop33
7684B8NmiHandler_Loop34
7784BDCallLevelHandler
7884DBNmiHandler_OnNonzero10
7984F1NmiHandler_Loop35
8084FDNmiHandler_Loop36
818500NmiHandler_OnNonzero11
828503NmiHandler_Loop37
838517ApplyVramStream
848521SetScrollX
858531SetScrollPosition
868548NmiHandler_OnNonzero12
87855FNmiHandler_OnNonzero13
888589SetTimerValue
898599NmiHandler_Loop38
90859APlayerRecordDataPart1
9185A3NmiHandler_Loop39
9285AAPlayerRecordDataPart2
9385ABPlayerRecordDataPart3
9485B4NmiHandler_OnZero2
9585D7NmiHandler_Loop40
9685DBNmiHandler_Loop41
978609NmiHandler_Loop42
98860FNmiHandler_Loop43
998614UpdatePlayerRecordFields
100862BNmiHandler_Loop44
101862CResetFrameCounter
1028637NmiHandler_Loop45
1038644NmiHandler_OnCarrySet
1048648NmiHandler_Loop46
105864DAdvanceFrameCounter
1068660NmiHandler_Loop47
107866CNmiHandler_Loop48
108866FSetFrameCounter
109867EReadFieldState
1108694NmiHandler_Loop49
11186A9NmiHandler_Loop50
11286ADSetGameState
11386B8NmiHandler_OnZero3
11486BFResetFrameCounters
11586C6NmiHandler_OnNonzero14
11686CCSetGameMode
11786D5SetVramPointerAndWrite
11886DCResetFrameCounterAlt
11986E4NmiHandler_Loop51
12086E5TickFrameCounter
12186EEResetMatchFlags
12286F6NmiHandler_OnNonzero15
12386F8NmiHandler_OnNonzero16
1248706ReadPlayerInput
125870ASetPlayerInput
126870EClearPlayerInput
1278712SetPlayerStateAlt
1288716ReadPlayerState
129871AWritePlayerState
130871EComparePlayerState
1318722SetPlayerDirection
1328724NmiHandler_Loop52
133872BNmiHandler_Loop53
1348731ReadPlayerDirection
135873ANmiHandler_Loop54
1368740ResetBallPosition
1378744ResetFieldObjects
1388748ResetFieldObjectsAlt
139874ANmiHandler_Loop55
1408751NmiHandler_Loop56
1418757ReadBallState
142875BWriteBallState
143875FSetBallFlag
1448775NmiHandler_Loop57
145877CNmiHandler_Loop58
1468782FieldDataPart1
1478786FieldDataPart2
148878EFieldDataPart3
1498792FieldDataPart4
1508796FieldDataPart5
151879AFieldDataPart6
152879EFieldDataPart7
15387A0NmiHandler_Loop59
15487A7NmiHandler_Loop60
15587A8NmiHandler_Loop61
15687ADUpdatePlayerSprite
15787E8NmiHandler_OnZero4
15887E9NmiHandler_Loop62
15987FDNmiHandler_OnNonzero17
160881ENmiHandler_Loop63
161882DNmiHandler_Loop64
1628835NmiHandler_OnNonzero18
1638859NmiHandler_Loop65
1648861HideOamSprites
165887CNmiHandler_Loop66
166887DReadFieldTile
1678883LoadLevelTileRow
16888AANmiHandler_Loop67
16988B0SetLevelPointer
17088D4NmiHandler_Loop68
17188DFSetLevelStartPosition
172891ANmiHandler_Loop69
1738997UpdateScore
17489A6SetScoreValue
17589BFNmiHandler_Loop70
17689C0NmiHandler_Loop71
17789DCUpdateGoal
17889EENmiHandler_Loop72
1798A0CNmiHandler_Loop73
1808A12NmiHandler_Loop74
1818A35NmiHandler_Loop75
1828A48NmiHandler_Loop76
1838A4ASetScoreDisplay
1848A5ANmiHandler_Loop77
1858A65NmiHandler_Loop78
1868A6AReadPlayerStat
1878A72NmiHandler_Loop79
1888A7BUpdatePlayerStat
1898A92NmiHandler_Loop80
1908A9BNmiHandler_Loop81
1918AB8NmiHandler_Loop82
1928ABEUpdatePlayerRecord
1938AE3NmiHandler_Loop83
1948AE8ReadPlayerRecordTail
1958AF1NmiHandler_Loop84
1968B03NmiHandler_Loop85
1978B07NmiHandler_Loop86
1988B08WritePlayerRecordByte
1998B10NmiHandler_Loop87
2008B1FNmiHandler_Loop88
2018B21NmiHandler_Loop89
2028B38ResetMatchState
2038B4ANmiHandler_Loop90
2048B4FNmiHandler_OnNonnegative6
2058B5FNmiHandler_Loop91
2068B87NmiHandler_Loop92
2078B8AMatchDataPart1
2088B8ENmiHandler_Loop93
2098B92NmiHandler_Loop94
2108B93NmiHandler_Loop95
2118BB2NmiHandler_Loop96
2128BC2ResetBall
2138BCFNmiHandler_Loop97
2148BE2NmiHandler_Loop98
2158C01NmiHandler_Loop99
2168C06NmiHandler_Loop100
2178C0CUpdateScoreDisplay
2188C52NmiHandler_Loop101
2198C64NmiHandler_OnZero5
2208C65NmiHandler_Loop102
2218C7ESetScoreDigits
2228CA6NmiHandler_Loop103
2238CADNmiHandler_Loop104
2248CB8NmiHandler_Loop105
2258CBFSetPlayerStats
2268CDENmiHandler_Loop106
2278CDFNmiHandler_Loop107
2288CEANmiHandler_Loop108
2298D08NmiHandler_Loop109
2308D10NmiHandler_Loop110
2318D12AdvancePlayerTimer
2328D1DNmiHandler_Loop111
2338D20NmiHandler_OnNonzero19
2348D35WriteVramRecord
2358DD4UpdatePlayerPositions
2368DE9NmiHandler_Loop112
2378DF8NmiHandler_Loop113
2388DF9NmiHandler_Loop114
2398E08NmiHandler_Loop115
2408E0BNmiHandler_Loop116
2418E32NmiHandler_Loop117
2428E40NmiHandler_Loop118
2438E45NmiHandler_Loop119
2448E4ENmiHandler_OnNonnegative7
2458E57ReadPlayerData
2468E61SetBallPosition
2478E6FNmiHandler_OnNonzero20
2488E80NmiHandler_Loop120
2498E8DSetPlayerDirectionAlt
2508EA8NmiHandler_OnNonnegative8
2518EB0NmiHandler_Loop121
2528ECDNmiHandler_Loop122
2538F21UpdatePlayerAi
2548F25NmiHandler_OnNonnegative9
2558F40NmiHandler_OnNonzero21
2568F44NmiHandler_OnNonzero22
2578F53NmiHandler_Loop123
2588F60NmiHandler_Loop124
2598F6BNmiHandler_Loop125
2608F82NmiHandler_Loop126
2618F99NmiHandler_Loop127
2628FA2NmiHandler_Loop128
2638FA9ReadFieldPointer
2648FADSetFieldPointer
2658FB7NmiHandler_OnNonzero23
2668FC5NmiHandler_Loop129
2678FD7NmiHandler_Loop130
2688FE4NmiHandler_Loop131
2698FE5SetFieldPointerAlt
2708FF0NmiHandler_Loop132
2719006NmiHandler_Loop133
2729013UpdateTeamPlayers
2739017NmiHandler_OnNonzero24
274901ESetPlayerIndex
2759028NmiHandler_OnNonzero25
2769043NmiHandler_OnNonzero26
2779050CallPlayerHandler
27890F9SetPlayerRecordField
2799103NmiHandler_OnZero6
280912BNmiHandler_Loop134
2819131NmiHandler_Loop135
2829138NmiHandler_Loop136
283913BNmiHandler_Loop137
284913ENmiHandler_Loop138
285914BUpdatePlayerPosition
2869172SetPlayerStateField
2879178NmiHandler_Loop139
2889186NmiHandler_Loop140
2899189SetPlayerFlagAlt
2909194NmiHandler_Loop141
2919197NmiHandler_OnNonzero27
29291A1NmiHandler_Loop142
29391BBNmiHandler_Loop143
29491C1NmiHandler_Loop144
29591D3NmiHandler_Loop145
29691DCNmiHandler_Loop146
29791FDNmiHandler_Loop147
2989204UpdatePlayerState
2999208ResetPlayerRecordAlt
3009218NmiHandler_Loop148
301921AReadPlayerPosition
3029224ResetPlayerRecordAlt2
303922AMovePlayer
304924DNmiHandler_Loop149
3059250UpdatePlayerSpeed
3069260NmiHandler_Loop150
3079267NmiHandler_Loop151
3089276ResetPlayerTimers
30992ACNmiHandler_Loop152
31092AFSetPlayerFlagAlt2
31192BCNmiHandler_Loop153
31292BFSetPlayerType
31392D7NmiHandler_OnNonzero28
31492EFNmiHandler_Loop154
31592FCNmiHandler_Loop155
3169305NmiHandler_Loop156
3179313NmiHandler_Loop157
318932ANmiHandler_Loop158
319932DInitPlayerRecord
320935ENmiHandler_Loop159
321936BGetFieldTile
322937DNmiHandler_Loop160
3239395NmiHandler_OnNonzero29
32493ADNmiHandler_Loop161
32593B8NmiHandler_OnNonzero30
32693D0NmiHandler_Loop162
32793D9NmiHandler_Loop163
32893DENmiHandler_Loop164
32993DFReadPlayerScriptByte
33093E9NmiHandler_Loop165
3319402SetPlayerDirectionFromData
332940CGetPlayerPosition
333941FNmiHandler_Loop166
3349426NmiHandler_Loop167
3359433NmiHandler_Loop168
336943ANmiHandler_Loop169
3379445NmiHandler_Loop170
3389447NmiHandler_OnNonzero31
339944FNmiHandler_Loop171
3409457NmiHandler_Loop172
3419465NmiHandler_Loop173
3429469NmiHandler_Loop174
343946BNmiHandler_Loop175
3449479NmiHandler_Loop176
3459481NmiHandler_Loop177
346948DNmiHandler_Loop178
347948EUpdatePlayerFrame
34894B4NmiHandler_Loop179
34994CANmiHandler_Loop180
35094ECNmiHandler_Loop181
3519502NmiHandler_Loop182
3529503FieldScriptDataPart1
3539507SetLevelPointerAlt
3549509NmiHandler_OnNonzero32
35597ECNmiHandler_OnZero7
35697F3NmiHandler_Loop183
35797FBNmiHandler_Loop184
3589813PlayerDataPart1
3599832NmiHandler_Loop185
360984ANmiHandler_OnNonzero33
361984CNmiHandler_OnZero8
362984FNmiHandler_Loop186
3639858NmiHandler_Loop187
364985BNmiHandler_Loop188
3659867NmiHandler_Loop189
3669876NmiHandler_Loop190
3679889NmiHandler_Loop191
3689897NmiHandler_Loop192
369989CNmiHandler_Loop193
37098A5NmiHandler_Loop194
37198B3NmiHandler_Loop195
37298B5NmiHandler_Loop196
37398EFPlayerDataPart2
37498F8PlayerDataPart3
3759909NmiHandler_Loop197
3769963SetPlayerRecordValue
377996ANmiHandler_OnNonzero34
378996BNmiHandler_Loop198
379997BNmiHandler_OnZero9
3809987NmiHandler_Loop199
381998FNmiHandler_OnZero10
3829999NmiHandler_Loop200
383999EWriteFieldData
38499ABNmiHandler_Loop201
38599C7ReadFieldData
38699CCNmiHandler_OnNonzero35
38799E7NmiHandler_Loop202
3889B45StartHalfTime
3899B4ANmiHandler_Loop203
3909B5ANmiHandler_Loop204
3919B6ANmiHandler_Loop205
3929B77NmiHandler_Loop206
3939B9BNmiHandler_Loop207
3949BA1NmiHandler_Loop208
3959BAANmiHandler_Loop209
3969BADSetPlayerRecordCounter
3979BBENmiHandler_Loop210
3989BC9NmiHandler_Loop211
3999BD1ReadPlayerRecordCounter
4009BE1NmiHandler_Loop212
4019BE2CallPlayerScript
4029BF4ResetPlayerRecordFields
4039C15ResetPlayerScriptState
4049C31NmiHandler_Loop213
4059C3CNmiHandler_Loop214
4069C53NmiHandler_Loop215
4079C7DPlayerScriptDataPart1
4089C87ResetPlayerScriptCounter
4099C93NmiHandler_Loop216
4109CA3NmiHandler_OnCarrySet2
4119CCENmiHandler_Loop217
4129CD2NmiHandler_Loop218
4139CD4NmiHandler_Loop219
4149CE5NmiHandler_Loop220
4159CE7NmiHandler_Loop221
4169CEFNmiHandler_Loop222
4179CF7NmiHandler_Loop223
4189CF8NmiHandler_Loop224
4199D00SetPlayerScriptState
4209D10NmiHandler_Loop225
4219D16ResetPlayerScriptStateAlt
4229D20ReadPlayerScriptState
4239D23ClearPlayerScriptState
4249D2ENmiHandler_Loop226
4259D3DCallPlayerScriptAlt
4269D4FResetPlayerScriptStateAlt2
4279D61ResetPlayerScriptStateAlt3
4289D7ENmiHandler_Loop227
4299D7FNmiHandler_Loop228
4309D97NmiHandler_OnNonzero36
4319D98NmiHandler_Loop229
4329DC3NmiHandler_Loop230
4339DCBNmiHandler_Loop231
4349DDCNmiHandler_Loop232
4359DDENmiHandler_Loop233
4369DF9SetPlayerScreenPosition
4379E12SetPlayerScreenPositionAlt
4389E22SetPlayerScreenPositionAlt2
4399E42NmiHandler_OnNonzero37
4409E5ENmiHandler_Loop234
4419E69NmiHandler_Loop235
4429E6BReadPlayerScriptCounter
4439E78NmiHandler_Loop236
4449E94NmiHandler_Loop237
4459E99NmiHandler_Loop238
4469EB1NmiHandler_Loop239
4479EB2NmiHandler_Loop240
4489EBENmiHandler_OnNonzero38
4499ED0NmiHandler_OnZero11
4509EE9NmiHandler_Loop241
4519EEBSetScoreField
4529F19NmiHandler_OnNonzero39
4539F25NmiHandler_Loop242
4549F49NmiHandler_Loop243
4559F4ANmiHandler_Loop244
4569F6EReadFieldCounter
4579F80NmiHandler_Loop245
458A092ResetLevelState
459A0ADNmiHandler_Loop246
460A0BAResetLevelCounter
461A0C4ResetLevelStateAlt
462A0C7SetLevelState
463A0CFNmiHandler_Loop247
464A0D0StartLevel
465A0D6InitLevelState
466A0E5NmiHandler_Loop248
467A0E7LoadLevelParameters
468A109StartLevelAlt
469A10FReadLevelCounter
470A11ENmiHandler_Loop249
471A131NmiHandler_Loop250
472A144NmiHandler_Loop251
473A15ANmiHandler_Loop252
474A165NmiHandler_Loop253
475A17DNmiHandler_Loop254
476A17EResetLevelCounterAlt
477A18ENmiHandler_Loop255
478A19DNmiHandler_Loop256
479A1BANmiHandler_Loop257
480A1BFNmiHandler_Loop258
481A1CENmiHandler_Loop259
482A1EBNmiHandler_Loop260
483A1F0NmiHandler_Loop261
484A35DCallPlayerScriptAlt2
485A37CNmiHandler_Loop262
486A392NmiHandler_OnNonzero40
487A3A9SetLevelFlag
488A3AFNmiHandler_Loop263
489A3B7PlayerScriptDataPart2
490A3BBNmiHandler_OnNonzero41
491A3E5ResetLevelFlag
492A400NmiHandler_Loop264
493A401ReadPlayerCounter
494A418NmiHandler_Loop265
495A42DNmiHandler_Loop266
496A439NmiHandler_OnNonzero42
497A43DNmiHandler_Loop267
498A45ANmiHandler_Loop268
499A477ResetPlayerFlag
500A47CInitPlayerRecordAlt
501A496InitPlayerRecordAlt2
502A4D0InitPlayerRecordAlt3
503A4D6ResetPlayerField
504A4E6SetPlayerField
505A4EDResetPlayerFieldAlt
506A4FANmiHandler_Loop269
507A52CClearPlayerField
508A536NmiHandler_Loop270
509A53CReadPlayerScriptTable
510A54BNmiHandler_Loop271
511A575ReadPlayerScriptTableAlt
512A584NmiHandler_Loop272
513A59ASetPlayerScreenPointer
514B5E3ReadPlayerCounterAlt
515B5F0NmiHandler_Loop273
516B5FFNmiHandler_Loop274
517B601NmiHandler_OnCarryClear
518B631NmiHandler_Loop275
519B653SetPlayerRecordFieldAlt
520B666NmiHandler_Loop276
521B667UpdatePlayerRecordAlt
522B6BANmiHandler_Loop277
523B6BBReadPlayerRecordField
524B6CCNmiHandler_Loop278
525B6D9NmiHandler_Loop279
526B6E9NmiHandler_Loop280
527B6FENmiHandler_Loop281
528B6FFSetPlayerRecordFieldAlt2
529B705ClearPlayerRecordField
530B716NmiHandler_Loop282
531B744NmiHandler_Loop283
532B75BNmiHandler_OnNonzero43
533B787NmiHandler_Loop284
534B795NmiHandler_Loop285
535B798NmiHandler_Loop286
536B7AEReadPlayerInputState
537B7B8NmiHandler_OnNonzero44
538B7C0SwapPlayerRecords
539B7DBNmiHandler_OnNonzero45
540B7E7UpdatePlayerInputState
541B829SetPlayerInputState
542B84ENmiHandler_Loop287
543B850NmiHandler_OnNonzero46
544B85AResetInputCounter
545B86CNmiHandler_Loop288
546B88DNmiHandler_Loop289
547B8AASetPlayerRecordValueAlt
548B8C0SetPlayerRecordValueAlt2
549B8C9NmiHandler_OnCarrySet3
550B8D0NmiHandler_OnNonzero47
551B8D1ReadFieldPointerAlt
552B8ECNmiHandler_Loop290
553B907NmiHandler_Loop291
554B95ANmiHandler_Loop292
555B972NmiHandler_Loop293
556B97ENmiHandler_OnNonnegative10
557B99DNmiHandler_Loop294
558B99EReadFieldPointerAlt2
559B9AFAdvanceFieldPointer
560B9B0SetFieldPointerValue
561B9B8NmiHandler_OnNonzero48
562B9CFNmiHandler_Loop295
563B9D6NmiHandler_Loop296
564B9D8FieldPointerDataPart1
565B9D9FieldPointerDataPart2
566B9E1FieldPointerDataPart4
567B9E8SetPlayerRecordValueAlt3
568B9F1ReadPlayerRecordValue
569B9F7NmiHandler_OnCarrySet4
570BA0FFieldPointerDataPart6
571BA13AdvanceFieldPointerAlt
572BA19ReadFieldPointerAlt3
573BA25NmiHandler_Loop297
574BA36NmiHandler_Loop298
575BA37FieldPointerDataPart7
576BA38FieldPointerDataPart8
577BA3DNmiHandler_Loop299
578BA45FieldPointerDataPart10
579BA47Sub_BA47
580BA48SubCBA48
581BA5BNmiHandler_Loop300
582BA6ANmiHandler_Loop301
583BA79NmiHandler_Loop302
584BA88NmiHandler_Loop303
585BA8ANmiHandler_Loop304
586BA8CNmiHandler_Loop305
587BA8FNmiHandler_Loop306
588BA9DNmiHandler_Loop307
589BAB0NmiHandler_Loop308
590BAB1UpdateFieldPointer
591BABDNmiHandler_OnNonzero49
592BACCNmiHandler_Loop309
593BAD1NmiHandler_Loop310
594BAE0NmiHandler_Loop311
595BAF5NmiHandler_Loop312
596BAF7NmiHandler_OnNonzero50
597BB10NmiHandler_Loop313
598BB31NmiHandler_Loop314
599BB39NmiHandler_Loop315
600BB51NmiHandler_Loop316
601BB5DNmiHandler_Loop317
602BB67NmiHandler_Loop318
603BB7BNmiHandler_Loop319
604BB88NmiHandler_Loop320
605BB89GetPlayerFieldOffset
606BB9ENmiHandler_Loop321
607BBB5NmiHandler_OnNonnegative11
608BBBDNmiHandler_OnNonnegative12
609BBE2NmiHandler_Loop322
610BBE5Sub_BBE5
611BBE7NmiHandler_OnNonzero51
612BBF9NmiHandler_Loop323
613BBFFNmiHandler_Loop324
614BC12NmiHandler_Loop325
615BC25SetPlayerFieldAlt
616BC51NmiHandler_Loop326
617BC59NmiHandler_Loop327
618BC66NmiHandler_Loop328
619BC6ENmiHandler_Loop329
620BC7BNmiHandler_Loop330
621BC7ENmiHandler_Loop331
622BC81NmiHandler_Loop332
623BC84NmiHandler_Loop333
624BC8ANmiHandler_Loop334
625BC9DNmiHandler_Loop335
626BCA5NmiHandler_Loop336
627BCB0NmiHandler_Loop337
628BCBDNmiHandler_Loop338
629BCC5NmiHandler_Loop339
630BCD4NmiHandler_Loop340
631BCDCNmiHandler_Loop341
632BCF5NmiHandler_Loop342
633BCF6SetFieldPointerValue2
634BD05NmiHandler_Loop343
635BD0ANmiHandler_OnNonzero52
636BD11UpdatePlayerScreen
637BD38NmiHandler_Loop344
638BD4FNmiHandler_Loop345
639BD6BNmiHandler_Loop346
640BD7DNmiHandler_Loop347
641BD89NmiHandler_Loop348
642BD91NmiHandler_Loop349
643BD92ReadPlayerFlag
644BD9DNmiHandler_Loop350
645BDA2NmiHandler_Loop351
646BDAFNmiHandler_Loop352
647BDB5ResetPlayerPositions
648BDB7NmiHandler_OnNonzero53
649BE07NmiHandler_OnNonzero54
650BE16SubCBE16
651BE1ALoadPlayerRecordFromTable
652BE43NmiHandler_Loop353
653BE55InitNewMatchState
654BF0CUpdateFieldObjects
655BF25NmiHandler_Loop354
656BF26NmiHandler_Loop355
657BF2ANmiHandler_Loop356
658BF48NmiHandler_Loop357
659BF55NmiHandler_Loop358
660BF72NmiHandler_Loop359
661BF79NmiHandler_Loop360
662BF7CNmiHandler_Loop361
663BF83SetScoreValueAlt
664BFA7NmiHandler_Loop362
665BFACClearScoreValue
666BFBDWriteScoreValue
667BFD4NmiHandler_Loop363
668BFEDNmiHandler_Loop364
669BFF2ResetScoreValue
670C003AdvanceScoreValue
671C01ANmiHandler_Loop365
672C020NmiHandler_OnZero12
673C023NmiHandler_Loop366
674C040NmiHandler_Loop367
675C080NmiHandler_Loop368
676C08ANmiHandler_Loop369
677C08DNmiHandler_Loop370
678C0A2NmiHandler_Loop371
679C0B1NmiHandler_Loop372
680C0B8WriteFieldByte
681C0BEWriteFieldByteAlt
682C0C9ResetPlayerState
683C0EAUpdatePlayerSpriteAlt
684C101NmiHandler_Loop373
685C116NmiHandler_Loop374
686C11DSetPlayerValue
687C130NmiHandler_OnZero13
688C131NmiHandler_Loop375
689C148NmiHandler_Loop376
690C14DNmiHandler_Loop377
691C162NmiHandler_Loop378
692C16ANmiHandler_Loop379
693C172NmiHandler_Loop380
694C17FNmiHandler_Loop381
695C182NmiHandler_Loop382
696C189NmiHandler_Loop383
697C19ANmiHandler_Loop384
698C19DNmiHandler_Loop385
699C1ABNmiHandler_Loop386
700C1BCNmiHandler_Loop387
701C1C1ReadPlayerValue
702C1D3NmiHandler_Loop388
703C1DAWritePlayerValue
704C1E3Sub_C1E3
705C1F8NmiHandler_Loop389
706C1FBNmiHandler_Loop390
707C217NmiHandler_Loop391
708C21CReadPlayerValueAlt
709C22ENmiHandler_Loop392
710C235WritePlayerValueAlt
711C23BNmiHandler_Loop393
712C254NmiHandler_Loop394
713C25BNmiHandler_Loop395
714C277NmiHandler_Loop396
715C288NmiHandler_Loop397
716C29FNmiHandler_Loop398
717C2A2NmiHandler_Loop399
718C2ABNmiHandler_Loop400
719C2CBNmiHandler_OnNonzero55
720C2CENmiHandler_Loop401
721C30CSetFieldValue
722C312ReadFieldValue
723C315NmiHandler_OnNonzero56
724C319ReadPlayerValueAlt2
725C31DNmiHandler_OnCarryClear2
726C32ENmiHandler_Loop402
727C33DNmiHandler_Loop403
728C351NmiHandler_Loop404
729C355NmiHandler_Loop405
730C358NmiHandler_Loop406
731C36FNmiHandler_Loop407
732C370SetFieldCounter
733C373SubCC373
734C38BResetFieldCounter
735C397NmiHandler_Loop408
736C39DNmiHandler_Loop409
737C3B1ResetPlayerStateAlt
738C3C6SubCC3C6
739C3CFNmiHandler_Loop410
740C3E5NmiHandler_Loop411
741C3F5ReadSoundTableByte
742C3FBSubCC3FB
743C3FDNmiHandler_OnNonzero57
744C409NmiHandler_Loop412
745C40ASoundScriptDataPart1
746C502SubCC502
747C503SubCC503
748C513NmiHandler_Loop413
749C517SubCC517
750C528NmiHandler_Loop414
751C52AReadSoundValue
752C53ASubCC53A
753C552NmiHandler_Loop415
754C55ANmiHandler_Loop416
755C563NmiHandler_Loop417
756C571NmiHandler_Loop418
757C5CDNmiHandler_Loop419
758C5D5ResetSoundState
759C604NmiHandler_Loop420
760C60ANmiHandler_OnZero14
761C60BSubCC60B
762C619NmiHandler_Loop421
763C62DNmiHandler_Loop422
764C634NmiHandler_Loop423
765C644NmiHandler_Loop424
766C688NmiHandler_OnZero15
767C689NmiHandler_Loop425
768C6C7NmiHandler_Loop426
769C6DBSubCC6DB
770C707NmiHandler_Loop427
771C716NmiHandler_Loop428
772C718SetPlayerStateValue
773C721NmiHandler_Loop429
774C730NmiHandler_Loop430
775C738NmiHandler_Loop431
776C745NmiHandler_Loop432
777C776SetPlayerRecordFields
778C795NmiHandler_Loop433
779C7C0NmiHandler_Loop434
780C7CBSetPlayerFlag
781C7D9ResetPlayerCounters
782C7E2SetPlayerCounterAlt
783C7E7NmiHandler_Loop435
784C804NmiHandler_Loop436
785C80ESubCC80E
786C81ANmiHandler_OnNonzero58
787C82CSubCC82C
788C831NmiHandler_Loop437
789C83ASubCC83A
790C83CNmiHandler_OnNonzero59
791C864NmiHandler_Loop438
792C86FNmiHandler_Loop439
793C880NmiHandler_Loop440
794C886NmiHandler_OnZero16
795C891SubCC891
796C89ASubCC89A
797C89FReadPlayerLevel
798C8ABNmiHandler_Loop441
799C8C2NmiHandler_Loop442
800C8DDNmiHandler_Loop443
801C8E1Sub_C8E1
802C8E8NmiHandler_Loop444
803C907NmiHandler_Loop445
804C90CNmiHandler_Loop446
805C92ANmiHandler_OnNonzero60
806C940NmiHandler_Loop447
807C952SetFieldPointerAlt2
808C95BNmiHandler_Loop448
809C95DNmiHandler_OnNonzero61
810C973NmiHandler_Loop449
811C98FNmiHandler_Loop450
812C9AANmiHandler_OnNonzero62
813C9C0NmiHandler_Loop451
814C9D5Sub_C9D5
815C9DCNmiHandler_Loop452
816C9E2NmiHandler_OnNonzero63
817C9ECNmiHandler_Loop453
818C9EENmiHandler_OnNonzero64
819C9FBNmiHandler_Loop454
820CA07SubCCA07
821CA17NmiHandler_Loop455
822CA31NmiHandler_Loop456
823CA44NmiHandler_Loop457
824CA47SetPlayerPosition
825CA52NmiHandler_Loop458
826CA63NmiHandler_Loop459
827CA66SetPlayerPositionAlt
828CA71NmiHandler_Loop460
829CA72SetPlayerSpeed
830CA73SetPlayerScoreValue
831CA82SetPlayerScoreValueAlt
832CA99SubCCA99
833CAA5NmiHandler_Loop461
834CAB0NmiHandler_Loop462
835CAB6NmiHandler_Loop463
836CAB9SetPlayerTimer
837CABDNmiHandler_Loop464
838CADBNmiHandler_OnCarryClear3
839CAEBNmiHandler_Loop465
840CAEFNmiHandler_Loop466
841CAF9SubCCAF9
842CAFENmiHandler_Loop467
843CB20NmiHandler_Loop468
844CB2ANmiHandler_Loop469
845CB4ENmiHandler_Loop470
846CB57NmiHandler_Loop471
847CB61NmiHandler_Loop472
848CB68NmiHandler_Loop473
849CB7ESub_CB7E
850CBB8NmiHandler_Loop474
851CBC7SetPlayerStateAlt2
852CBDBNmiHandler_Loop475
853CBE8Sub_CBE8
854CBF2NmiHandler_Loop476
855CBF9NmiHandler_Loop477
856CC12ReadFieldValueAlt
857CC19NmiHandler_Loop478
858CC39NmiHandler_Loop479
859CC40ResetPlayerTimersAlt2
860CC61NmiHandler_Loop480
861CC65NmiHandler_Loop481
862CC70NmiHandler_Loop482
863CC72NmiHandler_Loop483
864CC86ResetPlayerRecordAlt3
865CC8CNmiHandler_Loop484
866CCB4NmiHandler_Loop485
867CCC3SetPlayerValueAlt
868CCCENmiHandler_Loop486
869CCD1SetPlayerValueAlt2
870CCD9NmiHandler_Loop487
871CCF9NmiHandler_Loop488
872CD00NmiHandler_Loop489
873CD01SubCCD01
874CD18NmiHandler_Loop490
875CD37SetPlayerLevelAlt
876CD3CNmiHandler_Loop491
877CD3DSubCCD3D
878CD61NmiHandler_Loop492
879CD6BSetPlayerFlagAlt3
880CD76NmiHandler_Loop493
881CD82NmiHandler_Loop494
882CD87NmiHandler_Loop495
883CD93NmiHandler_Loop496
884CD95SetPlayerValueAlt3
885CDABNmiHandler_Loop497
886CDB4SetPlayerValueAlt4
887CDC1NmiHandler_Loop498
888CDC2ResetPlayerTimersAlt
889CDF2NmiHandler_Loop499
890CE03NmiHandler_Loop500
891CE0DNmiHandler_Loop501
892CE1DNmiHandler_Loop502
893CE24NmiHandler_Loop503
894CE34SubCCE34
895CE42NmiHandler_Loop504
896CE55NmiHandler_Loop505
897CE5DNmiHandler_Loop506
898CE60NmiHandler_Loop507
899CE91NmiHandler_Loop508
900CEA0NmiHandler_OnNonzero65
901CEAFNmiHandler_OnNonzero66
902CEB0NmiHandler_Loop509
903CEBDNmiHandler_Loop510
904CEC8NmiHandler_Loop511
905CEDBResetPlayerStateAlt3
906CF1DNmiHandler_Loop512
907CF22NmiHandler_Loop513
908CF23NmiHandler_Loop514
909CF31NmiHandler_Loop515
910CF47NmiHandler_Loop516
911CF57NmiHandler_Loop517
912CF69NmiHandler_Loop518
913CF79NmiHandler_Loop519
914CF7ASub_CF7A
915CF88NmiHandler_Loop520
916CFA9NmiHandler_Loop521
917CFB3NmiHandler_Loop522
918CFB7SetPlayerCounterAlt2
919CFD8NmiHandler_Loop523
920CFE2NmiHandler_Loop524
921CFE3ReadPlayerLevelAlt2
922CFE5NmiHandler_OnNonzero67
923D00ESetPlayerLevelAlt2
924D015NmiHandler_OnNonzero68
925D016NmiHandler_Loop525
926D056NmiHandler_Loop526
927D05CNmiHandler_Loop527
928D063NmiHandler_OnNonzero69
929D06BNmiHandler_Loop528
930D07BNmiHandler_Loop529
931D08ENmiHandler_Loop530
932D096ResetPlayerPosition
933D0A8NmiHandler_Loop531
934D0C3ReadPlayerFlagAlt
935D0CBNmiHandler_Loop532
936D0CDSetPlayerCounterAlt3
937D0E1NmiHandler_Loop533
938D0F5NmiHandler_Loop534
939D0F8NmiHandler_Loop535
940D10CNmiHandler_Loop536
941D120NmiHandler_Loop537
942D123NmiHandler_Loop538
943D131NmiHandler_Loop539
944D134NmiHandler_Loop540
945D138NmiHandler_Loop541
946D139UpdatePlayerLevel
947D13FNmiHandler_OnNonzero70
948D149NmiHandler_Loop542
949D14BNmiHandler_OnNonzero71
950D158NmiHandler_Loop543
951D164SetPlayerPositionAlt2
952D17BNmiHandler_Loop544
953D196NmiHandler_Loop545
954D19ASetFieldOffsetAlt
955D1A1NmiHandler_Loop546
956D1C0NmiHandler_Loop547
957D1C5NmiHandler_Loop548
958D1E3NmiHandler_OnNonzero72
959D1F9NmiHandler_Loop549
960D20BSetFieldPointerAlt3
961D214NmiHandler_Loop550
962D216NmiHandler_OnNonzero73
963D22CNmiHandler_Loop551
964D248NmiHandler_Loop552
965D263NmiHandler_OnNonzero74
966D279NmiHandler_Loop553
967D625UpdatePlayerLevelAlt
968D62FNmiHandler_Loop554
969D638NmiHandler_Loop555
970D64DNmiHandler_Loop556
971D679NmiHandler_Loop557
972D6C9NmiHandler_Loop558
973D6D6NmiHandler_Loop559
974D709NmiHandler_Loop560
975D70ANmiHandler_Loop561
976D71ENmiHandler_Loop562
977D738NmiHandler_Loop563
978D744SetPlayerRecordValueAlt9
979D750NmiHandler_Loop564
980D76ANmiHandler_Loop565
981D786NmiHandler_Loop566
982D796NmiHandler_Loop567
983D797ReadFieldValueAlt2
984D7B6NmiHandler_OnZero17
985D7B7NmiHandler_Loop568
986D7D4NmiHandler_Loop569
987D7E0NmiHandler_OnNonzero75
988D7EENmiHandler_Loop570
989D7FDNmiHandler_Loop571
990D812NmiHandler_Loop572
991D819NmiHandler_Loop573
992D823NmiHandler_OnNonzero76
993D839NmiHandler_Loop574
994D857NmiHandler_Loop575
995D870NmiHandler_Loop576
996D88ENmiHandler_Loop577
997D89ANmiHandler_Loop578
998D8BANmiHandler_Loop579
999D8C6NmiHandler_Loop580
1000D8CASetFieldPointerAlt4
1001D8E1SetPlayerRecordValueAlt5
1002D8EDNmiHandler_Loop581
1003D911NmiHandler_Loop582
1004D958ReadPlayerValueAlt5
1005D95ANmiHandler_OnNonzero77
1006D97BNmiHandler_Loop583
1007D97CSetFieldPointerAlt5
1008D97ENmiHandler_OnNonzero78
1009D985SetFieldPointerAlt7
1010D99CNmiHandler_Loop584
1011D9A9NmiHandler_Loop585
1012D9ADSubCD9AD
1013D9D3NmiHandler_Loop586
1014D9FBNmiHandler_Loop587
1015DA0BNmiHandler_Loop588
1016DA0ESetPlayerRecordValueAlt6
1017DA12ReadPlayerRecordFromTable
1018DA2ESetFieldPointerAlt6
1019DA3ANmiHandler_Loop589
1020DA4CSubCDA4C
1021DA4DSubCDA4D
1022DA55SubCDA55
1023DA5CNmiHandler_OnZero18
1024DA63SubCDA63
1025DA84NmiHandler_Loop590
1026DAA7NmiHandler_Loop591
1027DAB5NmiHandler_Loop592
1028DAEANmiHandler_Loop593
1029DAF4NmiHandler_Loop594
1030DB0ENmiHandler_Loop595
1031DB2CNmiHandler_Loop596
1032DB49NmiHandler_Loop597
1033DB57SubCDB57
1034DB65NmiHandler_Loop598
1035DB8CNmiHandler_Loop599
1036DB8FNmiHandler_Loop600
1037DB97NmiHandler_Loop601
1038DC37SetPlayerRecordValueAlt7
1039DC40ReadPlayerValueAlt6
1040DC4AReadPlayerValueAlt7
1041DC58NmiHandler_Loop602
1042DC67NmiHandler_Loop603
1043DC6BNmiHandler_OnNonzero79
1044DC77NmiHandler_Loop604
1045DC7ENmiHandler_Loop605
1046DC7FNmiHandler_Loop606
1047DC93GetPlayerPositionAlt2
1048DCCANmiHandler_Loop607
1049DCCFGetPlayerPositionAlt
1050DCE4NmiHandler_Loop608
1051DCEDNmiHandler_Loop609
1052DCEEUpdatePlayerStateAlt
1053DCFANmiHandler_Loop610
1054DD06NmiHandler_Loop611
1055DD0BSetPlayerValueAlt5
1056DD1CNmiHandler_Loop612
1057DD32NmiHandler_Loop613
1058DD3FNmiHandler_Loop614
1059DD5ANmiHandler_Loop615
1060DD5FNmiHandler_Loop616
1061DD60NmiHandler_Loop617
1062DD6CNmiHandler_OnZero19
1063DD73NmiHandler_Loop618
1064DD94NmiHandler_Loop619
1065DEB3SetPlayerValueAlt6
1066DEC9NmiHandler_Loop620
1067DEDANmiHandler_Loop621
1068DEF1NmiHandler_OnNonzero80
1069DF35NmiHandler_Loop622
1070DF41NmiHandler_Loop623
1071DF5FNmiHandler_Loop624
1072DFD4NmiHandler_OnNonzero81
1073DFF0SubCDFF0
1074E0E6SetFieldCounterAlt
1075E0F6NmiHandler_Loop625
1076E118NmiHandler_Loop626
1077E12BNmiHandler_Loop627
1078E12CNmiHandler_Loop628
1079E46AReadPlayerLevelAlt3
1080E476NmiHandler_Loop629
1081E47ENmiHandler_Loop630
1082E48ANmiHandler_Loop631
1083E499NmiHandler_Loop632
1084E4CCNmiHandler_Loop633
1085E4E8NmiHandler_OnCarrySet5
1086E4E9NmiHandler_Loop634
1087E523NmiHandler_Loop635
1088E530NmiHandler_Loop636
1089E54ANmiHandler_Loop637
1090E554NmiHandler_Loop638
1091E555SetPlayerRecordValueAlt8
1092E562ResetPlayerStateAlt4
1093E579NmiHandler_Loop639
1094E58CNmiHandler_Loop640
1095E59DNmiHandler_Loop641
1096E59ESubCE59E
1097E5B0SubCE5B0
1098E5BANmiHandler_Loop642
1099E5D4NmiHandler_OnNonzero82
1100E601NmiHandler_OnNonzero83
1101E605NmiHandler_OnNonzero84
1102E622NmiHandler_OnNonzero85
1103E633SubCE633
1104E63ENmiHandler_Loop643
1105E63FSubCE63F
1106E64BNmiHandler_Loop644
1107E64DNmiHandler_OnNonzero86
1108E65ANmiHandler_Loop645
1109E663SubCE663
1110E672NmiHandler_Loop646
1111F500UpdateSoundEngine
1112F53ANmiHandler_Loop647
1113F544NmiHandler_Loop648
1114F549NmiHandler_Loop649
1115F54DSetPulse1ControlAndSweep
1116F554SetPulse1ControlAndNote
1117F557SetPulse1Timer
1118F559NmiHandler_OnNonzero87
1119F56ANmiHandler_Loop650
1120F56BSetPulse2ControlAndSweep
1121F572SetPulse2Timer
1122F576SetTriangleTimer
1123F57AAdvanceMusicSequence
1124F586NmiHandler_Loop651
1125F596NmiHandler_Loop652
1126F59FNmiHandler_Loop653
1127F5A9NmiHandler_Loop654
1128F5AFNmiHandler_Loop655
1129F5B5NmiHandler_Loop656
1130F5C0NmiHandler_Loop657
1131F5D3NmiHandler_Loop658
1132F5D4SilenceTriangleAndPulse2
1133F5E2NmiHandler_OnNonzero88
1134F5E6PlayNoteOnPulse1
1135F5FDNmiHandler_Loop659
1136F601NmiHandler_OnCarrySet6
1137F605NmiHandler_OnCarrySet7
1138F609NmiHandler_OnCarrySet8
1139F618NmiHandler_OnCarrySet9
1140F623NmiHandler_Loop660
1141F626NmiHandler_OnCarrySet10
1142F62ENmiHandler_OnCarrySet11
1143F634NmiHandler_Loop661
1144F63DNmiHandler_Loop662
1145F641NmiHandler_Loop663
1146F645NmiHandler_Loop664
1147F64ANmiHandler_Loop665
1148F64BNmiHandler_OnCarrySet12
1149F64ENmiHandler_OnCarrySet13
1150F651AdvanceSoundEffectSequence
1151F692NmiHandler_Loop666
1152F693NmiHandler_OnZero20
1153F696NmiHandler_Loop667
1154F6A5NmiHandler_Loop668
1155F6A8NmiHandler_Loop669
1156F6C4NmiHandler_OnNonzero89
1157F6C9NmiHandler_Loop670
1158F6E4NmiHandler_Loop671
1159F6E9NmiHandler_Loop672
1160F6F6NmiHandler_Loop673
1161F6FBAdvanceSoundEffectSequenceAlt
1162F70BNmiHandler_Loop674
1163F70ENmiHandler_Loop675
1164F71ENmiHandler_OnZero21
1165F726NmiHandler_Loop676
1166F738NmiHandler_Loop677
1167F741NmiHandler_Loop678
1168F745NmiHandler_Loop679
1169F74BNmiHandler_OnCarrySet14
1170F751NmiHandler_OnCarrySet15
1171F769NmiHandler_OnNonzero90
1172F76DNmiHandler_Loop680
1173F777NmiHandler_Loop681
1174F778AdvanceMusicSequenceAlt
1175F794NmiHandler_Loop682
1176F7A3NmiHandler_Loop683
1177F7ADNmiHandler_Loop684
1178F7B3NmiHandler_Loop685
1179F7B9NmiHandler_Loop686
1180F7C2NmiHandler_Loop687
1181F7D7NmiHandler_OnNonzero91
1182F7D9NmiHandler_Loop688
1183F7DFNmiHandler_Loop689
1184F7F4ResetSoundCounters
1185F804NmiHandler_Loop690
1186F80DNmiHandler_Loop691
1187F81DNmiHandler_OnNonzero92
1188F823NmiHandler_OnCarryClear4
1189F857NmiHandler_Loop692
1190F85BNmiHandler_OnNonzero93
1191F87ENmiHandler_Loop693
1192F888NmiHandler_Loop694
1193F894SilencePulse2
1194F89FNmiHandler_Loop695
1195F8AFNmiHandler_Loop696
1196F8CBNmiHandler_Loop697
1197F8CENmiHandler_Loop698
1198F8F0NmiHandler_Loop699
1199F8FDNmiHandler_Loop700
1200F907NmiHandler_Loop701
1201F909NmiHandler_Loop702
1202F915NmiHandler_Loop703
1203F91ASetPulse1Control
1204F92BNmiHandler_Loop704
1205F934NmiHandler_Loop705
1206F93ENmiHandler_Loop706
1207F949NmiHandler_Loop707
1208F94CNmiHandler_Loop708
1209F94FNmiHandler_Loop709
1210F957NmiHandler_OnNonzero94
1211F969NmiHandler_Loop710
1212F98BNmiHandler_Loop711
1213F998NmiHandler_Loop712
1214F99CNmiHandler_Loop713
1215F99ENmiHandler_Loop714
1216F9A7NmiHandler_Loop715
1217F9B3NmiHandler_Loop716
1218F9B9NmiHandler_Loop717
1219F9D4NmiHandler_Loop718
1220F9DFNmiHandler_Loop719
1221F9EANmiHandler_Loop720
1222FA10NmiHandler_Loop721
1223FA16NmiHandler_Loop722
1224FA1FNmiHandler_Loop723
1225FA20LookUpNotePeriod
1226FB06SubCFB06
1227FFF7StartSoundEngine
1228# ---- derived internal branch-target names ----
12298000Reset
1230800AReset_OnNonnegative
12318013Reset_OnNonnegative2
12328021Reset_OnNonzero
12338044Reset_OnNonnegative3
1234804FReset_Loop
12358082Reset_OnNonzero2
12368095InitGameState
1237809FNmiHandler
123880A7NmiHandler_OnNonnegative
123980D6NmiHandler_OnNonzero
124080DDNmiHandler_OnZero
124180E4NmiHandler_Loop
124280EEReadPlayerRecordByte
124380F2SetPlayerRecordByte
124480F9NmiHandler_Loop2
12458112NmiHandler_Loop3
12468118NmiHandler_OnNonnegative2
12478137NmiHandler_Loop4
12488146NmiHandler_Loop5
12498158NmiHandler_Loop6
1250815CNmiHandler_Loop7
12518161ReadPlayerRecordWord
1252818AResetPlayerRecord
125381A0NmiHandler_Loop8
125481A7NmiHandler_Loop9
125581BBResetPlayerOnGoal
125681C2NmiHandler_Loop10
125781E7NmiHandler_Loop11
125881EFNmiHandler_Loop12
12598200NmiHandler_Loop13
12608213NmiHandler_Loop14
1261821BNmiHandler_Loop15
12628224NmiHandler_Loop16
1263822BNmiHandler_Loop17
1264822FSetGoalScoredFlag
12658233NmiHandler_Loop18
1266823DNmiHandler_Loop19
12678249NmiHandler_Loop20
1268824CNmiHandler_Loop21
12698263StartNewMatch
127082A6NmiHandler_Loop22
127182C0SetPlayerRecordEntry
127282CBNmiHandler_OnNonzero2
127382E3NmiHandler_Loop23
12748307InitPlayerTimers
12758309NmiHandler_OnNonnegative3
12768330UpdateGameFrame
1277833DNmiHandler_Loop24
12788353NmiHandler_Loop25
12798363NmiHandler_Loop26
1280836DNmiHandler_Loop27
12818380LoadFieldState
12828382NmiHandler_OnNonnegative4
1283838FClearOamBuffer
12848393NmiHandler_OnNonzero3
1285839DWriteVramBlockFromTable
128683C4NmiHandler_Loop28
128783C5ReadControllers
128883DCNmiHandler_Loop29
128983DENmiHandler_OnNonzero4
12908405NmiHandler_Loop30
12918406ApplyVramUpdateStream
12928422NmiHandler_OnNonzero5
12938431NmiHandler_OnNonzero6
1294843BNmiHandler_Loop31
12958449NmiHandler_Loop32
1296844AClearScreenAndPalettes
12978451ClearNameTableRows
12988466NmiHandler_OnNonzero7
1299847CNmiHandler_OnNonzero8
13008495NmiHandler_OnNonzero9
1301849CTickFrameTimers
130284A8NmiHandler_OnNonnegative5
130384AENmiHandler_Loop33
130484B8NmiHandler_Loop34
130584BDCallLevelHandler
130684DBNmiHandler_OnNonzero10
130784F1NmiHandler_Loop35
130884FDNmiHandler_Loop36
13098500NmiHandler_OnNonzero11
13108503NmiHandler_Loop37
13118517ApplyVramStream
13128521SetScrollX
13138531SetScrollPosition
13148548NmiHandler_OnNonzero12
1315855FNmiHandler_OnNonzero13
13168589SetTimerValue
13178599NmiHandler_Loop38
1318859APlayerRecordDataPart1
131985A3NmiHandler_Loop39
132085AAPlayerRecordDataPart2
132185ABPlayerRecordDataPart3
132285B4NmiHandler_OnZero2
132385D7NmiHandler_Loop40
132485DBNmiHandler_Loop41
13258609NmiHandler_Loop42
1326860FNmiHandler_Loop43
13278614UpdatePlayerRecordFields
1328862BNmiHandler_Loop44
1329862CResetFrameCounter
13308637NmiHandler_Loop45
13318644NmiHandler_OnCarrySet
13328648NmiHandler_Loop46
1333864DAdvanceFrameCounter
13348660NmiHandler_Loop47
1335866CNmiHandler_Loop48
1336866FSetFrameCounter
1337867EReadFieldState
13388694NmiHandler_Loop49
133986A9NmiHandler_Loop50
134086ADSetGameState
134186B8NmiHandler_OnZero3
134286BFResetFrameCounters
134386C6NmiHandler_OnNonzero14
134486CCSetGameMode
134586D5SetVramPointerAndWrite
134686DCResetFrameCounterAlt
134786E4NmiHandler_Loop51
134886E5TickFrameCounter
134986EEResetMatchFlags
135086F6NmiHandler_OnNonzero15
135186F8NmiHandler_OnNonzero16
13528706ReadPlayerInput
1353870ASetPlayerInput
1354870EClearPlayerInput
13558712SetPlayerStateAlt
13568716ReadPlayerState
1357871AWritePlayerState
1358871EComparePlayerState
13598722SetPlayerDirection
13608724NmiHandler_Loop52
1361872BNmiHandler_Loop53
13628731ReadPlayerDirection
1363873ANmiHandler_Loop54
13648740ResetBallPosition
13658744ResetFieldObjects
13668748ResetFieldObjectsAlt
1367874ANmiHandler_Loop55
13688751NmiHandler_Loop56
13698757ReadBallState
1370875BWriteBallState
1371875FSetBallFlag
13728775NmiHandler_Loop57
1373877CNmiHandler_Loop58
13748782FieldDataPart1
13758786FieldDataPart2
1376878EFieldDataPart3
13778792FieldDataPart4
13788796FieldDataPart5
1379879AFieldDataPart6
1380879EFieldDataPart7
138187A0NmiHandler_Loop59
138287A7NmiHandler_Loop60
138387A8NmiHandler_Loop61
138487ADUpdatePlayerSprite
138587E8NmiHandler_OnZero4
138687E9NmiHandler_Loop62
138787FDNmiHandler_OnNonzero17
1388881ENmiHandler_Loop63
1389882DNmiHandler_Loop64
13908835NmiHandler_OnNonzero18
13918859NmiHandler_Loop65
13928861HideOamSprites
1393887CNmiHandler_Loop66
1394887DReadFieldTile
13958883LoadLevelTileRow
139688AANmiHandler_Loop67
139788B0SetLevelPointer
139888D4NmiHandler_Loop68
139988DFSetLevelStartPosition
1400891ANmiHandler_Loop69
14018997UpdateScore
140289A6SetScoreValue
140389BFNmiHandler_Loop70
140489C0NmiHandler_Loop71
140589DCUpdateGoal
140689EENmiHandler_Loop72
14078A0CNmiHandler_Loop73
14088A12NmiHandler_Loop74
14098A35NmiHandler_Loop75
14108A48NmiHandler_Loop76
14118A4ASetScoreDisplay
14128A5ANmiHandler_Loop77
14138A65NmiHandler_Loop78
14148A6AReadPlayerStat
14158A72NmiHandler_Loop79
14168A7BUpdatePlayerStat
14178A92NmiHandler_Loop80
14188A9BNmiHandler_Loop81
14198AB8NmiHandler_Loop82
14208ABEUpdatePlayerRecord
14218AE3NmiHandler_Loop83
14228AE8ReadPlayerRecordTail
14238AF1NmiHandler_Loop84
14248B03NmiHandler_Loop85
14258B07NmiHandler_Loop86
14268B08WritePlayerRecordByte
14278B10NmiHandler_Loop87
14288B1FNmiHandler_Loop88
14298B21NmiHandler_Loop89
14308B38ResetMatchState
14318B4ANmiHandler_Loop90
14328B4FNmiHandler_OnNonnegative6
14338B5FNmiHandler_Loop91
14348B87NmiHandler_Loop92
14358B8AMatchDataPart1
14368B8ENmiHandler_Loop93
14378B92NmiHandler_Loop94
14388B93NmiHandler_Loop95
14398BB2NmiHandler_Loop96
14408BC2ResetBall
14418BCFNmiHandler_Loop97
14428BE2NmiHandler_Loop98
14438C01NmiHandler_Loop99
14448C06NmiHandler_Loop100
14458C0CUpdateScoreDisplay
14468C52NmiHandler_Loop101
14478C64NmiHandler_OnZero5
14488C65NmiHandler_Loop102
14498C7ESetScoreDigits
14508CA6NmiHandler_Loop103
14518CADNmiHandler_Loop104
14528CB8NmiHandler_Loop105
14538CBFSetPlayerStats
14548CDENmiHandler_Loop106
14558CDFNmiHandler_Loop107
14568CEANmiHandler_Loop108
14578D08NmiHandler_Loop109
14588D10NmiHandler_Loop110
14598D12AdvancePlayerTimer
14608D1DNmiHandler_Loop111
14618D20NmiHandler_OnNonzero19
14628D35WriteVramRecord
14638DD4UpdatePlayerPositions
14648DE9NmiHandler_Loop112
14658DF8NmiHandler_Loop113
14668DF9NmiHandler_Loop114
14678E08NmiHandler_Loop115
14688E0BNmiHandler_Loop116
14698E32NmiHandler_Loop117
14708E40NmiHandler_Loop118
14718E45NmiHandler_Loop119
14728E4ENmiHandler_OnNonnegative7
14738E57ReadPlayerData
14748E61SetBallPosition
14758E6FNmiHandler_OnNonzero20
14768E80NmiHandler_Loop120
14778E8DSetPlayerDirectionAlt
14788EA8NmiHandler_OnNonnegative8
14798EB0NmiHandler_Loop121
14808ECDNmiHandler_Loop122
14818F21UpdatePlayerAi
14828F25NmiHandler_OnNonnegative9
14838F40NmiHandler_OnNonzero21
14848F44NmiHandler_OnNonzero22
14858F53NmiHandler_Loop123
14868F60NmiHandler_Loop124
14878F6BNmiHandler_Loop125
14888F82NmiHandler_Loop126
14898F99NmiHandler_Loop127
14908FA2NmiHandler_Loop128
14918FA9ReadFieldPointer
14928FADSetFieldPointer
14938FB7NmiHandler_OnNonzero23
14948FC5NmiHandler_Loop129
14958FD7NmiHandler_Loop130
14968FE4NmiHandler_Loop131
14978FE5SetFieldPointerAlt
14988FF0NmiHandler_Loop132
14999006NmiHandler_Loop133
15009013UpdateTeamPlayers
15019017NmiHandler_OnNonzero24
1502901ESetPlayerIndex
15039028NmiHandler_OnNonzero25
15049043NmiHandler_OnNonzero26
15059050CallPlayerHandler
150690F9SetPlayerRecordField
15079103NmiHandler_OnZero6
1508912BNmiHandler_Loop134
15099131NmiHandler_Loop135
15109138NmiHandler_Loop136
1511913BNmiHandler_Loop137
1512913ENmiHandler_Loop138
1513914BUpdatePlayerPosition
15149172SetPlayerStateField
15159178NmiHandler_Loop139
15169186NmiHandler_Loop140
15179189SetPlayerFlagAlt
15189194NmiHandler_Loop141
15199197NmiHandler_OnNonzero27
152091A1NmiHandler_Loop142
152191BBNmiHandler_Loop143
152291C1NmiHandler_Loop144
152391D3NmiHandler_Loop145
152491DCNmiHandler_Loop146
152591FDNmiHandler_Loop147
15269204UpdatePlayerState
15279208ResetPlayerRecordAlt
15289218NmiHandler_Loop148
1529921AReadPlayerPosition
15309224ResetPlayerRecordAlt2
1531922AMovePlayer
1532924DNmiHandler_Loop149
15339250UpdatePlayerSpeed
15349260NmiHandler_Loop150
15359267NmiHandler_Loop151
15369276ResetPlayerTimers
153792ACNmiHandler_Loop152
153892AFSetPlayerFlagAlt2
153992BCNmiHandler_Loop153
154092BFSetPlayerType
154192D7NmiHandler_OnNonzero28
154292EFNmiHandler_Loop154
154392FCNmiHandler_Loop155
15449305NmiHandler_Loop156
15459313NmiHandler_Loop157
1546932ANmiHandler_Loop158
1547932DInitPlayerRecord
1548935ENmiHandler_Loop159
1549936BGetFieldTile
1550937DNmiHandler_Loop160
15519395NmiHandler_OnNonzero29
155293ADNmiHandler_Loop161
155393B8NmiHandler_OnNonzero30
155493D0NmiHandler_Loop162
155593D9NmiHandler_Loop163
155693DENmiHandler_Loop164
155793DFReadPlayerScriptByte
155893E9NmiHandler_Loop165
15599402SetPlayerDirectionFromData
1560940CGetPlayerPosition
1561941FNmiHandler_Loop166
15629426NmiHandler_Loop167
15639433NmiHandler_Loop168
1564943ANmiHandler_Loop169
15659445NmiHandler_Loop170
15669447NmiHandler_OnNonzero31
1567944FNmiHandler_Loop171
15689457NmiHandler_Loop172
15699465NmiHandler_Loop173
15709469NmiHandler_Loop174
1571946BNmiHandler_Loop175
15729479NmiHandler_Loop176
15739481NmiHandler_Loop177
1574948DNmiHandler_Loop178
1575948EUpdatePlayerFrame
157694B4NmiHandler_Loop179
157794CANmiHandler_Loop180
157894ECNmiHandler_Loop181
15799502NmiHandler_Loop182
15809503FieldScriptDataPart1
15819507SetLevelPointerAlt
15829509NmiHandler_OnNonzero32
158397ECNmiHandler_OnZero7
158497F3NmiHandler_Loop183
158597FBNmiHandler_Loop184
15869813PlayerDataPart1
15879832NmiHandler_Loop185
1588984ANmiHandler_OnNonzero33
1589984CNmiHandler_OnZero8
1590984FNmiHandler_Loop186
15919858NmiHandler_Loop187
1592985BNmiHandler_Loop188
15939867NmiHandler_Loop189
15949876NmiHandler_Loop190
15959889NmiHandler_Loop191
15969897NmiHandler_Loop192
1597989CNmiHandler_Loop193
159898A5NmiHandler_Loop194
159998B3NmiHandler_Loop195
160098B5NmiHandler_Loop196
160198EFPlayerDataPart2
160298F8PlayerDataPart3
16039909NmiHandler_Loop197
16049963SetPlayerRecordValue
1605996ANmiHandler_OnNonzero34
1606996BNmiHandler_Loop198
1607997BNmiHandler_OnZero9
16089987NmiHandler_Loop199
1609998FNmiHandler_OnZero10
16109999NmiHandler_Loop200
1611999EWriteFieldData
161299ABNmiHandler_Loop201
161399C7ReadFieldData
161499CCNmiHandler_OnNonzero35
161599E7NmiHandler_Loop202
16169B45StartHalfTime
16179B4ANmiHandler_Loop203
16189B5ANmiHandler_Loop204
16199B6ANmiHandler_Loop205
16209B77NmiHandler_Loop206
16219B9BNmiHandler_Loop207
16229BA1NmiHandler_Loop208
16239BAANmiHandler_Loop209
16249BADSetPlayerRecordCounter
16259BBENmiHandler_Loop210
16269BC9NmiHandler_Loop211
16279BD1ReadPlayerRecordCounter
16289BE1NmiHandler_Loop212
16299BE2CallPlayerScript
16309BF4ResetPlayerRecordFields
16319C15ResetPlayerScriptState
16329C31NmiHandler_Loop213
16339C3CNmiHandler_Loop214
16349C53NmiHandler_Loop215
16359C7DPlayerScriptDataPart1
16369C87ResetPlayerScriptCounter
16379C93NmiHandler_Loop216
16389CA3NmiHandler_OnCarrySet2
16399CCENmiHandler_Loop217
16409CD2NmiHandler_Loop218
16419CD4NmiHandler_Loop219
16429CE5NmiHandler_Loop220
16439CE7NmiHandler_Loop221
16449CEFNmiHandler_Loop222
16459CF7NmiHandler_Loop223
16469CF8NmiHandler_Loop224
16479D00SetPlayerScriptState
16489D10NmiHandler_Loop225
16499D16ResetPlayerScriptStateAlt
16509D20ReadPlayerScriptState
16519D23ClearPlayerScriptState
16529D2ENmiHandler_Loop226
16539D3DCallPlayerScriptAlt
16549D4FResetPlayerScriptStateAlt2
16559D61ResetPlayerScriptStateAlt3
16569D7ENmiHandler_Loop227
16579D7FNmiHandler_Loop228
16589D97NmiHandler_OnNonzero36
16599D98NmiHandler_Loop229
16609DC3NmiHandler_Loop230
16619DCBNmiHandler_Loop231
16629DDCNmiHandler_Loop232
16639DDENmiHandler_Loop233
16649DF9SetPlayerScreenPosition
16659E12SetPlayerScreenPositionAlt
16669E22SetPlayerScreenPositionAlt2
16679E42NmiHandler_OnNonzero37
16689E5ENmiHandler_Loop234
16699E69NmiHandler_Loop235
16709E6BReadPlayerScriptCounter
16719E78NmiHandler_Loop236
16729E94NmiHandler_Loop237
16739E99NmiHandler_Loop238
16749EB1NmiHandler_Loop239
16759EB2NmiHandler_Loop240
16769EBENmiHandler_OnNonzero38
16779ED0NmiHandler_OnZero11
16789EE9NmiHandler_Loop241
16799EEBSetScoreField
16809F19NmiHandler_OnNonzero39
16819F25NmiHandler_Loop242
16829F49NmiHandler_Loop243
16839F4ANmiHandler_Loop244
16849F6EReadFieldCounter
16859F80NmiHandler_Loop245
1686A092ResetLevelState
1687A0ADNmiHandler_Loop246
1688A0BAResetLevelCounter
1689A0C4ResetLevelStateAlt
1690A0C7SetLevelState
1691A0CFNmiHandler_Loop247
1692A0D0StartLevel
1693A0D6InitLevelState
1694A0E5NmiHandler_Loop248
1695A0E7LoadLevelParameters
1696A109StartLevelAlt
1697A10FReadLevelCounter
1698A11ENmiHandler_Loop249
1699A131NmiHandler_Loop250
1700A144NmiHandler_Loop251
1701A15ANmiHandler_Loop252
1702A165NmiHandler_Loop253
1703A17DNmiHandler_Loop254
1704A17EResetLevelCounterAlt
1705A18ENmiHandler_Loop255
1706A19DNmiHandler_Loop256
1707A1BANmiHandler_Loop257
1708A1BFNmiHandler_Loop258
1709A1CENmiHandler_Loop259
1710A1EBNmiHandler_Loop260
1711A1F0NmiHandler_Loop261
1712A35DCallPlayerScriptAlt2
1713A37CNmiHandler_Loop262
1714A392NmiHandler_OnNonzero40
1715A3A9SetLevelFlag
1716A3AFNmiHandler_Loop263
1717A3B7PlayerScriptDataPart2
1718A3BBNmiHandler_OnNonzero41
1719A3E5ResetLevelFlag
1720A400NmiHandler_Loop264
1721A401ReadPlayerCounter
1722A418NmiHandler_Loop265
1723A42DNmiHandler_Loop266
1724A439NmiHandler_OnNonzero42
1725A43DNmiHandler_Loop267
1726A45ANmiHandler_Loop268
1727A477ResetPlayerFlag
1728A47CInitPlayerRecordAlt
1729A496InitPlayerRecordAlt2
1730A4D0InitPlayerRecordAlt3
1731A4D6ResetPlayerField
1732A4E6SetPlayerField
1733A4EDResetPlayerFieldAlt
1734A4FANmiHandler_Loop269
1735A52CClearPlayerField
1736A536NmiHandler_Loop270
1737A53CReadPlayerScriptTable
1738A54BNmiHandler_Loop271
1739A575ReadPlayerScriptTableAlt
1740A584NmiHandler_Loop272
1741A59ASetPlayerScreenPointer
1742B5E3ReadPlayerCounterAlt
1743B5F0NmiHandler_Loop273
1744B5FFNmiHandler_Loop274
1745B601NmiHandler_OnCarryClear
1746B631NmiHandler_Loop275
1747B653SetPlayerRecordFieldAlt
1748B666NmiHandler_Loop276
1749B667UpdatePlayerRecordAlt
1750B6BANmiHandler_Loop277
1751B6BBReadPlayerRecordField
1752B6CCNmiHandler_Loop278
1753B6D9NmiHandler_Loop279
1754B6E9NmiHandler_Loop280
1755B6FENmiHandler_Loop281
1756B6FFSetPlayerRecordFieldAlt2
1757B705ClearPlayerRecordField
1758B716NmiHandler_Loop282
1759B744NmiHandler_Loop283
1760B75BNmiHandler_OnNonzero43
1761B787NmiHandler_Loop284
1762B795NmiHandler_Loop285
1763B798NmiHandler_Loop286
1764B7AEReadPlayerInputState
1765B7B8NmiHandler_OnNonzero44
1766B7C0SwapPlayerRecords
1767B7DBNmiHandler_OnNonzero45
1768B7E7UpdatePlayerInputState
1769B829SetPlayerInputState
1770B84ENmiHandler_Loop287
1771B850NmiHandler_OnNonzero46
1772B85AResetInputCounter
1773B86CNmiHandler_Loop288
1774B88DNmiHandler_Loop289
1775B8AASetPlayerRecordValueAlt
1776B8C0SetPlayerRecordValueAlt2
1777B8C9NmiHandler_OnCarrySet3
1778B8D0NmiHandler_OnNonzero47
1779B8D1ReadFieldPointerAlt
1780B8ECNmiHandler_Loop290
1781B907NmiHandler_Loop291
1782B95ANmiHandler_Loop292
1783B972NmiHandler_Loop293
1784B97ENmiHandler_OnNonnegative10
1785B99DNmiHandler_Loop294
1786B99EReadFieldPointerAlt2
1787B9AFAdvanceFieldPointer
1788B9B0SetFieldPointerValue
1789B9B8NmiHandler_OnNonzero48
1790B9CFNmiHandler_Loop295
1791B9D6NmiHandler_Loop296
1792B9D8FieldPointerDataPart1
1793B9D9FieldPointerDataPart2
1794B9E1FieldPointerDataPart4
1795B9E8SetPlayerRecordValueAlt3
1796B9F1ReadPlayerRecordValue
1797B9F7NmiHandler_OnCarrySet4
1798BA0FFieldPointerDataPart6
1799BA13AdvanceFieldPointerAlt
1800BA19ReadFieldPointerAlt3
1801BA25NmiHandler_Loop297
1802BA36NmiHandler_Loop298
1803BA37FieldPointerDataPart7
1804BA38FieldPointerDataPart8
1805BA3DNmiHandler_Loop299
1806BA45FieldPointerDataPart10
1807BA47Sub_BA47
1808BA48SubCBA48
1809BA5BNmiHandler_Loop300
1810BA6ANmiHandler_Loop301
1811BA79NmiHandler_Loop302
1812BA88NmiHandler_Loop303
1813BA8ANmiHandler_Loop304
1814BA8CNmiHandler_Loop305
1815BA8FNmiHandler_Loop306
1816BA9DNmiHandler_Loop307
1817BAB0NmiHandler_Loop308
1818BAB1UpdateFieldPointer
1819BABDNmiHandler_OnNonzero49
1820BACCNmiHandler_Loop309
1821BAD1NmiHandler_Loop310
1822BAE0NmiHandler_Loop311
1823BAF5NmiHandler_Loop312
1824BAF7NmiHandler_OnNonzero50
1825BB10NmiHandler_Loop313
1826BB31NmiHandler_Loop314
1827BB39NmiHandler_Loop315
1828BB51NmiHandler_Loop316
1829BB5DNmiHandler_Loop317
1830BB67NmiHandler_Loop318
1831BB7BNmiHandler_Loop319
1832BB88NmiHandler_Loop320
1833BB89GetPlayerFieldOffset
1834BB9ENmiHandler_Loop321
1835BBB5NmiHandler_OnNonnegative11
1836BBBDNmiHandler_OnNonnegative12
1837BBE2NmiHandler_Loop322
1838BBE5Sub_BBE5
1839BBE7NmiHandler_OnNonzero51
1840BBF9NmiHandler_Loop323
1841BBFFNmiHandler_Loop324
1842BC12NmiHandler_Loop325
1843BC25SetPlayerFieldAlt
1844BC51NmiHandler_Loop326
1845BC59NmiHandler_Loop327
1846BC66NmiHandler_Loop328
1847BC6ENmiHandler_Loop329
1848BC7BNmiHandler_Loop330
1849BC7ENmiHandler_Loop331
1850BC81NmiHandler_Loop332
1851BC84NmiHandler_Loop333
1852BC8ANmiHandler_Loop334
1853BC9DNmiHandler_Loop335
1854BCA5NmiHandler_Loop336
1855BCB0NmiHandler_Loop337
1856BCBDNmiHandler_Loop338
1857BCC5NmiHandler_Loop339
1858BCD4NmiHandler_Loop340
1859BCDCNmiHandler_Loop341
1860BCF5NmiHandler_Loop342
1861BCF6SetFieldPointerValue2
1862BD05NmiHandler_Loop343
1863BD0ANmiHandler_OnNonzero52
1864BD11UpdatePlayerScreen
1865BD38NmiHandler_Loop344
1866BD4FNmiHandler_Loop345
1867BD6BNmiHandler_Loop346
1868BD7DNmiHandler_Loop347
1869BD89NmiHandler_Loop348
1870BD91NmiHandler_Loop349
1871BD92ReadPlayerFlag
1872BD9DNmiHandler_Loop350
1873BDA2NmiHandler_Loop351
1874BDAFNmiHandler_Loop352
1875BDB5ResetPlayerPositions
1876BDB7NmiHandler_OnNonzero53
1877BE07NmiHandler_OnNonzero54
1878BE16SubCBE16
1879BE1ALoadPlayerRecordFromTable
1880BE43NmiHandler_Loop353
1881BE55InitNewMatchState
1882BF0CUpdateFieldObjects
1883BF25NmiHandler_Loop354
1884BF26NmiHandler_Loop355
1885BF2ANmiHandler_Loop356
1886BF48NmiHandler_Loop357
1887BF55NmiHandler_Loop358
1888BF72NmiHandler_Loop359
1889BF79NmiHandler_Loop360
1890BF7CNmiHandler_Loop361
1891BF83SetScoreValueAlt
1892BFA7NmiHandler_Loop362
1893BFACClearScoreValue
1894BFBDWriteScoreValue
1895BFD4NmiHandler_Loop363
1896BFEDNmiHandler_Loop364
1897BFF2ResetScoreValue
1898C003AdvanceScoreValue
1899C01ANmiHandler_Loop365
1900C020NmiHandler_OnZero12
1901C023NmiHandler_Loop366
1902C040NmiHandler_Loop367
1903C080NmiHandler_Loop368
1904C08ANmiHandler_Loop369
1905C08DNmiHandler_Loop370
1906C0A2NmiHandler_Loop371
1907C0B1NmiHandler_Loop372
1908C0B8WriteFieldByte
1909C0BEWriteFieldByteAlt
1910C0C9ResetPlayerState
1911C0EAUpdatePlayerSpriteAlt
1912C101NmiHandler_Loop373
1913C116NmiHandler_Loop374
1914C11DSetPlayerValue
1915C130NmiHandler_OnZero13
1916C131NmiHandler_Loop375
1917C148NmiHandler_Loop376
1918C14DNmiHandler_Loop377
1919C162NmiHandler_Loop378
1920C16ANmiHandler_Loop379
1921C172NmiHandler_Loop380
1922C17FNmiHandler_Loop381
1923C182NmiHandler_Loop382
1924C189NmiHandler_Loop383
1925C19ANmiHandler_Loop384
1926C19DNmiHandler_Loop385
1927C1ABNmiHandler_Loop386
1928C1BCNmiHandler_Loop387
1929C1C1ReadPlayerValue
1930C1D3NmiHandler_Loop388
1931C1DAWritePlayerValue
1932C1E3Sub_C1E3
1933C1F8NmiHandler_Loop389
1934C1FBNmiHandler_Loop390
1935C217NmiHandler_Loop391
1936C21CReadPlayerValueAlt
1937C22ENmiHandler_Loop392
1938C235WritePlayerValueAlt
1939C23BNmiHandler_Loop393
1940C254NmiHandler_Loop394
1941C25BNmiHandler_Loop395
1942C277NmiHandler_Loop396
1943C288NmiHandler_Loop397
1944C29FNmiHandler_Loop398
1945C2A2NmiHandler_Loop399
1946C2ABNmiHandler_Loop400
1947C2CBNmiHandler_OnNonzero55
1948C2CENmiHandler_Loop401
1949C30CSetFieldValue
1950C312ReadFieldValue
1951C315NmiHandler_OnNonzero56
1952C319ReadPlayerValueAlt2
1953C31DNmiHandler_OnCarryClear2
1954C32ENmiHandler_Loop402
1955C33DNmiHandler_Loop403
1956C351NmiHandler_Loop404
1957C355NmiHandler_Loop405
1958C358NmiHandler_Loop406
1959C36FNmiHandler_Loop407
1960C370SetFieldCounter
1961C373SubCC373
1962C38BResetFieldCounter
1963C397NmiHandler_Loop408
1964C39DNmiHandler_Loop409
1965C3B1ResetPlayerStateAlt
1966C3C6SubCC3C6
1967C3CFNmiHandler_Loop410
1968C3E5NmiHandler_Loop411
1969C3F5ReadSoundTableByte
1970C3FBSubCC3FB
1971C3FDNmiHandler_OnNonzero57
1972C409NmiHandler_Loop412
1973C40ASoundScriptDataPart1
1974C502SubCC502
1975C503SubCC503
1976C513NmiHandler_Loop413
1977C517SubCC517
1978C528NmiHandler_Loop414
1979C52AReadSoundValue
1980C53ASubCC53A
1981C552NmiHandler_Loop415
1982C55ANmiHandler_Loop416
1983C563NmiHandler_Loop417
1984C571NmiHandler_Loop418
1985C5CDNmiHandler_Loop419
1986C5D5ResetSoundState
1987C604NmiHandler_Loop420
1988C60ANmiHandler_OnZero14
1989C60BSubCC60B
1990C619NmiHandler_Loop421
1991C62DNmiHandler_Loop422
1992C634NmiHandler_Loop423
1993C644NmiHandler_Loop424
1994C688NmiHandler_OnZero15
1995C689NmiHandler_Loop425
1996C6C7NmiHandler_Loop426
1997C6DBSubCC6DB
1998C707NmiHandler_Loop427
1999C716NmiHandler_Loop428
2000C718SetPlayerStateValue
2001C721NmiHandler_Loop429
2002C730NmiHandler_Loop430
2003C738NmiHandler_Loop431
2004C745NmiHandler_Loop432
2005C776SetPlayerRecordFields
2006C795NmiHandler_Loop433
2007C7C0NmiHandler_Loop434
2008C7CBSetPlayerFlag
2009C7D9ResetPlayerCounters
2010C7E2SetPlayerCounterAlt
2011C7E7NmiHandler_Loop435
2012C804NmiHandler_Loop436
2013C80ESubCC80E
2014C81ANmiHandler_OnNonzero58
2015C82CSubCC82C
2016C831NmiHandler_Loop437
2017C83ASubCC83A
2018C83CNmiHandler_OnNonzero59
2019C864NmiHandler_Loop438
2020C86FNmiHandler_Loop439
2021C880NmiHandler_Loop440
2022C886NmiHandler_OnZero16
2023C891SubCC891
2024C89ASubCC89A
2025C89FReadPlayerLevel
2026C8ABNmiHandler_Loop441
2027C8C2NmiHandler_Loop442
2028C8DDNmiHandler_Loop443
2029C8E1Sub_C8E1
2030C8E8NmiHandler_Loop444
2031C907NmiHandler_Loop445
2032C90CNmiHandler_Loop446
2033C92ANmiHandler_OnNonzero60
2034C940NmiHandler_Loop447
2035C952SetFieldPointerAlt2
2036C95BNmiHandler_Loop448
2037C95DNmiHandler_OnNonzero61
2038C973NmiHandler_Loop449
2039C98FNmiHandler_Loop450
2040C9AANmiHandler_OnNonzero62
2041C9C0NmiHandler_Loop451
2042C9D5Sub_C9D5
2043C9DCNmiHandler_Loop452
2044C9E2NmiHandler_OnNonzero63
2045C9ECNmiHandler_Loop453
2046C9EENmiHandler_OnNonzero64
2047C9FBNmiHandler_Loop454
2048CA07SubCCA07
2049CA17NmiHandler_Loop455
2050CA31NmiHandler_Loop456
2051CA44NmiHandler_Loop457
2052CA47SetPlayerPosition
2053CA52NmiHandler_Loop458
2054CA63NmiHandler_Loop459
2055CA66SetPlayerPositionAlt
2056CA71NmiHandler_Loop460
2057CA72SetPlayerSpeed
2058CA73SetPlayerScoreValue
2059CA82SetPlayerScoreValueAlt
2060CA99SubCCA99
2061CAA5NmiHandler_Loop461
2062CAB0NmiHandler_Loop462
2063CAB6NmiHandler_Loop463
2064CAB9SetPlayerTimer
2065CABDNmiHandler_Loop464
2066CADBNmiHandler_OnCarryClear3
2067CAEBNmiHandler_Loop465
2068CAEFNmiHandler_Loop466
2069CAF9SubCCAF9
2070CAFENmiHandler_Loop467
2071CB20NmiHandler_Loop468
2072CB2ANmiHandler_Loop469
2073CB4ENmiHandler_Loop470
2074CB57NmiHandler_Loop471
2075CB61NmiHandler_Loop472
2076CB68NmiHandler_Loop473
2077CB7ESub_CB7E
2078CBB8NmiHandler_Loop474
2079CBC7SetPlayerStateAlt2
2080CBDBNmiHandler_Loop475
2081CBE8Sub_CBE8
2082CBF2NmiHandler_Loop476
2083CBF9NmiHandler_Loop477
2084CC12ReadFieldValueAlt
2085CC19NmiHandler_Loop478
2086CC39NmiHandler_Loop479
2087CC40ResetPlayerTimersAlt2
2088CC61NmiHandler_Loop480
2089CC65NmiHandler_Loop481
2090CC70NmiHandler_Loop482
2091CC72NmiHandler_Loop483
2092CC86ResetPlayerRecordAlt3
2093CC8CNmiHandler_Loop484
2094CCB4NmiHandler_Loop485
2095CCC3SetPlayerValueAlt
2096CCCENmiHandler_Loop486
2097CCD1SetPlayerValueAlt2
2098CCD9NmiHandler_Loop487
2099CCF9NmiHandler_Loop488
2100CD00NmiHandler_Loop489
2101CD01SubCCD01
2102CD18NmiHandler_Loop490
2103CD37SetPlayerLevelAlt
2104CD3CNmiHandler_Loop491
2105CD3DSubCCD3D
2106CD61NmiHandler_Loop492
2107CD6BSetPlayerFlagAlt3
2108CD76NmiHandler_Loop493
2109CD82NmiHandler_Loop494
2110CD87NmiHandler_Loop495
2111CD93NmiHandler_Loop496
2112CD95SetPlayerValueAlt3
2113CDABNmiHandler_Loop497
2114CDB4SetPlayerValueAlt4
2115CDC1NmiHandler_Loop498
2116CDC2ResetPlayerTimersAlt
2117CDF2NmiHandler_Loop499
2118CE03NmiHandler_Loop500
2119CE0DNmiHandler_Loop501
2120CE1DNmiHandler_Loop502
2121CE24NmiHandler_Loop503
2122CE34SubCCE34
2123CE42NmiHandler_Loop504
2124CE55NmiHandler_Loop505
2125CE5DNmiHandler_Loop506
2126CE60NmiHandler_Loop507
2127CE91NmiHandler_Loop508
2128CEA0NmiHandler_OnNonzero65
2129CEAFNmiHandler_OnNonzero66
2130CEB0NmiHandler_Loop509
2131CEBDNmiHandler_Loop510
2132CEC8NmiHandler_Loop511
2133CEDBResetPlayerStateAlt3
2134CF1DNmiHandler_Loop512
2135CF22NmiHandler_Loop513
2136CF23NmiHandler_Loop514
2137CF31NmiHandler_Loop515
2138CF47NmiHandler_Loop516
2139CF57NmiHandler_Loop517
2140CF69NmiHandler_Loop518
2141CF79NmiHandler_Loop519
2142CF7ASub_CF7A
2143CF88NmiHandler_Loop520
2144CFA9NmiHandler_Loop521
2145CFB3NmiHandler_Loop522
2146CFB7SetPlayerCounterAlt2
2147CFD8NmiHandler_Loop523
2148CFE2NmiHandler_Loop524
2149CFE3ReadPlayerLevelAlt2
2150CFE5NmiHandler_OnNonzero67
2151D00ESetPlayerLevelAlt2
2152D015NmiHandler_OnNonzero68
2153D016NmiHandler_Loop525
2154D056NmiHandler_Loop526
2155D05CNmiHandler_Loop527
2156D063NmiHandler_OnNonzero69
2157D06BNmiHandler_Loop528
2158D07BNmiHandler_Loop529
2159D08ENmiHandler_Loop530
2160D096ResetPlayerPosition
2161D0A8NmiHandler_Loop531
2162D0C3ReadPlayerFlagAlt
2163D0CBNmiHandler_Loop532
2164D0CDSetPlayerCounterAlt3
2165D0E1NmiHandler_Loop533
2166D0F5NmiHandler_Loop534
2167D0F8NmiHandler_Loop535
2168D10CNmiHandler_Loop536
2169D120NmiHandler_Loop537
2170D123NmiHandler_Loop538
2171D131NmiHandler_Loop539
2172D134NmiHandler_Loop540
2173D138NmiHandler_Loop541
2174D139UpdatePlayerLevel
2175D13FNmiHandler_OnNonzero70
2176D149NmiHandler_Loop542
2177D14BNmiHandler_OnNonzero71
2178D158NmiHandler_Loop543
2179D164SetPlayerPositionAlt2
2180D17BNmiHandler_Loop544
2181D196NmiHandler_Loop545
2182D19ASetFieldOffsetAlt
2183D1A1NmiHandler_Loop546
2184D1C0NmiHandler_Loop547
2185D1C5NmiHandler_Loop548
2186D1E3NmiHandler_OnNonzero72
2187D1F9NmiHandler_Loop549
2188D20BSetFieldPointerAlt3
2189D214NmiHandler_Loop550
2190D216NmiHandler_OnNonzero73
2191D22CNmiHandler_Loop551
2192D248NmiHandler_Loop552
2193D263NmiHandler_OnNonzero74
2194D279NmiHandler_Loop553
2195D625UpdatePlayerLevelAlt
2196D62FNmiHandler_Loop554
2197D638NmiHandler_Loop555
2198D64DNmiHandler_Loop556
2199D679NmiHandler_Loop557
2200D6C9NmiHandler_Loop558
2201D6D6NmiHandler_Loop559
2202D709NmiHandler_Loop560
2203D70ANmiHandler_Loop561
2204D71ENmiHandler_Loop562
2205D738NmiHandler_Loop563
2206D744SetPlayerRecordValueAlt9
2207D750NmiHandler_Loop564
2208D76ANmiHandler_Loop565
2209D786NmiHandler_Loop566
2210D796NmiHandler_Loop567
2211D797ReadFieldValueAlt2
2212D7B6NmiHandler_OnZero17
2213D7B7NmiHandler_Loop568
2214D7D4NmiHandler_Loop569
2215D7E0NmiHandler_OnNonzero75
2216D7EENmiHandler_Loop570
2217D7FDNmiHandler_Loop571
2218D812NmiHandler_Loop572
2219D819NmiHandler_Loop573
2220D823NmiHandler_OnNonzero76
2221D839NmiHandler_Loop574
2222D857NmiHandler_Loop575
2223D870NmiHandler_Loop576
2224D88ENmiHandler_Loop577
2225D89ANmiHandler_Loop578
2226D8BANmiHandler_Loop579
2227D8C6NmiHandler_Loop580
2228D8CASetFieldPointerAlt4
2229D8E1SetPlayerRecordValueAlt5
2230D8EDNmiHandler_Loop581
2231D911NmiHandler_Loop582
2232D958ReadPlayerValueAlt5
2233D95ANmiHandler_OnNonzero77
2234D97BNmiHandler_Loop583
2235D97CSetFieldPointerAlt5
2236D97ENmiHandler_OnNonzero78
2237D985SetFieldPointerAlt7
2238D99CNmiHandler_Loop584
2239D9A9NmiHandler_Loop585
2240D9ADSubCD9AD
2241D9D3NmiHandler_Loop586
2242D9FBNmiHandler_Loop587
2243DA0BNmiHandler_Loop588
2244DA0ESetPlayerRecordValueAlt6
2245DA12ReadPlayerRecordFromTable
2246DA2ESetFieldPointerAlt6
2247DA3ANmiHandler_Loop589
2248DA4CSubCDA4C
2249DA4DSubCDA4D
2250DA55SubCDA55
2251DA5CNmiHandler_OnZero18
2252DA63SubCDA63
2253DA84NmiHandler_Loop590
2254DAA7NmiHandler_Loop591
2255DAB5NmiHandler_Loop592
2256DAEANmiHandler_Loop593
2257DAF4NmiHandler_Loop594
2258DB0ENmiHandler_Loop595
2259DB2CNmiHandler_Loop596
2260DB49NmiHandler_Loop597
2261DB57SubCDB57
2262DB65NmiHandler_Loop598
2263DB8CNmiHandler_Loop599
2264DB8FNmiHandler_Loop600
2265DB97NmiHandler_Loop601
2266DC37SetPlayerRecordValueAlt7
2267DC40ReadPlayerValueAlt6
2268DC4AReadPlayerValueAlt7
2269DC58NmiHandler_Loop602
2270DC67NmiHandler_Loop603
2271DC6BNmiHandler_OnNonzero79
2272DC77NmiHandler_Loop604
2273DC7ENmiHandler_Loop605
2274DC7FNmiHandler_Loop606
2275DC93GetPlayerPositionAlt2
2276DCCANmiHandler_Loop607
2277DCCFGetPlayerPositionAlt
2278DCE4NmiHandler_Loop608
2279DCEDNmiHandler_Loop609
2280DCEEUpdatePlayerStateAlt
2281DCFANmiHandler_Loop610
2282DD06NmiHandler_Loop611
2283DD0BSetPlayerValueAlt5
2284DD1CNmiHandler_Loop612
2285DD32NmiHandler_Loop613
2286DD3FNmiHandler_Loop614
2287DD5ANmiHandler_Loop615
2288DD5FNmiHandler_Loop616
2289DD60NmiHandler_Loop617
2290DD6CNmiHandler_OnZero19
2291DD73NmiHandler_Loop618
2292DD94NmiHandler_Loop619
2293DEB3SetPlayerValueAlt6
2294DEC9NmiHandler_Loop620
2295DEDANmiHandler_Loop621
2296DEF1NmiHandler_OnNonzero80
2297DF35NmiHandler_Loop622
2298DF41NmiHandler_Loop623
2299DF5FNmiHandler_Loop624
2300DFD4NmiHandler_OnNonzero81
2301DFF0SubCDFF0
2302E0E6SetFieldCounterAlt
2303E0F6NmiHandler_Loop625
2304E118NmiHandler_Loop626
2305E12BNmiHandler_Loop627
2306E12CNmiHandler_Loop628
2307E46AReadPlayerLevelAlt3
2308E476NmiHandler_Loop629
2309E47ENmiHandler_Loop630
2310E48ANmiHandler_Loop631
2311E499NmiHandler_Loop632
2312E4CCNmiHandler_Loop633
2313E4E8NmiHandler_OnCarrySet5
2314E4E9NmiHandler_Loop634
2315E523NmiHandler_Loop635
2316E530NmiHandler_Loop636
2317E54ANmiHandler_Loop637
2318E554NmiHandler_Loop638
2319E555SetPlayerRecordValueAlt8
2320E562ResetPlayerStateAlt4
2321E579NmiHandler_Loop639
2322E58CNmiHandler_Loop640
2323E59DNmiHandler_Loop641
2324E59ESubCE59E
2325E5B0SubCE5B0
2326E5BANmiHandler_Loop642
2327E5D4NmiHandler_OnNonzero82
2328E601NmiHandler_OnNonzero83
2329E605NmiHandler_OnNonzero84
2330E622NmiHandler_OnNonzero85
2331E633SubCE633
2332E63ENmiHandler_Loop643
2333E63FSubCE63F
2334E64BNmiHandler_Loop644
2335E64DNmiHandler_OnNonzero86
2336E65ANmiHandler_Loop645
2337E663SubCE663
2338E672NmiHandler_Loop646
2339F500UpdateSoundEngine
2340F53ANmiHandler_Loop647
2341F544NmiHandler_Loop648
2342F549NmiHandler_Loop649
2343F54DSetPulse1ControlAndSweep
2344F554SetPulse1ControlAndNote
2345F557SetPulse1Timer
2346F559NmiHandler_OnNonzero87
2347F56ANmiHandler_Loop650
2348F56BSetPulse2ControlAndSweep
2349F572SetPulse2Timer
2350F576SetTriangleTimer
2351F57AAdvanceMusicSequence
2352F586NmiHandler_Loop651
2353F596NmiHandler_Loop652
2354F59FNmiHandler_Loop653
2355F5A9NmiHandler_Loop654
2356F5AFNmiHandler_Loop655
2357F5B5NmiHandler_Loop656
2358F5C0NmiHandler_Loop657
2359F5D3NmiHandler_Loop658
2360F5D4SilenceTriangleAndPulse2
2361F5E2NmiHandler_OnNonzero88
2362F5E6PlayNoteOnPulse1
2363F5FDNmiHandler_Loop659
2364F601NmiHandler_OnCarrySet6
2365F605NmiHandler_OnCarrySet7
2366F609NmiHandler_OnCarrySet8
2367F618NmiHandler_OnCarrySet9
2368F623NmiHandler_Loop660
2369F626NmiHandler_OnCarrySet10
2370F62ENmiHandler_OnCarrySet11
2371F634NmiHandler_Loop661
2372F63DNmiHandler_Loop662
2373F641NmiHandler_Loop663
2374F645NmiHandler_Loop664
2375F64ANmiHandler_Loop665
2376F64BNmiHandler_OnCarrySet12
2377F64ENmiHandler_OnCarrySet13
2378F651AdvanceSoundEffectSequence
2379F692NmiHandler_Loop666
2380F693NmiHandler_OnZero20
2381F696NmiHandler_Loop667
2382F6A5NmiHandler_Loop668
2383F6A8NmiHandler_Loop669
2384F6C4NmiHandler_OnNonzero89
2385F6C9NmiHandler_Loop670
2386F6E4NmiHandler_Loop671
2387F6E9NmiHandler_Loop672
2388F6F6NmiHandler_Loop673
2389F6FBAdvanceSoundEffectSequenceAlt
2390F70BNmiHandler_Loop674
2391F70ENmiHandler_Loop675
2392F71ENmiHandler_OnZero21
2393F726NmiHandler_Loop676
2394F738NmiHandler_Loop677
2395F741NmiHandler_Loop678
2396F745NmiHandler_Loop679
2397F74BNmiHandler_OnCarrySet14
2398F751NmiHandler_OnCarrySet15
2399F769NmiHandler_OnNonzero90
2400F76DNmiHandler_Loop680
2401F777NmiHandler_Loop681
2402F778AdvanceMusicSequenceAlt
2403F794NmiHandler_Loop682
2404F7A3NmiHandler_Loop683
2405F7ADNmiHandler_Loop684
2406F7B3NmiHandler_Loop685
2407F7B9NmiHandler_Loop686
2408F7C2NmiHandler_Loop687
2409F7D7NmiHandler_OnNonzero91
2410F7D9NmiHandler_Loop688
2411F7DFNmiHandler_Loop689
2412F7F4ResetSoundCounters
2413F804NmiHandler_Loop690
2414F80DNmiHandler_Loop691
2415F81DNmiHandler_OnNonzero92
2416F823NmiHandler_OnCarryClear4
2417F857NmiHandler_Loop692
2418F85BNmiHandler_OnNonzero93
2419F87ENmiHandler_Loop693
2420F888NmiHandler_Loop694
2421F894SilencePulse2
2422F89FNmiHandler_Loop695
2423F8AFNmiHandler_Loop696
2424F8CBNmiHandler_Loop697
2425F8CENmiHandler_Loop698
2426F8F0NmiHandler_Loop699
2427F8FDNmiHandler_Loop700
2428F907NmiHandler_Loop701
2429F909NmiHandler_Loop702
2430F915NmiHandler_Loop703
2431F91ASetPulse1Control
2432F92BNmiHandler_Loop704
2433F934NmiHandler_Loop705
2434F93ENmiHandler_Loop706
2435F949NmiHandler_Loop707
2436F94CNmiHandler_Loop708
2437F94FNmiHandler_Loop709
2438F957NmiHandler_OnNonzero94
2439F969NmiHandler_Loop710
2440F98BNmiHandler_Loop711
2441F998NmiHandler_Loop712
2442F99CNmiHandler_Loop713
2443F99ENmiHandler_Loop714
2444F9A7NmiHandler_Loop715
2445F9B3NmiHandler_Loop716
2446F9B9NmiHandler_Loop717
2447F9D4NmiHandler_Loop718
2448F9DFNmiHandler_Loop719
2449F9EANmiHandler_Loop720
2450FA10NmiHandler_Loop721
2451FA16NmiHandler_Loop722
2452FA1FNmiHandler_Loop723
2453FA20LookUpNotePeriod
2454FB06SubCFB06
2455FFF7StartSoundEngine