Files
disasm/MUSCLE (U)/copilot/label_names.tsv
T
tmerritt 837007843d MUSCLE (U): decode the bytecode VM layer (Pass 3b)
The 42 token programs were the last undecoded part of MUSCLE. Each now carries a
token-by-token listing above its unchanged .byte data, generated by
_tools/bytecode_dis.py and wired into the build as 'make pass3'.

Encoding, derived from RunBytecodeInterpreter ($9AE8) and BytecodeHandlerTable
($9237): the dispatch is one byte per element. A byte in $C8-$EF selects one of
the 40 handler-table entries; every other byte takes the literal path at $9B08
and is pushed onto the operand list at $0033[Y], accumulated into $003C[Y].

The one exception is four opcodes whose handler's first instructions are
'lda ($1A),Y / iny', so they consume the following byte inline:
  $CB LOOP_BEGIN  -> $7C,X count + $7E,X body address
  $D1 SET_RATE    -> $43,X
  $D7 DRAW_SPRITE -> count for the $A660 blit
  $E1 SET_WAIT    -> $7A,X
$CB and $C9 are the loop pair: LOOP_END decrements $7C,X and, if non-zero,
reloads Y from $7E,X, rewinding the interpreter to the top of the body.

Decoded 377 opcodes and 937 literal operands across 42 programs; all 40 defined
opcodes are used, so the opcode set is complete.

Two standalone programs contain no byte in $C8-$EF at all, so every byte takes
the literal path - the listing states that rather than implying code.

Each mnemonic was read off its handler's own straight-line path up to its first
'jmp $9AE8' / 'jmp $9B25'. Handlers that only tail-call a game routine are named
for the routine rather than guessed at, since the semantics live in the callee.

bytecode_dis.py inserts comment lines only; .byte data is copied through
verbatim. Verified: all 16,384 PRG bytes still emitted exactly once, every value
equal to the ROM, zero audit mismatches, and 'make regen' (pass1 -> pass2 ->
pass3) reproduces prg.s byte-for-byte. Byte-identical ROM verified.

MUSCLE (U): trace the stage payload with py65 (Pass 3c)

The stage payload at $B0FB-$BEBF could not be decoded statically, and the
trace confirms why: across all 16 KB of code there is exactly ONE operand in
that range - $BD28, the literal pointer table itself. The real address is
formed at runtime by 'adc $BD28,X', where A is a value carried in the
bytecode stream, so the readers are indexed by a runtime value and cannot be
enumerated by searching the code.

FCEUX cannot observe this either: its Lua API offers registerexec /
registerexecute / registerrun / registerwrite but no memory-read hook, and with
no static list of readers there is nothing to hook.

_tools/trace_stage_payload.py therefore uses py65's
ObservableMemory.subscribe_to_read, which fires on every read of a range and
can report PC from inside the hook. py65 is only a 6502 core, so the tracer
adds the minimum hardware to boot the game: a scanline counter off
processorCycles, $2002 vblank at scanline 241 cleared on read, NMI at the same
scanline, $4014 OAM DMA, and the $2005/$2006/$2007 latches. Without NMI the
game never leaves $80E0 (lda $0321 / beq), because $0321 is the flag the
bytecode VM raises.

Results over 300 frames (26.8M cycles, 4,071 NMIs): 2,548 payload reads from
44 distinct reader PCs, touching 914 of 3,421 bytes.

Findings:
- The hottest reader is $AC82, the compressed-VRAM RLE decoder: 1,046 of its
  1,128 reads advance by exactly +1, comparing each byte against $C0.
- $9B50 is a backward copy (lda ($12),Y / sta ($10),Y / dey), stepping -1.
- 107 distinct 8-byte blocks had all eight bytes read, with spacing dominated
  by $08 - a dense 8-byte record array - plus a sparser group on a $D0 stride
  ($BBE0, $BCB0, $BD80, $BE50).
- Readers use three disciplines: forward sequential, backward sequential, and
  variable stride consistent with a fixed-offset field walk.

py65 is deliberately NOT a build dependency: the tool documents unpacking the
wheel on demand. 'make regen' is unaffected. Byte-identical ROM verified.

MUSCLE (U): fix the NMI/controller bugs in the payload tracer; correct the Pass 3c model

The Pass 3c tracer had two bugs that were suppressing all progress, both now
fixed in _tools/trace_stage_payload.py (previously scratch, now durable):

* NMI re-armed by $2002 reads. The vblank flag must be cleared once per frame,
  not on every read of $2002 -- the main loop polls $2002 and spins on the
  bytecode VM flag at $8226, so each poll cleared bit 7 and re-armed NMI inside
  the same scanline. That gave 40,900 NMIs across 3,000 frames and corrupted all
  game state. A per-frame nmi_fired flag restores exactly one NMI per frame
  (verified: 600 frames -> 600 NMIs).

