The first _wip project to get a real disassembly. 4,165 instructions /
8,444 code bytes (25.8%), 24,324 data bytes, 0 unclassified -- every byte
of the 32 KB PRG is now classified as code or data.
The split needed three stages, all recorded in prg.s's header:
* nesdis.py --undocumented --auto-seed at base $8000 gave 3,272
instructions / 6,555 bytes. The undocumented opcodes matter here: the
trace stops dead at the first one it cannot decode.
* Four hand-seeded entries ($C08B, $DC1E, $E0D5, $E134). Each is a
branch target from decoded code that sat inside an untraced data run,
so the tracer never reached it.
* A merged four-session Mesen Code Data Logger capture (kept as
xevious_mesen.cdl) promoted 1,902 bytes from data to code and
demoted 22 the trace had called code.
Two tool bugs fell out and are fixed here:
* nesdis.py emitted the undocumented single-byte NOPs ($1A/$3A/$5A/
$7A/$DA/$FA) as `nop`, which ca65 assembles as the *official* $EA --
the rebuild stopped being byte-identical at $DF82. The check now
keys on the opcode byte, not just the addressing mode. All three
`make regen` pipelines (MUSCLE, Pyramid, Urban Champion) are
unaffected and still reproduce prg.s byte for byte.
* cdl_reclass.py left the original data-block header in place when the
CDL split that block, so the file ended up with two region headers
describing overlapping spans (20 of them here). The header is now
dropped with the block it describes; the promoted projects that use
the tool are byte-for-byte unchanged.
The project README has the power-on flow analysis. The most interesting
find is at $FC45: the reset path compares RAM $0100-$0107 against the
ASCII string "Kei Cros", and the copyright text at $FF1E reads
"MAIN: KEI CROSS. SOUND: UHOHOY OHNOGI." The OAM is at $0700, not
$0200 -- the NMI handler does LDA #$07 / STA $4014.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add explicit `make wip` / `make wipclean` targets for the _wip tier
The root Makefile's all / clean / <MAPPER> targets deliberately name only
the promoted mapper folders, so nothing in them reaches into _wip/. Give
the pre-promotion tier its own opt-in targets instead of the manual
`for d in _wip/*/*/; do make -C "$d"; done` loop:
make wip # build + verify every _wip/<MAPPER>/<Project>/
make wipclean # clean the build artifacts in that tier
Both the Makefile and the four documents that describe the tier (README,
TODO, WIP, AGENTS) are updated together, so the tree stays consistent.
The same commit records Xevious (U) reaching Pass 2 in those documents:
all 487 labels named, every branch and call symbolic, zero Label_XXXX and
zero raw $XXXX operands left.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Update the _wip/ tier documentation; fix the make wip target and the mirroring bug
The WIP tier's four documents (WIP.md, README.md, TODO.md, AGENTS.md) had
drifted away from the tree. Every number in them was re-derived from the
ROMs and the folder layout rather than carried forward.
Counts and structure
- The tier holds 854 projects across 29 mapper folders, not "856 across
30". Xevious (U) and Zanac (U) were promoted on 2026-10-20 and their
_wip/ folders were left behind as residue -- "git mv" moves only the
tracked files, so the old folder survived with its build artifacts and a
stale README. Both are removed now; the promotion procedure documents
the step so it does not recur.
- _wip/MAPPER8/ holds a copy of the already-promoted Mermaids of
Atlantis (U) and is excluded from every count and table.
- Pass 0 skeletons: 852 (was 855). Xevious (U) left the tier, so the
two projects with a real disassembly are Golf (JU) and Volleyball (U).
- PRG sizes 2 / 150 / 42 / 522 / 127 / 10 / 1; 226 projects with no CHR;
38 keep the CPU-address linker layout; 37 are mapper 0.
- Every inventory row was re-checked against its ROM: PRG/CHR size,
mirroring, all three vectors, and the battery / four-screen / footer
notes. 854 of 854 rows now match.
Fixes
- The root Makefile used $(WIP) but never defined it, so "make wip" and
"make wipclean" expanded to "for m in /*/" -- they walked the
filesystem root instead of the tier. "WIP := _wip" is now defined, and
"make wip" builds and verifies the whole tier: 855 of 855 passed, 0
failures.
- make_skeleton.py masked header byte 6 with 0x03, so the battery bit
(bit 1) leaked into the mirroring value and 56 battery-backed ROMs'
READMEs claimed "Four-screen" while their own "Four-screen VRAM" row
said "no". The mask is now 0x01 and the 56 READMEs are corrected.
- Golf (JU)'s README still described the pre-flatten copilot/ folder and
the old PRG-only compare; it now describes the whole-ROM build.
- Pyramid (U)'s audit comments are canonical again, so Golf (JU) is the
only project in the tree still on the pre-canonical spelling.
New in WIP.md
- Byte 7's lower nybble is non-zero on 58 of the ROMs -- 55 carry the
literal "DiskDude!" watermark, two "DisNi0330", one "byKH+KEN". Only
the upper nybble carries mapper bits, so the noise is harmless.
- The twelve ROMs that set the four-screen bit, split by whether their
board actually supports four-screen VRAM.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Promote Volleyball (U) from _wip/NROM/ to NROM/
Volleyball (U) reached Pass 3 before promotion, so this is a promotion of a
finished disassembly rather than a Pass 0 skeleton.
The disassembly
- 11,395 instructions / 23,926 code bytes (73.0 % of the PRG image),
8,842 data bytes, 0 unclassified.
- The split needed the game-state dispatch table at $85E1 declared to the
tracer (--table 85E1:11) -- without it only 66 % of the image traced --
plus a Mesen Code Data Logger capture taken while a random-input bot
played the attract demo, which promoted 1,757 bytes from data to code.
- Pass 2 named all 1,989 labels: 730 read out of the code by hand, 1,221
internal branch targets derived mechanically. Zero Label_XXXX, zero raw
$XXXX call or branch operands, zero SubC residue.
- Pass 3 named the zero page, the $0500 ball structure and all 37 data
blocks. apply_symbols.py --report: 0 pending substitutions, 0
multi-alias residue. align_audit_comments.py: no column drift.
- cdl_check.py cross-checks the finished prg.s against the capture: 0
CDL-code bytes not covered by an instruction, 0 CDL-data bytes that
start one.
- 29 neutral ZpXX zero-page slots remain, each with its reason recorded
in locals.inc, as the promotion rules allow.
The promotion
- git mv "_wip/NROM/Volleyball (U)" "NROM/Volleyball (U)". Mapper 0, so
it lands in NROM/. The whole-ROM build was already in place, so there
was no build surgery; the project builds byte-identically at its new
home and the old folder is gone (git mv moves the untracked build
artifacts too, so no residue was left behind).
- Root README.md: new inventory row 39 and a per-project detail section,
plus the WIP-tier counts. The detail sections for Xevious (U) and
Zanac (U) were numbered one too high against the inventory rows and
are now aligned; a leftover editing note in the same place is gone.
- WIP.md: the Volleyball row leaves the inventory, and the tier is now
853 projects across 29 mapper folders (36 in _wip/NROM/), 852 of them
Pass 0 skeletons. Golf (JU) is the only project left in the tier with
a real disassembly.
- TODO.md and AGENTS.md: the same counts, and the promoted tier is now
40 projects (39 under NROM/).
Verified: make wip builds and verifies the whole tier (854 of 854 passed,
0 failures) and make builds the promoted tier (39 of 39 passed).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rename NROM/Pyramid (U) to NROM/Pyramid (U) (Sachen)
The promoted inventory row had read "Pyramid (U) (Sachen)" since the
project was promoted on 2026-10-20, but the folder was named "Pyramid (U)" --
so the row pointed at a folder that did not exist. The folder now matches
the row, and the project's own README title, its ROM file name
("Pyramid (U) (Sachen).nes") and the parenthetical convention the rest of
the promoted tier already uses (Popeye (JU) (PRG 0/1), Raid on Bungeling
Bay (U) [a2], Pac-Man (Tengen) (U)).
What changed inside the project
- The Makefile's regen target passes --project "Pyramid (U) (Sachen)", so
the tracer writes the matching header line. prg.s and locals.inc were
updated to that header line and nothing else -- the disassembly is
byte-identical to before.
- make regen still reproduces prg.s and locals.inc byte for byte.
- The project's README's build-verification line now names the new folder.
References updated: the root README.md (inventory prose, the row-33 detail
section, the build-status table, and the notable-observations bullet),
TODO.md (the promoted-projects table and the Pyramid notes) and AGENTS.md
(the recently-promoted list and the unlicensed-titles quirk).
Verified: make builds the promoted tier (39 of 39 passed) and the project
rebuilds byte-identically at its new path.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rebuild Mermaids of Atlantis (U): bank-aware Pass 1, Pass 2/3 names
The promoted project did not build: a Pass 2 rename had been applied
half-way, leaving eight undefined symbols and two jumps that pointed at
the wrong routine, while the root README already claimed the project was
byte identical. The _wip copy still built, because it held the un-renamed
Pass 1 source.
The disassembly is now derived from the ROM itself, with the Mesen Code
Data Logger as the oracle for the code/data split:
* _tools/banked_dis.py traces every MMC3 bank separately, each with the CPU
window it is visible at, seeded from a CDL capture so the code a static
trace cannot reach is disassembled too. The CDL is the authority: a
decode the CPU never fetched is dropped, and so is the fall-through
behind a call whose target never returns (the game's dispatchers have
their jump table right behind the call).
* One segment per bank (PRG0..PRG7) with its own .org, so the assembler
knows the CPU address of every label while the linker still writes the
bytes to the bank's file offset. A flat segment cannot do both: a call
would encode the file offset instead of the CPU address.
* Pass 2 names every label - 494 routines, no Label_XXXX and no raw
$XXXX branch or jump operand left. Pass 3 applies 13 semantic zero-page
aliases and writes the routine headers.
* 8,075 bytes of code (12.3% of the 64 KB PRG), up from 200 bytes.
The banking turned out to be unusual and is documented: the fixed bank is
the fourth 8 KB bank (file $6000-$7FFF), not the last one, and the image
carries the reset stub and the vector table twice. The live NMI vector
is $808F - the frame handler - while the copy at the end of the image
names $8189, which is a BRK in the first half. The game's text table
lives at CPU $F1D6, which is the fixed window, and that is what settles
the question.
Also: the leftover _wip/MAPPER8 folder is removed, as it is for every
other promotion.
The project builds byte identical:
Byte-identical ROM verified.
Add CHANGELOG.md: the pass history of every project
A project goes through four milestones - Pass 1 (the code/data split),
Pass 2 (the labels replaced by names), Pass 3 (the semantic naming) and
Promotion (the move into the top-level mapper folder) - and the history
of those milestones was scattered over the commit log, the project
READMEs and the root README.
CHANGELOG.md gathers it: one section per project with a row for each
milestone, the date, and a sentence saying what the milestone produced.
The numbers are the ones the project README and the root README already
carry - instruction count, code coverage, named labels, semantic
zero-page aliases, named data tables - so a reader can see at a glance
which projects are done and which are not. Golf (JU), the only project
still in _wip/ with a real disassembly, is listed with its open
milestones, and the other 852 _wip/ projects are covered as a tier.
The requirement is now part of the workflow contract: PROMPTS.md gains a
"Pass 3: Changelog entry" section and a ninth checklist item, and
AGENTS.md points at the file. A milestone and its changelog row go in
the same commit, so the changelog and the source never disagree.
Balloon Fight (JU): repair the audit trail and complete the routine headers
The per-instruction audit trail was stale by two bytes from
ResetInitializationData ($C085) onward. 5,944 of the 6,007 comments named
the wrong CPU address and PRG offset, because the three-byte .byte "HAL"
signature at $C082-$C084 had been counted as one byte when the trail was
first generated - the routine headers and the linker labels were right all
along, so the source and its own headers disagreed with each other. The
trail was rebuilt from the ca65 -l listing with
_tools/repair_audit_comments.py, and every rewritten comment was re-checked
against prg.bin. The comments were also moved into the canonical column-35
field: they had sat two spaces after the mnemonic, with no column discipline
at all, unlike every other promoted project.
All 63 routine headers now carry a ; Clobbers: block, so the headers carry
the full template AGENTS.md describes. The blocks are derived, not written by
hand. The new _tools/derive_clobbers.py takes the opcode from the audit
comment's byte list, so the addressing mode is exact and a data directive is
never mistaken for an instruction; it resolves the operand through
locals.inc and symbols.inc to name what is written; it follows the real
control flow, so a jsr to another named entry is a call (the callee's
clobbers count) while a branch or a fall-through is not; and it models
register preservation, so NmiHandler reports *no register* - it saves and
restores A, X and Y around the frame - and FlushPpuCommandPreserved reports
only A, because X and Y come back unchanged.
Two tools changed. derive_clobbers.py is new. align_audit_comments.py had
an off-by-one: it tested the indented code length against 31 instead of
against 35, so code texts of 28-31 characters were never padded into the
column.
The change is comments only. The code text of all 8,538 lines is unchanged,
make still prints "Byte-identical ROM verified.", the 6,007 audit comments
still re-check against prg.bin, all 63 routine headers agree with the
instructions they describe, and every label agrees with reconstructed.lbl.
ReflectObjectYVelocity and UpdateSpecialObjectSystem moved out of locals.inc
and became labels in prg.s at their real addresses.
CHANGELOG.md becomes the repository's running log: a Pending list of the
changes to be put in the next commit, a History of the commits already made,
and the per-project milestone index at the end. The next commit's message is
written from the Pending entries, so the two cannot drift apart. PROMPTS.md
and AGENTS.md describe the new shape. WIP.md drops the _wip/MAPPER8/ note:
the folder held a copy of Mermaids of Atlantis (U) that had already been
promoted.
World Class Track Meet (U): Pass 1, the code/data split
Pass 1 is done. The split is 8,400 instructions / 18,028 code bytes (55.0 %)
of the 32 KB PRG, with 884 routine entries, 55 data blocks and 102 zero-page
aliases. The PRG is CNROM (mapper 3) and maps whole at $8000-$FFFF, so the
linker moved the PRG segment from a .nes file offset to $8000 and the build
still compares byte identical.
Four dispatch tables had to be seeded by hand. The event table at $F796 (5
entries) is read at $F780 and jumped to through `jmp ($001F)`. The three
push-pointer tables - $BFC4 (16 entries), $BFE4 (2) and $E5F2 (7) - push a
handler address and `rts` into it, and the 6502's `rts` adds one to the
address it pops, so each table stores the entry address minus one; the seeds
are the table values plus one. The tracer runs with --undocumented: the code
uses undocumented NMOS opcodes as ordinary code (ANC $37 at $BFF8, and the
RRA/RLA/SLO and NOP forms elsewhere). Seeding the tables takes the coverage
from 27.8 % to 55.0 %.
$C0BE-$C0C5 is forced back to data: the IRQ vector $C0C0 points into the
middle of the `jmp $C047` at $C0BE, and the game never executes CLI, so the
vector is dead. `make pass1` regenerates prg.s and locals.inc from prg.bin
and reproduces the committed prg.s byte for byte.
The project README records the split, the four dispatch tables, the dead IRQ
vector, the wrong CHR size field in the header, and what is still data. The
milestone index in CHANGELOG.md gains the project; WIP.md, README.md and
AGENTS.md follow the tier counts and the layout.
nesdis.py gains a --mapping-note option, so the header's "PRG mapped at" line
can describe a board that is not NROM - CNROM's whole 32 KB at $8000-$FFFF is
not "mirrored to the upper half".
Replaces runs of $00 and $FF with .res <run>, <byte>
Golf (JU) and World Class Track Meet (U): Pass 2/3 complete, promoted from _wip/
- World Class Track Meet (U) - Pass 2 complete: all 884 Label_<addr>
definitions replaced (651 semantic routine names + 233 Sub_<addr>), all 731
raw $XXXX jsr/jmp call operands resolved to symbolic labels, all branch
targets given role-based names; routinemap.tsv added; make stays
byte-identical.
- World Class Track Meet (U) - Pass 3 complete: 24 semantic zero-page
aliases applied via apply_symbols.py (0 residue), 78 neutral ZpXX slots
documented with reasons in locals.inc, all hardware-register operands use
symbols.inc names, project README rewritten with Pass 2/Pass 3 sections and
data-table inventory; promoted out of _wip/CNROM/.
- World Class Track Meet (U) - project README documents the five event-table
entries at $F796 and marks the olympics mode as not yet proven.
- Golf (JU) - audit comments converted from pre-canonical (; C000: A9 00)
to the canonical ; CPU:$C000 PRG:0000 A9 00 form at column 35; 4,156
comments re-aligned, comment/whitespace only, whole-ROM build stays
byte-identical.
- Golf (JU) - 339 internal branch-target Label_ labels given role-based names
via _tools/derive_branch_names.py; 0 raw $XXXX branch/jump operands remain.
- Golf (JU) - 275 zero-page operands substituted with locals.inc aliases via
apply_symbols.py; 0 residue; promoted out of _wip/NROM/.
- Xevious (U) - runs of $FF padding replaced with .res <count>, $FF in prg.s;
whole-ROM build stays byte-identical.
- Both projects promoted via git mv; leftover _wip/ folders removed; root
README.md inventory rows added; WIP.md rows removed.
World Class Track Meet (U): apply zero-page symbol substitutions
Run apply_symbols.py to substitute ZpXX zero-page operands with
semantic locals.inc aliases (SlotState, GameMode, etc.) at proven
sites; 0 residue, whole-ROM build stays byte-identical.
Xevious (U): re-split Pass 1 from the Mesen CDL and decode the data tables
- Xevious (U) - Pass 1 re-split from the Mesen CDL (xevious_mesen.cdl) with
_tools/cdl_reclass.py: 1,158 bytes data->code, 48 code->data, 42 labels
emitted and 3 branch targets labelled; code 11,321->12,455 bytes
(34.5%->38.0%), instructions 5,513->6,002. The 45 recovered entry points
are named Sub_XXXX, so no Label_XXXX remains; six CDL-silent raw call
operands are documented as residue.
- Xevious (U) - the 4,448-byte block at $A74B-$B8AA is split into six proven
tables: VramWritePtrTable (15 pointers), VramWriteData, DataStreamPtrTable
(16), ObjTilePtrTable (99), ObjTileData and DataStreamData. The $D833
pointer table is corrected to base $D833 (4 entries; the old ObjCodePtrTable
at $D834 was one byte late). $F957-$FAF5 is split into ObjSpeedTable,
ObjSpeedTable2, SpriteLayoutPtrTable (19) and SpriteLayoutData;
$FEE6-$FF1C into PaletteData and OamAttrTable. $F5D8 is decoded as
TextTileData (font tile indices: PLAYER, GAME OVER, READY, SOLVALOU, LEFT,
PAUSE); $F53C becomes AttrAddrTable, $F89E HandlerPtrTable and $EF3B
SpriteLayoutData2. Project README rewritten with the corrected stats, a
32-entry table inventory and the Pass 1 residue.
- _tools/cdl_reclass.py - preserve the data label(s) between a data-block
header and its first .byte row when the block stays data; the $DF78 split
dropped Data_DF78 and the rebuild failed with an undefined symbol.
- _tools/resolve_raw_branches.py - handle negative relative offsets
(beq *-$0B); the pattern only matched *+$NN and *$NN.
Docs: refresh the tier counts to 41 promoted / 851 _wip, add the WCTM row
- Docs - tier counts refreshed to the post-promotion state across AGENTS.md,
root README.md, WIP.md, TODO.md and CHANGELOG.md: 41 promoted projects
(38 under NROM/, plus CNROM/World Class Track Meet (U), UNROM/Zanac (U) and
MAPPER8/Mermaids of Atlantis (U)) and 851 _wip/ projects, every one of them
a Pass 0 skeleton. The stale "39/40 promoted", "853 _wip", "Golf (JU) is
still in _wip/" and "Golf is the last pre-canonical project" statements are
corrected.
- Root README.md - the promoted inventory gained the missing World Class Track
Meet (U) row (row 41, mapper 3, 32 KB PRG / 32 KB CHR), and the "All 38 are
mapper 0 / 16 KB PRG" sentence is replaced with the actual split (36 of the
41 rows are mapper 0 / 16 KB; Xevious and Volleyball are 32 KB, World Class
Track Meet is mapper 3, Zanac mapper 2 and Mermaids mapper 8).
735 lines
17 KiB
Plaintext
735 lines
17 KiB
Plaintext
# Volleyball (U) - Pass 2 name map
|
|
# <CPU address><TAB><name>
|
|
|
|
8000 Reset
|
|
800B WaitForVblankStart
|
|
8010 WaitForVblankEnd
|
|
803E InitGameAndEnterMainLoop
|
|
8053 NmiHandler
|
|
805B NmiStartFrameWork
|
|
8064 NmiUpdateGame
|
|
811E NmiAnimateCrowd
|
|
8132 NmiUpdateIndicatorBoard
|
|
8139 NmiStartRendering
|
|
817A NmiSetOverlayFlags
|
|
8189 NmiRunSoundAndOverlay
|
|
8190 NmiUpdateCrowdSprites
|
|
819E NmiBuildOamBuffer
|
|
81B5 MainIdleLoop
|
|
81CC NmiIgnoreAndReturn
|
|
81FF FlushVramUpdateScript
|
|
8210 RunVramUpdateScript
|
|
8223 RunVramUpdateRun
|
|
822E WriteVramRunByte
|
|
823A VramUpdateScriptComplete
|
|
8245 AdvanceVramScriptPointer
|
|
8269 ReadBothControllersOld
|
|
8277 ReadBothControllersLegacy
|
|
829D ShiftControllerBits
|
|
82AC ReadPlayerController
|
|
82C2 ShiftPlayerControllerBits
|
|
82F5 CopyOamBufferToPpu
|
|
8315 UpdateScrollAndNametable
|
|
8335 InitPpuForPowerOn
|
|
8378 ClearScreensForNewGame
|
|
8397 ClearNametableAndOamFlag
|
|
839E ClearNametable0
|
|
83D3 ClearOamPendingFlag
|
|
83D8 BuildPlayerSpriteEntries
|
|
8424 WriteAttributeUpdateScript
|
|
8440 WriteAttributeScriptBytes
|
|
845D ClearGameRam
|
|
848F LoadSpriteTableTeamA
|
|
849F LoadSpriteTableTeamB
|
|
84AF LoadSpriteTableTeamC
|
|
84BF LoadSpriteTableTeamD
|
|
84CF LoadSpriteTableTeamE
|
|
84DF UploadOamShadowToPpu
|
|
85B1 DispatchGameState
|
|
85F7 DecrementStateTimer
|
|
8600 AdvanceSubState
|
|
8603 AdvanceGameState
|
|
860A SetGameState
|
|
8611 StateTitleScreenInit
|
|
8630 TitleInit_ClearGameState
|
|
8666 TitleInit_QueueIntroScript
|
|
8675 TitleInit_LoadSprites
|
|
867B TitleInit_SetWaitTimer
|
|
8686 TitleInit_WaitTimer
|
|
8689 TitleInit_StartMatchSetup
|
|
869B TitleInit_AttractLoop
|
|
871A TitleInit_SelectSlotTwo
|
|
8729 TitleInit_SetNumberTile
|
|
873E TitleInit_SwitchToDemoState
|
|
8743 StateTitleScreen
|
|
8753 Title_WaitForStartPress
|
|
8759 Title_StartDemoCountdown
|
|
87CB TitleInit_SetNumberTileB
|
|
87EF TitleInit_DrawNumberEven
|
|
880D TitleInit_DrawNumberOdd
|
|
8819 TitleInit_GoToModeSelect
|
|
8821 StateModeSelect
|
|
8843 StateModeSelectToMatch
|
|
887D StateCourtSetup
|
|
8913 CourtSetup_StartWhistle
|
|
8933 CourtSetup_UpdateFrame
|
|
894E CourtSetup_GoToNextState
|
|
8951 StateRally
|
|
89B2 Rally_ResetForPoint
|
|
89C3 Rally_SkipFrame
|
|
89C9 Rally_SetServeFlag
|
|
89D3 Rally_CountdownToServe
|
|
89E6 Rally_UpdatePlayers
|
|
8A14 Rally_EndPoint
|
|
8A1A Rally_ClearServeFlags
|
|
8A34 Rally_DrawAndWait
|
|
8A3A Rally_ResumeAfterWhistle
|
|
8A44 Rally_CheckPointEnd
|
|
8A6C Rally_FrameDone
|
|
8A72 Rally_ClearServeFlag2
|
|
8A78 Rally_ClearOverFlag
|
|
8A82 Rally_ClearTeamScores
|
|
8AD2 Rally_UpdateTeamFlags
|
|
8B04 Rally_FrameDone2
|
|
8B0A Rally_SetWhistleFlag
|
|
8B1F Rally_GoToNextState
|
|
8B22 Rally_RestartDemo
|
|
8B47 StateNewPoint
|
|
8B81 NewPoint_ResetStructs
|
|
8B92 NewPoint_FrameDone
|
|
8B98 NewPoint_ResetScore
|
|
8BAF NewPoint_ClearBall
|
|
8BC7 NewPoint_FrameDone2
|
|
8BCD NewPoint_ShowScore
|
|
8BE9 NewPoint_FrameDone3
|
|
8BEF NewPoint_MoveBall
|
|
8C0B Rally_UpdateTeamsAndDraw
|
|
8C17 GetTeamPlayerOffset
|
|
8C63 SetNumberAndDraw
|
|
8C7F SetStateAndAdvance
|
|
8C85 SetStateFive
|
|
8C8A StateTeamSelection
|
|
8CAF TeamSelect_Start
|
|
8CBD TeamSelect_CountTeams
|
|
8CD4 TeamSelect_NextTeam
|
|
8CDD TeamSelect_CheckTeam
|
|
8CEC TeamSelect_ConfirmTeam
|
|
8D07 ServeSet_BallPosition
|
|
8D1F ServeSet_CheckDmc
|
|
8D38 ServeSet_SetTimer
|
|
8D46 ServeSet_WaitForServe
|
|
8D55 ServeSet_StopSounds
|
|
8D62 ServeSet_GoToNextState
|
|
8D65 StateServeSetup
|
|
8DDD ServeSet_ClearPlayerInput
|
|
8DEA ServeSet_FrameDone
|
|
8DFA AdvanceSubStateShared
|
|
8E09 StateAttractDemo
|
|
8E4D StateMatchResults
|
|
8E87 Results_Start
|
|
8E99 Results_FrameDone
|
|
8E9F Results_ResetStructs
|
|
8EDC Results_FrameDone2
|
|
8EE2 Results_MoveBall
|
|
8EFE Results_UpdateTeams
|
|
8F0A GetTeamPlayerOffsetB
|
|
8F59 ShiftTeamOffset
|
|
8F69 SetNumberAndDrawB
|
|
8F85 SetStateAndAdvanceB
|
|
8F8B SetStateFiveB
|
|
8F90 ReadCommandStreamByte
|
|
8FBE DecodeCommandStream
|
|
8FDF RunCommandStream
|
|
9001 InitMatchStructs
|
|
903E UpdateMatchStructs
|
|
908E DrawMatchFrame
|
|
90C0 InitMatchPlayers
|
|
90D9 UpdatePlayerInput
|
|
9106 SetPlayerCount
|
|
9112 UpdatePlayerControl
|
|
912B CompareScores
|
|
914D CompareScoresB
|
|
9153 UpdatePlayerAction
|
|
9173 CompareScoresC
|
|
9195 CompareScoresD
|
|
919B ClearPlayerAction
|
|
91B6 GetNumberOffset
|
|
91C5 DrawScoreDigits
|
|
921A DrawScoreNumber
|
|
9262 LoadTeamSprites
|
|
92B5 ReadTeamSpriteData
|
|
92B9 LoadTeamSpritePair
|
|
92D0 QueueTitleScript
|
|
931E InitPlayerStructs
|
|
934E InitScoreStructs
|
|
9397 LoadTeamNumberTable
|
|
93F5 InitTeamPlayerStruct
|
|
9426 InitRallyStructs
|
|
9456 DrawRallyFrame
|
|
9480 UpdateBallFrame
|
|
9492 BallFrameDone
|
|
94A1 UpdateBallMovement
|
|
94FE UpdateBallAnimation
|
|
955B BallRoutineEnd
|
|
955C GetBallNumberIndex
|
|
958C TeamPlayerMove0
|
|
95C3 TeamPlayerMove0End
|
|
95DD TeamPlayerMove1
|
|
9624 TeamPlayerMove1Start
|
|
965B TeamPlayerMove1End
|
|
9675 TeamPlayerMove2
|
|
96AC TeamPlayerMove2End
|
|
96C6 TeamPlayerMove3
|
|
970D TeamPlayerMove4
|
|
9754 TeamPlayerMove5
|
|
979B CheckBallInPlay
|
|
97C5 BallBounceOnFloor
|
|
97DF BallSetDirection
|
|
97F4 BallStoreSpriteFlags
|
|
97F8 BallFrameDone0
|
|
97F9 CheckBallLanded
|
|
9823 BallComputeSpriteAttr
|
|
9856 BallStoreFlagsB
|
|
985B BallComputeAttrB
|
|
987D BallStoreFlagsC
|
|
9882 BallComputeAttrC
|
|
98AF BallSetAnimFlags
|
|
98C4 BallStoreFlagsD
|
|
98C9 BallUpdateTeamA
|
|
9933 BallSetTeamAFlags
|
|
994A BallStoreTeamAFlags
|
|
9967 BallStoreTeamAFlagsB
|
|
9983 BallStoreTeamAFlagsC
|
|
9988 BallUpdateTeamB
|
|
99F2 BallSetTeamBFlags
|
|
9A09 BallStoreTeamBFlags
|
|
9A26 BallStoreTeamBFlagsB
|
|
9A47 BallSetTeamBFlagsC
|
|
9A5C BallStoreTeamBFlagsD
|
|
9A61 BallUpdateTeamC
|
|
9ABF BallSetTeamCFlags
|
|
9AD6 BallStoreTeamCFlags
|
|
9AF3 BallStoreTeamCFlagsB
|
|
9B0F BallStoreTeamCFlagsC
|
|
9B14 BallUpdateTeamD
|
|
9B6F BallSetTeamDFlags
|
|
9B86 BallStoreTeamDFlags
|
|
9B9D BallStoreTeamDFlagsB
|
|
9BB9 BallStoreTeamDFlagsC
|
|
9BBE BallUpdateTeamE
|
|
9C25 BallSetTeamEFlags
|
|
9C4E BallStoreTeamEFlags
|
|
9C66 BallStoreTeamEFlagsB
|
|
9C6D BallSetTeamEFlagsC
|
|
9C7A BallStoreTeamEFlagsD
|
|
9C81 BallSetCommonFlags
|
|
9C92 BallStoreCommonFlags
|
|
9C97 BallSetCommonFlagsB
|
|
9CAE BallStoreCommonFlagsB
|
|
9CB3 BallUpdateTeamF
|
|
9CE2 CheckBallAboveScreen
|
|
9D29 BallMoveUp
|
|
9D46 BallSetFlagsE
|
|
9D5D BallStoreFlagsE
|
|
9D7A BallStoreFlagsE2
|
|
9D96 BallStoreFlagsE3
|
|
9D9B BallUpdateAnimation
|
|
9DC9 BallStoreAnimFlags
|
|
9DCB BallClearNumber
|
|
9DD0 BallUpdateAnimationB
|
|
9DF7 BallClearNumberB
|
|
9DFC BallResetForTeam
|
|
9E18 BallCheckFloor
|
|
9E41 BallStoreFlagsF
|
|
9E45 BallFrameDone2
|
|
9E46 BallResetForTeamB
|
|
9E62 BallComputeSpeed
|
|
9E94 BallStoreFlagsG
|
|
9E98 BallCheckSpin
|
|
9EAB BallStoreFlagsH
|
|
9EB0 BallUpdateBallSpeed
|
|
9EDB BallSetBallSpeed
|
|
9EF7 BallStoreBallSpeed
|
|
9EFA BallSubtractSpeed
|
|
9F0E BallStoreSpeed
|
|
9F11 BallComputeNoteIndex
|
|
9F2D BallComputeNoteIndexB
|
|
9F52 BallComputeNoteIndexC
|
|
9F77 BallComputeNoteIndexD
|
|
9F9C BallGetTeamSlot
|
|
9FCE BallUpdateTeamG
|
|
A005 TeamSpriteUpdate0End
|
|
A01F TeamSpriteUpdate0
|
|
A066 TeamSpriteUpdate1
|
|
A09D TeamSpriteUpdate1End
|
|
A0B7 TeamSpriteUpdate2
|
|
A0EE TeamSpriteUpdate2End
|
|
A108 TeamSpriteUpdate3
|
|
A14F TeamSpriteUpdate4
|
|
A196 TeamSpriteUpdate5
|
|
A1DD TeamCheckFloorA
|
|
A205 TeamSetAttrA
|
|
A21F TeamSetAttrB
|
|
A234 TeamStoreAttr
|
|
A239 TeamCheckFloorB
|
|
A261 TeamSetAttrC
|
|
A294 TeamStoreAttrB
|
|
A299 TeamResetFlagsA
|
|
A2BB TeamStoreAttrC
|
|
A2C0 TeamResetFlagsB
|
|
A2ED TeamSetFlagsC
|
|
A302 TeamStoreAttrD
|
|
A307 BallUpdateTeamH
|
|
A371 BallSetTeamHFlags
|
|
A388 BallStoreTeamHFlags
|
|
A3A5 BallStoreTeamHFlagsB
|
|
A3C1 BallStoreTeamHFlagsC
|
|
A3C6 BallUpdateTeamI
|
|
A430 BallSetTeamIFlags
|
|
A447 BallStoreTeamIFlags
|
|
A464 BallStoreTeamIFlagsB
|
|
A485 BallSetTeamJFlags
|
|
A49A BallStoreTeamJFlags
|
|
A49F BallUpdateTeamJ
|
|
A4FD BallSetTeamKFlags
|
|
A514 BallStoreTeamKFlags
|
|
A531 BallStoreTeamKFlagsB
|
|
A54D BallStoreTeamKFlagsC
|
|
A552 BallUpdateTeamL
|
|
A5AD BallSetTeamLFlags
|
|
A5C4 BallStoreTeamLFlags
|
|
A5DB BallStoreTeamLFlagsB
|
|
A5F7 BallStoreTeamLFlagsC
|
|
A5FC BallUpdateTeamM
|
|
A663 BallSetTeamMFlags
|
|
A68C BallStoreTeamMFlags
|
|
A6A4 BallStoreTeamMFlagsB
|
|
A6AB BallSetTeamMFlagsC
|
|
A6B8 BallStoreTeamMFlagsC
|
|
A6BF BallSetCommonFlagsC
|
|
A6D0 BallStoreCommonFlagsC
|
|
A6D5 BallSetCommonFlagsD
|
|
A6EC BallStoreCommonFlagsD
|
|
A6F1 BallUpdateTeamN
|
|
A724 BallUpdateTeamN2
|
|
A78C BallSetTeamNFlags
|
|
A7A3 BallStoreTeamNFlags
|
|
A7C0 BallStoreTeamNFlagsB
|
|
A7DC BallStoreTeamNFlagsC
|
|
A7E1 BallUpdateAnimationC
|
|
A80F BallStoreAnimFlagsC
|
|
A811 BallClearNumberC
|
|
A816 BallUpdateAnimationD
|
|
A83D BallClearNumberD
|
|
A842 BallResetForTeamC
|
|
A85C BallCheckFloorC
|
|
A885 BallStoreFlagsI
|
|
A88A BallResetForTeamD
|
|
A8A4 BallComputeSpeedD
|
|
A8D6 BallStoreFlagsJ
|
|
A8ED BallStoreFlagsJ2
|
|
A8F2 BallUpdateBallSpeedB
|
|
A91D BallSetBallSpeedB
|
|
A939 BallStoreBallSpeedB
|
|
A93C BallSubtractSpeedB
|
|
A950 BallStoreSpeedB
|
|
A953 BallCheckFloorD
|
|
A972 BallSetPosition
|
|
A9D5 BallSetFlagsK
|
|
A9E1 BallSetSpeed
|
|
A9E6 BallAdvancePosition
|
|
AA1B BallSetFlagsL
|
|
AA24 BallStartSound
|
|
AA6D BallCheckTeam
|
|
AAA5 BallFinishHit
|
|
AAAE BallStartSoundB
|
|
AAEB BallDecreaseNumber
|
|
AAF0 BallStoreNumber
|
|
AB00 BallSelectTeamSlot
|
|
AB13 BallHandlePlayerButton
|
|
AB4B BallStorePlayerState
|
|
AB6F BallStorePlayerStateB
|
|
ABCE BallFrameDone3
|
|
ABCF BallHandlePlayerButtonB
|
|
AC07 BallStorePlayerStateC
|
|
AC2B BallStorePlayerStateD
|
|
AC8A BallFrameDone4
|
|
AC8B BallSelectSlot
|
|
AC8D BallSlotOffset
|
|
AD0F BallStoreTeamNumber
|
|
AD5E BallStoreTeamNumberB
|
|
AD66 BallNextPlayerSlot
|
|
AD91 BallFinishPlayerUpdate
|
|
ADA4 BallNextPlayerSlotB
|
|
ADAB BallSavePlayerSlot
|
|
ADE7 BallPlayerMoveStart
|
|
AE20 BallPlayerMoveMiddle
|
|
AE47 BallPlayerMoveEnd
|
|
AE61 BallPlayerMoveStartB
|
|
AED9 BallPlayerMoveStartC
|
|
AF12 BallPlayerMoveMiddleB
|
|
AF23 BallPlayerMoveEndB
|
|
AF30 BallPlayerMoveEndH
|
|
AF48 BallSelectSlotB
|
|
AF4A BallSlotOffsetB
|
|
AFB7 BallNextPlayerSlotC
|
|
AFE2 BallFinishPlayerUpdateB
|
|
AFF1 BallNextPlayerSlotD
|
|
AFF8 BallSavePlayerSlotB
|
|
B032 BallPlayerMoveStartD
|
|
B06B BallPlayerMoveMiddleC
|
|
B089 BallPlayerMoveEndC
|
|
B0CE BallStoreTeamNumberC
|
|
B0D0 BallStoreTeamNumberD
|
|
B0DD BallHandlePlayerButtonC
|
|
B176 BallStorePlayerStateE
|
|
B1BC BallStorePlayerStateF
|
|
B1C2 BallPlayerMoveMiddleD
|
|
B1F5 BallStorePlayerStateG
|
|
B1FB BallCheckPlayerFacing
|
|
B223 BallPlayHitSound
|
|
B230 BallRestorePlayerSlot
|
|
B234 BallClearBall
|
|
B239 BallSelectSlotC
|
|
B23B BallSlotOffsetC
|
|
B348 BallStorePlayerStateH
|
|
B38E BallStorePlayerStateI
|
|
B397 BallPlayerMoveMiddleE
|
|
B3CA BallStorePlayerStateJ
|
|
B3D0 BallCheckPlayerFacingB
|
|
B3F8 BallHandlePlayerButtonD
|
|
B443 BallStorePlayerStateK
|
|
B47C BallStorePlayerStateL
|
|
B49F BallRestorePlayerSlotB
|
|
B4A7 BallNextPlayerSlotE
|
|
B4D8 BallFinishPlayerUpdateC
|
|
B4E7 BallNextPlayerSlotF
|
|
B4EE BallRestorePlayerSlotC
|
|
B4F5 BallCheckHitType
|
|
B550 BallCheckHitTypeB
|
|
B568 BallSetBallNumber
|
|
B5A7 BallStoreBallNumber
|
|
B5BD BallGetNoteIndex
|
|
B5DB BallSetNumberState
|
|
B5F7 BallStoreNumberStateB
|
|
B60F BallStoreNumberStateC
|
|
B612 BallCheckNumberState
|
|
B62E BallStoreNumberStateD
|
|
B646 BallStoreNumberStateE
|
|
B666 BallStartHitSound
|
|
B669 BallStoreNumberStateF
|
|
B6A1 BallFinishPlayerUpdateD
|
|
B6B1 BallFrameDone5
|
|
B6C4 BallSelectSlotD
|
|
B6C6 BallSlotOffsetD
|
|
B748 BallStoreTeamNumberE
|
|
B79A BallStoreTeamNumberF
|
|
B7A2 BallNextPlayerSlotG
|
|
B7CD BallFinishPlayerUpdateE
|
|
B7E0 BallNextPlayerSlotH
|
|
B7E9 BallSavePlayerSlotC
|
|
B863 BallPlayerMoveStartE
|
|
B89C BallPlayerMoveMiddleF
|
|
B8AD BallPlayerMoveEndD
|
|
B8BA BallPlayerMoveEndE
|
|
B8D2 BallSavePlayerSlotD
|
|
B90E BallPlayerMoveStartF
|
|
B947 BallPlayerMoveMiddleG
|
|
B96E BallPlayerMoveEndF
|
|
B988 BallSelectSlotE
|
|
B98A BallSlotOffsetE
|
|
B9F7 BallNextPlayerSlotI
|
|
BA22 BallFinishPlayerUpdateF
|
|
BA31 BallNextPlayerSlotJ
|
|
BA3A BallSavePlayerSlotE
|
|
BA74 BallPlayerMoveStartG
|
|
BAAD BallPlayerMoveMiddleH
|
|
BACB BallPlayerMoveEndG
|
|
BB10 BallStoreTeamNumberG
|
|
BB12 BallStoreTeamNumberH
|
|
BB1F BallHandlePlayerButtonE
|
|
BBB8 BallStorePlayerStateM
|
|
BBFE BallStorePlayerStateN
|
|
BC07 BallPlayerMoveMiddleI
|
|
BC3A BallStorePlayerStateO
|
|
BC40 BallCheckPlayerFacingC
|
|
BC68 BallPlayHitSoundB
|
|
BC75 BallRestorePlayerSlotD
|
|
BC79 BallClearBallB
|
|
BC7E BallSelectSlotF
|
|
BC80 BallSlotOffsetF
|
|
BD8D BallStorePlayerStateP
|
|
BDD3 BallStorePlayerStateQ
|
|
BDDC BallPlayerMoveMiddleJ
|
|
BE0F BallStorePlayerStateR
|
|
BE15 BallCheckPlayerFacingD
|
|
BE3D BallHandlePlayerButtonF
|
|
BE88 BallStorePlayerStateS
|
|
BEC1 BallStorePlayerStateT
|
|
BEE4 BallRestorePlayerSlotE
|
|
BEEC BallNextPlayerSlotK
|
|
BF1D BallFinishPlayerUpdateG
|
|
BF2F BallWaitFrames
|
|
BF3C BallNextPlayerSlotL
|
|
BF45 BallRestorePlayerSlotF
|
|
BF4C BallCheckHitTypeC
|
|
BFA7 BallCheckHitTypeD
|
|
BFBF BallSetBallNumberB
|
|
BFFE BallStoreBallNumberB
|
|
C014 BallGetNoteIndexB
|
|
C032 BallSetNumberStateB
|
|
C04E BallStoreNumberStateG
|
|
C066 BallStoreNumberStateH
|
|
C069 BallCheckNumberStateB
|
|
C085 BallStoreNumberStateI
|
|
C09D BallStoreNumberStateJ
|
|
C0BF BallStartHitSoundB
|
|
C0C2 BallStoreNumberStateK
|
|
C0FA BallFinishPlayerUpdateH
|
|
C10A BallFrameDone6
|
|
C115 UpdateBallX
|
|
C167 UpdateBallY
|
|
C1B9 UpdateBallFrameCounter
|
|
C1D5 AdvanceBallFrame
|
|
C1E6 InitBallAnimations
|
|
C1EA BallAnimationIndex
|
|
C215 UpdateBallAnimationTable
|
|
C226 BallStoreAnimation
|
|
C24E BallAnimationStoreValue
|
|
C26C BallAnimationStoreValueB
|
|
C283 BallAnimationStoreValueC
|
|
C292 BallAnimationCheckScroll
|
|
C2A6 DrawPlayers
|
|
C2F8 LoadTeamSpriteOffsets
|
|
C36D DrawCourt
|
|
C371 DrawCourtFrame
|
|
C386 GetTileIndex
|
|
C3EF DrawTeamFlags
|
|
C41D ReadTileListByte
|
|
C43F ShiftTileList
|
|
C4A9 DrawIndicatorBoard
|
|
C4D9 ShiftDrawPointer
|
|
C4FD GetDrawX
|
|
C522 StoreDrawX
|
|
C54F StoreDrawTile
|
|
C556 DrawNumberSprite
|
|
C568 DrawNumberSpriteB
|
|
C56C DrawNumberSpriteC
|
|
C58A DrawNumberSpriteD
|
|
C59B DrawNumberSpriteE
|
|
C5B4 DrawNumberSpriteF
|
|
C5D2 DrawNumberSpriteG
|
|
C5E9 StoreSpriteIndex
|
|
C5EF AnimateCrowd
|
|
C638 CrowdFrame0
|
|
C650 CrowdFrame1
|
|
C668 CrowdFrame2
|
|
C680 CrowdFrame3
|
|
C698 CrowdFrame4
|
|
C6B0 CrowdSpriteFlag0
|
|
C6C8 CrowdSpriteFlag1
|
|
C6E0 CrowdSpriteFlag2
|
|
C6F8 CrowdSpriteFlag3
|
|
C710 CrowdSpriteFlag4
|
|
C728 CrowdSpriteFlag5
|
|
C740 CrowdSpriteFlag6
|
|
C758 DrawScoreBoard
|
|
C786 StoreCrowdSprite
|
|
C78C CrowdSpriteLoopStart
|
|
C78E ReadCrowdSpriteByte
|
|
C7B1 GetCrowdSpriteY
|
|
C7CD DrawCrowdSpriteRow
|
|
C7D5 DrawTeamSelection
|
|
C7EE GetCrowdSpriteTile
|
|
C809 NegateValue
|
|
C814 SetCrowdFrameIndex
|
|
C833 GetCrowdSpriteX
|
|
C85C StoreCrowdSpriteX
|
|
C893 StoreTeamColorA
|
|
C8C6 DrawNationFlags
|
|
C8D1 DrawNationFlag0
|
|
C8FD StoreTeamColorB
|
|
C904 DrawNumberSpriteH
|
|
C907 DrawNumberSpriteI
|
|
C936 DrawNumberSpriteJ
|
|
C938 StoreCrowdOffset
|
|
C93B CheckCrowdOffset
|
|
C955 DrawNumberSpriteK
|
|
C95E StoreCrowdTile
|
|
C983 DrawNumberSpriteL
|
|
C98D SetNumberIndex
|
|
C991 ShiftNumberBits
|
|
C9CE DrawNumberSpriteM
|
|
C9F1 DrawNumberSpriteN
|
|
CA16 GetFrameMod4
|
|
CA20 SetNumberIndexB
|
|
CA24 ShiftNumberBitsB
|
|
CA67 DrawNumberSpriteO
|
|
CA96 DrawNumberSpriteP
|
|
CA9F DrawNumberSpriteQ
|
|
CAD0 DrawNumberSpriteR
|
|
CAE1 DrawNumberSpriteS
|
|
CB4A DrawNumberSpriteU
|
|
CB5B DrawNumberSpriteV
|
|
CB63 CheckTeamSpriteFlag
|
|
CB89 ClearTeamSpriteFlags
|
|
CB91 CheckTeamSpriteFlagB
|
|
CBB7 ClearNumberState
|
|
CBEF GetTileIndexB
|
|
CC37 ClearNumberStateB
|
|
CC6F GetTileIndexC
|
|
CCB7 DrawNumberSpriteZ
|
|
CCC6 GetTileIndexD
|
|
CD2E CheckTeamSpriteIndex
|
|
CD63 StoreTeamSpriteY
|
|
CD66 LoadTeamSpriteData
|
|
CD6C NextTeamSprite
|
|
CDB8 CheckAnimateFlag
|
|
CE2B StoreSpriteValue
|
|
CE2E NextSpriteRow
|
|
CE32 DrawNumberSpriteAA
|
|
CEA5 StoreSpriteValueB
|
|
CEA8 NextSpriteRowB
|
|
CEAE DrawNumberSpriteAB
|
|
CECF GetTileIndexE
|
|
CF1E GetSpriteTileAddress
|
|
CF7D SubtractFour
|
|
CF8A DrawNumberSpriteAC
|
|
CFAB GetTileIndexF
|
|
CFFA GetSpriteTileAddressB
|
|
D059 SubtractFourB
|
|
D06A DrawNumberSpriteAD
|
|
D093 DrawNumberSpriteAE
|
|
D0CC SetDrawFlags
|
|
D0DA StoreSpriteFlag
|
|
D0DD ClearDrawFlags
|
|
D0EE SetDrawFlagsB
|
|
D0FB AnimateAudience
|
|
D135 SetPpuAddress2059
|
|
D148 GetTableIndex
|
|
D15A GetTableIndexB
|
|
D17D WriteTwoTileBytes
|
|
D1A6 WriteTileBytes
|
|
D1B4 AnimateAudienceB
|
|
D1EE SetPpuAddress205A
|
|
D201 GetTableIndexC
|
|
D213 GetTableIndexD
|
|
D236 WriteTwoTileBytesB
|
|
D25F AnimateAudienceC
|
|
D285 SetAnimateState
|
|
D303 AnimateAudienceD
|
|
D32D SetAnimateStateB
|
|
D3AB AnimateAudienceE
|
|
D406 NextAnimateStep
|
|
D408 NextAnimateStepB
|
|
D40A NextAnimateStepC
|
|
D40C ReadAnimateTable
|
|
D44F WriteAnimateByte
|
|
D457 AnimateAudienceF
|
|
D486 CheckAnimateChar
|
|
D50B WriteAnimateByteB
|
|
D513 DrawScoreDigitsAt
|
|
D54B WriteEightDigits
|
|
D564 WriteOneDigit
|
|
D56C ClearDigit
|
|
D5CB UpdateIndicatorBoardBits
|
|
D622 SetPpuAddressFromZp
|
|
D682 CheckIndicatorFlag
|
|
D6BA SetIndicatorStep1
|
|
D6CA SetIndicatorStep2
|
|
D6DA SetIndicatorStep3
|
|
D6E2 CheckIndicatorCount
|
|
D71A SetIndicatorPointerA
|
|
D744 StoreIndicatorValue
|
|
D795 ClearIndicatorFlag
|
|
D799 UpdateIndicatorBoardDone
|
|
D79A CheckIndicatorPage
|
|
D7D2 SetIndicatorPointerB
|
|
D800 StoreIndicatorValueB
|
|
D851 ClearIndicatorFlagB
|
|
D855 UpdateIndicatorBoardDoneB
|
|
D856 DrawPlayersAndCrowd
|
|
D8B7 CheckIndicatorFrame
|
|
D8D6 SetIndicatorDelay
|
|
D8DF ResetTeamPositions
|
|
D8E9 GetTileIndexG
|
|
D8FD ResetTeamPositionsB
|
|
D905 SetTeamPositionsB
|
|
D90F GetTileIndexH
|
|
D92F SetTeamScores
|
|
D948 SetTeamScoresB
|
|
D965 UpdateTeamPlayerPositions
|
|
D96B GetTileIndexI
|
|
D9B1 NextPlayerPosition
|
|
D9BB UpdateTeamPlayerPositionsB
|
|
D9C1 GetTileIndexJ
|
|
DA07 UpdateTeamPlayerPositionsC
|
|
DA15 InitPlayerPositionLoop
|
|
DA1F GetTileIndexK
|
|
DA41 InitPlayerPositionLoopB
|
|
DA4B GetTileIndexL
|
|
DA71 InitPlayerPositionLoopC
|
|
DA77 GetTileIndexM
|
|
DA99 NextPlayerPositionB
|
|
DAA3 InitPlayerPositionLoopD
|
|
DAA9 GetTileIndexN
|
|
DACB CheckPlayerPositionCount
|
|
DB39 LoadBackgroundTilemap
|
|
DB4F SetBackgroundTileRow
|
|
DB51 WriteBackgroundTile
|
|
DB6E SetAttributeRow
|
|
DB70 WriteAttributeTile
|
|
DBA2 QueueScreenUpdate
|
|
DC4E StopAllSounds
|
|
F800 InitSoundEngine
|
|
F83F SetPulse1Envelope
|
|
F846 SetPulse2Envelope
|
|
F850 PlayPulse1Note
|
|
F867 PlayPulse2Note
|
|
F86B PlayTriangleNote
|
|
F86F NoteToPeriodIndex
|
|
F875 GetNoisePeriodIndex
|
|
F89F PlaySfxWhistle
|
|
F8C5 StartSfxEnvelope
|
|
F8CF PlaySfxHit
|
|
F8E3 UpdateNoiseSfx
|
|
F8F7 DecrementSfxCounter
|
|
F906 DispatchSfxByBit
|
|
F92F PlaySfxCrowd
|
|
F943 StopSfxCrowd
|
|
F946 PlaySfxBounce
|
|
F958 StopSfxBounce
|
|
F95B PlaySfxNet
|
|
F96F StopSfxNet
|
|
F972 PlaySfxCheer
|
|
F993 PlaySfxPoint
|
|
F9A5 PlaySfxServe
|
|
F9C6 DispatchSfxByBitB
|
|
F9E5 DecrementSfxCounterB
|
|
F9EF PlaySfxWhistleB
|
|
FA10 PlaySfxBallBounce
|
|
FA22 SetCrowdNoiseVolume
|
|
FA43 DispatchSfxByBitC
|
|
FA5C DecrementSfxCounterC
|
|
FA66 SetCrowdNoiseVolumeB
|
|
FA89 SetCrowdNoiseVolumeC
|
|
FAC4 UpdateCrowdNoisePattern
|
|
FACB PlayCrowdNoiseStep
|
|
FAF3 UpdateCrowdSound
|
|
FAFF RunSoundSequence
|
|
FB08 StartSoundSequence
|
|
FB1F LoadSoundSequenceNote
|
|
FB56 RunSoundSequenceStep
|
|
FB5B ReadSoundSequenceByte
|
|
FB84 StopSoundSequence
|
|
FBA4 PlaySequenceNote
|
|
FBBE SetPulse2ForSequence
|
|
FBCE UpdateSequencePulse2
|
|
FBF4 UpdateSequenceNote
|
|
FC03 UpdateSequencePulse1
|
|
FC17 StoreSequencePulse1
|
|
FC1C UpdateSequenceTriangle
|
|
FC45 UpdateSequenceNoise
|
|
FC75 SetNoiseForSequence
|
|
FFF7 JumpToInitSoundEngine
|