Files
disasm/NROM/MUSCLE (U)/label_names.tsv
T
tmerrittandClaude Opus 4.8 49e117bfcc Fix Pass 3 symbol application and add promotion criteria to PROMPTS.md
- Apply symbols.inc hardware register names to Defender 2 (U) (51 operands)
- Apply symbols.inc hardware register names to Donkey Kong 3 (JUE) (36 operands)
- Add APU register symbols (-) to Defender 2 (U) and Donkey Kong 3 (JUE) symbols.inc
- Apply symbols to Donkey Kong Jr. Math (U) (80 operands: 11 single + 69 hardware)
- Apply symbols to Excitebike (JU) (786 operands: 785 single + 1 hardware)
- Add promotion criteria to PROMPTS.md: symbol/local substitution,
  ROM-specific semantic naming, and verification checklist

Add branch/jump target naming requirement to PROMPTS.md

All branches and jumps must target symbolic labels with descriptive names
derived from program flow role (e.g., _Loop, _Next, _Done, _Store, _Return),
never raw address literals. Adds criterion 8 to verification checklist.

Rename all OVERVIEW.md to README.md; add root README content to top-level

- Rename all OVERVIEW.md files to README.md throughout the repo (47 files)
- Prepend README.md content to top-level OVERVIEW.md before rename
- Fix apply_symbols.py NAME_RE regex to handle spaced assignments
- Apply symbols.inc to Defender 2 (U) (51 hardware operands)
- Apply symbols.inc to Donkey Kong 3 (JUE) (36 hardware operands)
- Apply symbols.inc to Donkey Kong Jr. Math (U) (80 operands: 11 single + 69 hardware)
- Apply symbols.inc to Excitebike (JU) (786 operands: 785 single + 1 hardware)
- Add missing Zp18/FrameCounter aliases to Excitebike prg.s
- Build all 27 top-level projects: byte-identical

Promote Donkey Kong Jr. Math back to _wip tier

Moves code from `copilot` folder and verifies each builds after

Add pre-commit hook for byte-identical verification

Add .git/hooks/pre-commit that runs 'make' then 'make clean' in each
project directory before committing. This ensures every project builds
byte-identical before any commit is accepted.

Also includes all file moves from the Donkey Kong Jr. Math (U) demotion
and other file restructuring from the session.

moves code out of copilot folder, its all AI generated.
Moves NROM games into NROM folder

removes copilot folder from Lunar Pool
Adds makefile to build all projects recursively

Updates docs to reflect changes in layout

Repromotes Donkey Kong Jr Math
Repromotes Excitebike
Promotes Popeye (JU) (PRG 1)
Updates Makefile to provide summary of build failure/success

Promote Raid on Bungeling Bay (U): Pass 2/3 partial, whole-ROM byte-identical

Move _wip/NROM/Raid on Bungeling Bay (U) to NROM/ and switch the build
from a PRG-only compare to a whole-ROM one:

  - header.s/chr.s added (one-line .incbin of header.bin / chr.bin)
  - linker.cfg gains HEADER ($0000, $0010) and CHR ($0000, $2000)
    areas ahead of PRG ($C000, $4000)
  - rom.nes symlink to the space-containing original ROM name
  - Makefile builds header.o/prg.o/chr.o into reconstructed.nes and
    compares it against rom.nes ('Byte-identical ROM verified.')
  - one leftover neutral indirect operand jmp (Zp01) at $E2EC becomes
    jmp (IndDispatch01); apply_symbols.py reports 0 substitutions pending

README.md / TODO.md / AGENTS.md updated: 29 promoted, 7 in _wip/.

Pac-Man (U): Pass 2 complete (label renaming) + Pass 3 partial (ZP aliases, table names)

Pass 2 — fresh map derived from the committed split, not from any drafted
map (the drafted maps in other projects were audited and found not
applicable):

  - all 194 address-derived Label_XXXX definitions renamed to semantic
    routine-entry names plus <Routine>_<Role>_<addr> internal branch
    targets; zero Label_ remains
  - all 49 jsr/jmp call sites resolved from raw $XXXX to labels; zero
    raw $XXXX call operands remain
  - routinemap.tsv / derived_names.tsv record the derivation

Pass 3 (partial):

  - 15 proven semantic zero-page aliases added to locals.inc
    (GameState, NmiFlag, ScrollX/Y, PpuCtrlShadow, OamDmaPage,
    CocktailModeFlag, ActivePlayerFlag, GameplaySuspended, FrameCounter,
    StateTimer, Player1/2Input, ActiveInput, CopyrightVerified)
  - 112 operands substituted into prg.s (11 single + 101 hardware)
  - key data tables named: ProgrammerSig ($C0EB), GameStateDispatchTable
    ($C253), TitleScreenData ($C2FD), EntityPtrTable ($D912),
    AudioCommandTable ($EFDD)

Also corrects the README's claim that the RESET vector points at padding:
$FF00 holds real boot code (sei/cld, PPU off, double vblank wait, then
jmp ColdStart at $C042).

.gitignore: ignore reconstructed_prg.bin (build artifact of the _wip
Makefiles; '**/reconstructed.*' does not match the underscore form).

Promote Pac-Man (U): Pass 2/3 complete, whole-ROM byte-identical

Move _wip/NROM/Pac-Man (U) to NROM/ and switch the build from a PRG-only
compare to a whole-ROM one:

  - header.s/chr.s added (one-line .incbin of header.bin / chr.bin)
  - linker.cfg gains HEADER ($0000, $0010) and CHR ($0000, $2000)
    areas ahead of PRG ($C000, $4000)
  - rom.nes symlink to 'Pac-Man (U) [!].nes' (the original ROM name
    contains a space and brackets)
  - Makefile builds header.o/prg.o/chr.o into reconstructed.nes and
    compares it against rom.nes
  - reconstructed.nes is 24,592 bytes, MD5 a69d310f8cae9397fbd39f204672b5c7
    - equal to the original ROM; the header/prg/chr splits were checked
    against the original before promotion and are byte-exact

Pass 3 residue closed.  The last 7 multi-alias zero-page operands are
resolved per site through a new sites.tsv, each proven from context
rather than guessed:

  - jmp ($0010) at $C250/$D3CA/$D90F/$D9B6 -> (DispatchPtrLo); each
    is immediately preceded by sta DispatchPtrLo/sta DispatchPtrHi
  - jmp ($00FE) at $EFDA -> (AudioHandlerPtrLo); preceded by
    sta AudioHandlerPtrLo/sta AudioHandlerPtrHi
  - sta a:$0000,y at $C048/$C089 -> a:Zp00,y; the literal zero-page
    base in the two ZP clear loops, so the neutral name is used rather
    than the semantic WorkPtrLo.  The 'a:' prefix survives the
    substitution, so the bytes stay 99 00 00 (sta abs,Y)

apply_symbols.py now reports 119 operands substituted (101 hardware,
11 single-name, 7 site) and 0 residue.

New tool _tools/align_audit_comments.py: re-aligns the audit comment to
column 35 after a substitution lengthens an operand (nesdis.py pads each
instruction to 31 characters).  Whitespace-only, so the byte identity
cannot change.  405 lines re-aligned in this project; all 2,387 audit
comments still match prg.bin at the stated PRG offset, 0 mismatches.

Docs: root README.md / TODO.md / AGENTS.md updated - 30 promoted, 6 in
_wip/; a per-project detail entry for Pac-Man (U) added; the stale
'Donkey Kong 3 (JUE) has no README.md' claim corrected (it has a
318-line one).

Promote Raid on Bungeling Bay (U) [a2]: Pass 3 complete, whole-ROM byte-identical

Move _wip/NROM/Raid on Bungeling Bay (U) [a2] to NROM/ and switch the build
from a PRG-only compare to a whole-ROM one:

  - header.s/chr.s added (one-line .incbin of header.bin / chr.bin)
  - linker.cfg gains HEADER ($0000, $0010) and CHR ($0000, $2000)
    areas ahead of PRG ($C000, $4000)
  - rom.nes symlink to 'Raid on Bungeling Bay (U) [a2].nes' (the original
    ROM name contains spaces and brackets)
  - reconstructed.nes is 24,592 bytes, MD5 659d340a1e9d420eee28df13319b0094
    - equal to the original ROM; the header/prg/chr splits were checked
    against the original before promotion and are byte-exact

Pass 3 - 15 semantic zero-page aliases, each applied only at the sites
where its role is proven:

  - PpuCtrlShadow ($C2), 15 sites: the reset entry primes it right after
    'sta PPUCTRL', and every other use is an ora/and/eor followed by
    'sta PPUCTRL'
  - NmiPathSelector ($C4), 5 sites: written 1 at $C3E9 and 0 at $C962
  - GameState ($D6), 6 sites: 'cmp #$02' and used as an index at $C4C7
  - FrameSubCounter ($55), 6 sites: set to $0A at $C520, decremented per
    NMI at $C07B
  - PrngPeriodCounter ($EA) / PrngSeedB ($EB) / PrngState ($EC), 13 sites:
    the PRNG state
  - PtrLo ($00) / PtrHi ($01), 8 sites: the 16-bit pair $1C13 and $1610
    compared at $E785/$E791
  - IndDispatch01 ($01) / IndDispatch02 ($02), 3 sites: the computed
    dispatch at $E2EC
  - IndDispatch1B ($1B) / IndDispatch1C ($1C), 6 sites: the dispatch at
    $E7A3
  - IndDispatch17 ($17) / IndDispatch19 ($19): the dispatches at $E79D
    and $E7A0