* Input went to $4017. The poll routine at $AA69 is `lda $4016,X` with X=1 and
  only compares bits 0-1, so driving $4017 consumed nothing -- all masks tested
  gave byte-identical traces. The game consumes joy1 on $4016 and needs a real
  latch/shift register. With it, START matters: 47.7% coverage vs 39.0%.
  Match entry is two discrete START presses (title -> char select -> match).

Coverage 26.3% -> 40.9%. Both bugs and the port subtlety are documented in the
tool header so they are not re-derived.

Corrects the Pass 3c conclusion. $B0FB-$BEBF is NOT per-stage level data:

* $BD28 is an 8-entry per-ACTOR entry-offset table, not a stage table.
  $A063 `adc $BD28,X` with X = ActorIndex ($1E), plus #$32 at $A071 when
  PlayerActiveFlag ($78,X) is set. Observed actors are $00-$04.
  Forcing all 8 actor indices adds zero new bytes.

* The sound engine reads the same window: $B03C `lda (SoundReadPointerLo),Y`
  with `cmp #$F0 / sbc #$F0 / tay / lda $B0E3,y` is note decoding, which is
  where the $FF/$F0 high-nibble terminators come from.

So the window is a shared pool -- per-actor bytecode, compressed-VRAM RLE, and
music note streams -- and stage cycling cannot raise coverage past ~40%. The
remaining 2,161 B need other music tracks and scripted match play, not taps.

Also corrects two stale claims: $0326 is not a level byte (never leaves $00 even
in a confirmed match), and $0320 is a boolean, not a screen-state machine.

Build unaffected: byte-identical, and `make regen` still reproduces prg.s
byte-for-byte.

MUSCLE (U): promote to the top-level inventory as #16

git mv _wip/MUSCLE (U) -> MUSCLE (U). The relative symlink
copilot/rom.nes -> ../M.U.S.C.L.E. (U).nes survives the move untouched.

* copilot/Makefile: tool paths ../../../_tools/ -> ../../_tools/ for NESDIS,
  PASS2 and BYTECODE. `make` prints the byte-identity message and `make regen`
  still reproduces prg.s byte-for-byte, both verified after the move.
* MUSCLE (U)/OVERVIEW.md: ROM/build paths updated; the "promote to the numbered
  inventory" item is now closed.
* Root OVERVIEW.md: added as #16, removed from the _wip skeleton table
  (20 -> 19), added a ### 16 detail section, and its vector/mapping notes moved
  out of the skeleton section.

All 16 top-level projects verified byte-identical.

Add Pass 1 verification tool; teach nesdis.py the undocumented opcodes

_tools/verify_pass1.py verifies Pass 1 across every top-level project in two
independent directions:

  * Faithful  - does the source still rebuild its ROM byte-identical?
  * Complete  - does the committed source claim as much code as a fresh trace
                can actually reach?

The second is the one that catches real problems. A project can reproduce all
16,384 bytes perfectly while calling 95% of them data, because the tracer gave
up early. Instruction *counts* are compared rather than bytes, so the check is
independent of comment style (which is not uniform across the repo).

Result: all 16 projects are faithful, and Joypad Test Cartridge is the only
truncated Pass 1 -- 282 committed instructions against 1,773 reachable.

nesdis.py gains three fixes needed to make that verdict trustworthy:

* --undocumented (default OFF) decodes the 105 undocumented NMOS opcodes.
  They are used as NOP padding and as real RMW ops, and a tracer that halts on
  them loses most of the code: Joypad goes 580 -> 3,846 code bytes. Default off
  so MUSCLE's `make regen` still reproduces prg.s byte-for-byte.

* Undocumented opcodes are emitted as explicit `.byte` with the disassembly in
  the comment. ca65 V2.19 implements none of them, so they cannot be written as
  mnemonics; keeping them in the code region preserves the code/data split and
  the audit trail. Official 0xEA NOP still encodes normally.

* Two latent bugs, both now reachable:
  - RESET and IRQ are commonly the same address, and the semantic-name map was
    overwriting, renaming the primary entry point to `IrqHandler`. Now
    setdefault, in RESET/NMI/IRQ priority order.
  - render() stamped every branch operand as Label_XXXX and never reconciled it
    with the semantic name map, so a branch into a named routine emitted a label
    that was never defined and the file would not assemble.

Joypad Test Cartridge (U): redo Pass 1, complete Pass 2; merge _wip into the inventory

Pass 1 (redone). The committed split claimed 282 instructions / 580 bytes (3.5%).
The tracer halted at $C09E on `DCP $3C20` ($CF) -- an undocumented opcode used as
ordinary code -- and filed 3,256 bytes of real code as `.byte` data.

Now 1,773 instructions / 3,836 bytes (23.4%), a 6.6x increase. Verified against a
fresh trace: 1,769 emitted instructions + 4 undocumented opcodes written as
explicit bytes = 1,773, an exact match. Byte accounting stays exact at
3,836 + 12,548 = 16,384.

ca65 V2.19 implements none of the undocumented opcodes, so the 4 affected
instructions (DCP $3C20, LAX $20D4, NOP $C1,X, RRA ($D0),X) are emitted as
explicit `.byte` with the disassembly in the comment. They stay in the code
region, so the split and the audit trail are both preserved.

Pass 2 (complete). All 202 labels renamed; zero `Label_Cxxxx` remaining. Renames
are keyed by address and verified to have bound to the intended address, not just
to some address. 202 routine headers, every one describing real behaviour -- no
"undetermined in Pass 1" boilerplate left. `locals.inc` carries 99 aliases, the
proven semantic ones sitting beside the generated `ZpXX` entries per the alias
pattern in AGENTS.md.

Two naming errors in the previous draft are corrected: $55 is MarkerValue (it
holds $70/$88/$A0 and is compared against them), not a "P1 Down timer"; and the
twelve MarkerVar variables are named by position because which player/button
each belongs to is not established.

Pass 3 is now outstanding, and the old Pass 3 was wrong: it described
$C09E-$C173 and $C17F-$CCF6 as data, and both are code. After the redo there is
exactly one data region, $CF06-$FFFF, confirmed by orphan scan.

Documentation.

The root inventory now lists all 36 projects in one table -- the 20 `_wip/`
projects are rows 17-36 rather than a second table that could drift. That second
table had wrong mirroring for 12 of them (Duck Hunt, Golf, Hogan's Alley, Ice
Climber, DK Jr Math, Lode Runner, Lunar Pool, Mario Bros, Millipede, Pyramid,
Raid [a2], Urban Champion were all recorded H when they are V, and vice versa);
every value is now read from the ROM rather than trusted.

Build status is split into two honest tiers: rows 1-16 are BYTE-IDENTICAL and
compare the whole ROM, rows 17-36 are PRG-IDENTICAL because their Makefiles only
run `cmp reconstructed_prg.bin prg.bin`. Header and CHR are not proven for those.
All 36 build cleanly; the WIP count was also corrected from 19 to 20.

`_tools/verify_pass1.py` checks all 36 and reports none truncated.

Mario Bros (JU): Pass 1 disassembly, 14.6% -> 72.2% code

The skeleton prg.s was a 12-line .incbin of the whole PRG. It is now a real
disassembly: 5,735 instructions, 11,829 code bytes (72.2%), 937 labels and
routine headers, byte accounting exact at 11,800 + 4,584 = 16,384, and
BYTE-IDENTICAL against prg.bin.

Coverage came from four steps, not one:

  vectors + direct jsr/jmp/branch, official opcodes   1,185 instr   14.6%
  --undocumented (105 extra NMOS opcodes)            1,210 instr   14.9%
  --auto-seed (61 table-referenced entries)          4,187 instr   51.1%
  --extra-seed 0xC0B6,0xC5A3                         5,735 instr   72.2%

Almost everything sits behind computed dispatch. Three mechanisms are now
documented in the project OVERVIEW:

* $CD9E is a stack-based indirect call: it pops the table address with `pla`,
  indexes it by A*2 with `lda ($14),y`, then `jmp ($0014)`. Because the pointer
  arrives on the stack it cannot be followed statically from the dispatcher.
* $C5A3 is a 20-entry table of `JSR` thunks ending in `rts`. Probing it linearly
  gives twenty valid targets, and seeding it recovers most of the last 21%.
* $C0B6 is the NMI phase dispatcher, reachable only by computed dispatch.

Two overlapping-decode bugs in _tools/nesdis.py had to be fixed first:

* Control-flow targets must win over fall-through. `bne` at $C4BA targets $C528,
  but the fall-through path had decoded $C527 as a 2-byte `NOP #$A5` whose
  operand swallowed $C528. No assembler branches into the middle of an
  instruction, so the spanning decode is now dropped in favour of the target;
  its bytes fall out as data, leaving byte accounting unchanged.
* Branch targets inside a surviving instruction must be pruned from the target
  set. Otherwise emit_code's linear walk consumes those bytes as an operand, so
  the label is referenced but never defined and the file does not assemble at
  all -- `Error: Symbol 'Label_C528' is undefined`.