Addresses that carry two names keep the neutral ZpXX name where the other
role applies - $01 is PtrHi at the 16-bit compare and IndDispatch01 at the
dispatch; $17 is IndDispatch17 at the dispatch and Zp17 for the absolute
RAM $0017 store in the copy loop at $E895/$E8D0.

New tool _tools/apply_zp_aliases.py does the per-site substitution:
apply_symbols.py only rewrites *numeric* operands, so it cannot rename an
operand that is already written as a neutral ZpXX name.  The tool keeps the
ca65 'a:' prefix (dropping it would turn 'sta a:Zp17,y' into a zero-page
store and change the bytes) and rewrites only the operand token, so the
audit comment survives byte for byte.

Naming correction in the promoted sibling.  Finishing this dump showed that
$EA was misnamed 'VBlankWaitCounter': the routine at $C412 is the game's
pseudo-random generator (the classic eor/asl/php/lsr/plp/rol scrambler,
called from thirteen gameplay sites, twice in a row at $CDF4/$CDF9 with the
second result masked #$07), so $EA is the scrambler's phase counter.
Renamed PrngPeriodCounter in both dumps and named $EB/$EC PrngSeedB /
PrngState.  The sibling's two 'sta a:IndDispatch17,y' operands were also
wrong - they are absolute stores to RAM $0017, not the dispatch pointer -
and are now 'a:Zp17,y', matching the file's 'a:' = absolute convention.

Audit-comment alignment re-done with _tools/align_audit_comments.py (1,040
lines here, 1,080 in the sibling).  Both files still match prg.bin at every
stated PRG offset: 5,467 and 5,483 audit comments, 0 mismatches.

Docs: root README.md / TODO.md / AGENTS.md updated - 31 promoted, 5 in
_wip/; per-project detail entries added for both Raid dumps.

Promote Pac-Man (Tengen) (U): Pass 2/3 from scratch, whole-ROM byte-identical

Move _wip/NROM/Pac-Man (Tengen) (U) to NROM/ and switch the build from a
PRG-only compare to a whole-ROM one:

  - header.s/chr.s added (one-line .incbin of header.bin / chr.bin)
  - linker.cfg gains HEADER ($0000, $0010) and CHR ($0000, $2000)
    areas ahead of PRG ($C000, $4000)
  - rom.nes symlink to 'Pac-Man (Tengen) (U) [!].nes'
  - reconstructed.nes is 24,592 bytes, MD5 d34e7a74d8d2c231b6cc601210e28ad0
    - equal to the original ROM; the header/prg/chr splits were checked
    against the original before promotion and are byte-exact

Disassembled from scratch.  No name, map or file was carried over from the
sibling 'Pac-Man (U)' dump; the map was derived from this dump's own
committed split and the two were only compared afterwards.

Pass 2 (new tool _tools/apply_pass2_map.py):
  - all 194 Label_XXXX definitions renamed to semantic routine entries plus
    <Routine>_<Role> branch targets; zero Label_ remains
  - all 48 raw $XXXX jsr/jmp operands resolved to labels; zero raw $XXXX
    call or branch operands remain
  - the map is in routinemap.tsv

Pass 3:
  - 30 semantic zero-page aliases, each applied only at the sites where its
    role is proven (per-site choice in sites.tsv; the addresses that carry
    two roles keep the neutral ZpXX name elsewhere).  _tools/
    derive_zp_aliases.py records how the set was derived, and locals.inc
    records the reason for every remaining neutral slot
  - 28 data tables named (new tool _tools/name_data_region.py), including
    CharacterDataTable ($C66A) and CharacterNameStrings ($C67E), where the
    ROM itself names Blinky, Pinky, Inky and Clyde - which is why the four
    indexed entities are called ghosts and not 'actors'
  - apply_symbols.py reports 0 substitutions pending and 0 residue
  - audit-comment alignment re-done with _tools/align_audit_comments.py;
    all 2,479 audit comments still match prg.bin at the stated PRG offset

Pass 1 correction - six command handlers recovered (new tool
_tools/recode_region.py).  ScriptCommandTable ($EFDD) is read by the traced
instruction at $EFCC, and six of its entries point at $F00A, $F022, $F03A,
$F052, $F062 and $F072 - all of which the tracer had left as data, and two
of which it had mis-split across the 'jmp $EF61' at $F01F and $F04F.
Those 120 bytes are code here, decoded straight from the ROM; the six
handlers tile $F00A-$F081 exactly.  The same gap exists in the promoted
'Pac-Man (U)' dump, which has not been corrected - recorded in both READMEs.

Residue (documented, not guessed): the unreached main game logic at
$C45A-$C55F is still .byte data.  It is code - the tracer's own decoder
walks it cleanly and the dispatch table at $C511 points into it - but
nothing reaches it, so it cannot be entered without a guess.  The same gap
exists in the promoted 'Pac-Man (U)' dump.  Re-deriving it is a Pass 1 job;
a Mesen Code Data Logger capture is the tool the repo uses for it.

Docs: root README.md / TODO.md / AGENTS.md updated - 32 promoted, 4 in
_wip/; a per-project detail entry added for the Tengen dump.

Promote Pyramid (U): Pass 1 corrected, Pass 2/3 complete, whole-ROM byte-identical

Move _wip/NROM/Pyramid (U) to NROM/ and switch the build from a PRG-only
compare to a whole-ROM one:

  - header.s/chr.s added (one-line .incbin of header.bin / chr.bin)
  - linker.cfg gains HEADER ($0000, $0010) and CHR ($0000, $2000)
    areas ahead of PRG ($C000, $4000)
  - rom.nes symlink to 'Pyramid (U) (Sachen).nes'
  - reconstructed.nes is 24,592 bytes, MD5 aa285ff17f25dd05da5996b7466c59e2
    - equal to the original ROM; the header/prg/chr splits were checked
    against the original before promotion and are byte-exact

Pass 1 correction - the committed split was a strict subset of the correct
one.  This game dispatches through 'jmp' trampoline tables that live
*inside* the data regions, and the tracer cannot follow a jmp there, so
828 bytes of code were still marked as data.  Four such tables were found
($C01E 3 entries, $C02A 6, $C042 2, $C054 5) plus ten more entries at
$C000-$C01B; all sixteen targets decode as valid instructions.  Seeding
them, the $C800 boot mainline and six further code starts recovers the
whole lot, plus a five-byte stub at $DF89 (lda $33 / jmp $DECB) that sat
in a hole between two routines.  The re-trace loses NO committed code byte
and takes the split from 34.5% to 39.6% (3,130 instructions / 6,493 code
bytes).  'make regen' reproduces it, so the split stays verifiable.

Pass 2 - a fresh map derived from this dump's own committed split:
  - 428 Label_XXXX definitions renamed; zero Label_ residue
  - 320 raw $XXXX jsr/jmp operands resolved; zero raw $XXXX branch
    operands remain
  - 431 routine entries and the 32 data blocks named from the code
  - the internal branch-target names are derived mechanically from the
    branch that reaches them by the new _tools/derive_branch_names.py
    (beq -> OnZero, bne -> OnNonzero, bcc/bcs -> the carry cases, a
    backwards branch -> Loop)
  - recorded in routinemap.tsv

Pass 3:
  - 24 semantic zero-page aliases, each applied only where its role is
    proven; the 57 slots that stay neutral are each listed with the reason
    in locals.inc (the neutral set lives in zp_aliases.inc so that
    'make regen' can rebuild locals.inc from prg.bin)
  - 32 data tables named - TaskVectorTable1/2, LevelScriptData,
    MusicPeriodTable, SoundEnvelopeTable, the actor tables - recorded in
    data_region_names.tsv
  - apply_symbols.py reports 0 substitutions pending and 0 residue; no
    hardware register is left as a raw literal
  - the audit comments are now canonical on every line, data included
    (the old file carried only 'PRG:$xxxx' on its 1,358 data lines);
    all 3,762 audit comments match prg.bin at their stated PRG offset

Kept as-is, not 'cleaned up':
  - sta $4100 stays a raw operand.  The iNES header claims mapper 0 but
    the boot code writes past the NES register space; the ROM does not
    explain it, so it is recorded rather than guessed
  - the 'A'/'V' check on RAM $0120/$0121 and its seed/clear routines
    are named for what they do, not for what they are for
  - the ninth entry of the $C3A6 task vector table ($D820) is a junk
    slot and stays data

Docs: root README.md / TODO.md / AGENTS.md updated - 33 promoted, 3 in
_wip/; a per-project detail entry added.

Hogan's Alley (JU): Pass 1 correction, Pass 2, Pass 3, promoted to NROM/

The light-gun game whose engine dispatches through *inline* tables:
`IndirectCall` at $C34D pops the return address of the `jsr` that called
it and reads a 16-bit handler pointer from the word that follows, so all
six handler tables ($C124 19 entries, $C219 4, $C89C 14, $CDD1 1, $D234 2,
$D3D6 14) live inside the code stream and the static tracer cannot follow
them.

Pass 1 correction.  The committed split was a strict subset of the correct
one -- 41.8% of the PRG was classified as code.  A fresh Mesen Code Data
Logger capture was merged with the four captures already in the folder
(hogans_merged.cdl, the OR of five per-byte flag arrays, 6,544 code bytes)
and _tools/cdl_reclass.py rewrote the split to match what the CPU actually
fetched: 1,216 bytes moved from data to code, five the other way, 59 labels
emitted.  The split is now 49.1% code (3,950 instructions, 8,041 bytes).
The four branch targets the reclassifier could not prove were turned into
labels by the new _tools/resolve_raw_branches.py.

Pass 2.  206 routine entries hand-named from this dump's own code and 413
internal branch targets derived mechanically by _tools/derive_branch_names.py:
630 Label_XXXX definitions gone, 484 raw $XXXX call operands resolved, 15
call targets the tracer had never labelled given a label.  Recorded in
routinemap.tsv.  No SubC<addr> residue was needed -- every entry the engine
reaches is named after what it does.

Pass 3.  60 semantic zero-page aliases, each applied only where its role is
proven (zp_aliases.inc, zp_alias_sites.tsv); the slots that stay neutral are
each listed with the reason.  All 34 data blocks named
(data_region_names.tsv).  apply_symbols.py reports 1 residue: `sta a:$00B4,y`
at $C203, the same address as Zp40/ActorPalette but forced to absolute
addressing, so it must stay numeric.

Promotion.  header.s, chr.s and a HEADER/PRG/CHR linker.cfg added, rom.nes
symlinked to the original ROM; the whole-ROM cmp passes on the first
promoted build.  There is deliberately no `make regen` target: the Pass 1
split here is the static trace corrected by a CDL capture, and the base the
correction was applied to is not what the current _tools/nesdis.py
produces, so prg.s is the maintained source of truth.

Tools changed:
  nesdis.py             --split/--note/--provenance options, so a data
                          region can carry its own name and explanation;
                          a forced-data address is no longer reported as a
                          recovered routine entry
  apply_pass2_map.py    can create the label for a call target the tracer
                          left unlabelled; no longer double-labels it
  apply_zp_aliases.py   --at-file, an address-based per-site list
  derive_branch_names.py keeps the map's own header instead of writing a
                          fixed one
  resolve_raw_branches.py  new: turns `bXX *+$NN` operands into labels
  build_hogans_map.py   new: the hand-written Pass 2 map builder

The existing regen pipelines (MUSCLE (U), Urban Champion (JU)) still
reproduce prg.s byte for byte.

Apply the symbols.inc register names at Pass 1; fix a dropped byte in cdl_reclass

nesdis.py now names the hardware registers as it renders the operands, so a
project's Pass 1 output already reads `lda PPUSTATUS` instead of `lda $2002`
and the Pass 3 apply_symbols.py step has nothing left to do for them.

  * nesdis.py --symbols FILE reads a symbols.inc-style file and substitutes
    the register names.  Only unambiguous entries in the $2000-$4017 window
    are used: $4017 is both JOY2 and APUFRAMECOUNTER, so it stays numeric
    and apply_symbols.py reports it as multi-alias residue, exactly as
    before.  The default is the symbols.inc next to --out, so a new project
    gets the names without asking; --no-symbols opts out.
  * The renderer records the operand's numeric value on the Insn, because
    operand_value() used to re-parse the operand text and could no longer
    read a name.
  * The controller bit masks in symbols.inc (PAD_A and friends) are
    constants, not addresses, and are still never substituted.

MUSCLE (U) and Urban Champion (JU) keep --no-symbols: their committed
prg.s was produced with the registers named by the Pass 3 apply_symbols.py
step, and the columns in those files reflect the in-place substitution.
Adding the missing apply_symbols.py step to both regen pipelines makes
them reproduce their committed prg.s byte for byte again - neither did
before this change (MUSCLE was 440 lines out, Urban Champion 772).

cdl_reclass.py had a bug that cost a byte: a region whose last source row
straddled the region's end was replaced by a regeneration of the region
only, so the tail of that row was dropped.  Mario Bros (JU) hit it at
$C595, where the rebuild came out one byte short and every label after it
shifted.  A region now covers the whole rows it replaces.

pass2.py reflow takes an optional column argument; the default is
unchanged (the ';' lands on the same column as before).

Mario Bros (JU): Pass 1 correction, Pass 2, Pass 3, promoted to NROM/

A two-player platformer whose handler tables are *inline*: the pointers sit
in the middle of the code stream, right after the `jsr` that reads them, so
the static tracer could never follow them.

Pass 1 correction.  The committed split was a strict subset of the correct
one -- only 72.0% of the PRG was classified as code.  A Mesen Code Data
Logger capture of this ROM (mario_mesen.cdl, 10,915 code bytes) showed
1,010 bytes the tracer had left as data were code; two branch targets the
capture never reached ($E4CB and $E639) were forced with --override for 57
more, so 1,067 bytes moved from data to code and 22 moved the other way.
The split is now 78.4% code (6,210 instructions, 12,847 bytes).  The three
branch targets the reclassifier could not prove were turned into labels by
_resolve_raw_branches.py, which now refuses to put a label on a `.byte` row.

Pass 2.  206 routine entries and 519 internal branch targets: 931
Label_XXXX definitions gone, 51 raw $XXXX call operands resolved and 12 call
targets the tracer had never labelled given a label.  Zero SubC residue --
the 185 entries a previous session had left as address-derived residue were
all named from this dump's own code.  Recorded in routinemap.tsv.

Pass 3.  25 semantic zero-page aliases, each applied only where its role is
proven (zp_aliases.inc); the slots that stay neutral are each listed with the
reason.  35 data tables named -- GameStateHandlerTable, EnemyBehaviourTable,
EnemyScriptTable, EnemyTypePointerTable, SoundRoutineTable,
NoteFrequencyTable and the rest -- and recorded in
data_region_names.tsv.  apply_symbols.py reports 0 residue.

Promotion.  header.s, chr.s and a HEADER/PRG/CHR linker.cfg added, rom.nes
symlinked to the original ROM; the whole-ROM cmp passes on the first
promoted build.  There is deliberately no `make regen` target: the Pass 1
split here is the static trace corrected by a CDL capture, and the base the
correction was applied to is not what the current _tools/nesdis.py
produces, so prg.s is the maintained source of truth.

Tools:
  apply_pass2_map.py     renames a label of any spelling -- SubC<addr> is
                          the honest residue form -- and its references
                          follow it; one combined pattern, so a 16,000-line
                          file does not need a substitution per label
  resolve_raw_branches.py refuses to label a data row
  build_mario_map.py      new: the hand-written Pass 2 map builder

Remove the old _wip/NROM/Mario Bros (JU) folder (promoted to NROM/)

Mario Bros (JU): add the promoted-tier header, CHR, rom.nes symlink and zero-page aliases

Moves _ROMS/<ROM> into _wip/<MAPPER>/<ROM>

Sync the docs and the skeleton tool with the 857-project _wip tier

The _wip/ tier now holds 857 projects across 30 mapper folders, all
building byte-identical for the whole ROM.  README.md, TODO.md and
AGENTS.md still described the old 39-project tier, so bring them in line
with WIP.md, which carries the tier's index.

The tier is no longer 39 projects of NROM-256 with a 16/32 KB PRG:
only two projects have a 16 KB PRG, 151 have 32 KB, 523 have 128 KB and
one has 1.5 MB, so most of it is a banked mapper whose image does not fit
the 6502's address space.  Those projects link their MEMORY areas at .nes
file offsets rather than CPU addresses, which is the only option and the
honest model; the 39 older projects keep the CPU-address layout because
their PRG really is one contiguous window.

make_skeleton.py gains the two layouts (--layout flat|cpu), the board
name for the mapper, and a fix for find_rom() mistaking the build
output reconstructed.nes for the source ROM.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-10-20 16:44:06 -04:00

33 KiB

1labelLabel_800EWaitForFirstPpuWarmup
2labelLabel_8019WaitForSecondPpuWarmup
3labelLabel_802CInitializeGameState
4labelLabel_803BInitializeGameState_OnNonzero_803B
5labelLabel_8052UpdateNametableFromStream
6labelLabel_805BUpdateNametableFromStream_OnNonzero_805B
7labelLabel_8066UpdateNametableFromStream_OnZero_8066
8labelLabel_806EUpdateNametableFromStream_OnNonnegative_806E
9labelLabel_8077UpdateNametableFromStream_OnZero_8077
10labelLabel_807AUpdateNametableFromStream_OnZero_807A
11labelLabel_8080UpdateNametableFromStream_OnZero_8080
12labelLabel_8094UpdateNametableFromStream_OnZero_8094
13labelLabel_80ACStartStageSequence
14labelLabel_80E0StartStageSequence_OnZero_80E0
15labelLabel_8105StartStageSequence_OnNonzero_8105
16labelLabel_810AStartStageSequence_OnNonzero_810A
17labelLabel_811AStartStageSequence_OnZero_811A
18labelLabel_8132UpdateFadeFlashSprites
19labelLabel_8154UpdateFadeFlashSprites_OnCarryClear_8154
20labelLabel_8164InitializeRound
21labelLabel_8173InitializeRound_OnCarryClear_8173
22labelLabel_8187InitializeRound_OnNonnegative_8187
23labelLabel_8191InitializeRound_OnNonzero_8191
24labelLabel_8196InitializeRound_OnNonnegative_8196
25labelLabel_81A0InitializeRound_OnNonzero_81A0
26labelLabel_81D6InitializeRound_OnCarryClear_81D6
27labelLabel_81DAInitializeRound_OnCarryClear_81DA
28labelLabel_81DEInitializeRound_OnCarryClear_81DE
29labelLabel_81E0InitializeRound_OnCarryClear_81E0
30labelLabel_81E2InitializeRound_JoinBranchPaths_81E2
31labelLabel_8223InitializeRound_OnNonzero_8223
32labelLabel_8226MainGameLoop
33labelLabel_8232MainGameLoop_OnZero_8232
34labelLabel_8235MainGameLoop_OnZero_8235
35labelLabel_824DMainGameLoop_OnZero_824D
36labelLabel_8255MainGameLoop_OnNonzero_8255
37labelLabel_8261MainGameLoop_OnNonzero_8261
38labelLabel_8267MainGameLoop_OnNonnegative_8267
39labelLabel_8284MainGameLoop_OnZero_8284
40labelLabel_828CMainGameLoop_OnNonzero_828C
41labelLabel_8298MainGameLoop_OnNonzero_8298
42labelLabel_829EMainGameLoop_OnNonnegative_829E
43labelLabel_82ACDivideBy20
44labelLabel_82BEDivideBy20_OnNonzero_82BE
45labelLabel_82DADivideBy20_OnCarryClear_82DA
46labelLabel_82E1SilenceSoundChannels1And3
47labelLabel_82EDSilenceSoundChannel3
48labelLabel_82FAStartIntroMusic
49labelLabel_82FFStartMusicSequence
50labelLabel_832AUpdateHudTallyTiles
51labelLabel_833EUpdateHudTallyTiles_OnZero_833E
52labelLabel_8352UpdateHudTallyTiles_OnZero_8352
53labelLabel_8353UpdateScoreTallyDigits
54labelLabel_8372WriteScoreTallyDigits
55labelLabel_8374WriteScoreTallyDigits_OnCarryClear_8374
56labelLabel_8385WriteScoreTallyDigits_OnZero_8385
57labelLabel_8390WriteScoreTallyDigits_OnNonzero_8390
58labelLabel_8399LoadOamShadowFromTable
59labelLabel_839BLoadOamShadowFromTable_OnNonnegative_839B
60labelLabel_83A7UpdateActorPositions
61labelLabel_83ABUpdateActorPositions_OnNonnegative_83AB
62labelLabel_83D0UpdateActorPositions_OnZero_83D0
63labelLabel_83E1UpdateActorPositions_OnCarryClear_83E1
64labelLabel_841AUpdateActorPositions_OnZero_841A
65labelLabel_8434UpdateActorPositions_OnNonzero_8434
66labelLabel_845CUpdateRoundTimers
67labelLabel_848DUpdateRoundTimers_OnNonzero_848D
68labelLabel_84A1UpdateRoundTimers_OnZero_84A1
69labelLabel_84B1UpdateRoundTimers_OnNonzero_84B1
70labelLabel_84B5UpdateRoundTimers_OnNonzero_84B5
71labelLabel_84E9UpdateRoundTimers_OnCarrySet_84E9
72labelLabel_84EEUpdateRoundTimers_OnNonzero_84EE
73labelLabel_84F4UpdateRoundTimers_OnCarryClear_84F4
74labelLabel_850FUpdateRoundTimers_OnZero_850F
75labelLabel_851CUpdateRoundTimers_OnCarrySet_851C
76labelLabel_851FUpdateRoundTimers_OnNonzero_851F
77labelLabel_8522UpdateRoundTimers_OnCarrySet_8522
78labelLabel_8564UpdateRoundTimers_OnZero_8564
79labelLabel_856CPlayRoundChangeMusic
80labelLabel_858FPlayRoundChangeMusic_OnNonzero_858F
81labelLabel_8596UpdateScrollTarget
82labelLabel_8598UpdateScrollTargetAlt
83labelLabel_85A3UpdateScrollTargetAlt_OnZero_85A3
84labelLabel_85A8UpdateScrollTargetAlt_OnNonzero_85A8
85labelLabel_85DAUpdateScrollTargetAlt_OnNonzero_85DA
86labelLabel_85ECUpdateScrollTargetAlt_JoinBranchPaths_85EC
87labelLabel_8639BeginVblankFrame
88labelLabel_8644ForceRenderingOff
89labelLabel_8653SetRenderingOffAndSignalVblank
90labelLabel_865DUpdateRoundLogic
91labelLabel_8682UpdateRoundLogic_OnNonzero_8682
92labelLabel_86A0UpdateRoundLogic_JoinBranchPaths_86A0
93labelLabel_86AAUpdateRoundLogic_JoinBranchPaths_86AA
94labelLabel_86ADUpdateRoundLogic_OnNegative_86AD
95labelLabel_86D8NmiHandler_OnZero_86D8
96labelLabel_86E3NmiHandler_OnNonzero_86E3
97labelLabel_86FANmiHandler_OnZero_86FA
98labelLabel_8703NmiHandler_OnNegative_8703
99labelLabel_8709NmiHandler_OnZero_8709
100labelLabel_8728NmiHandler_OnCarrySet_8728
101labelLabel_872FNmiHandler_OnNonzero_872F
102labelLabel_8742NmiHandler_OnNonzero_8742
103labelLabel_8751FinishNmiUpdates
104labelLabel_8759FinishNmiRegisters
105labelLabel_8765SetSoundSequenceChannel1
106labelLabel_877CRunGameStateDispatcher
107labelLabel_8787RunGameStateDispatcher_JoinBranchPaths_8787
108labelLabel_8795RunGameStateDispatcher_OnNonzero_8795
109labelLabel_87BFUpdateTimersAlt
110labelLabel_87D1PollControllerStart
111labelLabel_87F1PollControllerStart_JoinBranchPaths_87F1
112labelLabel_87F2UpdateFlashCounter
113labelLabel_8801UpdateFlashCounter_OnZero_8801
114labelLabel_8803UpdateFlashCounter_OnNonzero_8803
115labelLabel_8819UpdateFlashCounter_OnCarryClear_8819
116labelLabel_8837PlayDeathSequence
117labelLabel_8848PollControllerBits
118labelLabel_885APollControllerBits_JoinBranchPaths_885A
119labelLabel_885BPollControllerAndAdvance
120labelLabel_886CPollControllerBitsAlt
121labelLabel_887CSignalVblankComplete
122labelLabel_8881SignalVblankComplete_JoinBranchPaths_8881
123labelLabel_8882PollControllerAndCheckRound
124labelLabel_888DPollControllerAndCheckRound_OnZero_888D
125labelLabel_8899PollControllerAndCheckRound_OnCarrySet_8899
126labelLabel_889DPollControllerAndCheckRound_OnNonzero_889D
127labelLabel_88A4BuildOamList
128labelLabel_88AEBuildOamList_OnNonzero_88AE
129labelLabel_88B0EmitOamEntry
130labelLabel_88EBEmitOamBlankEntry
131labelLabel_88F3EmitOamBlankEntry_JoinBranchPaths_88F3
132labelLabel_88F4EmitOamBlankEntry_OnZero_88F4
133labelLabel_88F9EmitOamFromTable
134labelLabel_88FFEmitOamAtOffset
135labelLabel_8909EmitOamAtOffset_OnZero_8909
136labelLabel_890FEmitOamAtOffset_JoinBranchPaths_890F
137labelLabel_891BEmitOamAtOffset_OnZero_891B
138labelLabel_892AEmitOamAtOffset_OnNonzero_892A
139labelLabel_8936FindFreeOamSlot
140labelLabel_8938FindFreeOamSlot_OnNonnegative_8938
141labelLabel_8942FindFreeOamSlot_OnZero_8942
142labelLabel_8943FindFreeOamSlot_JoinBranchPaths_8943
143labelLabel_896AFindFreeOamSlot_JoinBranchPaths_896A
144labelLabel_896BFindFreeOamSlot_OnZero_896B
145labelLabel_897FFindFreeOamSlot_OnNonzero_897F
146labelLabel_8986CompactOamList
147labelLabel_898ACompactOamList_OnNonnegative_898A
148labelLabel_899DCompactOamList_OnZero_899D
149labelLabel_899FCompactOamList_OnNonzero_899F
150labelLabel_89A8CompactOamList_OnZero_89A8
151labelLabel_89ACCompactOamList_OnZero_89AC
152labelLabel_89B0CompactOamList_OnCarryClear_89B0
153labelLabel_89B2CompactOamList_OnNonzero_89B2
154labelLabel_89B5CompactOamList_OnNonzero_89B5
155labelLabel_89B8CompactOamList_OnNonzero_89B8
156labelLabel_89CEReadControllerAndInit
157labelLabel_89EEReadControllerAndInit_OnCarryClear_89EE
158labelLabel_89F7ReadControllerAndInit_OnNonzero_89F7
159labelLabel_8A28UpdateStageActors
160labelLabel_8A5DUpdateStageActors_JoinBranchPaths_8A5D
161labelLabel_8A5ESpawnStageActors
162labelLabel_8A68SpawnStageActors_OnCarryClear_8A68
163labelLabel_8A74SpawnStageActors_OnZero_8A74
164labelLabel_8A84SpawnStageActors_OnNonzero_8A84
165labelLabel_8A93SpawnStageActors_OnZero_8A93
166labelLabel_8AA4SpawnStageActors_JoinBranchPaths_8AA4
167labelLabel_8AA5SpawnStageActors_OnZero_8AA5
168labelLabel_8AE1SpawnStageActors_JoinBranchPaths_8AE1
169labelLabel_8AE8UpdateAttributeTable
170labelLabel_8B07ClearScrollLatch
171labelLabel_8B0DClearScrollLatch_OnNonzero_8B0D
172labelLabel_8B20WriteNametableTile
173labelLabel_8B25WriteNametableTile_OnNonzero_8B25
174labelLabel_8B33ClearAttributeRegion
175labelLabel_8B37ClearAttributeRegion_JoinBranchPaths_8B37
176labelLabel_8B3BClearAttributeRegion_OnNonnegative_8B3B
177labelLabel_8B5FClearAttributeRegion_OnCarryClear_8B5F
178labelLabel_8B67ClearAttributeRegion_OnZero_8B67
179labelLabel_8B6DClearAttributeRegion_JoinBranchPaths_8B6D
180labelLabel_8B92RenderHudDigits
181labelLabel_8BBARenderHudDigits_OnNonzero_8BBA
182labelLabel_8BEFRenderHudDigitDescriptor
183labelLabel_8BF8SetRenderingOn
184labelLabel_8BFFSetRenderingOn_OnNonnegative_8BFF
185labelLabel_8C05AdvanceAnimationSlot
186labelLabel_8C0EQueueVramTransfer
187labelLabel_8C11QueueVramTransferAlt
188labelLabel_8C3AQueueVramTransferAlt_OnNonnegative_8C3A
189labelLabel_8C55QueueVramTransferAlt_OnNonzero_8C55
190labelLabel_8C65ExecuteVramTransfer
191labelLabel_8C72ExecuteVramTransfer_OnNonzero_8C72
192labelLabel_8C98ExecuteVramTransfer_OnZero_8C98
193labelLabel_8CB8QueueVramDescriptor
194labelLabel_9287QueueVramDescriptor_Entry_9287
195labelLabel_928DQueueVramDescriptor_JumpNext_928D
196labelLabel_9293QueueVramDescriptor_JumpNext_9293
197labelLabel_929FQueueVramDescriptor_OnNonzero_929F
198labelLabel_92AFQueueVramDescriptor_OnNonzero_92AF
199labelLabel_92B2QueueVramDescriptor_JumpNext_92B2
200labelLabel_92CDQueueVramDescriptor_JumpNext_92CD
201labelLabel_92E8QueueVramDescriptor_OnZero_92E8
202labelLabel_9329QueueVramDescriptor_OnZero_9329
203labelLabel_932CQueueVramDescriptor_JumpNext_932C
204labelLabel_934BUpdateActorX
205labelLabel_9354UpdateActorX_JumpNext_9354
206labelLabel_9371UpdateActorTile
207labelLabel_9374UpdateActorTileAlt
208labelLabel_937CUpdateActorTileAlt_JumpNext_937C
209labelLabel_93A4UpdateActorTileAlt_JumpNext_93A4
210labelLabel_93C4UpdateActorTileAlt_OnCarrySet_93C4
211labelLabel_93CCUpdateActorTileAlt_JumpNext_93CC
212labelLabel_93D0UpdateActorTileAlt_OnZero_93D0
213labelLabel_93D3UpdateActorTileAlt_OnNonzero_93D3
214labelLabel_9401UpdateActorTileAlt_OnCarrySet_9401
215labelLabel_9409UpdateActorTileAlt_JumpNext_9409
216labelLabel_941BUpdateActorTileAlt_JumpNext_941B
217labelLabel_942CUpdateActorTileAlt_OnNegative_942C
218labelLabel_9441UpdateActorTileAlt_OnNonnegative_9441
219labelLabel_9450UpdateActorTileAlt_OnNonzero_9450
220labelLabel_9451UpdateActorTileAlt_OnCarrySet_9451
221labelLabel_9454UpdateActorTileAlt_OnCarryClear_9454
222labelLabel_945BUpdateActorTileAlt_OnNegative_945B
223labelLabel_9465UpdateActorTileAlt_JumpNext_9465
224labelLabel_946DUpdateActorTileAlt_JumpNext_946D
225labelLabel_9477UpdateActorTileAlt_JumpNext_9477
226labelLabel_947DUpdateActorTileAlt_OnZero_947D
227labelLabel_9480UpdateActorTileAlt_JumpNext_9480
228labelLabel_948FUpdateActorTileAlt_JumpNext_948F
229labelLabel_9499UpdateActorTileAlt_JumpNext_9499
230labelLabel_94AAUpdateActorTileAlt_OnZero_94AA
231labelLabel_94ADUpdateActorTileAlt_JumpNext_94AD
232labelLabel_94B1TestPlayerFacing
233labelLabel_94C0TestPlayerFacing_JumpNext_94C0
234labelLabel_94C7SelectActorSlot
235labelLabel_94C8SelectActorSlotAlt
236labelLabel_94CFClearActorPosition
237labelLabel_94D7ClearActorFields
238labelLabel_94F3ClearActorFields_JoinBranchPaths_94F3
239labelLabel_94F6ClearActorFields_OnNonzero_94F6
240labelLabel_94FESetActorFlag
241labelLabel_950BSetActorFlag_JumpNext_950B
242labelLabel_9513SetActorFlag_JumpNext_9513
243labelLabel_951FSetActorFlag_OnNonzero_951F
244labelLabel_9522SetActorFlag_JumpNext_9522
245labelLabel_9535SetActorFlag_OnNonzero_9535
246labelLabel_9541SetActorFlag_Return_9541
247labelLabel_9551SetActorFlag_OnNonzero_9551
248labelLabel_9559SetActorFlag_JumpNext_9559
249labelLabel_9585UpdateActorState
250labelLabel_9590UpdateActorState_OnNonzero_9590
251labelLabel_95A5UpdateActorState_OnCarryClear_95A5
252labelLabel_95AEComputeActorLeftEdge
253labelLabel_95B8ComputeActorLeftEdge_OnNonzero_95B8
254labelLabel_95C9ComputeActorLeftEdge_OnCarryClear_95C9
255labelLabel_95D2ComputeActorRightEdge
256labelLabel_95D9CompareActorToLimit
257labelLabel_95DCCompareActorToLimit_Return_95DC
258labelLabel_95E3CompareActorToLimit_OnNonzero_95E3
259labelLabel_9628CompareActorToLimit_OnCarrySet_9628
260labelLabel_963CCompareActorToLimit_OnCarrySet_963C
261labelLabel_963ECompareActorToLimit_OnNonnegative_963E
262labelLabel_9641CompareActorToLimit_OnZero_9641
263labelLabel_9644CompareActorToLimit_JumpNext_9644
264labelLabel_9653SetActorTileFromPalette
265labelLabel_9664SetActorTileFromPalette_OnNonzero_9664
266labelLabel_9667StoreActorTile
267labelLabel_966DStoreActorTile_Return_966D
268labelLabel_9679StoreActorTile_OnNegative_9679
269labelLabel_968EStoreActorTile_OnNonnegative_968E
270labelLabel_969DStoreActorTile_OnNonzero_969D
271labelLabel_969EAdvanceActorCounter
272labelLabel_96A6AdvanceActorCounter_OnCarryClear_96A6
273labelLabel_96AASetActorTileValue
274labelLabel_96B3SetActorTileValue_OnNonzero_96B3
275labelLabel_96B9SetActorTileValue_OnNegative_96B9
276labelLabel_96BCSetActorTileValue_JumpNext_96BC
277labelLabel_96C2SetActorTileValue_Continue_96C2
278labelLabel_96C8TestActorCollisionFlag
279labelLabel_96CCTestActorCollisionFlag_OnZero_96CC
280labelLabel_96CETestActorCollisionFlag_OnZero_96CE
281labelLabel_96EETestActorCollisionFlag_OnCarryClear_96EE
282labelLabel_96F7ComputeActorLeftEdgeAlt
283labelLabel_9701ComputeActorLeftEdgeAlt_OnNonzero_9701
284labelLabel_9719ComputeActorLeftEdgeAlt_OnCarryClear_9719
285labelLabel_9722ComputeActorRightEdgeAlt
286labelLabel_9729TestActorRange
287labelLabel_9731TestActorRange_OnCarrySet_9731
288labelLabel_9732MoveActorByStep
289labelLabel_975DMoveActorByStep_OnCarrySet_975D
290labelLabel_975EMoveActorByStep_Return_975E
291labelLabel_9766MoveActorByStep_OnCarryClear_9766
292labelLabel_979AMoveActorByStep_OnNonzero_979A
293labelLabel_97A0MoveActorByStep_OnNonzero_97A0
294labelLabel_97BCSetActorAnimation63
295labelLabel_97C0SetActorAnimation62
296labelLabel_97C4SetActorAnimation61
297labelLabel_97C6SetActorAnimation61_OnNonzero_97C6
298labelLabel_97D5UpdateActorAnimation
299labelLabel_97FBUpdateActorAnimation_OnZero_97FB
300labelLabel_97FCTestAnimationSlot
301labelLabel_9800TestAnimationSlot_JoinBranchPaths_9800
302labelLabel_9802TestAnimationSlot_OnNonzero_9802
303labelLabel_981CTestAnimationSlot_OnCarryClear_981C
304labelLabel_982AComputeActorLeftEdgeAt
305labelLabel_9834ComputeActorLeftEdgeAt_OnNonzero_9834
306labelLabel_984AComputeActorLeftEdgeAt_OnCarryClear_984A
307labelLabel_9858ComputeActorRightEdgeAt
308labelLabel_985FTestActorValue
309labelLabel_986ATestActorValue_Return_986A
310labelLabel_9875TestActorValue_OnCarryClear_9875
311labelLabel_98A7TestActorValue_OnCarryClear_98A7
312labelLabel_98AATestActorValue_JoinBranchPaths_98AA
313labelLabel_98ADTestActorValue_JoinBranchPaths_98AD
314labelLabel_98B0TestActorValue_JumpNext_98B0
315labelLabel_98B7TestActorValue_OnNonzero_98B7
316labelLabel_98BETestActorValue_JoinBranchPaths_98BE
317labelLabel_98C1TestActorValue_OnNonzero_98C1
318labelLabel_98D8TestActorValue_OnCarryClear_98D8
319labelLabel_98E6ComputeActorLeftEdgeAlt2
320labelLabel_98F0ComputeActorLeftEdgeAlt2_OnNonzero_98F0
321labelLabel_9903ComputeActorLeftEdgeAlt2_OnCarryClear_9903
322labelLabel_9911UpdateActorTileFromIndex
323labelLabel_9918UpdateActorTileFromIndexAlt
324labelLabel_9948UpdateActorTileFromIndexAlt_JoinBranchPaths_9948
325labelLabel_994BUpdateActorTileFromIndexAlt_JumpNext_994B
326labelLabel_996EUpdateActorTileFromIndexAlt_JumpNext_996E
327labelLabel_997CUpdateActorTileFromIndexAlt_JumpNext_997C
328labelLabel_9989UpdateActorTileFromIndexAlt_OnNonzero_9989
329labelLabel_9994UpdateActorTileFromIndexAlt_OnNonzero_9994
330labelLabel_99A0UpdateActorTileFromIndexAlt_OnNonzero_99A0
331labelLabel_99A3SetSoundSequenceChannel2
332labelLabel_99B0SetSoundSequenceChannel2_Return_99B0
333labelLabel_99B7SetSoundSequenceChannel2_JumpNext_99B7
334labelLabel_99D7SetSoundSequenceChannel2_OnNegative_99D7
335labelLabel_99E2LookupActorTileId
336labelLabel_99E4LookupActorTileIdAlt
337labelLabel_9A02LookupActorTileIdAlt_OnCarryClear_9A02
338labelLabel_9A24StoreActorCoordinates
339labelLabel_9A2EStoreActorCoordinatesAlt
340labelLabel_9A36StoreActorCoordinatesAlt_OnNonnegative_9A36
341labelLabel_9A3FFlipActorFacing
342labelLabel_9A4ESpawnActorPair
343labelLabel_9A6BSpawnActorPairAlt
344labelLabel_9ABCSpawnActorPairAlt_OnNonzero_9ABC
345labelLabel_9ACESpawnActorPairAlt_OnNonzero_9ACE
346labelLabel_9AD3SpawnActorPairAlt_JoinBranchPaths_9AD3
347labelLabel_9AD8SpawnActorPairAlt_OnNonzero_9AD8
348labelLabel_9AE8RunBytecodeInterpreter
349labelLabel_9B05DispatchThroughPointer
350labelLabel_9B08DispatchThroughPointer_JoinBranchPaths_9B08
351labelLabel_9B18DispatchThroughPointer_OnNonzero_9B18
352labelLabel_9B25RunBytecodeProgram
353labelLabel_9B4CRunBytecodeProgram_OnNonnegative_9B4C
354labelLabel_9B64RunBytecodeProgram_OnNonnegative_9B64
355labelLabel_9B72RunBytecodeProgram_OnNonnegative_9B72
356labelLabel_9BA1RunBytecodeProgram_OnZero_9BA1
357labelLabel_9BB0RunBytecodeProgram_OnNonzero_9BB0
358labelLabel_9BB4RunBytecodeProgram_OnNonzero_9BB4
359labelLabel_9BD9RunBytecodeProgram_OnNonzero_9BD9
360labelLabel_9BDDRunBytecodeProgram_OnNonzero_9BDD
361labelLabel_9BF3RunBytecodeProgram_OnCarryClear_9BF3
362labelLabel_9C2CRunBytecodeProgram_OnZero_9C2C
363labelLabel_9C2ERunBytecodeProgram_OnNonnegative_9C2E
364labelLabel_9C4CRunBytecodeProgram_OnNonnegative_9C4C
365labelLabel_9C52RunBytecodeProgram_OnNonnegative_9C52
366labelLabel_9C66RunBytecodeProgram_OnCarryClear_9C66
367labelLabel_9C71RunBytecodeProgram_OnZero_9C71
368labelLabel_9C73RunBytecodeProgram_JoinBranchPaths_9C73
369labelLabel_9C84RunBytecodeProgram_OnNonzero_9C84
370labelLabel_9C8DRunBytecodeProgram_OnCarryClear_9C8D
371labelLabel_9C91RunBytecodeProgram_JoinBranchPaths_9C91
372labelLabel_9CADRunBytecodeProgram_Return_9CAD
373labelLabel_9CBBResetBytecodeState
374labelLabel_9CDBResetBytecodeState_OnCarryClear_9CDB
375labelLabel_9CE5ResetBytecodeState_OnCarryClear_9CE5
376labelLabel_9D04ResetBytecodeState_OnNonnegative_9D04
377labelLabel_9D0DResetBytecodeState_OnCarrySet_9D0D
378labelLabel_9D10ResetBytecodeState_OnNonzero_9D10
379labelLabel_9D39ResetBytecodeState_OnZero_9D39
380labelLabel_9D4AResetBytecodeState_OnZero_9D4A
381labelLabel_9D4ECopyActorCoordinates
382labelLabel_9D61CopyActorCoordinates_OnCarryClear_9D61
383labelLabel_9DA2CopyActorCoordinates_OnNonzero_9DA2
384labelLabel_9DB6CopyActorCoordinates_OnZero_9DB6
385labelLabel_9DBBCopyActorCoordinates_OnNonzero_9DBB
386labelLabel_9DD0CopyActorCoordinates_OnCarryClear_9DD0
387labelLabel_9DD4CopyActorCoordinates_OnCarryClear_9DD4
388labelLabel_9DD6SetActorBounds
389labelLabel_9DE6LoadActorTileIndex
390labelLabel_9E02LoadActorTileIndex_OnCarrySet_9E02
391labelLabel_9E19LoadActorTileIndex_OnZero_9E19
392labelLabel_9E37LoadActorTileIndex_OnNonzero_9E37
393labelLabel_9E4BLoadActorTileIndex_OnZero_9E4B
394labelLabel_9E50LoadActorTileIndex_OnNonzero_9E50
395labelLabel_9E65LoadActorTileIndex_OnCarryClear_9E65
396labelLabel_9E69LoadActorTileIndex_OnCarryClear_9E69
397labelLabel_9E6BLoadActorTileIndex_OnNonzero_9E6B
398labelLabel_9E6EUpdateActorFacing
399labelLabel_9E7FQueueNametableWrite
400labelLabel_9E87QueueNametableWrite_OnNonzero_9E87
401labelLabel_9E89QueueNametableWrite_OnNonnegative_9E89
402labelLabel_9F14FlushNametableWrite
403labelLabel_9F2AFlushNametableWrite_JoinBranchPaths_9F2A
404labelLabel_9F4BUpdateActorMovement
405labelLabel_9F54MoveActorByOpcode
406labelLabel_9F7FMoveActorByOpcode_JoinBranchPaths_9F7F
407labelLabel_9F83MoveActorByOpcode_JoinBranchPaths_9F83
408labelLabel_9FACMoveActorByOpcode_OnCarryClear_9FAC
409labelLabel_9FB8MoveActorByOpcode_OnNonzero_9FB8
410labelLabel_9FBAMoveActorByOpcode_JoinBranchPaths_9FBA
411labelLabel_9FBBMoveActorByOpcode_Return_9FBB
412labelLabel_9FC2MoveActorByOpcode_Continue_9FC2
413labelLabel_9FC9MoveActorByOpcode_Continue_9FC9
414labelLabel_9FD0MoveActorByOpcode_Continue_9FD0
415labelLabel_9FD7MoveActorByOpcode_Continue_9FD7
416labelLabel_9FDFAddToNametableValue
417labelLabel_9FEFAddToNametableValue_Return_9FEF
418labelLabel_9FFAAddToNametableValue_JumpNext_9FFA
419labelLabel_A002SubtractFromNametableValue
420labelLabel_A012SubtractFromNametableValue_Return_A012
421labelLabel_A01DProcessBytecodeOpcode
422labelLabel_A060ProcessBytecodeOpcode_OnCarrySet_A060
423labelLabel_A062ProcessBytecodeOpcode_JoinBranchPaths_A062
424labelLabel_A07BProcessBytecodeOpcode_JoinBranchPaths_A07B
425labelLabel_A085ComputeBytecodeOffset
426labelLabel_A08BComputeBytecodeOffset_OnNonzero_A08B
427labelLabel_A09FComputeBytecodeOffset_OnCarryClear_A09F
428labelLabel_A0A5ResetBytecodeAccumulator
429labelLabel_A0ADResetBytecodeAccumulator_OnNonzero_A0AD
430labelLabel_A0C2ResetBytecodeAccumulator_OnCarryClear_A0C2
431labelLabel_A0C6ResetBytecodeAccumulatorAlt
432labelLabel_A0CEResetBytecodeAccumulatorAlt_OnNonzero_A0CE
433labelLabel_A0ECResetBytecodeAccumulatorAlt_OnCarryClear_A0EC
434labelLabel_A0F4AdvanceBytecodeProgram
435labelLabel_A0FBResetBytecodeStateAlt
436labelLabel_A105ResetBytecodeStateAlt_OnNonzero_A105
437labelLabel_A122ResetBytecodeStateAlt_OnCarryClear_A122
438labelLabel_A12EComputeActorTileRow
439labelLabel_A14FComputeActorTileRow_OnNonnegative_A14F
440labelLabel_A157ComputeActorTileRow_JoinBranchPaths_A157
441labelLabel_A15DResetBytecodePointers
442labelLabel_A165ResetBytecodePointers_OnNonzero_A165
443labelLabel_A179ResetBytecodePointers_OnCarryClear_A179
444labelLabel_A17FRunActorScript
445labelLabel_A1A5RunActorScript_OnCarrySet_A1A5
446labelLabel_A1C3RunActorScript_OnZero_A1C3
447labelLabel_A1E3RunActorScript_OnNonnegative_A1E3
448labelLabel_A1F1RunActorScript_OnNonnegative_A1F1
449labelLabel_A201RunActorScript_OnNonzero_A201
450labelLabel_A246RunActorScript_OnZero_A246
451labelLabel_A250LoadActorConfigByte
452labelLabel_A253ComputeActorConfigOffset
453labelLabel_A25FCopyConfigBytes
454labelLabel_A261CopyConfigBytes_OnNonnegative_A261
455labelLabel_A270LoadActorConfigRecord
456labelLabel_A28DLoadActorConfigRecord_JoinBranchPaths_A28D
457labelLabel_A298CompareConfigValue
458labelLabel_A2BDCompareConfigValue_JoinBranchPaths_A2BD
459labelLabel_A2C8ReturnFromConfigLoad
460labelLabel_A2C9LoadActorConfigFields
461labelLabel_A2D8LoadActorConfigFields_OnZero_A2D8
462labelLabel_A2EBLoadActorConfigFields_OnNegative_A2EB
463labelLabel_A2F1LoadActorConfigFields_OnNonzero_A2F1
464labelLabel_A305LoadActorConfigFields_OnZero_A305
465labelLabel_A30BLoadActorConfigFields_OnNonzero_A30B
466labelLabel_A316StoreActorPaletteByte
467labelLabel_A32AStoreActorPaletteByte_OnZero_A32A
468labelLabel_A32CStoreActorControlByte
469labelLabel_A334StoreActorControlByte_OnZero_A334
470labelLabel_A338ReadActorConfigByte
471labelLabel_A388ReadActorConfigByte_JoinBranchPaths_A388
472labelLabel_A3A5ReadActorConfigByte_JoinBranchPaths_A3A5
473labelLabel_A3B1ReadActorConfigByte_OnNonzero_A3B1
474labelLabel_A3C9ReadActorConfigByte_OnCarrySet_A3C9
475labelLabel_A3E9ReadActorConfigByte_OnCarrySet_A3E9
476labelLabel_A3F1ReadActorConfigByte_OnNonzero_A3F1
477labelLabel_A3FAReadActorConfigByte_OnNonzero_A3FA
478labelLabel_A406ReadActorConfigByte_JoinBranchPaths_A406
479labelLabel_A40AReadActorConfigByte_OnCarrySet_A40A
480labelLabel_A40DReadActorConfigByte_OnNonzero_A40D
481labelLabel_A418ReadActorConfigByte_OnZero_A418
482labelLabel_A423ReadActorConfigByte_OnNonzero_A423
483labelLabel_A428ReadActorConfigByte_OnCarrySet_A428
484labelLabel_A430ReadActorConfigByte_JoinBranchPaths_A430
485labelLabel_A435CompareActorConfigValue
486labelLabel_A44ECompareActorConfigValue_OnZero_A44E
487labelLabel_A459CompareActorConfigValue_OnZero_A459
488labelLabel_A464CompareActorConfigValue_OnZero_A464
489labelLabel_A46DCompareActorConfigValue_OnNonzero_A46D
490labelLabel_A46FStoreActorConfigResult
491labelLabel_A475StoreActorConfigResult_JoinBranchPaths_A475
492labelLabel_A482LoadActorConfigAlt
493labelLabel_A48DLoadActorConfigAlt_OnZero_A48D
494labelLabel_A49BLoadActorConfigAlt_OnZero_A49B
495labelLabel_A49FStoreActorConfigResultAlt
496labelLabel_A4A5StoreActorConfigResultAlt_OnZero_A4A5
497labelLabel_A4AALoadActorFacingFlag
498labelLabel_A4B5LoadActorFacingFlag_OnNonzero_A4B5
499labelLabel_A4BALoadActorFacingFlag_OnCarryClear_A4BA
500labelLabel_A4C2LoadActorFacingFlag_JoinBranchPaths_A4C2
501labelLabel_A4C7LoadActorConfigBlock
502labelLabel_A4DFTestSoundChannelState
503labelLabel_A4F1TestSoundChannelState_OnNonzero_A4F1
504labelLabel_A4F2SetSoundSequenceChannel2Alt
505labelLabel_A4FFFlipObjectIndex
506labelLabel_A508LookupObjectIndex
507labelLabel_A512UpdateObjectSlots
508labelLabel_A51BAdvanceObjectSlot
509labelLabel_A522AdvanceObjectSlot_OnNonzero_A522
510labelLabel_A52DAdvanceObjectSlot_OnCarrySet_A52D
511labelLabel_A532AdvanceObjectSlot_OnCarryClear_A532
512labelLabel_A583AdvanceObjectSlot_OnNegative_A583
513labelLabel_A5DDWriteNametableBytes
514labelLabel_A5DFWriteNametableBytes_OnNonnegative_A5DF
515labelLabel_A660SetSoundSequenceChannel4
516labelLabel_A67FSetSoundSequenceChannel4_OnZero_A67F
517labelLabel_A68EUpdateObjectList
518labelLabel_A695UpdateObjectListEntry
519labelLabel_A6BEUpdateObjectListEntry_OnNegative_A6BE
520labelLabel_A6DFUpdateObjectListEntry_OnNonzero_A6DF
521labelLabel_A6EBUpdateObjectListEntry_OnZero_A6EB
522labelLabel_A6EFUpdateObjectListEntry_OnZero_A6EF
523labelLabel_A6F8UpdateObjectCollisions
524labelLabel_A70DUpdateObjectCollisions_OnNonzero_A70D
525labelLabel_A714UpdateObjectCollisions_OnNonzero_A714
526labelLabel_A728UpdateObjectCollisions_OnNonzero_A728
527labelLabel_A729UpdateObjectCollisions_OnCarryClear_A729
528labelLabel_A73DUpdateObjectCollisions_OnNonzero_A73D
529labelLabel_A745UpdateObjectCollisions_OnNonzero_A745
530labelLabel_A758UpdateObjectCollisions_OnNonzero_A758
531labelLabel_A75DUpdateObjectCollisions_OnNonzero_A75D
532labelLabel_A773UpdateObjectCollisions_OnCarryClear_A773
533labelLabel_A77FUpdateObjectCollisions_OnCarryClear_A77F
534labelLabel_A78FUpdateObjectCollisions_JoinBranchPaths_A78F
535labelLabel_A79BUpdateObjectCollisions_OnZero_A79B
536labelLabel_A79CUpdateObjectCollisions_OnZero_A79C
537labelLabel_A79FCheckObjectScroll
538labelLabel_A7B0CheckObjectScroll_OnNonzero_A7B0
539labelLabel_A7B8CheckObjectScroll_OnZero_A7B8
540labelLabel_A7BFCheckObjectScroll_OnNonnegative_A7BF
541labelLabel_A7CACheckObjectScroll_OnNegative_A7CA
542labelLabel_A7E1CheckObjectScroll_OnNonzero_A7E1
543labelLabel_A7E8CheckObjectScroll_OnNonzero_A7E8
544labelLabel_A7FDCheckObjectScroll_JoinBranchPaths_A7FD
545labelLabel_A800CheckObjectScroll_OnNonnegative_A800
546labelLabel_A82FClearScrollLatchAlt
547labelLabel_A833ClearScrollLatchAlt_OnCarryClear_A833
548labelLabel_A834UpdateObjectSprite
549labelLabel_A842UpdateObjectSprite_OnCarryClear_A842
550labelLabel_A856UpdateObjectSprite_OnCarrySet_A856
551labelLabel_A862UpdateObjectSprite_OnZero_A862
552labelLabel_A884SetObjectFlags
553labelLabel_A89DSetObjectFlags_OnCarryClear_A89D
554labelLabel_A8D1AdvanceObjectFrame
555labelLabel_A8E9TestObjectActive
556labelLabel_A8F9TestObjectActive_OnNonzero_A8F9
557labelLabel_A916TestObjectActive_OnNonnegative_A916
558labelLabel_A936TestObjectActive_OnNonzero_A936
559labelLabel_A949UpdateObjectAnimations
560labelLabel_A952UpdateObjectAnimation
561labelLabel_A982UpdateObjectAnimation_OnCarryClear_A982
562labelLabel_A991UpdateObjectAnimation_JoinBranchPaths_A991
563labelLabel_A992UpdateObjectTimer
564labelLabel_A99EDecrementObjectCounter
565labelLabel_A9A4DecrementObjectCounter_OnZero_A9A4
566labelLabel_A9AADecrementObjectCounter_JoinBranchPaths_A9AA
567labelLabel_A9ABUpdateObjectState
568labelLabel_A9C9UpdateObjectState_OnCarrySet_A9C9
569labelLabel_A9CDUpdateObjectState_OnZero_A9CD
570labelLabel_A9D6UpdateObjectState_OnNegative_A9D6
571labelLabel_A9D8ToggleScrollRegionFlip
572labelLabel_A9E9ToggleScrollRegionFlip_OnNonzero_A9E9
573labelLabel_A9EAToggleScrollRegionFlip_OnCarrySet_A9EA
574labelLabel_A9FFBuildObjectList
575labelLabel_AA55ToggleScrollRegionFlip_OnCarrySet_AA55
576labelLabel_AA56ReadControllers
577labelLabel_AA63ReadControllerShiftRegister
578labelLabel_AA69ReadControllerShiftRegister_OnNonzero_AA69
579labelLabel_AA82ReadControllerShiftRegister_JoinBranchPaths_AA82
580labelLabel_AA98ReadControllerShiftRegister_OnZero_AA98
581labelLabel_AA9DReadControllerShiftRegister_OnCarrySet_AA9D
582labelLabel_AAA1ReadControllerShiftRegister_OnCarrySet_AAA1
583labelLabel_AAA8ReadControllerShiftRegister_OnCarrySet_AAA8
584labelLabel_AAAEReadControllerShiftRegister_OnCarryClear_AAAE
585labelLabel_AAB4ReadControllerShiftRegister_OnCarrySet_AAB4
586labelLabel_AAB8StoreControllerButtonBits
587labelLabel_AAC0StoreControllerButtonBits_OnZero_AAC0
588labelLabel_AACCStoreControllerButtonBits_OnZero_AACC
589labelLabel_AACDEnableRendering
590labelLabel_AADCDisableRenderingAndClearNametables
591labelLabel_AAEFClearNametablePattern
592labelLabel_AAFFClearNametablePattern_OnNonzero_AAFF
593labelLabel_AB0BClearNametablePattern_OnNonzero_AB0B
594labelLabel_AB68CopyPaletteFromTable
595labelLabel_AB7DCopyPaletteFromTable_OnNonnegative_AB7D
596labelLabel_AB98LoadShadowOamBlock
597labelLabel_ABA3FillShadowOamBlock
598labelLabel_ABA8FillShadowOamBlock_OnNonnegative_ABA8
599labelLabel_ABB1UploadPalette
600labelLabel_ABC4UploadPalette_OnCarryClear_ABC4
601labelLabel_ABE4ApplyPpuScrollAndControl
602labelLabel_ABF7ShiftAccumulatorRight4
603labelLabel_ABFCClearOamShadow
604labelLabel_AC03ClearOamShadow_OnNonzero_AC03
605labelLabel_AC0DSelectLevelVramWriter
606labelLabel_AC3BSetLevelVramStream
607labelLabel_AC43FillAttributeBlock
608labelLabel_AC4CWriteAttributeBlock
609labelLabel_AC56WriteAttributeBlock_OnNonzero_AC56
610labelLabel_AC62LoadAttributeStream
611labelLabel_AC78SetPpuAddressHighAnd40
612labelLabel_AC82WriteCompressedVramStream
613labelLabel_AC88AdvanceSourceByte
614labelLabel_AC96DecodeVramStreamToken
615labelLabel_AC9EAdvanceSourceByte_OnCarrySet_AC9E
616labelLabel_ACA1AdvanceSourceByte_OnZero_ACA1
617labelLabel_ACA7WriteVramRunToken
618labelLabel_ACB5AdvanceSourceByte_OnNonzero_ACB5
619labelLabel_ACC9AdvanceDestinationWord
620labelLabel_ACD7AdvanceCountWord
621labelLabel_ACE5WithRenderingEnabled
622labelLabel_ACF5WriteCompressedVramBlocks
623labelLabel_AD01WriteCompressedVramBlocks_OnNonzero_AD01
624labelLabel_AD19ComputeCollisionBits
625labelLabel_AD36ComputePlayerOverlapBits
626labelLabel_AD71ComputePlayerOverlapBits_OnCarrySet_AD71
627labelLabel_AD73ComputePlayerOverlapBits_OnNonzero_AD73
628labelLabel_AD7AComputePlayerOverlapBits_JoinBranchPaths_AD7A
629labelLabel_AD84ComputePlayerOverlapBits_OnCarrySet_AD84
630labelLabel_AD8BComputePlayerOverlapBits_OnZero_AD8B
631labelLabel_AD91ComputePlayerOverlapBits_OnCarrySet_AD91
632labelLabel_AD94ComputePlayerOverlapBits_JoinBranchPaths_AD94
633labelLabel_ADADComputePlayerOverlapBits_OnNonnegative_ADAD
634labelLabel_ADAFComputePlayerOverlapBits_OnNonzero_ADAF
635labelLabel_ADB1ComputePlayerOverlapBits_OnCarryClear_ADB1
636labelLabel_ADC2ComputePlayerOverlapBits_JoinBranchPaths_ADC2
637labelLabel_AE01ComputePlayerOverlapBits_OnCarrySet_AE01
638labelLabel_AE03ComputePlayerOverlapBits_OnNonzero_AE03
639labelLabel_AE0BComputePlayerOverlapBits_OnNegative_AE0B
640labelLabel_AE0FComputePlayerOverlapBits_JoinBranchPaths_AE0F
641labelLabel_AE11ComputePlayerOverlapBits_OnNonzero_AE11
642labelLabel_AE15ComputePlayerOverlapBits_OnCarryClear_AE15
643labelLabel_AE16ComputePlayerOverlapBits_OnZero_AE16
644labelLabel_AE45SetDefaultOverlapBits
645labelLabel_AE51SetDefaultOverlapBits_OnNonzero_AE51
646labelLabel_AE53SetDefaultOverlapBits_OnNonzero_AE53
647labelLabel_AE56SetDefaultOverlapBits_OnCarryClear_AE56
648labelLabel_AE63SetDefaultOverlapBits_OnCarrySet_AE63
649labelLabel_AE72SetDefaultOverlapBits_OnCarrySet_AE72
650labelLabel_AE80SetDefaultOverlapBits_OnNegative_AE80
651labelLabel_AE82SetDefaultOverlapBits_OnNonzero_AE82
652labelLabel_AE88SetDefaultOverlapBits_OnCarrySet_AE88
653labelLabel_AE90SetDefaultOverlapBits_OnNegative_AE90
654labelLabel_AE92SetDefaultOverlapBits_OnNonzero_AE92
655labelLabel_AE96SetDefaultOverlapBits_OnNonzero_AE96
656labelLabel_AE9BComputeEdgeOverlapBits
657labelLabel_AEBEComputeEdgeOverlapBits_OnNonzero_AEBE
658labelLabel_AECAComputeEdgeOverlapBits_JoinBranchPaths_AECA
659labelLabel_AEDCComputeEdgeOverlapBits_JoinBranchPaths_AEDC
660labelLabel_AEE3ComputeEdgeOverlapBits_OnZero_AEE3
661labelLabel_AEE9ComputeEdgeOverlapBits_JoinBranchPaths_AEE9
662labelLabel_AEEAComputeEdgeOverlapBits_JoinBranchPaths_AEEA
663labelLabel_AEFAComputeEdgeOverlapBits_OnZero_AEFA
664labelLabel_AF01ComputeEdgeOverlapBits_JoinBranchPaths_AF01
665labelLabel_AF24ComputeEdgeOverlapBits_JoinBranchPaths_AF24
666labelLabel_AF25InitializeSoundEngine
667labelLabel_AF3BUpdateSoundFrame
668labelLabel_AF40UpdateAllSoundChannels
669labelLabel_AF43UpdateSoundChannel
670labelLabel_AF55AdvanceSoundChannelNote
671labelLabel_AF68UpdateSoundChannel_JoinBranchPaths_AF68
672labelLabel_AF69WriteSoundChannelState
673labelLabel_AF6BRebuildApuEnableMask
674labelLabel_AF73StartSoundChannelNote
675labelLabel_AFABAdvanceSoundSequencePointer
676labelLabel_AFC5ComputeEnvelopeMask
677labelLabel_AFD5ComputeEnvelopeMask_OnZero_AFD5
678labelLabel_AFD9ComputeTonePeriod
679labelLabel_B000ShiftNoteTableIndex
680labelLabel_B007WriteToneRegisters
681labelLabel_B028ComputeTonePeriod_OnCarrySet_B028
682labelLabel_B029WriteFixedToneRegisters
683labelLabel_B036ComputeTonePeriod_OnCarrySet_B036
684labelLabel_B037ComputeTonePeriod_OnCarrySet_B037
685labelLabel_B03AReadNoteDuration
686labelLabel_B049StoreNoteDuration
687labelLabel_B058ReadNoteDuration_OnZero_B058
688labelLabel_B059StoreShortNoteDuration
689labelLabel_B05DBuildApuChannelMask
690labelLabel_B062WriteApuEnable
691labelLabel_B069WriteApuEnable_OnNegative_B069
692labelLabel_B06CApplySoundCommand
693labelLabel_B083WriteApuControlRegister
694labelLabel_B08CAdvanceSoundSequenceStep
695labelLabel_B08EAdvanceSoundSequenceStepAlt
696labelLabel_B095ReturnFromSoundCommand
697labelLabel_B096ReadLoopFlag
698labelLabel_B09DHandleNoteTerminator
699labelLabel_B0A9HandleSustainCounter
700labelLabel_B0B3LoadSoundSequenceStep
701labelLabel_B0BBLoadSoundSequenceStep_OnCarrySet_B0BB
702labelLabel_B0C6DecrementSustainCounter