Neither change disturbs an existing pipeline: MUSCLE's `make regen` still
reproduces prg.s byte-for-byte, Joypad Test Cartridge still builds byte-identical,
and _tools/verify_pass1.py reports all 16 top-level projects faithful with none
truncated.

Mario Bros (JU): Pass 2, partial -- make the call graph readable

Two mechanical wins, in order of value:

* **477 jsr/jmp operands rewritten from raw $XXXX to labels.** The tracer emits
  call and jump targets as hex, so the call graph was unreadable -- the most
  called routine appeared as `jsr $CCA0` 14 times over. Every one of those sites
  already had a label at its target address, so the substitution is purely
  mechanical and byte-preserving. Zero raw hex call operands remain.

* **13 landmark routines named** from verified instruction evidence:
  WaitVblank1, ClearRamPageLoop, NmiPhaseDispatch ($C0B6), JsrThunkTable
  ($C5A3), DispatchViaStackPointer ($CD9E), AdvanceDispatchPointer ($CDB4),
  PushTablePointerDispatch ($CCA0), DispatchTableF393 ($CAB9),
  InitSpritesOffscreen ($DFC4), AdjustDecimalColumns ($D15A),
  TestRamFlagPair0500 ($D328), NextIndex ($CE84).

**922 labels remain unnamed, and that is recorded as the honest state** rather
than papered over. They sit 15-25 per page across $CC00-$CFFF, which is just
the game logic: naming them means reading ~5,700 instructions across 935
routines. Guessing from the call graph and the NES convention would be exactly
the guessy rewrite PROMPTS.md rules out.

The productive next step is more reach, not more naming. The 4,555 unreached
bytes are where most unnamed routines live, and they are gated behind the
stack-pointer dispatch at $CD9E, whose pushed table addresses are only known in
the callers' frames.

Still BYTE-IDENTICAL; all 16 top-level projects remain faithful.

Record audit-comment work for Excitebike and Pac-Man as a TODO

Both projects are hand-written sources with semantic labels but no
byte-identity audit comment, so a source line cannot be mapped back to exact
ROM bytes without re-assembling. Every other project in the repo carries one.

Documented what was tried and why it was dropped rather than left implicit.
Addresses from 'ca65 -l' work fine -- the listing offset indexes prg.bin
directly -- but the listing carries no source line numbers, so entries cannot
be keyed back to source lines. Byte values also have to come from prg.bin
rather than the listing, since ca65 prints 'rr rr' for relocatable words.

No tool was committed, because the one written does not work. Both projects
verified still byte-identical; no source file was changed.

Add TODO.md handoff; bring AGENTS.md back in line with the repo

AGENTS.md had drifted on facts that are now wrong, not just incomplete:

* "Eleven disassemblies" -> 36 (16 top-level, 20 in _wip). The index it points
  at had the same stale count.
* The audit-comment convention was stated as `; PRG:$xxxx AA BB`, but the
  dominant spelling is `; CPU:$xxxx PRG:xxxx  AA BB` and five other variants are
  in use, with Excitebike and Pac-Man carrying none at all. Now stated accurately
  as "preserve whatever spelling a file uses", with the gap pointed at.
* `_tools/` was described as holding splitnes.py and chr2gif.py. It holds six
  tools now, including the Pass 1 tracer and the verifier.
* ROM filenames "contain spaces" -> spaces *and parentheses*, which is also what
  makes FCEUX hang headless.

Added, because each one costs real time if rediscovered:

* The two build tiers. The 20 _wip projects only `cmp reconstructed_prg.bin
  prg.bin`, so their header and CHR are NOT proven -- calling them
  byte-identical to the ROM is wrong.
* A promotion procedure, since that has now been done twice.
* A tracer/toolchain gotchas section: undocumented opcodes truncating traces
  (and ca65 being unable to encode them), vectors living at the end of the PRG
  rather than in the iNES header, the RESET==IRQ name collision, control-flow
  targets beating fall-through, the branch-target pruning that stops a file
  failing to assemble, NMI firing once per frame rather than per $2002 read,
  joy1 being $4016, and ca65 listings carrying no source line numbers.

TODO.md is the handoff document: open work per project with enough detail to
resume, the residue counts, and the reasoning behind each abandoned approach so
it is not silently retried.

Nothing rebuilt or changed; all projects still verify.

Joypad Test Cartridge (U): Pass 3 complete — data region named and VRAM command stream decoded

The monolithic `.byte $CF06-$FFFF` block (12,538 bytes) has been broken into 20 named sub-blocks:

VRAM command streams ($CF06-$D4AD): three command streams separated by $FF terminators, read by VramWriteLoop via RetAddrUpdate. Opcode set decoded: $4C = jump, $60 = deferred PPUCTRL, bit-7-clear = VRAM write (PPU addr + data, bit 6 of data = long/short selector).

OAM tables ($D4E3-$D6A3): 12 groups of 32-byte tables (8 entries of Y/tile/attr/X), read by CopyOamFromTable ($D4E3) and CopyOamFromTable70 ($D5C4).

Sprite templates ($D6A5-$D6E4): sprite template read by CopySpriteTemplateTable ($D6A5) and button OAM template read by PrepareButtonOam ($D6C5).

Padding: $FF ROM padding ($D6E5-$FFF9) and vectors ($FFFA-$FFFF).

OVERVIEW.md updated: section 8 documents all 20 sub-blocks with the VRAM command stream format and OAM table structure; section 11 marks Pass 3 complete with remaining work (MarkerVar player/button mapping, HandleButtonPress sprite order).

Build verified byte-identical.

Root OVERVIEW.md: mark Joypad Pass 3 complete

Update summary table (row 14: Pass Pass 2 → Pass 3 complete), detail section
(section 14: Pass 2/3 → Pass 3 complete with VRAM command stream decoded),
methodology note table (Pass 2 complete → Pass 3 complete), and notable
observations (Joypad at Pass 2/3 → Pass 3 complete).

Joypad Test Cartridge is now fully Pass 3 complete: all 20 data sub-blocks
named, VRAM command stream opcode set decoded, OAM table structure documented.

TODO.md: mark Joycad Test Cartridge Pass 3 complete

Mario Bros (JU): Pass 2 substantial — 252 subroutine entry points named

All 252 jsr/jmp targets resolved from raw $XXXX to labels:
- 90 semantic names: audio/sound routines ($F8xx-$F9xx: AudioPulse1CtrlSetup,
  WritePulse2Freq, ProcessTriangleChannel, SetupAudioChannel, etc.), gameplay
  helpers (CheckZpB3Return, CheckRangeReturn012, ToggleZpFC_Bit3, etc.)
- 165 address-based names (SubCxxxx) for the remainder
- Zero raw $XXXX call operands remain

667 Label_Cxxxx internal branch targets remain — these are local control-flow
destinations within routines, not subroutine entry points, and do not need
semantic names for the call graph to be readable.

Build verified BYTE-IDENTICAL. Root OVERVIEW.md updated (row 26: Pass 0 skeleton
→ Pass 1 complete, Pass 2 substantial). TODO.md updated.

Lunar Pool (U): Pass 1 complete, 57.8% code; nesdis.py opcode/emitter fixes

The skeleton prg.s was a 12-line .incbin of the whole PRG. It is now a real
disassembly: 4,586 instructions, 9,475 code bytes (57.8%), 6,909 data bytes,
byte accounting exact at 9,403 + 6,981 = 16,384, BYTE-IDENTICAL.

Coverage: vectors + direct jsr/jmp/branch reached 1,259 instructions (15.6%).
--undocumented took it to 4,572 (57.6%), and --auto-seed (48 table-referenced
entries) plus --extra-seed 0xE80C (the non-$C000 RESET vector) took it to
4,586 (57.8%).

Three undocumented opcodes were missing from nesdis.py and are added:
* $72 RRA abs (the RRA family was missing the $72 absolute form)
* $42 NOP #imm (the NOP-immediate family was missing $42)
* $FA NOP abs,X (the NOP-abs,X family was missing $FA)

One emitter fix: ca65 silently rewrites an operand whose high byte is $00 in
the shorter zero-page form -- `sta $00FF,x` assembles as `sta $FF,x` ($95
instead of $9D). render() now emits the `a:` prefix for ABS/ABSX/ABSY/IND
operands with a high byte of $00, forcing the absolute form so the emitted
bytes match the ROM. operand_value() strips the prefix when parsing.

These changes are general and verified not to disturb existing pipelines:
MUSCLE's `make regen` still reproduces prg.s byte-for-byte.

Remaining gaps: 6,909 bytes (42.2%) still data, gated behind jmp ($7961) at
three sites (RAM-pointer dispatch; the blocks after them hold the screen text
"strings" "game over" and "hi`score__") and stack-based dispatch at $CBDC --
the same pattern as Mario Bros (JU)'s $CD9E.

TODO.md: add Lunar Pool as an open item

Adds comments for all lines to Pacman and Excitebike
Moves Pacman 'locals' and 'symbols' definitions into the right places
2026-10-17 17:36:28 -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