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

Add branch/jump target naming requirement to PROMPTS.md

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

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

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

Promote Donkey Kong Jr. Math back to _wip tier

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

Add pre-commit hook for byte-identical verification

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

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

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

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

Updates docs to reflect changes in layout

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

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

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

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

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

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

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

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

Pass 3 (partial):

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9271 lines
432 KiB
ArmAsm

; Tennis NES disassembly - Pass 1
; Generated from the supplied 16 KiB PRG image.
; Pass 1 classifies recursively reachable code, inline address tables, vectors,
; and untraced/data regions. All PRG data bytes are emitted explicitly with .byte directives.
.setcpu "6502"
.include "symbols.inc"
.include "locals.inc"
.segment "PRG"
.org $C000
; =============================================================================
; Reset
; CPU address: $C000 PRG offset: $0000
;
; Global description:
; RESET and IRQ/BRK entry. Initializes CPU, PPU, RAM, and game state before entering the foreground loop.
;
; Parameters:
; None; entered through a hardware vector.
;
; Returns:
; Does not return.
; =============================================================================
Reset:
cld ; CPU:$C000 PRG:0000 D8
sei ; CPU:$C001 PRG:0001 78
Flow_C002:
lda PPUSTATUS ; CPU:$C002 PRG:0002 AD 02 20
bpl Flow_C002 ; CPU:$C005 PRG:0005 10 FB
ldx #$00 ; CPU:$C007 PRG:0007 A2 00
stx PPUCTRL ; CPU:$C009 PRG:0009 8E 00 20
stx PPUMASK ; CPU:$C00C PRG:000C 8E 01 20
dex ; CPU:$C00F PRG:000F CA
txs ; CPU:$C010 PRG:0010 9A
ldx FrameCounter ; CPU:$C011 PRG:0011 A6 27
ldy #$06 ; CPU:$C013 PRG:0013 A0 06
sty WorkPtrHi ; CPU:$C015 PRG:0015 84 02
ldy #$00 ; CPU:$C017 PRG:0017 A0 00
sty WorkPtrLo ; CPU:$C019 PRG:0019 84 01
lda #$00 ; CPU:$C01B PRG:001B A9 00
Flow_C01D:
sta (WorkPtrLo),y ; CPU:$C01D PRG:001D 91 01
dey ; CPU:$C01F PRG:001F 88
bne Flow_C01D ; CPU:$C020 PRG:0020 D0 FB
dec WorkPtrHi ; CPU:$C022 PRG:0022 C6 02
bpl Flow_C01D ; CPU:$C024 PRG:0024 10 F7
txa ; CPU:$C026 PRG:0026 8A
bne Flow_C02B ; CPU:$C027 PRG:0027 D0 02
ldx #$5F ; CPU:$C029 PRG:0029 A2 5F
Flow_C02B:
stx $0500 ; CPU:$C02B PRG:002B 8E 00 05
jsr ClearNametables ; CPU:$C02E PRG:002E 20 95 C1
jsr HideAllSprites ; CPU:$C031 PRG:0031 20 A5 C1
ldy #$00 ; CPU:$C034 PRG:0034 A0 00
sta PPUSCROLL ; CPU:$C036 PRG:0036 8D 05 20
sta PPUSCROLL ; CPU:$C039 PRG:0039 8D 05 20
iny ; CPU:$C03C PRG:003C C8
sty GameActiveFlag ; CPU:$C03D PRG:003D 84 38
lda #$0F ; CPU:$C03F PRG:003F A9 0F
sta APUSTATUS ; CPU:$C041 PRG:0041 8D 15 40
lda #$90 ; CPU:$C044 PRG:0044 A9 90
sta PPUCTRL ; CPU:$C046 PRG:0046 8D 00 20
sta PpuCtrlShadow ; CPU:$C049 PRG:0049 85 09
lda #$06 ; CPU:$C04B PRG:004B A9 06
sta PpuMaskShadow ; CPU:$C04D PRG:004D 85 0A
; =============================================================================
; MainLoop
; CPU address: $C04F PRG offset: $004F
;
; Global description:
; Foreground frame loop synchronized with work performed by NMI.
;
; Parameters:
; Reset initialization completed.
;
; Returns:
; Does not return.
; =============================================================================
MainLoop:
lda #$00 ; CPU:$C04F PRG:004F A9 00
sta NmiWorkComplete ; CPU:$C051 PRG:0051 85 30
lda GameActiveFlag ; CPU:$C053 PRG:0053 A5 38
beq Flow_C05D ; CPU:$C055 PRG:0055 F0 06
lda GameStateStep ; CPU:$C057 PRG:0057 A5 3E
cmp #$01 ; CPU:$C059 PRG:0059 C9 01
bne Flow_C060 ; CPU:$C05B PRG:005B D0 03
Flow_C05D:
jsr RunAudioEngine ; CPU:$C05D PRG:005D 20 F7 FF
Flow_C060:
jsr UpdateTimers ; CPU:$C060 PRG:0060 20 75 C3
jsr UpdateGameState ; CPU:$C063 PRG:0063 20 AA C0
lda #$01 ; CPU:$C066 PRG:0066 A9 01
sta NmiUpdatesEnabled ; CPU:$C068 PRG:0068 85 32
Flow_C06A:
lda NmiWorkComplete ; CPU:$C06A PRG:006A A5 30
beq Flow_C077 ; CPU:$C06C PRG:006C F0 09
inc FrameCounter ; CPU:$C06E PRG:006E E6 27
lda #$00 ; CPU:$C070 PRG:0070 A9 00
sta NmiUpdatesEnabled ; CPU:$C072 PRG:0072 85 32
jmp MainLoop ; CPU:$C074 PRG:0074 4C 4F C0
Flow_C077:
jsr RollRng ; CPU:$C077 PRG:0077 20 56 C4
jmp Flow_C06A ; CPU:$C07A PRG:007A 4C 6A C0
; =============================================================================
; NmiHandler
; CPU address: $C07D PRG offset: $007D
;
; Global description:
; Vertical-blank NMI handler. Preserves registers, performs OAM DMA and frame-synchronized updates, then returns from interrupt.
;
; Parameters:
; None; entered through the NMI vector.
;
; Returns:
; Returns with RTI; A, X, and Y are preserved by the visible handler.
; =============================================================================
NmiHandler:
pha ; CPU:$C07D PRG:007D 48
txa ; CPU:$C07E PRG:007E 8A
pha ; CPU:$C07F PRG:007F 48
tya ; CPU:$C080 PRG:0080 98
pha ; CPU:$C081 PRG:0081 48
lda #$00 ; CPU:$C082 PRG:0082 A9 00
sta OAMADDR ; CPU:$C084 PRG:0084 8D 03 20
lda #$02 ; CPU:$C087 PRG:0087 A9 02
sta OAMDMA ; CPU:$C089 PRG:0089 8D 14 40
lda NmiUpdatesEnabled ; CPU:$C08C PRG:008C A5 32
beq Flow_C0A0 ; CPU:$C08E PRG:008E F0 10
jsr WritePalette ; CPU:$C090 PRG:0090 20 B5 C1
jsr WritePpuBuffer ; CPU:$C093 PRG:0093 20 EC C2
jsr SetScroll ; CPU:$C096 PRG:0096 20 FD C3
jsr ReadControllers ; CPU:$C099 PRG:0099 20 A4 C2
ldy #$01 ; CPU:$C09C PRG:009C A0 01
sty NmiWorkComplete ; CPU:$C09E PRG:009E 84 30
Flow_C0A0:
lda #$01 ; CPU:$C0A0 PRG:00A0 A9 01
sta NmiTriggerFlag ; CPU:$C0A2 PRG:00A2 85 33
pla ; CPU:$C0A4 PRG:00A4 68
tay ; CPU:$C0A5 PRG:00A5 A8
pla ; CPU:$C0A6 PRG:00A6 68
tax ; CPU:$C0A7 PRG:00A7 AA
pla ; CPU:$C0A8 PRG:00A8 68
rti ; CPU:$C0A9 PRG:00A9 40
; =============================================================================
; UpdateGameState
; CPU address: $C0AA PRG offset: $00AA
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
UpdateGameState:
lda GameActiveFlag ; CPU:$C0AA PRG:00AA A5 38
beq Flow_C0B1 ; CPU:$C0AC PRG:00AC F0 03
jmp Flow_C119 ; CPU:$C0AE PRG:00AE 4C 19 C1
Flow_C0B1:
lda ControllerHeld ; CPU:$C0B1 PRG:00B1 A5 1A
and #$10 ; CPU:$C0B3 PRG:00B3 29 10
beq Flow_C0F8 ; CPU:$C0B5 PRG:00B5 F0 41
ldy StartButtonLatch ; CPU:$C0B7 PRG:00B7 A4 34
bne Flow_C0FC ; CPU:$C0B9 PRG:00B9 D0 41
iny ; CPU:$C0BB PRG:00BB C8
sty StartButtonLatch ; CPU:$C0BC PRG:00BC 84 34
ldy GameState ; CPU:$C0BE PRG:00BE A4 3D
cpy #$07 ; CPU:$C0C0 PRG:00C0 C0 07
beq Flow_C0EA ; CPU:$C0C2 PRG:00C2 F0 26
cpy #$04 ; CPU:$C0C4 PRG:00C4 C0 04
beq Flow_C0CC ; CPU:$C0C6 PRG:00C6 F0 04
cpy #$06 ; CPU:$C0C8 PRG:00C8 C0 06
bne Flow_C0FC ; CPU:$C0CA PRG:00CA D0 30
Flow_C0CC:
ldx #$07 ; CPU:$C0CC PRG:00CC A2 07
Flow_C0CE:
lda Zp20,x ; CPU:$C0CE PRG:00CE B5 20
sta Zp28,x ; CPU:$C0D0 PRG:00D0 95 28
dex ; CPU:$C0D2 PRG:00D2 CA
bpl Flow_C0CE ; CPU:$C0D3 PRG:00D3 10 F9
lda PpuMaskShadow ; CPU:$C0D5 PRG:00D5 A5 0A
and #$0E ; CPU:$C0D7 PRG:00D7 29 0E
sta PPUMASK ; CPU:$C0D9 PRG:00D9 8D 01 20
sta PpuMaskShadow ; CPU:$C0DC PRG:00DC 85 0A
sty Zp3B ; CPU:$C0DE PRG:00DE 84 3B
lda #$07 ; CPU:$C0E0 PRG:00E0 A9 07
sta GameState ; CPU:$C0E2 PRG:00E2 85 3D
jsr MatchRoutine_CBCB ; CPU:$C0E4 PRG:00E4 20 CB CB
jmp Flow_C0F2 ; CPU:$C0E7 PRG:00E7 4C F2 C0
Flow_C0EA:
lda #$14 ; CPU:$C0EA PRG:00EA A9 14
sta Zp21 ; CPU:$C0EC PRG:00EC 85 21
lda #$0A ; CPU:$C0EE PRG:00EE A9 0A
sta GameState ; CPU:$C0F0 PRG:00F0 85 3D
Flow_C0F2:
lda #$80 ; CPU:$C0F2 PRG:00F2 A9 80
sta AudioRequestFlags1 ; CPU:$C0F4 PRG:00F4 85 FD
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $00F6-$00F7.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C0F6:
.byte $D0, $04 ; PRG $00F6 / CPU $C0F6 ; CPU:$C0F6 PRG:00F6 D0 04
Flow_C0F8:
lda #$00 ; CPU:$C0F8 PRG:00F8 A9 00
sta StartButtonLatch ; CPU:$C0FA PRG:00FA 85 34
Flow_C0FC:
lda GameState ; CPU:$C0FC PRG:00FC A5 3D
jsr DispatchInlineAddressTable ; CPU:$C0FE PRG:00FE 20 8B C3
; -----------------------------------------------------------------------------
; Inline address table at CPU $C101; 12 little-endian entries.
; Consumed by DispatchInlineAddressTable; this region is data, not code.
; -----------------------------------------------------------------------------
GameStateHandlerTable:
.word GameState00_InitializeMatch ; CPU:$C101 PRG:0101 0A
.word GameState01_WaitForServe ; CPU:$C103 PRG:0103 ??
.word GameState02_PrepareRally ; CPU:$C105 PRG:0105 ??
.word GameState03_RunRally ; CPU:$C107 PRG:0107 ??
.word GameState04_PointEnded ; CPU:$C109 PRG:0109 ??
.word GameState05_UpdateScore ; CPU:$C10B PRG:010B ??
.word GameState06_AdvanceGame ; CPU:$C10D PRG:010D ??
.word GameState07_PauseOrTransition ; CPU:$C10F PRG:010F ??
.word GameState08_WaitForTimer ; CPU:$C111 PRG:0111 ??
.word GameState09_RestorePreviousState ; CPU:$C113 PRG:0113 ??
.word GameState0A_ResumePreviousState ; CPU:$C115 PRG:0115 ??
.word GameState0B_FinishTransition ; CPU:$C117 PRG:0117 ??
Flow_C119:
lda ControllerHeld ; CPU:$C119 PRG:0119 A5 1A
and #$30 ; CPU:$C11B PRG:011B 29 30
cmp #$10 ; CPU:$C11D PRG:011D C9 10
bne Flow_C134 ; CPU:$C11F PRG:011F D0 13
lda #$00 ; CPU:$C121 PRG:0121 A9 00
sta GameActiveFlag ; CPU:$C123 PRG:0123 85 38
sta GameState ; CPU:$C125 PRG:0125 85 3D
sta PendingStateFlag ; CPU:$C127 PRG:0127 85 43
jsr MatchRoutine_CBCB ; CPU:$C129 PRG:0129 20 CB CB
jsr DisableRendering ; CPU:$C12C PRG:012C 20 0A C4
lda SelectedGameMode ; CPU:$C12F PRG:012F A5 E0
sta GameMode ; CPU:$C131 PRG:0131 85 39
rts ; CPU:$C133 PRG:0133 60
Flow_C134:
ldx GameStateStep ; CPU:$C134 PRG:0134 A6 3E
beq Flow_C159 ; CPU:$C136 PRG:0136 F0 21
cmp #$20 ; CPU:$C138 PRG:0138 C9 20
bne Flow_C15B ; CPU:$C13A PRG:013A D0 1F
cpx #$01 ; CPU:$C13C PRG:013C E0 01
bne Flow_C154 ; CPU:$C13E PRG:013E D0 14
lda StateTransitionFlag ; CPU:$C140 PRG:0140 A5 35
bne Flow_C167 ; CPU:$C142 PRG:0142 D0 23
ldy GameMode ; CPU:$C144 PRG:0144 A4 39
iny ; CPU:$C146 PRG:0146 C8
cpy #$02 ; CPU:$C147 PRG:0147 C0 02
bne Flow_C14D ; CPU:$C149 PRG:0149 D0 02
ldy #$00 ; CPU:$C14B PRG:014B A0 00
Flow_C14D:
sty GameMode ; CPU:$C14D PRG:014D 84 39
sty SelectedGameMode ; CPU:$C14F PRG:014F 84 E0
jmp Flow_C163 ; CPU:$C151 PRG:0151 4C 63 C1
Flow_C154:
jsr MatchRoutine_CBCB ; CPU:$C154 PRG:0154 20 CB CB
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0157-$0158.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C157:
.byte $85, $3E ; PRG $0157 / CPU $C157 ; CPU:$C157 PRG:0157 85 3E
Flow_C159:
beq Flow_C180 ; CPU:$C159 PRG:0159 F0 25
Flow_C15B:
cmp #$00 ; CPU:$C15B PRG:015B C9 00
bne Flow_C163 ; CPU:$C15D PRG:015D D0 04
sta StateTransitionFlag ; CPU:$C15F PRG:015F 85 35
beq Flow_C171 ; CPU:$C161 PRG:0161 F0 0E
Flow_C163:
lda #$01 ; CPU:$C163 PRG:0163 A9 01
sta StateTransitionFlag ; CPU:$C165 PRG:0165 85 35
Flow_C167:
lda StateTimer ; CPU:$C167 PRG:0167 A5 25
cmp #$25 ; CPU:$C169 PRG:0169 C9 25
bcs Flow_C171 ; CPU:$C16B PRG:016B B0 04
lda #$25 ; CPU:$C16D PRG:016D A9 25
sta StateTimer ; CPU:$C16F PRG:016F 85 25
Flow_C171:
cpx #$01 ; CPU:$C171 PRG:0171 E0 01
bne Flow_C180 ; CPU:$C173 PRG:0173 D0 0B
ldy #$88 ; CPU:$C175 PRG:0175 A0 88
lda GameMode ; CPU:$C177 PRG:0177 A5 39
beq Flow_C17D ; CPU:$C179 PRG:0179 F0 02
ldy #$A0 ; CPU:$C17B PRG:017B A0 A0
Flow_C17D:
sty $0200 ; CPU:$C17D PRG:017D 8C 00 02
Flow_C180:
lda GameStateStep ; CPU:$C180 PRG:0180 A5 3E
jsr DispatchInlineAddressTable ; CPU:$C182 PRG:0182 20 8B C3
; -----------------------------------------------------------------------------
; Inline address table at CPU $C185; 7 little-endian entries.
; Consumed by DispatchInlineAddressTable; this region is data, not code.
; -----------------------------------------------------------------------------
GameStateStepHandlerTable:
.word ModeStep00_DrawSelectionScreen ; CPU:$C185 PRG:0185 87 CA
.word ModeStep01_Countdown ; CPU:$C187 PRG:0187 ??
.word ModeStep02_InitializeSelection ; CPU:$C189 PRG:0189 ??
.word ModeStep03_UpdateSelection ; CPU:$C18B PRG:018B ??
.word ModeStep04_ConfirmSelection ; CPU:$C18D PRG:018D ??
.word ModeStep05_StartDemoOrMatch ; CPU:$C18F PRG:018F ??
.word ModeStep06_CompleteSetup ; CPU:$C191 PRG:0191 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0193-$0194.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C193:
.byte $C1, $CB ; PRG $0193 / CPU $C193 ; CPU:$C193 PRG:0193 C1 CB
; =============================================================================
; ClearNametables
; CPU address: $C195 PRG offset: $0195
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
ClearNametables:
lda #$03 ; CPU:$C195 PRG:0195 A9 03
jsr EngineRoutine_C19C ; CPU:$C197 PRG:0197 20 9C C1
; =============================================================================
; ClearOneNametable
; CPU address: $C19A PRG offset: $019A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
ClearOneNametable:
lda #$01 ; CPU:$C19A PRG:019A A9 01
; =============================================================================
; EngineRoutine_C19C
; CPU address: $C19C PRG offset: $019C
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C19C:
sta WorkPtrHi ; CPU:$C19C PRG:019C 85 02
lda #$24 ; CPU:$C19E PRG:019E A9 24
sta WorkPtrLo ; CPU:$C1A0 PRG:01A0 85 01
jmp Flow_C330 ; CPU:$C1A2 PRG:01A2 4C 30 C3
; =============================================================================
; HideAllSprites
; CPU address: $C1A5 PRG offset: $01A5
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
HideAllSprites:
ldy #$02 ; CPU:$C1A5 PRG:01A5 A0 02
sty WorkPtrHi ; CPU:$C1A7 PRG:01A7 84 02
ldy #$00 ; CPU:$C1A9 PRG:01A9 A0 00
sty WorkPtrLo ; CPU:$C1AB PRG:01AB 84 01
lda #$F4 ; CPU:$C1AD PRG:01AD A9 F4
Flow_C1AF:
sta (WorkPtrLo),y ; CPU:$C1AF PRG:01AF 91 01
dey ; CPU:$C1B1 PRG:01B1 88
bne Flow_C1AF ; CPU:$C1B2 PRG:01B2 D0 FB
rts ; CPU:$C1B4 PRG:01B4 60
; =============================================================================
; WritePalette
; CPU address: $C1B5 PRG offset: $01B5
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
WritePalette:
ldy PaletteUpdateMode ; CPU:$C1B5 PRG:01B5 A4 3C
beq Flow_C1DC ; CPU:$C1B7 PRG:01B7 F0 23
dey ; CPU:$C1B9 PRG:01B9 88
beq Flow_C1CD ; CPU:$C1BA PRG:01BA F0 11
dey ; CPU:$C1BC PRG:01BC 88
beq Flow_C1C6 ; CPU:$C1BD PRG:01BD F0 07
lda #$4A ; CPU:$C1BF PRG:01BF A9 4A
ldx #$EE ; CPU:$C1C1 PRG:01C1 A2 EE
jmp Flow_C1D1 ; CPU:$C1C3 PRG:01C3 4C D1 C1
Flow_C1C6:
lda #$32 ; CPU:$C1C6 PRG:01C6 A9 32
ldx #$EE ; CPU:$C1C8 PRG:01C8 A2 EE
jmp Flow_C1D1 ; CPU:$C1CA PRG:01CA 4C D1 C1
Flow_C1CD:
lda #$11 ; CPU:$C1CD PRG:01CD A9 11
ldx #$EE ; CPU:$C1CF PRG:01CF A2 EE
Flow_C1D1:
ldy #$00 ; CPU:$C1D1 PRG:01D1 A0 00
sty PaletteUpdateMode ; CPU:$C1D3 PRG:01D3 84 3C
sta WorkPtrLo ; CPU:$C1D5 PRG:01D5 85 01
stx WorkPtrHi ; CPU:$C1D7 PRG:01D7 86 02
jsr UploadPointedPpuData ; CPU:$C1D9 PRG:01D9 20 F4 C3
Flow_C1DC:
rts ; CPU:$C1DC PRG:01DC 60
; =============================================================================
; EngineRoutine_C1DD
; CPU address: $C1DD PRG offset: $01DD
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C1DD:
lda ObjectDataPointerLo ; CPU:$C1DD PRG:01DD ??
sta MathResultLo ; CPU:$C1DF PRG:01DF ??
lda ObjectDataPointerHi ; CPU:$C1E1 PRG:01E1 ??
sta MathResultHi ; CPU:$C1E3 PRG:01E3 ??
lda ObjectDataOffset ; CPU:$C1E5 PRG:01E5 ??
sta MathOperandLo ; CPU:$C1E7 PRG:01E7 ??
lda #$00 ; CPU:$C1E9 PRG:01E9 ??
sta MathOperandHi ; CPU:$C1EB PRG:01EB ??
jsr Add16BitZp12ToZp14 ; CPU:$C1ED PRG:01ED ??
tay ; CPU:$C1EF PRG:01EF ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $01F1-$01F2.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C1F1:
.byte $AA, $60 ; PRG $01F1 / CPU $C1F1 ; CPU:$C1F1 PRG:01F1 AA 60
; =============================================================================
; EngineRoutine_C1F3
; CPU address: $C1F3 PRG offset: $01F3
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C1F3:
jsr EngineRoutine_C1DD ; CPU:$C1F3 PRG:01F3 ??
Flow_C1F6:
lda (MathResultLo),y ; CPU:$C1F5 PRG:01F5 ??
sta AnimationFrame,x ; CPU:$C1F7 PRG:01F7 ??
iny ; CPU:$C1F9 PRG:01F9 ??
inx ; CPU:$C1FB PRG:01FB ??
cpx #$20 ; CPU:$C1FD PRG:01FD ??
bne Flow_C1F6 ; CPU:$C1FF PRG:01FF ??
lda #$00 ; CPU:$C201 PRG:0201 ??
tay ; CPU:$C203 PRG:0203 ??
sta (MathResultLo),y ; CPU:$C205 PRG:0205 ??
rts ; CPU:$C207 PRG:0207 ??
; =============================================================================
; EngineRoutine_C206
; CPU address: $C206 PRG offset: $0206
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C206:
lda ObjectDataOffset ; CPU:$C209 PRG:0209 ??
clc ; CPU:$C20B PRG:020B ??
adc #$20 ; CPU:$C20D PRG:020D ??
sta ObjectDataOffset ; CPU:$C20F PRG:020F ??
rts ; PRG $020D / CPU $C20D ; CPU:$C211 PRG:0211 ??
; =============================================================================
; EngineRoutine_C20E
; CPU address: $C20E PRG offset: $020E
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C20E:
jsr EngineRoutine_C1DD ; CPU:$C213 PRG:0213 ??
Flow_C211:
lda AnimationFrame,x ; CPU:$C215 PRG:0215 ??
sta (MathResultLo),y ; CPU:$C217 PRG:0217 ??
iny ; CPU:$C219 PRG:0219 ??
inx ; CPU:$C21B PRG:021B ??
cpx #$20 ; CPU:$C21D PRG:021D ??
bne Flow_C211 ; CPU:$C21F PRG:021F ??
FlowEntry_C21B:
rts; PRG $021B / CPU $C21B
; =============================================================================
; EngineRoutine_C21C
; CPU address: $C21C PRG offset: $021C
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C21C:
lda AnimationFrame ; CPU:$C221 PRG:0221 ??
beq FlowEntry_C21B ; CPU:$C223 PRG:0223 ??
lda #$F2 ; CPU:$C225 PRG:0225 ??
sta MathResultHi ; CPU:$C227 PRG:0227 ??
lda #$8C ; CPU:$C229 PRG:0229 ??
sta MathResultLo ; CPU:$C22B PRG:022B ??
lda PlayerPoseId ; CPU:$C22D PRG:022D ??
jsr EngineRoutine_C28E ; CPU:$C22F PRG:022F ??
ldy #$00 ; CPU:$C231 PRG:0231 ??
lda (MathOperandLo),y ; CPU:$C233 PRG:0233 ??
sta MathResultLo ; CPU:$C235 PRG:0235 ??
iny ; CPU:$C237 PRG:0237 ??
lda (MathOperandLo),y ; CPU:$C239 PRG:0239 ??
sta MathResultHi ; CPU:$C23B PRG:023B ??
iny ; CPU:$C23D PRG:023D ??
lda (MathOperandLo),y ; CPU:$C23F PRG:023F ??
sta WorkPtrLo ; CPU:$C241 PRG:0241 ??
iny ; CPU:$C243 PRG:0243 ??
lda (MathOperandLo),y ; CPU:$C245 PRG:0245 ??
sta WorkPtrHi ; CPU:$C247 PRG:0247 ??
iny ; CPU:$C249 PRG:0249 ??
sty Zp0D ; CPU:$C24B PRG:024B ??
ldy #$00 ; CPU:$C24D PRG:024D ??
ldx RacketContactFlags ; CPU:$C24F PRG:024F ??
Flow_C249:
lda (MathResultLo),y ; CPU:$C251 PRG:0251 ??
iny ; CPU:$C253 PRG:0253 ??
clc ; CPU:$C255 PRG:0255 ??
adc RacketTargetX ; CPU:$C257 PRG:0257 ??
adc #$FF ; CPU:$C259 PRG:0259 ??
sta $0200,x ; CPU:$C25B PRG:025B ??
inx ; CPU:$C25D PRG:025D ??
sty Zp0C ; CPU:$C25F PRG:025F ??
ldy Zp0D ; CPU:$C261 PRG:0261 ??
lda (MathOperandLo),y ; CPU:$C263 PRG:0263 ??
sta $0200,x ; CPU:$C265 PRG:0265 ??
inc Zp0D ; CPU:$C267 PRG:0267 ??
inx ; CPU:$C269 PRG:0269 ??
ldy Zp0C ; CPU:$C26B PRG:026B ??
lda PlayerPoseFlags ; CPU:$C26D PRG:026D ??
asl WorkPtrHi ; CPU:$C26F PRG:026F ??
rol WorkPtrLo ; CPU:$C271 PRG:0271 ??
bcc Flow_C26D ; CPU:$C273 PRG:0273 ??
eor #$40 ; CPU:$C275 PRG:0275 ??
Flow_C26D:
sta $0200,x ; CPU:$C277 PRG:0277 ??
inx ; CPU:$C279 PRG:0279 ??
lda (MathResultLo),y ; CPU:$C27B PRG:027B ??
bit PlayerPoseFlags ; CPU:$C27D PRG:027D ??
bvs Flow_C27A ; CPU:$C27F PRG:027F ??
clc ; CPU:$C281 PRG:0281 ??
bcc Flow_C280 ; CPU:$C283 PRG:0283 ??
Flow_C27A:
eor #$FF ; CPU:$C285 PRG:0285 ??
sec ; CPU:$C287 PRG:0287 ??
sbc #$08 ; CPU:$C289 PRG:0289 ??
sec ; CPU:$C28B PRG:028B ??
Flow_C280:
adc RacketTargetY ; CPU:$C28D PRG:028D ??
iny ; CPU:$C28F PRG:028F ??
sta $0200,x ; CPU:$C291 PRG:0291 ??
inx ; CPU:$C293 PRG:0293 ??
lda (MathResultLo),y ; CPU:$C295 PRG:0295 ??
cmp #$AA ; CPU:$C297 PRG:0297 ??
bne Flow_C249 ; CPU:$C299 PRG:0299 ??
rts ; CPU:$C29B PRG:029B ??
; =============================================================================
; EngineRoutine_C28E
; CPU address: $C28E PRG offset: $028E
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C28E:
asl a ; CPU:$C29D PRG:029D ??
sta MathOperandLo ; CPU:$C29F PRG:029F ??
lda #$00 ; CPU:$C2A1 PRG:02A1 ??
tay ; CPU:$C2A3 PRG:02A3 ??
rol a ; CPU:$C2A5 PRG:02A5 ??
sta MathOperandHi ; CPU:$C2A7 PRG:02A7 ??
jsr Add16BitZp12ToZp14 ; CPU:$C2A9 PRG:02A9 CA
lda (MathResultLo),y ; CPU:$C2AA PRG:02AA 8A
sta MathOperandLo ; CPU:$C2AB PRG:02AB 8D 16 40
iny ; CPU:$C2AE PRG:02AE 20 B2 C2
lda (MathResultLo),y ; CPU:$C2B1 PRG:02B1 E8
sta MathOperandHi ; CPU:$C2B2 PRG:02B2 A0 08
rts ; PRG $02A3 / CPU $C2A3 ; CPU:$C2B4 PRG:02B4 48
; =============================================================================
; ReadControllers
; CPU address: $C2A4 PRG offset: $02A4
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
ReadControllers:
ldx #$01 ; CPU:$C2B5 PRG:02B5 BD 16 40
stx JOY1 ; CPU:$C2B8 PRG:02B8 85 01
dex ; CPU:$C2BA PRG:02BA 4A
txa ; CPU:$C2BB PRG:02BB 05 01
sta JOY1 ; CPU:$C2BD PRG:02BD 4A
jsr EngineRoutine_C2B2 ; CPU:$C2BE PRG:02BE 68
inx ; CPU:$C2BF PRG:02BF 2A
; =============================================================================
; EngineRoutine_C2B2
; CPU address: $C2B2 PRG offset: $02B2
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C2B2:
ldy #$08 ; CPU:$C2C0 PRG:02C0 88
Flow_C2B4:
pha ; CPU:$C2C1 PRG:02C1 D0 F1
lda JOY1,x ; CPU:$C2C3 PRG:02C3 86 01
sta WorkPtrLo ; CPU:$C2C5 PRG:02C5 06 01
lsr a ; CPU:$C2C7 PRG:02C7 A6 01
ora WorkPtrLo ; CPU:$C2C9 PRG:02C9 B4 1A
lsr a ; CPU:$C2CB PRG:02CB 84 01
pla ; CPU:$C2CD PRG:02CD 95 1A
rol a ; CPU:$C2CF PRG:02CF 95 1B
dey ; CPU:$C2D1 PRG:02D1 29 FF
bne Flow_C2B4 ; CPU:$C2D3 PRG:02D3 10 08
stx WorkPtrLo ; CPU:$C2D5 PRG:02D5 24 01
asl WorkPtrLo ; CPU:$C2D7 PRG:02D7 10 04
ldx WorkPtrLo ; CPU:$C2D9 PRG:02D9 29 7F
ldy ControllerHeld,x ; CPU:$C2DB PRG:02DB 95 1B
sty WorkPtrLo ; CPU:$C2DD PRG:02DD 85 02
sta ControllerHeld,x ; CPU:$C2DF PRG:02DF 24 02
sta Zp1B,x ; CPU:$C2E1 PRG:02E1 50 08
and #$FF ; CPU:$C2E3 PRG:02E3 24 01
bpl Flow_C2DD ; CPU:$C2E5 PRG:02E5 50 04
bit WorkPtrLo ; CPU:$C2E7 PRG:02E7 29 BF
bpl Flow_C2DD ; CPU:$C2E9 PRG:02E9 95 1B
and #$7F ; CPU:$C2EB PRG:02EB 60
sta Zp1B,x ; CPU:$C2EC PRG:02EC A5 31
Flow_C2DD:
sta WorkPtrHi ; CPU:$C2EE PRG:02EE F0 3F
bit WorkPtrHi ; CPU:$C2F0 PRG:02F0 A9 91
bvc FlowEntry_C2EB ; CPU:$C2F2 PRG:02F2 85 01
bit WorkPtrLo ; CPU:$C2F4 PRG:02F4 A9 05
bvc FlowEntry_C2EB ; CPU:$C2F6 PRG:02F6 85 02
and #$BF ; CPU:$C2F8 PRG:02F8 A5 09
sta Zp1B,x ; CPU:$C2FA PRG:02FA 29 FB
FlowEntry_C2EB:
rts ; PRG $02EB / CPU $C2EB ; CPU:$C2FC PRG:02FC 8D 00 20
; =============================================================================
; WritePpuBuffer
; CPU address: $C2EC PRG offset: $02EC
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
WritePpuBuffer:
lda PpuBufferReady ; CPU:$C2FF PRG:02FF 85 09
beq Flow_C32F ; CPU:$C301 PRG:0301 AE 02 20
lda #$91 ; CPU:$C304 PRG:0304 A0 00
sta WorkPtrLo ; CPU:$C306 PRG:0306 F0 19
lda #$05 ; CPU:$C308 PRG:0308 8D 06 20
sta WorkPtrHi ; CPU:$C30B PRG:030B C8
lda PpuCtrlShadow ; CPU:$C30C PRG:030C B1 01
and #$FB ; CPU:$C30E PRG:030E 8D 06 20
sta PPUCTRL ; CPU:$C311 PRG:0311 C8
sta PpuCtrlShadow ; CPU:$C312 PRG:0312 B1 01
ldx PPUSTATUS ; CPU:$C314 PRG:0314 29 3F
ldy #$00 ; CPU:$C316 PRG:0316 AA
beq Flow_C321 ; CPU:$C317 PRG:0317 C8
Flow_C308:
sta PPUADDR ; CPU:$C318 PRG:0318 B1 01
iny ; CPU:$C31A PRG:031A 8D 07 20
lda (WorkPtrLo),y ; CPU:$C31D PRG:031D CA
sta PPUADDR ; CPU:$C31E PRG:031E D0 F7
iny ; CPU:$C320 PRG:0320 C8
lda (WorkPtrLo),y ; CPU:$C321 PRG:0321 B1 01
and #$3F ; CPU:$C323 PRG:0323 D0 E3
tax ; CPU:$C325 PRG:0325 A9 00
Flow_C317:
iny ; CPU:$C327 PRG:0327 8D 90 05
lda (WorkPtrLo),y ; CPU:$C32A PRG:032A 8D 91 05
sta PPUDATA ; CPU:$C32D PRG:032D 85 31
dex ; CPU:$C32F PRG:032F 60
bne Flow_C317 ; CPU:$C330 PRG:0330 AD 02 20
iny ; CPU:$C333 PRG:0333 A5 09
Flow_C321:
lda (WorkPtrLo),y ; CPU:$C335 PRG:0335 29 FB
bne Flow_C308 ; CPU:$C337 PRG:0337 8D 00 20
lda #$00 ; CPU:$C33A PRG:033A 85 09
sta $0590 ; CPU:$C33C PRG:033C A9 1C
sta $0591 ; CPU:$C33E PRG:033E 18
sta PpuBufferReady ; CPU:$C33F PRG:033F 69 04
Flow_C32F:
rts ; CPU:$C341 PRG:0341 C6 02
Flow_C330:
lda PPUSTATUS ; CPU:$C343 PRG:0343 D0 FA
lda PpuCtrlShadow ; CPU:$C345 PRG:0345 85 03
and #$FB ; CPU:$C347 PRG:0347 8D 06 20
sta PPUCTRL ; CPU:$C34A PRG:034A A9 00
sta PpuCtrlShadow ; CPU:$C34C PRG:034C 8D 06 20
lda #$1C ; CPU:$C34F PRG:034F A2 04
clc ; CPU:$C351 PRG:0351 A0 00
Flow_C33F:
adc #$04 ; CPU:$C353 PRG:0353 A5 01
dec WorkPtrHi ; CPU:$C355 PRG:0355 8D 07 20
bne Flow_C33F ; CPU:$C358 PRG:0358 88
sta Zp03 ; CPU:$C359 PRG:0359 D0 FA
sta PPUADDR ; CPU:$C35B PRG:035B CA
lda #$00 ; CPU:$C35C PRG:035C D0 F7
sta PPUADDR ; CPU:$C35E PRG:035E A5 03
ldx #$04 ; CPU:$C360 PRG:0360 69 03
ldy #$00 ; CPU:$C362 PRG:0362 8D 06 20
lda WorkPtrLo ; CPU:$C365 PRG:0365 A9 C0
Flow_C355:
sta PPUDATA ; CPU:$C367 PRG:0367 8D 06 20
dey ; CPU:$C36A PRG:036A A0 40
bne Flow_C355 ; CPU:$C36C PRG:036C A9 00
dex ; CPU:$C36E PRG:036E 8D 07 20
bne Flow_C355 ; CPU:$C371 PRG:0371 88
lda Zp03 ; CPU:$C372 PRG:0372 D0 FA
adc #$03 ; CPU:$C374 PRG:0374 60
sta PPUADDR ; CPU:$C375 PRG:0375 A2 03
lda #$C0 ; CPU:$C377 PRG:0377 C6 20
sta PPUADDR ; CPU:$C379 PRG:0379 10 06
ldy #$40 ; CPU:$C37B PRG:037B A9 0A
lda #$00 ; CPU:$C37D PRG:037D 85 20
Flow_C36E:
sta PPUDATA ; CPU:$C37F PRG:037F A2 05
dey ; CPU:$C381 PRG:0381 B5 21
bne Flow_C36E ; CPU:$C383 PRG:0383 F0 02
rts ; PRG $0374 / CPU $C374 ; CPU:$C385 PRG:0385 D6 21
; =============================================================================
; UpdateTimers
; CPU address: $C375 PRG offset: $0375
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
UpdateTimers:
ldx #$03 ; CPU:$C387 PRG:0387 CA
dec Zp20 ; CPU:$C388 PRG:0388 10 F7
bpl Flow_C381 ; CPU:$C38A PRG:038A 60
lda #$0A ; CPU:$C38B PRG:038B 0A
sta Zp20 ; CPU:$C38C PRG:038C A8
ldx #$05 ; CPU:$C38D PRG:038D C8
Flow_C381:
lda Zp21,x ; CPU:$C38E PRG:038E 68
beq Flow_C387 ; CPU:$C38F PRG:038F 85 14
dec Zp21,x ; CPU:$C391 PRG:0391 68
Flow_C387:
dex ; CPU:$C392 PRG:0392 85 15
bpl Flow_C381 ; CPU:$C394 PRG:0394 B1 14
rts ; CPU:$C396 PRG:0396 AA
; =============================================================================
; DispatchInlineAddressTable
; CPU address: $C38B PRG offset: $038B
;
; Global description:
; Consumes the caller return address, selects a little-endian target from the inline table following JSR, and jumps indirectly to it.
;
; Parameters:
; A is the table index; an address table immediately follows the caller JSR.
;
; Returns:
; Tail-dispatches to the selected handler.
; =============================================================================
DispatchInlineAddressTable:
asl a ; CPU:$C397 PRG:0397 C8
tay ; CPU:$C398 PRG:0398 B1 14
iny ; CPU:$C39A PRG:039A 85 15
pla ; CPU:$C39C PRG:039C 86 14
sta MathResultLo ; CPU:$C39E PRG:039E 6C 14 00
pla ; CPU:$C3A1 PRG:03A1 ??
sta MathResultHi ; CPU:$C3A3 PRG:03A3 ??
lda (MathResultLo),y ; CPU:$C3A5 PRG:03A5 ??
tax ; CPU:$C3A7 PRG:03A7 ??
iny ; CPU:$C3A9 PRG:03A9 ??
lda (MathResultLo),y ; CPU:$C3AB PRG:03AB ??
sta MathResultHi ; CPU:$C3AD PRG:03AD ??
stx MathResultLo ; CPU:$C3AF PRG:03AF ??
jmp (MathResultLo) ; CPU:$C3B1 PRG:03B1 ??
; =============================================================================
; Add16BitZp12ToZp14
; CPU address: $C3A1 PRG offset: $03A1
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
Add16BitZp12ToZp14:
pha ; CPU:$C3B3 PRG:03B3 ??
clc ; CPU:$C3B5 PRG:03B5 ??
lda MathResultLo ; CPU:$C3B7 PRG:03B7 ??
adc MathOperandLo ; CPU:$C3B9 PRG:03B9 ??
sta MathResultLo ; CPU:$C3BB PRG:03BB C8
lda MathResultHi ; CPU:$C3BC PRG:03BC B1 01
adc MathOperandHi ; CPU:$C3BE PRG:03BE 8D 06 20
sta MathResultHi ; CPU:$C3C1 PRG:03C1 C8
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $03AF-$03B0.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C3AF:
.byte $68, $60 ; PRG $03AF / CPU $C3AF ; CPU:$C3C2 PRG:03C2 68 60
; =============================================================================
; DrawScreenData
; CPU address: $C3B1 PRG offset: $03B1
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
DrawScreenData:
stx WorkPtrLo ; CPU:$C3C4 PRG:03C4 0A
sty WorkPtrHi ; CPU:$C3C5 PRG:03C5 48
jmp UploadPointedPpuData ; CPU:$C3C6 PRG:03C6 A5 09
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $03B8-$03F3.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C3B8:
.byte $8D, $06, $20, $C8, $B1, $01, $8D, $06, $20, $C8, $B1, $01, $0A, $48, $A5, $09 ; PRG $03B8 / CPU $C3B8 ; CPU:$C3C8 PRG:03C8 8D 06 20 C8 B1 01 8D 06 20 C8 B1 01 0A 48 A5 09
.byte $09, $04, $B0, $02, $29, $FB, $8D, $00, $20, $85, $09, $68, $0A, $90, $03, $09 ; PRG $03C8 / CPU $C3C8 ; CPU:$C3D8 PRG:03D8 09 04 B0 02 29 FB 8D 00 20 85 09 68 0A 90 03 09
.byte $02, $C8, $4A, $4A, $AA, $B0, $01, $C8, $B1, $01, $8D, $07, $20, $CA, $D0, $F5 ; PRG $03D8 / CPU $C3D8 ; CPU:$C3E8 PRG:03E8 02 C8 4A 4A AA B0 01 C8 B1 01 8D 07 20 CA D0 F5
.byte $38, $98, $65, $01, $85, $01, $A9, $00, $65, $02, $85, $02 ; PRG $03E8 / CPU $C3E8 ; CPU:$C3F8 PRG:03F8 38 98 65 01 85 01 A9 00 65 02 85 02
; =============================================================================
; UploadPointedPpuData
; CPU address: $C3F4 PRG offset: $03F4
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
UploadPointedPpuData:
ldx PPUSTATUS ; CPU:$C404 PRG:0404 ??
ldy #$00 ; CPU:$C406 PRG:0406 ??
lda (WorkPtrLo),y ; CPU:$C408 PRG:0408 68
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $03FB-$03FC.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C3FB:
.byte $D0, $BB ; PRG $03FB / CPU $C3FB ; CPU:$C409 PRG:0409 D0 BB
; =============================================================================
; SetScroll
; CPU address: $C3FD PRG offset: $03FD
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
SetScroll:
pha ; CPU:$C40B PRG:040B ??
lda Zp1E ; CPU:$C40D PRG:040D A5 0A
sta PPUSCROLL ; CPU:$C40F PRG:040F 29 E7
lda Zp1F ; CPU:$C411 PRG:0411 8D 01 20
sta PPUSCROLL ; CPU:$C414 PRG:0414 60
pla ; CPU:$C415 PRG:0415 ??
rts ; CPU:$C417 PRG:0417 ??
; =============================================================================
; DisableRendering
; CPU address: $C40A PRG offset: $040A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
DisableRendering:
jsr EngineRoutine_C422 ; CPU:$C419 PRG:0419 ??
lda PpuMaskShadow ; CPU:$C41B PRG:041B ??
and #$E7 ; CPU:$C41D PRG:041D ??
sta PPUMASK ; CPU:$C41F PRG:041F ??
rts ; CPU:$C421 PRG:0421 ??
; =============================================================================
; EnableRendering
; CPU address: $C415 PRG offset: $0415
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EnableRendering:
jsr EngineRoutine_C422 ; CPU:$C423 PRG:0423 ??
lda PpuMaskShadow ; CPU:$C425 PRG:0425 ??
ora #$18 ; CPU:$C427 PRG:0427 A5 33
sta PPUMASK ; CPU:$C429 PRG:0429 F0 FC
sta PpuMaskShadow ; CPU:$C42B PRG:042B 60
rts ; CPU:$C42C PRG:042C ??
; =============================================================================
; EngineRoutine_C422
; CPU address: $C422 PRG offset: $0422
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C422:
lda #$00 ; CPU:$C42E PRG:042E ??
sta NmiTriggerFlag ; CPU:$C430 PRG:0430 ??
nop ; CPU:$C432 PRG:0432 ??
lda NmiTriggerFlag ; CPU:$C434 PRG:0434 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0429-$042A.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C429:
.byte $F0, $FC ; PRG $0429 / CPU $C429 ; CPU:$C436 PRG:0436 F0 FC
GameState07_PauseOrTransition:
rts ; CPU:$C438 PRG:0438 ??
; =============================================================================
; EngineRoutine_C42C
; CPU address: $C42C PRG offset: $042C
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C42C:
lda PpuMaskShadow ; CPU:$C43A PRG:043A ??
and #$EF ; CPU:$C43C PRG:043C ??
sta PPUMASK ; CPU:$C43E PRG:043E ??
sta PpuMaskShadow ; CPU:$C440 PRG:0440 ??
rts ; CPU:$C442 PRG:0442 ??
; =============================================================================
; EngineRoutine_C436
; CPU address: $C436 PRG offset: $0436
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C436:
lda PpuMaskShadow ; CPU:$C444 PRG:0444 ??
ora #$10 ; CPU:$C446 PRG:0446 ??
sta PPUMASK ; CPU:$C448 PRG:0448 ??
sta PpuMaskShadow ; CPU:$C44A PRG:044A ??
rts ; CPU:$C44C PRG:044C ??
; =============================================================================
; WriteMetaspriteToOam
; CPU address: $C440 PRG offset: $0440
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
WriteMetaspriteToOam:
lda #$00 ; CPU:$C44E PRG:044E ??
sta Zp04 ; CPU:$C450 PRG:0450 ??
lda #$02 ; CPU:$C452 PRG:0452 ??
sta Zp05 ; CPU:$C454 PRG:0454 ??
ldy Zp03 ; CPU:$C456 PRG:0456 AD 00 05
dey ; CPU:$C459 PRG:0459 18
ldx Zp03 ; CPU:$C45A PRG:045A 69 0F
Flow_C44D:
lda (WorkPtrLo),y ; CPU:$C45C PRG:045C 8D 00 05
sta (Zp04),y ; CPU:$C45F PRG:045F AD 01 05
dey ; CPU:$C462 PRG:0462 69 11
dex ; CPU:$C464 PRG:0464 8D 01 05
bne Flow_C44D ; CPU:$C467 PRG:0467 4D 00 05
rts ; CPU:$C46A PRG:046A 18
; =============================================================================
; RollRng
; CPU address: $C456 PRG offset: $0456
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RollRng:
lda $0500 ; CPU:$C46B PRG:046B 10 01
clc ; CPU:$C46D PRG:046D 38
adc #$0F ; CPU:$C46E PRG:046E 6E 02 05
sta $0500 ; CPU:$C471 PRG:0471 6E 03 05
lda $0501 ; CPU:$C474 PRG:0474 AD 00 05
adc #$11 ; CPU:$C477 PRG:0477 60
sta $0501 ; CPU:$C478 PRG:0478 ??
eor $0500 ; CPU:$C47A PRG:047A ??
clc ; CPU:$C47C PRG:047C ??
bpl Flow_C46E ; CPU:$C47E PRG:047E ??
sec ; CPU:$C480 PRG:0480 ??
Flow_C46E:
ror $0502 ; CPU:$C482 PRG:0482 ??
ror $0503 ; CPU:$C484 PRG:0484 ??
lda $0500 ; CPU:$C486 PRG:0486 ??
rts ; CPU:$C488 PRG:0488 ??
; =============================================================================
; EngineRoutine_C478
; CPU address: $C478 PRG offset: $0478
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C478:
lda #$01 ; CPU:$C48A PRG:048A ??
sta Zp0E ; CPU:$C48C PRG:048C ??
ldy BallYSubpixel ; CPU:$C48E PRG:048E ??
ldx BallYPosition ; CPU:$C490 PRG:0490 ??
lda #$79 ; CPU:$C492 PRG:0492 ??
jsr Multiply8By16 ; CPU:$C494 PRG:0494 ??
sty MathResultLo ; CPU:$C496 PRG:0496 ??
stx MathResultHi ; CPU:$C498 PRG:0498 ??
ldy BallYSubpixel ; CPU:$C49A PRG:049A ??
ldx BallYPosition ; CPU:$C49C PRG:049C ??
lda #$C7 ; CPU:$C49E PRG:049E ??
jsr Multiply8By16 ; CPU:$C4A0 PRG:04A0 ??
sty MathOperandLo ; CPU:$C4A2 PRG:04A2 ??
stx MathOperandHi ; CPU:$C4A4 PRG:04A4 ??
jmp Flow_C4A5 ; CPU:$C4A6 PRG:04A6 ??
; =============================================================================
; EngineRoutine_C499
; CPU address: $C499 PRG offset: $0499
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C499:
lda #$00 ; CPU:$C4A8 PRG:04A8 ??
sta Zp0E ; CPU:$C4AA PRG:04AA ??
sta MathResultLo ; CPU:$C4AC PRG:04AC ??
sta MathResultHi ; CPU:$C4AE PRG:04AE ??
sta MathOperandLo ; CPU:$C4B0 PRG:04B0 ??
sta MathOperandHi ; CPU:$C4B2 PRG:04B2 ??
Flow_C4A5:
ldy Player2YSubpixel ; CPU:$C4B4 PRG:04B4 ??
sty AimMagnitude ; CPU:$C4B6 PRG:04B6 ??
lda Player2YPosition ; CPU:$C4B8 PRG:04B8 ??
sec ; CPU:$C4BA PRG:04BA ??
sbc #$10 ; CPU:$C4BC PRG:04BC ??
sta AimDirection ; CPU:$C4BE PRG:04BE ??
tax ; CPU:$C4C0 PRG:04C0 ??
lda #$94 ; CPU:$C4C2 PRG:04C2 ??
jsr Multiply8By16 ; CPU:$C4C4 PRG:04C4 ??
clc ; CPU:$C4C6 PRG:04C6 ??
tya ; CPU:$C4C8 PRG:04C8 ??
adc #$71 ; CPU:$C4CA PRG:04CA ??
tay ; CPU:$C4CC PRG:04CC ??
txa ; CPU:$C4CE PRG:04CE ??
adc #$0E ; CPU:$C4D0 PRG:04D0 ??
tax ; CPU:$C4D2 PRG:04D2 ??
tya ; CPU:$C4D4 PRG:04D4 ??
sec ; CPU:$C4D6 PRG:04D6 ??
sbc MathResultLo ; CPU:$C4D8 PRG:04D8 ??
sta MathVectorXHi ; CPU:$C4DA PRG:04DA ??
txa ; CPU:$C4DC PRG:04DC ??
sbc MathResultHi ; CPU:$C4DE PRG:04DE ??
cmp #$50 ; CPU:$C4E0 PRG:04E0 ??
ror a ; CPU:$C4E2 PRG:04E2 ??
sta MathVectorXLo ; CPU:$C4E4 PRG:04E4 ??
ror MathVectorXHi ; CPU:$C4E6 PRG:04E6 ??
ldy AimMagnitude ; CPU:$C4E8 PRG:04E8 ??
ldx AimDirection ; CPU:$C4EA PRG:04EA ??
lda #$A0 ; CPU:$C4EC PRG:04EC ??
jsr Multiply8By16 ; CPU:$C4EE PRG:04EE ??
clc ; CPU:$C4F0 PRG:04F0 ??
tya ; CPU:$C4F2 PRG:04F2 ??
adc MathOperandLo ; CPU:$C4F4 PRG:04F4 ??
tay ; CPU:$C4F6 PRG:04F6 ??
txa ; CPU:$C4F8 PRG:04F8 ??
adc MathOperandHi ; CPU:$C4FA PRG:04FA ??
tax ; CPU:$C4FC PRG:04FC ??
jsr EngineRoutine_C5F8 ; CPU:$C4FE PRG:04FE ??
sbc #$00 ; CPU:$C500 PRG:0500 ??
eor #$7F ; CPU:$C502 PRG:0502 ??
sta RacketTargetX ; CPU:$C504 PRG:0504 ??
lda Zp0E ; CPU:$C506 PRG:0506 ??
beq Flow_C4F6 ; CPU:$C508 PRG:0508 ??
lda Player2YPosition ; CPU:$C50A PRG:050A ??
cmp #$06 ; CPU:$C50C PRG:050C ??
bcs Flow_C504 ; CPU:$C50E PRG:050E ??
bcc Flow_C500 ; CPU:$C510 PRG:0510 ??
Flow_C4F6:
lda Player2YSubpixel ; CPU:$C512 PRG:0512 ??
cmp #$40 ; CPU:$C514 PRG:0514 ??
lda Player2YPosition ; CPU:$C516 PRG:0516 ??
sbc #$08 ; CPU:$C518 PRG:0518 ??
bcs Flow_C504 ; CPU:$C51A PRG:051A ??
Flow_C500:
ldx #$FF ; CPU:$C51C PRG:051C ??
stx RacketTargetX ; CPU:$C51E PRG:051E ??
Flow_C504:
ldy Player1YSubpixel ; CPU:$C520 PRG:0520 ??
lda Player1YPosition ; CPU:$C522 PRG:0522 ??
sec ; CPU:$C524 PRG:0524 ??
sbc #$10 ; CPU:$C526 PRG:0526 ??
tax ; CPU:$C528 PRG:0528 ??
jsr EngineRoutine_C5F8 ; CPU:$C52A PRG:052A ??
eor #$80 ; CPU:$C52C PRG:052C ??
sta RacketTargetY ; CPU:$C52E PRG:052E ??
rts ; CPU:$C530 PRG:0530 ??
; =============================================================================
; IntegrateObjectMotion
; CPU address: $C514 PRG offset: $0514
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
IntegrateObjectMotion:
lda #$0F ; CPU:$C532 PRG:0532 ??
Flow_C516:
sec ; CPU:$C534 PRG:0534 ??
sbc #$05 ; CPU:$C536 PRG:0536 ??
tax ; CPU:$C538 PRG:0538 ??
ldy #$00 ; CPU:$C53A PRG:053A ??
lda Player1MotionControl,x ; CPU:$C53C PRG:053C ??
asl a ; CPU:$C53E PRG:053E ??
bcc Flow_C525 ; CPU:$C540 PRG:0540 ??
dec Player1XPosition,x ; CPU:$C542 PRG:0542 ??
dec Player1XPosition,x ; CPU:$C544 PRG:0544 ??
Flow_C525:
asl a ; CPU:$C546 PRG:0546 ??
bcc Flow_C52A ; CPU:$C548 PRG:0548 ??
inc Player1XPosition,x ; CPU:$C54A PRG:054A ??
Flow_C52A:
clc ; CPU:$C54C PRG:054C ??
adc Player1XSubpixel,x ; CPU:$C54E PRG:054E ??
sta Player1XSubpixel,x ; CPU:$C550 PRG:0550 ??
tya ; CPU:$C552 PRG:0552 ??
adc Player1XPosition,x ; CPU:$C554 PRG:0554 ??
sta Player1XPosition,x ; CPU:$C556 PRG:0556 ??
bpl Flow_C537 ; CPU:$C558 PRG:0558 ??
dey ; CPU:$C55A PRG:055A ??
Flow_C537:
asl MathResultHi ; CPU:$C55C PRG:055C ??
adc Player1YSubpixel,x ; CPU:$C55E PRG:055E ??
sta Player1YSubpixel,x ; CPU:$C560 PRG:0560 ??
tya ; CPU:$C562 PRG:0562 ??
adc Player1YPosition,x ; CPU:$C564 PRG:0564 ??
sta Player1YPosition,x ; CPU:$C566 PRG:0566 ??
txa ; CPU:$C568 PRG:0568 ??
bne Flow_C516 ; CPU:$C56A PRG:056A ??
lda BallYPosition ; CPU:$C56C PRG:056C ??
bpl Flow_C5B7 ; CPU:$C56E PRG:056E ??
inc RallyPhase ; CPU:$C570 PRG:0570 ??
lda RallyPhase ; CPU:$C572 PRG:0572 ??
cmp #$03 ; CPU:$C574 PRG:0574 ??
bcs Flow_C559 ; CPU:$C576 PRG:0576 ??
lda #$01 ; CPU:$C578 PRG:0578 ??
sta AudioRequestFlags3 ; CPU:$C57A PRG:057A ??
lda #$00 ; CPU:$C57C PRG:057C ??
sta BallBounceState ; CPU:$C57E PRG:057E ??
Flow_C559:
lda #$0A ; CPU:$C580 PRG:0580 ??
Flow_C55B:
sec ; CPU:$C582 PRG:0582 ??
sbc #$05 ; CPU:$C584 PRG:0584 ??
tax ; CPU:$C586 PRG:0586 ??
lda Player1XPosition,x ; CPU:$C588 PRG:0588 ??
cmp #$80 ; CPU:$C58A PRG:058A ??
ror a ; CPU:$C58C PRG:058C ??
sta Player1XPosition,x ; CPU:$C58E PRG:058E ??
ror Player1XSubpixel,x ; CPU:$C590 PRG:0590 ??
cmp #$80 ; CPU:$C592 PRG:0592 ??
ror a ; CPU:$C594 PRG:0594 ??
tay ; CPU:$C596 PRG:0596 ??
lda Player1XSubpixel,x ; CPU:$C598 PRG:0598 ??
ror a ; CPU:$C59A PRG:059A ??
clc ; CPU:$C59C PRG:059C ??
adc Player1XSubpixel,x ; CPU:$C59E PRG:059E ??
sta Player1XSubpixel,x ; CPU:$C5A0 PRG:05A0 ??
tya ; CPU:$C5A2 PRG:05A2 ??
adc Player1XPosition,x ; CPU:$C5A4 PRG:05A4 ??
sta Player1XPosition,x ; CPU:$C5A6 PRG:05A6 ??
txa ; CPU:$C5A8 PRG:05A8 ??
bne Flow_C55B ; CPU:$C5AA PRG:05AA ??
lda BallXPosition ; CPU:$C5AC PRG:05AC ??
cmp #$80 ; CPU:$C5AE PRG:05AE ??
ror a ; CPU:$C5B0 PRG:05B0 ??
sta BallXPosition ; CPU:$C5B2 PRG:05B2 ??
ror BallXSubpixel ; CPU:$C5B4 PRG:05B4 ??
ldy BallXSubpixel ; CPU:$C5B6 PRG:05B6 ??
sty Zp10 ; CPU:$C5B8 PRG:05B8 ??
cmp #$80 ; CPU:$C5BA PRG:05BA ??
ror a ; CPU:$C5BC PRG:05BC ??
ror Zp10 ; CPU:$C5BE PRG:05BE ??
cmp #$80 ; CPU:$C5C0 PRG:05C0 ??
ror a ; CPU:$C5C2 PRG:05C2 ??
tay ; CPU:$C5C4 PRG:05C4 ??
lda Zp10 ; CPU:$C5C6 PRG:05C6 ??
ror a ; CPU:$C5C8 PRG:05C8 ??
clc ; CPU:$C5CA PRG:05CA ??
adc BallXSubpixel ; CPU:$C5CC PRG:05CC ??
sta BallXSubpixel ; CPU:$C5CE PRG:05CE ??
tya ; CPU:$C5D0 PRG:05D0 ??
adc BallXPosition ; CPU:$C5D2 PRG:05D2 ??
sta BallXPosition ; CPU:$C5D4 PRG:05D4 ??
ldy #$00 ; CPU:$C5D6 PRG:05D6 ??
tya ; CPU:$C5D8 PRG:05D8 ??
sec ; CPU:$C5DA PRG:05DA ??
sbc BallYSubpixel ; CPU:$C5DC PRG:05DC ??
sta BallYSubpixel ; CPU:$C5DE PRG:05DE ??
tya ; CPU:$C5E0 PRG:05E0 ??
sbc BallYPosition ; CPU:$C5E2 PRG:05E2 ??
sta BallYPosition ; CPU:$C5E4 PRG:05E4 ??
tya ; CPU:$C5E6 PRG:05E6 ??
sec ; CPU:$C5E8 PRG:05E8 ??
sbc BallXSubpixel ; CPU:$C5EA PRG:05EA ??
sta BallXSubpixel ; CPU:$C5EC PRG:05EC ??
tya ; CPU:$C5EE PRG:05EE ??
sbc BallXPosition ; CPU:$C5F0 PRG:05F0 ??
sta BallXPosition ; CPU:$C5F2 PRG:05F2 ??
Flow_C5B7:
lda BallYSubpixel ; CPU:$C5F4 PRG:05F4 ??
sta BallHeight ; CPU:$C5F6 PRG:05F6 ??
lda BallYPosition ; CPU:$C5F8 PRG:05F8 ??
lsr a ; CPU:$C5FA PRG:05FA ??
ror BallHeight ; CPU:$C5FC PRG:05FC ??
lsr a ; CPU:$C5FE PRG:05FE ??
ror BallHeight ; CPU:$C600 PRG:0600 ??
cmp #$00 ; CPU:$C602 PRG:0602 ??
beq Flow_C5CB ; CPU:$C604 PRG:0604 ??
lda #$FF ; CPU:$C606 PRG:0606 ??
sta BallHeight ; CPU:$C608 PRG:0608 ??
Flow_C5CB:
rts ; CPU:$C60A PRG:060A ??
; =============================================================================
; Multiply8By16
; CPU address: $C5CC PRG offset: $05CC
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
Multiply8By16:
sty Zp10 ; CPU:$C60C PRG:060C ??
stx Zp11 ; CPU:$C60E PRG:060E ??
sta Zp16 ; CPU:$C610 PRG:0610 ??
lda #$00 ; CPU:$C612 PRG:0612 ??
sta Zp17 ; CPU:$C614 PRG:0614 ??
sta Zp18 ; CPU:$C616 PRG:0616 ??
ldx #$08 ; CPU:$C618 PRG:0618 ??
Flow_C5DA:
ror Zp16 ; CPU:$C61A PRG:061A ??
bcc Flow_C5EB ; CPU:$C61C PRG:061C ??
clc ; CPU:$C61E PRG:061E ??
lda Zp17 ; CPU:$C620 PRG:0620 ??
adc Zp10 ; CPU:$C622 PRG:0622 ??
sta Zp17 ; CPU:$C624 PRG:0624 ??
lda Zp18 ; CPU:$C626 PRG:0626 ??
adc Zp11 ; CPU:$C628 PRG:0628 ??
sta Zp18 ; CPU:$C62A PRG:062A ??
Flow_C5EB:
asl a ; CPU:$C62C PRG:062C ??
ror Zp18 ; CPU:$C62E PRG:062E ??
ror Zp17 ; CPU:$C630 PRG:0630 ??
dex ; CPU:$C632 PRG:0632 ??
bne Flow_C5DA ; CPU:$C634 PRG:0634 ??
ldy Zp17 ; CPU:$C636 PRG:0636 ??
ldx Zp18 ; CPU:$C638 PRG:0638 ??
rts ; CPU:$C63A PRG:063A ??
; =============================================================================
; EngineRoutine_C5F8
; CPU address: $C5F8 PRG offset: $05F8
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C5F8:
sty Zp17 ; CPU:$C63C PRG:063C ??
stx Zp18 ; CPU:$C63E PRG:063E ??
lda #$00 ; CPU:$C640 PRG:0640 ??
sta Zp16 ; CPU:$C642 PRG:0642 ??
ldx #$07 ; CPU:$C644 PRG:0644 ??
clc ; CPU:$C646 PRG:0646 ??
lda Zp17 ; CPU:$C648 PRG:0648 ??
adc MathVectorXHi ; CPU:$C64A PRG:064A ??
tay ; CPU:$C64C PRG:064C ??
lda Zp18 ; CPU:$C64E PRG:064E ??
adc MathVectorXLo ; CPU:$C650 PRG:0650 ??
Flow_C60C:
bcc Flow_C612 ; CPU:$C652 PRG:0652 ??
sty Zp17 ; CPU:$C654 PRG:0654 ??
sta Zp18 ; CPU:$C656 PRG:0656 ??
Flow_C612:
rol Zp16 ; CPU:$C658 PRG:0658 ??
rol Zp17 ; CPU:$C65A PRG:065A ??
rol Zp18 ; CPU:$C65C PRG:065C ??
sec ; CPU:$C65E PRG:065E ??
lda Zp17 ; CPU:$C660 PRG:0660 ??
sbc MathVectorXHi ; CPU:$C662 PRG:0662 ??
tay ; CPU:$C664 PRG:0664 ??
lda Zp18 ; CPU:$C666 PRG:0666 ??
sbc MathVectorXLo ; CPU:$C668 PRG:0668 ??
dex ; CPU:$C66A PRG:066A ??
bpl Flow_C60C ; CPU:$C66C PRG:066C ??
bcs Flow_C628 ; CPU:$C66E PRG:066E ??
dex ; CPU:$C670 PRG:0670 ??
Flow_C628:
lda Zp16 ; CPU:$C672 PRG:0672 ??
rts ; CPU:$C674 PRG:0674 ??
; =============================================================================
; EngineRoutine_C62B
; CPU address: $C62B PRG offset: $062B
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C62B:
lda #$00 ; CPU:$C676 PRG:0676 ??
sta ProjectedXLo ; CPU:$C678 PRG:0678 ??
sta ProjectedXHi ; CPU:$C67A PRG:067A ??
sta ProjectedYLo ; CPU:$C67C PRG:067C ??
sta ProjectedYHi ; CPU:$C67E PRG:067E ??
sta MathCarryByte ; CPU:$C680 PRG:0680 ??
ldx #$07 ; CPU:$C682 PRG:0682 ??
Flow_C639:
ror MathVectorYHi ; CPU:$C684 PRG:0684 ??
bcc Flow_C64C ; CPU:$C686 PRG:0686 ??
clc ; CPU:$C688 PRG:0688 ??
ldy #$02 ; CPU:$C68A PRG:068A ??
Flow_C640:
lda a:ProjectedXLo,y ; CPU:$C68C PRG:068C ??
adc a:MathCarryByte,y ; CPU:$C68E PRG:068E ??
sta a:ProjectedXLo,y ; CPU:$C690 PRG:0690 ??
dey ; CPU:$C692 PRG:0692 ??
bpl Flow_C640 ; CPU:$C694 PRG:0694 ??
Flow_C64C:
asl MathVectorXLo ; CPU:$C696 PRG:0696 ??
rol MathVectorXHi ; CPU:$C698 PRG:0698 ??
rol MathCarryByte ; CPU:$C69A PRG:069A ??
dex ; CPU:$C69C PRG:069C ??
bpl Flow_C639 ; CPU:$C69E PRG:069E ??
lda MathVectorXHi ; CPU:$C6A0 PRG:06A0 ??
sta MathVectorXLo ; CPU:$C6A2 PRG:06A2 ??
lda MathCarryByte ; CPU:$C6A4 PRG:06A4 ??
sta MathVectorXHi ; CPU:$C6A6 PRG:06A6 ??
lda #$00 ; CPU:$C6A8 PRG:06A8 ??
sta MathCarryByte ; CPU:$C6AA PRG:06AA ??
ldx #$07 ; CPU:$C6AC PRG:06AC ??
Flow_C663:
ror MathVectorYLo ; CPU:$C6AE PRG:06AE ??
bcc Flow_C67A ; CPU:$C6B0 PRG:06B0 ??
clc ; CPU:$C6B2 PRG:06B2 ??
ldy #$02 ; CPU:$C6B4 PRG:06B4 ??
Flow_C66A:
lda a:ProjectedXHi,y ; CPU:$C6B6 PRG:06B6 ??
adc a:MathCarryByte,y ; CPU:$C6B8 PRG:06B8 ??
sta a:ProjectedXHi,y ; CPU:$C6BA PRG:06BA ??
dey ; CPU:$C6BC PRG:06BC ??
bpl Flow_C66A ; CPU:$C6BE PRG:06BE ??
bcc Flow_C67A ; CPU:$C6C0 PRG:06C0 ??
inc ProjectedXLo ; CPU:$C6C2 PRG:06C2 ??
Flow_C67A:
asl MathVectorXLo ; CPU:$C6C4 PRG:06C4 ??
rol MathVectorXHi ; CPU:$C6C6 PRG:06C6 ??
rol MathCarryByte ; CPU:$C6C8 PRG:06C8 ??
dex ; CPU:$C6CA PRG:06CA ??
bpl Flow_C663 ; CPU:$C6CC PRG:06CC ??
rts ; CPU:$C6CE PRG:06CE ??
; =============================================================================
; EngineRoutine_C684
; CPU address: $C684 PRG offset: $0684
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C684:
lda #$00 ; CPU:$C6D0 PRG:06D0 ??
sta MathVectorYHi ; CPU:$C6D2 PRG:06D2 ??
sta MathVectorYLo ; CPU:$C6D4 PRG:06D4 ??
sta MathVectorXResult ; CPU:$C6D6 PRG:06D6 ??
ldx #$07 ; CPU:$C6D8 PRG:06D8 ??
Flow_C68E:
lsr MathVectorXHi ; CPU:$C6DA PRG:06DA ??
ror MathVectorXLo ; CPU:$C6DC PRG:06DC ??
ror MathVectorXResult ; CPU:$C6DE PRG:06DE ??
sec ; CPU:$C6E0 PRG:06E0 ??
ldy #$02 ; CPU:$C6E2 PRG:06E2 ??
Flow_C697:
lda a:ProjectedXLo,y ; CPU:$C6E4 PRG:06E4 ??
sbc a:MathVectorXHi,y ; CPU:$C6E6 PRG:06E6 ??
sta $00A1,y ; CPU:$C6E8 PRG:06E8 ??
dey ; CPU:$C6EA PRG:06EA ??
bpl Flow_C697 ; CPU:$C6EC PRG:06EC ??
bcc Flow_C6B1 ; CPU:$C6EE PRG:06EE ??
ldy #$02 ; CPU:$C6F0 PRG:06F0 ??
Flow_C6A7:
lda $00A1,y ; CPU:$C6F2 PRG:06F2 ??
sta a:ProjectedXLo,y ; CPU:$C6F4 PRG:06F4 ??
dey ; CPU:$C6F6 PRG:06F6 ??
bpl Flow_C6A7 ; CPU:$C6F8 PRG:06F8 ??
sec ; CPU:$C6FA PRG:06FA ??
Flow_C6B1:
rol MathVectorYHi ; CPU:$C6FC PRG:06FC ??
dex ; CPU:$C6FE PRG:06FE ??
bpl Flow_C68E ; CPU:$C700 PRG:0700 ??
lda MathVectorXLo ; CPU:$C702 PRG:0702 ??
sta MathVectorXHi ; CPU:$C704 PRG:0704 ??
lda MathVectorXResult ; CPU:$C706 PRG:0706 ??
sta MathVectorXLo ; CPU:$C708 PRG:0708 ??
lda #$00 ; CPU:$C70A PRG:070A ??
sta MathVectorXResult ; CPU:$C70C PRG:070C ??
ldx #$07 ; CPU:$C70E PRG:070E ??
Flow_C6C4:
lsr MathVectorXHi ; CPU:$C710 PRG:0710 ??
ror MathVectorXLo ; CPU:$C712 PRG:0712 ??
ror MathVectorXResult ; CPU:$C714 PRG:0714 ??
sec ; CPU:$C716 PRG:0716 ??
ldy #$02 ; CPU:$C718 PRG:0718 ??
Flow_C6CD:
lda a:ProjectedXHi,y ; CPU:$C71A PRG:071A ??
sbc a:MathVectorXHi,y ; CPU:$C71C PRG:071C ??
sta $00A1,y ; CPU:$C71E PRG:071E ??
dey ; CPU:$C720 PRG:0720 ??
bpl Flow_C6CD ; CPU:$C722 PRG:0722 ??
bcc Flow_C6E7 ; CPU:$C724 PRG:0724 ??
ldy #$02 ; CPU:$C726 PRG:0726 ??
Flow_C6DD:
lda $00A1,y ; CPU:$C728 PRG:0728 ??
sta a:ProjectedXHi,y ; CPU:$C72A PRG:072A ??
dey ; CPU:$C72C PRG:072C ??
bpl Flow_C6DD ; CPU:$C72E PRG:072E ??
sec ; CPU:$C730 PRG:0730 ??
Flow_C6E7:
rol MathVectorYLo ; CPU:$C732 PRG:0732 ??
dex ; CPU:$C734 PRG:0734 ??
bpl Flow_C6C4 ; CPU:$C736 PRG:0736 ??
rts ; CPU:$C738 PRG:0738 ??
; =============================================================================
; EngineRoutine_C6ED
; CPU address: $C6ED PRG offset: $06ED
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C6ED:
lda MathVectorYHi ; CPU:$C73A PRG:073A ??
sta SignedAimDelta ; CPU:$C73C PRG:073C ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $06F1-$06F2.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C6F1:
.byte $10, $11 ; PRG $06F1 / CPU $C6F1 ; CPU:$C73E PRG:073E 10 11
; =============================================================================
; EngineRoutine_C6F3
; CPU address: $C6F3 PRG offset: $06F3
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
EngineRoutine_C6F3:
lda MathVectorYLo ; CPU:$C740 PRG:0740 ??
eor #$FF ; CPU:$C742 PRG:0742 ??
sec ; CPU:$C744 PRG:0744 ??
adc #$00 ; CPU:$C746 PRG:0746 ??
sta MathVectorYLo ; CPU:$C748 PRG:0748 ??
lda MathVectorYHi ; CPU:$C74A PRG:074A ??
eor #$FF ; CPU:$C74C PRG:074C ??
adc #$00 ; CPU:$C74E PRG:074E ??
sta MathVectorYHi ; CPU:$C750 PRG:0750 ??
rts ; CPU:$C752 PRG:0752 ??
; =============================================================================
; MatchRoutine_C705
; CPU address: $C705 PRG offset: $0705
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_C705:
lda SignedAimDelta ; CPU:$C754 PRG:0754 ??
bmi EngineRoutine_C6F3 ; CPU:$C756 PRG:0756 ??
rts ; PRG $0709 / CPU $C709 ; CPU:$C758 PRG:0758 ??
GameState00_InitializeMatch:
ldy PendingStateFlag ; CPU:$C75A PRG:075A ??
bne Flow_C71B ; CPU:$C75C PRG:075C ??
jsr ClearOneNametable ; CPU:$C75E PRG:075E ??
jsr RenderRoutine_ED41 ; CPU:$C760 PRG:0760 ??
lda #$00 ; CPU:$C762 PRG:0762 ??
sta PaletteUpdateMode ; CPU:$C764 PRG:0764 ??
inc PendingStateFlag ; CPU:$C766 PRG:0766 ??
rts ; CPU:$C768 PRG:0768 ??
Flow_C71B:
dey ; CPU:$C76A PRG:076A ??
bne Flow_C739 ; CPU:$C76C PRG:076C ??
jsr RenderRoutine_ED4D ; CPU:$C76E PRG:076E ??
jsr HideAllSprites ; CPU:$C770 PRG:0770 ??
lda #$88 ; CPU:$C772 PRG:0772 ??
sta WorkPtrLo ; CPU:$C774 PRG:0774 ??
lda #$F2 ; CPU:$C776 PRG:0776 ??
sta WorkPtrHi ; CPU:$C778 PRG:0778 ??
lda #$04 ; CPU:$C77A PRG:077A ??
sta Zp03 ; CPU:$C77C PRG:077C ??
jsr WriteMetaspriteToOam ; CPU:$C77E PRG:077E ??
jsr MatchRoutine_C77A ; CPU:$C780 PRG:0780 ??
inc PendingStateFlag ; CPU:$C782 PRG:0782 ??
rts ; CPU:$C784 PRG:0784 ??
Flow_C739:
dey ; CPU:$C786 PRG:0786 ??
bne Flow_C742 ; CPU:$C788 PRG:0788 ??
jsr EnableRendering ; CPU:$C78A PRG:078A ??
inc PendingStateFlag ; CPU:$C78C PRG:078C ??
rts ; CPU:$C78E PRG:078E ??
Flow_C742:
dey ; CPU:$C790 PRG:0790 ??
bne Flow_C752 ; CPU:$C792 PRG:0792 ??
lda ControllerHeld ; CPU:$C794 PRG:0794 ??
and #$10 ; CPU:$C796 PRG:0796 ??
bne Flow_C751 ; CPU:$C798 PRG:0798 ??
lda #$01 ; CPU:$C79A PRG:079A ??
sta StateTransitionFlag ; CPU:$C79C PRG:079C ??
inc PendingStateFlag ; CPU:$C79E PRG:079E ??
Flow_C751:
rts ; CPU:$C7A0 PRG:07A0 ??
Flow_C752:
lda ControllerHeld ; CPU:$C7A2 PRG:07A2 ??
and #$10 ; CPU:$C7A4 PRG:07A4 ??
bne Flow_C78C ; CPU:$C7A6 PRG:07A6 ??
lda ControllerHeld ; CPU:$C7A8 PRG:07A8 ??
and #$03 ; CPU:$C7AA PRG:07AA ??
beq Flow_C787 ; CPU:$C7AC PRG:07AC ??
ldy StateTransitionFlag ; CPU:$C7AE PRG:07AE ??
bne Flow_C786 ; CPU:$C7B0 PRG:07B0 ??
inc StateTransitionFlag ; CPU:$C7B2 PRG:07B2 ??
ldy Zp3A ; CPU:$C7B4 PRG:07B4 ??
and #$02 ; CPU:$C7B6 PRG:07B6 ??
bne Flow_C773 ; CPU:$C7B8 PRG:07B8 ??
iny ; CPU:$C7BA PRG:07BA ??
cpy #$05 ; CPU:$C7BC PRG:07BC ??
bne FlowEntry_C778 ; CPU:$C7BE PRG:07BE ??
ldy #$00 ; CPU:$C7C0 PRG:07C0 ??
beq FlowEntry_C778 ; CPU:$C7C2 PRG:07C2 ??
Flow_C773:
dey ; CPU:$C7C4 PRG:07C4 ??
bpl FlowEntry_C778 ; CPU:$C7C6 PRG:07C6 ??
ldy #$04 ; CPU:$C7C8 PRG:07C8 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0778-$0779.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
EngineTable_C778:
FlowEntry_C778:
.byte $84, $3A ; PRG $0778 / CPU $C778 ; CPU:$C7CA PRG:07CA 84 3A
; =============================================================================
; MatchRoutine_C77A
; CPU address: $C77A PRG offset: $077A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_C77A:
lda Zp3A ; CPU:$C7CC PRG:07CC ??
asl a ; CPU:$C7CE PRG:07CE ??
asl a ; CPU:$C7D0 PRG:07D0 ??
asl a ; CPU:$C7D2 PRG:07D2 ??
asl a ; CPU:$C7D4 PRG:07D4 ??
clc ; CPU:$C7D6 PRG:07D6 ??
adc #$60 ; CPU:$C7D8 PRG:07D8 ??
sta $0203 ; CPU:$C7DA PRG:07DA ??
Flow_C786:
rts ; CPU:$C7DC PRG:07DC ??
Flow_C787:
lda #$00 ; CPU:$C7DE PRG:07DE ??
sta StateTransitionFlag ; CPU:$C7E0 PRG:07E0 ??
rts ; PRG $078B / CPU $C78B ; CPU:$C7E2 PRG:07E2 ??
Flow_C78C:
lda Zp3A ; CPU:$C7E4 PRG:07E4 ??
sta ServingPlayer ; CPU:$C7E6 PRG:07E6 ??
lda #$00 ; CPU:$C7E8 PRG:07E8 ??
sta ModeAnimSubframe ; CPU:$C7EA PRG:07EA ??
inc GameState ; CPU:$C7EC PRG:07EC ??
rts ; PRG $0796 / CPU $C796 ; CPU:$C7EE PRG:07EE ??
; =============================================================================
; GameState01_WaitForServe
; CPU address: $C797 PRG offset: $0797
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
GameState01_WaitForServe:
jsr DisableRendering ; CPU:$C7F0 PRG:07F0 ??
jsr ClearOneNametable ; CPU:$C7F2 PRG:07F2 ??
jsr RenderRoutine_ED41 ; CPU:$C7F4 PRG:07F4 ??
jsr RenderRoutine_ED59 ; CPU:$C7F6 PRG:07F6 ??
ldx #$0F ; CPU:$C7F8 PRG:07F8 ??
lda #$00 ; CPU:$C7FA PRG:07FA ??
Flow_C7A7:
sta PointWinner,x ; CPU:$C7FC PRG:07FC ??
dex ; CPU:$C7FE PRG:07FE ??
bpl Flow_C7A7 ; CPU:$C800 PRG:0800 ??
sta PlayerAnimationFlags ; CPU:$C802 PRG:0802 ??
sta BallStateFlags ; CPU:$C804 PRG:0804 ??
lda #$C1 ; CPU:$C806 PRG:0806 ??
sta BallTrajectoryFlags ; CPU:$C808 PRG:0808 ??
inc GameState ; CPU:$C80A PRG:080A ??
rts ; CPU:$C80C PRG:080C ??
; =============================================================================
; GameState02_PrepareRally
; CPU address: $C7B7 PRG offset: $07B7
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
GameState02_PrepareRally:
jsr EnableRendering ; CPU:$C80E PRG:080E ??
jsr EngineRoutine_C42C ; CPU:$C810 PRG:0810 ??
jsr HideAllSprites ; CPU:$C812 PRG:0812 ??
jsr RenderRoutine_ED70 ; CPU:$C814 PRG:0814 ??
inc GameState ; CPU:$C816 PRG:0816 ??
rts ; CPU:$C818 PRG:0818 ??
; =============================================================================
; GameState03_RunRally
; CPU address: $C7C6 PRG offset: $07C6
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
GameState03_RunRally:
jsr RenderRoutine_E8CA ; CPU:$C81A PRG:081A ??
lda #$01 ; CPU:$C81C PRG:081C ??
sta PpuBufferReady ; CPU:$C81E PRG:081E ??
jsr MatchRoutine_C7E7 ; CPU:$C820 PRG:0820 ??
jsr PhysicsRoutine_D7E1 ; CPU:$C822 PRG:0822 ??
lda ServingPlayer ; CPU:$C824 PRG:0824 ??
cmp #$02 ; CPU:$C826 PRG:0826 ??
bcs Flow_C7E1 ; CPU:$C828 PRG:0828 ??
lda #$20 ; CPU:$C82A PRG:082A ??
sta $0319 ; CPU:$C82C PRG:082C ??
sta $0339 ; CPU:$C82E PRG:082E ??
Flow_C7E1:
jsr EngineRoutine_C436 ; CPU:$C830 PRG:0830 ??
inc GameState ; CPU:$C832 PRG:0832 ??
rts ; CPU:$C834 PRG:0834 ??
; =============================================================================
; MatchRoutine_C7E7
; CPU address: $C7E7 PRG offset: $07E7
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_C7E7:
ldy #$BF ; CPU:$C836 PRG:0836 ??
Flow_C7E9:
lda InitialMatchObjectStateData,y ; CPU:$C838 PRG:0838 ??
sta $0300,y ; CPU:$C83A PRG:083A ??
dey ; CPU:$C83C PRG:083C ??
bne Flow_C7E9 ; CPU:$C83E PRG:083E ??
lda InitialMatchObjectStateData,y ; CPU:$C840 PRG:0840 ??
sta $0300,y ; CPU:$C842 PRG:0842 ??
lda #$00 ; CPU:$C844 PRG:0844 ??
sta PlayerCourtOrder ; CPU:$C846 PRG:0846 ??
lda GameMode ; CPU:$C848 PRG:0848 ??
bne Flow_C807 ; CPU:$C84A PRG:084A ??
sta $0320 ; CPU:$C84C PRG:084C ??
sta $0360 ; CPU:$C84E PRG:084E ??
Flow_C806:
rts ; CPU:$C850 PRG:0850 ??
Flow_C807:
lda BallTrajectoryFlags ; CPU:$C852 PRG:0852 ??
and #$02 ; CPU:$C854 PRG:0854 ??
bne Flow_C829 ; CPU:$C856 PRG:0856 ??
lda BallTrajectoryFlags ; CPU:$C858 PRG:0858 ??
and #$04 ; CPU:$C85A PRG:085A ??
beq Flow_C816 ; CPU:$C85C PRG:085C ??
jsr MatchRoutine_C838 ; CPU:$C85E PRG:085E ??
Flow_C816:
lda BallTrajectoryFlags ; CPU:$C860 PRG:0860 ??
and #$01 ; CPU:$C862 PRG:0862 ??
beq Flow_C806 ; CPU:$C864 PRG:0864 ??
; =============================================================================
; MatchRoutine_C81C
; CPU address: $C81C PRG offset: $081C
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_C81C:
ldy $0347 ; CPU:$C866 PRG:0866 ??
ldx $0367 ; CPU:$C868 PRG:0868 ??
stx $0347 ; CPU:$C86A PRG:086A ??
sty $0367 ; CPU:$C86C PRG:086C ??
rts ; CPU:$C86E PRG:086E ??
Flow_C829:
lda BallTrajectoryFlags ; CPU:$C870 PRG:0870 ??
and #$04 ; CPU:$C872 PRG:0872 ??
beq Flow_C832 ; CPU:$C874 PRG:0874 ??
jsr MatchRoutine_C81C ; CPU:$C876 PRG:0876 ??
Flow_C832:
lda BallTrajectoryFlags ; CPU:$C878 PRG:0878 ??
and #$01 ; CPU:$C87A PRG:087A ??
beq Flow_C806 ; CPU:$C87C PRG:087C ??
; =============================================================================
; MatchRoutine_C838
; CPU address: $C838 PRG offset: $0838
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_C838:
ldy $0307 ; CPU:$C87E PRG:087E ??
ldx $0327 ; CPU:$C880 PRG:0880 ??
stx $0307 ; CPU:$C882 PRG:0882 ??
sty $0327 ; CPU:$C884 PRG:0884 ??
inc PlayerCourtOrder ; CPU:$C886 PRG:0886 ??
rts ; CPU:$C888 PRG:0888 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0847-$0906.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
InitialMatchObjectStateData:
.byte $01, $00, $03, $00, $00, $0E, $11, $00, $D8, $80, $00, $00, $00, $00, $00, $00 ; PRG $0847 / CPU $C847 ; CPU:$C88A PRG:088A 01 00 03 00 00 0E 11 00 D8 80 00 00 00 00 00 00
.byte $00, $0E, $00, $00, $C0, $40, $7C, $E8, $00, $18, $00, $00, $00, $00, $00, $00 ; PRG $0857 / CPU $C857 ; CPU:$C89A PRG:089A 00 0E 00 00 C0 40 7C E8 00 18 00 00 00 00 00 00
.byte $01, $00, $03, $00, $00, $0E, $11, $01, $A8, $80, $30, $00, $00, $00, $00, $00 ; PRG $0867 / CPU $C867 ; CPU:$C8AA PRG:08AA 01 00 03 00 00 0E 11 01 A8 80 30 00 00 00 00 00
.byte $00, $0E, $00, $00, $F0, $10, $7C, $E8, $00, $18, $00, $00, $00, $00, $00, $00 ; PRG $0877 / CPU $C877 ; CPU:$C8BA PRG:08BA 00 0E 00 00 F0 10 7C E8 00 18 00 00 00 00 00 00
.byte $01, $00, $03, $00, $00, $0A, $29, $03, $2C, $80, $70, $00, $00, $00, $00, $00 ; PRG $0887 / CPU $C887 ; CPU:$C8CA PRG:08CA 01 00 03 00 00 0A 29 03 2C 80 70 00 00 00 00 00
.byte $00, $08, $00, $00, $D0, $30, $24, $70, $80, $80, $00, $00, $00, $00, $00, $00 ; PRG $0897 / CPU $C897 ; CPU:$C8DA PRG:08DA 00 08 00 00 D0 30 24 70 80 80 00 00 00 00 00 00
.byte $01, $00, $03, $00, $00, $0A, $29, $03, $44, $80, $A0, $00, $00, $00, $00, $00 ; PRG $08A7 / CPU $C8A7 ; CPU:$C8EA PRG:08EA 01 00 03 00 00 0A 29 03 44 80 A0 00 00 00 00 00
.byte $00, $08, $00, $00, $D0, $30, $24, $70, $80, $80, $00, $00, $00, $00, $00, $00 ; PRG $08B7 / CPU $C8B7 ; CPU:$C8FA PRG:08FA 00 08 00 00 D0 30 24 70 80 80 00 00 00 00 00 00
.byte $01, $00, $00, $00, $00, $00, $18, $02, $B0, $80, $60, $00, $00, $00, $00, $00 ; PRG $08C7 / CPU $C8C7 ; CPU:$C90A PRG:090A 01 00 00 00 00 00 18 02 B0 80 60 00 00 00 00 00
.byte $01, $00, $00, $00, $02, $00, $00, $00, $00, $00, $01, $00, $00, $00, $00, $00 ; PRG $08D7 / CPU $C8D7 ; CPU:$C91A PRG:091A 01 00 00 00 02 00 00 00 00 00 01 00 00 00 00 00
.byte $01, $00, $00, $00, $00, $00, $20, $02, $B0, $80, $64, $00, $00, $00, $00, $00 ; PRG $08E7 / CPU $C8E7 ; CPU:$C92A PRG:092A 01 00 00 00 00 00 20 02 B0 80 64 00 00 00 00 00
.byte $01, $01, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $00, $00 ; PRG $08F7 / CPU $C8F7 ; CPU:$C93A PRG:093A 01 01 00 00 00 00 00 00 00 00 01 00 00 00 00 00
; =============================================================================
; GameState04_PointEnded
; CPU address: $C907 PRG offset: $0907
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
GameState04_PointEnded:
jsr MatchRoutine_CBD5 ; CPU:$C94A PRG:094A ??
jsr RenderRoutine_E076 ; CPU:$C94C PRG:094C ??
jsr PhysicsRoutine_CD0B ; CPU:$C94E PRG:094E ??
jsr PhysicsRoutine_D8A9 ; CPU:$C950 PRG:0950 ??
jsr RenderRoutine_E5F5 ; CPU:$C952 PRG:0952 ??
jsr PhysicsRoutine_D790 ; CPU:$C954 PRG:0954 ??
jsr MatchRoutine_C920 ; CPU:$C956 PRG:0956 ??
jsr MatchRoutine_C96F ; CPU:$C958 PRG:0958 ??
rts ; CPU:$C95A PRG:095A ??
; =============================================================================
; MatchRoutine_C920
; CPU address: $C920 PRG offset: $0920
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_C920:
lda BallTrajectoryFlags ; CPU:$C95C PRG:095C ??
bpl Flow_C928 ; CPU:$C95E PRG:095E ??
and #$02 ; CPU:$C960 PRG:0960 ??
beq Flow_C92B ; CPU:$C962 PRG:0962 ??
Flow_C928:
lda $0310 ; CPU:$C964 PRG:0964 ??
Flow_C92B:
ldy GameMode ; CPU:$C966 PRG:0966 ??
beq Flow_C932 ; CPU:$C968 PRG:0968 ??
ora $0330 ; CPU:$C96A PRG:096A ??
Flow_C932:
and #$0F ; CPU:$C96C PRG:096C ??
beq Flow_C93C ; CPU:$C96E PRG:096E ??
lda #$40 ; CPU:$C970 PRG:0970 ??
ora AudioRequestFlags2 ; CPU:$C972 PRG:0972 ??
sta AudioRequestFlags2 ; CPU:$C974 PRG:0974 ??
Flow_C93C:
lda BallBounceState ; CPU:$C976 PRG:0976 ??
beq Flow_C94C ; CPU:$C978 PRG:0978 ??
lda #$40 ; CPU:$C97A PRG:097A ??
bit BallXPosition ; CPU:$C97C PRG:097C ??
bpl Flow_C948 ; CPU:$C97E PRG:097E ??
lda #$C0 ; CPU:$C980 PRG:0980 ??
Flow_C948:
ora AudioRequestFlags3 ; CPU:$C982 PRG:0982 ??
sta AudioRequestFlags3 ; CPU:$C984 PRG:0984 ??
Flow_C94C:
rts ; CPU:$C986 PRG:0986 ??
; =============================================================================
; MatchRoutine_C94D
; CPU address: $C94D PRG offset: $094D
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_C94D:
ldy #$00 ; CPU:$C988 PRG:0988 ??
lda PlayerActionType ; CPU:$C98A PRG:098A ??
cmp #$04 ; CPU:$C98C PRG:098C ??
bne Flow_C956 ; CPU:$C98E PRG:098E ??
iny ; CPU:$C990 PRG:0990 ??
Flow_C956:
sty BallBounceState ; CPU:$C992 PRG:0992 ??
asl a ; CPU:$C994 PRG:0994 ??
tax ; CPU:$C996 PRG:0996 ??
lda $C965,x ; CPU:$C998 PRG:0998 ??
tay ; CPU:$C99A PRG:099A ??
lda $C966,x ; CPU:$C99C PRG:099C ??
sta a:AudioChannelControl,y ; CPU:$C99E PRG:099E ??
rts ; CPU:$C9A0 PRG:09A0 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0965-$096E.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PlayerActionAudioRequestTable:
.byte $0E, $04, $0E, $08, $0E, $10, $0E, $20, $00, $00 ; PRG $0965 / CPU $C965 ; CPU:$C9A2 PRG:09A2 0E 04 0E 08 0E 10 0E 20 00 00
; =============================================================================
; MatchRoutine_C96F
; CPU address: $C96F PRG offset: $096F
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_C96F:
ldy Zp24 ; CPU:$C9AC PRG:09AC ??
dey ; CPU:$C9AE PRG:09AE ??
bne Flow_C977 ; CPU:$C9B0 PRG:09B0 ??
jsr RenderRoutine_E646 ; CPU:$C9B2 PRG:09B2 ??
Flow_C977:
lda UmpireMessageId ; CPU:$C9B4 PRG:09B4 ??
beq Flow_C985 ; CPU:$C9B6 PRG:09B6 ??
lda BallContactState ; CPU:$C9B8 PRG:09B8 ??
bne Flow_C985 ; CPU:$C9BA PRG:09BA ??
inc BallContactState ; CPU:$C9BC PRG:09BC ??
lda #$0A ; CPU:$C9BE PRG:09BE ??
sta Zp24 ; CPU:$C9C0 PRG:09C0 ??
Flow_C985:
lda PlayerAnimationFlags ; CPU:$C9C2 PRG:09C2 ??
beq FlowEntry_C9A1 ; CPU:$C9C4 PRG:09C4 ??
inc GameState ; CPU:$C9C6 PRG:09C6 ??
inc GameStateStep ; CPU:$C9C8 PRG:09C8 ??
lda #$00 ; CPU:$C9CA PRG:09CA ??
sta PlayerAnimationFlags ; CPU:$C9CC PRG:09CC ??
jsr RenderRoutine_E646 ; CPU:$C9CE PRG:09CE ??
lda #$10 ; CPU:$C9D0 PRG:09D0 ??
ldy $0391 ; CPU:$C9D2 PRG:09D2 ??
cpy #$05 ; CPU:$C9D4 PRG:09D4 ??
bcs Flow_C99F ; CPU:$C9D6 PRG:09D6 ??
lda #$30 ; CPU:$C9D8 PRG:09D8 ??
Flow_C99F:
sta Zp21 ; CPU:$C9DA PRG:09DA ??
FlowEntry_C9A1:
rts ; PRG $09A1 / CPU $C9A1 ; CPU:$C9DC PRG:09DC ??
GameState05_UpdateScore:
lda Zp21 ; CPU:$C9DE PRG:09DE ??
bne Flow_C9B4 ; CPU:$C9E0 PRG:09E0 ??
lda #$FF ; CPU:$C9E2 PRG:09E2 ??
ldy $038A ; CPU:$C9E4 PRG:09E4 ??
sta $0201,y ; CPU:$C9E6 PRG:09E6 ??
sta $0205,y ; CPU:$C9E8 PRG:09E8 ??
inc GameState ; CPU:$C9EA PRG:09EA ??
Flow_C9B3:
rts ; CPU:$C9EC PRG:09EC ??
Flow_C9B4:
cmp #$0E ; CPU:$C9EE PRG:09EE ??
bne Flow_C9C3 ; CPU:$C9F0 PRG:09F0 ??
jsr RenderRoutine_E77F ; CPU:$C9F2 PRG:09F2 ??
jsr RenderRoutine_E8CA ; CPU:$C9F4 PRG:09F4 ??
Flow_C9BE:
lda #$01 ; CPU:$C9F6 PRG:09F6 ??
sta PpuBufferReady ; CPU:$C9F8 PRG:09F8 ??
Flow_C9C2:
rts ; CPU:$C9FA PRG:09FA ??
Flow_C9C3:
cmp #$0D ; CPU:$C9FC PRG:09FC ??
bne Flow_C9D7 ; CPU:$C9FE PRG:09FE ??
lda ScoreUpdatePhase ; CPU:$CA00 PRG:0A00 ??
cmp #$01 ; CPU:$CA02 PRG:0A02 ??
bne Flow_C9C2 ; CPU:$CA04 PRG:0A04 ??
lda ScoreLo ; CPU:$CA06 PRG:0A06 ??
ora ScoreHi ; CPU:$CA08 PRG:0A08 ??
bne Flow_C9C2 ; CPU:$CA0A PRG:0A0A ??
jsr ShowDeuceMessage ; CPU:$CA0C PRG:0A0C ??
rts ; CPU:$CA0E PRG:0A0E ??
Flow_C9D7:
cmp #$02 ; CPU:$CA10 PRG:0A10 ??
bne Flow_C9B3 ; CPU:$CA12 PRG:0A12 ??
jsr RenderRoutine_E80C ; CPU:$CA14 PRG:0A14 ??
jsr RenderRoutine_E965 ; CPU:$CA16 PRG:0A16 ??
jsr PhysicsRoutine_CC96 ; CPU:$CA18 PRG:0A18 ??
jmp Flow_C9BE ; CPU:$CA1A PRG:0A1A ??
GameState06_AdvanceGame:
jsr RenderRoutine_E9DB ; CPU:$CA1C PRG:0A1C ??
lda #$01 ; CPU:$CA1E PRG:0A1E ??
sta PpuBufferReady ; CPU:$CA20 PRG:0A20 ??
lda StateTimer ; CPU:$CA22 PRG:0A22 ??
bne Flow_CA21 ; CPU:$CA24 PRG:0A24 ??
jsr RenderRoutine_E883 ; CPU:$CA26 PRG:0A26 ??
lda PendingGameState ; CPU:$CA28 PRG:0A28 ??
sta GameState ; CPU:$CA2A PRG:0A2A ??
cmp #$0B ; CPU:$CA2C PRG:0A2C ??
bne Flow_CA21 ; CPU:$CA2E PRG:0A2E ??
jsr RenderRoutine_E8AF ; CPU:$CA30 PRG:0A30 ??
jsr RenderRoutine_EB05 ; CPU:$CA32 PRG:0A32 ??
jsr PhysicsRoutine_CCCD ; CPU:$CA34 PRG:0A34 ??
lda MatchResultType ; CPU:$CA36 PRG:0A36 ??
asl a ; CPU:$CA38 PRG:0A38 ??
tay ; CPU:$CA3A PRG:0A3A ??
lda $CA22,y ; CPU:$CA3C PRG:0A3C ??
tax ; CPU:$CA3E PRG:0A3E ??
lda $CA23,y ; CPU:$CA40 PRG:0A40 ??
sta AudioEventPriority,x ; CPU:$CA42 PRG:0A42 ??
ldy #$20 ; CPU:$CA44 PRG:0A44 ??
lda MatchResultType ; CPU:$CA46 PRG:0A46 ??
bne Flow_CA1B ; CPU:$CA48 PRG:0A48 ??
ldy #$50 ; CPU:$CA4A PRG:0A4A ??
Flow_CA1B:
sty StateTimer ; CPU:$CA4C PRG:0A4C ??
lda #$00 ; CPU:$CA4E PRG:0A4E ??
sta StateSubstep ; CPU:$CA50 PRG:0A50 ??
Flow_CA21:
rts ; CPU:$CA52 PRG:0A52 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0A22-$0A27.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
MatchResultAudioRequestTable:
.byte $01, $01, $01, $02, $01, $04 ; PRG $0A22 / CPU $CA22 ; CPU:$CA54 PRG:0A54 01 01 01 02 01 04
GameState08_WaitForTimer:
lda StateTimer ; CPU:$CA5A PRG:0A5A ??
bne Flow_CA30 ; CPU:$CA5C PRG:0A5C ??
lda #$04 ; CPU:$CA5E PRG:0A5E ??
bne Flow_CA58 ; CPU:$CA60 PRG:0A60 ??
Flow_CA30:
rts ; CPU:$CA62 PRG:0A62 ??
GameState09_RestorePreviousState:
lda StateTimer ; CPU:$CA64 PRG:0A64 ??
bne Flow_CA39 ; CPU:$CA66 PRG:0A66 ??
lda Zp3B ; CPU:$CA68 PRG:0A68 ??
sta GameState ; CPU:$CA6A PRG:0A6A ??
Flow_CA39:
rts ; CPU:$CA6C PRG:0A6C ??
GameState0A_ResumePreviousState:
lda Zp21 ; CPU:$CA6E PRG:0A6E ??
beq Flow_CA4D ; CPU:$CA70 PRG:0A70 ??
cmp #$0A ; CPU:$CA72 PRG:0A72 ??
bne Flow_CA5A ; CPU:$CA74 PRG:0A74 ??
lda PpuMaskShadow ; CPU:$CA76 PRG:0A76 ??
ora #$10 ; CPU:$CA78 PRG:0A78 ??
sta PPUMASK ; CPU:$CA7A PRG:0A7A ??
sta PpuMaskShadow ; CPU:$CA7C PRG:0A7C ??
bne Flow_CA5A ; CPU:$CA7E PRG:0A7E ??
Flow_CA4D:
ldx #$07 ; CPU:$CA80 PRG:0A80 ??
Flow_CA4F:
lda Zp28,x ; CPU:$CA82 PRG:0A82 ??
sta Zp20,x ; CPU:$CA84 PRG:0A84 ??
dex ; CPU:$CA86 PRG:0A86 ??
bpl Flow_CA4F ; CPU:$CA88 PRG:0A88 ??
lda Zp3B ; CPU:$CA8A PRG:0A8A ??
Flow_CA58:
sta GameState ; CPU:$CA8C PRG:0A8C ??
Flow_CA5A:
rts ; CPU:$CA8E PRG:0A8E ??
GameState0B_FinishTransition:
lda StateSubstep ; CPU:$CA90 PRG:0A90 ??
bne Flow_CA7E ; CPU:$CA92 PRG:0A92 ??
lda StateTimer ; CPU:$CA94 PRG:0A94 ??
bne Flow_CA73 ; CPU:$CA96 PRG:0A96 ??
lda MatchResultType ; CPU:$CA98 PRG:0A98 ??
cmp #$01 ; CPU:$CA9A PRG:0A9A ??
beq Flow_CA74 ; CPU:$CA9C PRG:0A9C ??
lda #$01 ; CPU:$CA9E PRG:0A9E ??
sta GameActiveFlag ; CPU:$CAA0 PRG:0AA0 ??
sta StateTransitionFlag ; CPU:$CAA2 PRG:0AA2 ??
lda #$00 ; CPU:$CAA4 PRG:0AA4 ??
sta GameStateStep ; CPU:$CAA6 PRG:0AA6 ??
Flow_CA73:
rts ; CPU:$CAA8 PRG:0AA8 ??
Flow_CA74:
jsr RenderRoutine_EADA ; CPU:$CAAA PRG:0AAA ??
lda #$20 ; CPU:$CAAC PRG:0AAC ??
sta StateTimer ; CPU:$CAAE PRG:0AAE ??
inc StateSubstep ; CPU:$CAB0 PRG:0AB0 ??
rts ; PRG $0A7D / CPU $CA7D ; CPU:$CAB2 PRG:0AB2 ??
Flow_CA7E:
lda StateTimer ; CPU:$CAB4 PRG:0AB4 ??
bne Flow_CA73 ; CPU:$CAB6 PRG:0AB6 ??
lda #$01 ; CPU:$CAB8 PRG:0AB8 ??
sta GameState ; CPU:$CABA PRG:0ABA ??
rts ; PRG $0A86 / CPU $CA86 ; CPU:$CABC PRG:0ABC ??
ModeStep00_DrawSelectionScreen:
jsr DisableRendering ; CPU:$CABE PRG:0ABE ??
lda SelectedGameMode ; CPU:$CAC0 PRG:0AC0 ??
sta GameMode ; CPU:$CAC2 PRG:0AC2 ??
jsr ClearOneNametable ; CPU:$CAC4 PRG:0AC4 ??
jsr HideAllSprites ; CPU:$CAC6 PRG:0AC6 ??
ldx #$E6 ; CPU:$CAC8 PRG:0AC8 ??
ldy #$EE ; CPU:$CACA PRG:0ACA ??
jsr DrawScreenData ; CPU:$CACC PRG:0ACC ??
lda #$02 ; CPU:$CACE PRG:0ACE ??
sta PaletteUpdateMode ; CPU:$CAD0 PRG:0AD0 ??
lda #$01 ; CPU:$CAD2 PRG:0AD2 ??
sta StateTransitionFlag ; CPU:$CAD4 PRG:0AD4 ??
lda #$84 ; CPU:$CAD6 PRG:0AD6 ??
sta WorkPtrLo ; CPU:$CAD8 PRG:0AD8 ??
lda #$F2 ; CPU:$CADA PRG:0ADA ??
sta WorkPtrHi ; CPU:$CADC PRG:0ADC ??
lda #$04 ; CPU:$CADE PRG:0ADE ??
sta Zp03 ; CPU:$CAE0 PRG:0AE0 ??
jsr WriteMetaspriteToOam ; CPU:$CAE2 PRG:0AE2 ??
inc GameStateStep ; CPU:$CAE4 PRG:0AE4 ??
ldy DemoCounter ; CPU:$CAE6 PRG:0AE6 ??
bne Flow_CAC0 ; CPU:$CAE8 PRG:0AE8 ??
ldy #$03 ; CPU:$CAEA PRG:0AEA ??
sty DemoCounter ; CPU:$CAEC PRG:0AEC ??
lda #$4F ; CPU:$CAEE PRG:0AEE ??
bne Flow_CAC4 ; CPU:$CAF0 PRG:0AF0 ??
Flow_CAC0:
dec DemoCounter ; CPU:$CAF2 PRG:0AF2 ??
lda #$25 ; CPU:$CAF4 PRG:0AF4 ??
Flow_CAC4:
sta StateTimer ; CPU:$CAF6 PRG:0AF6 ??
jmp EnableRendering ; CPU:$CAF8 PRG:0AF8 ??
ModeStep01_Countdown:
ldy StateTimer ; CPU:$CAFA PRG:0AFA ??
beq Flow_CADA ; CPU:$CAFC PRG:0AFC ??
cpy #$4B ; CPU:$CAFE PRG:0AFE ??
bne Flow_CAD9 ; CPU:$CB00 PRG:0B00 ??
lda #$08 ; CPU:$CB02 PRG:0B02 ??
sta AudioRequestFlags1 ; CPU:$CB04 PRG:0B04 ??
ldy #$48 ; CPU:$CB06 PRG:0B06 ??
sty StateTimer ; CPU:$CB08 PRG:0B08 ??
Flow_CAD9:
rts ; CPU:$CB0A PRG:0B0A ??
Flow_CADA:
inc GameStateStep ; CPU:$CB0C PRG:0B0C ??
rts ; PRG $0ADC / CPU $CADC ; CPU:$CB0E PRG:0B0E ??
ModeStep02_InitializeSelection:
lda #$01 ; CPU:$CB10 PRG:0B10 ??
sta GameMode ; CPU:$CB12 PRG:0B12 ??
inc GameStateStep ; CPU:$CB14 PRG:0B14 ??
rts ; CPU:$CB16 PRG:0B16 ??
ModeStep03_UpdateSelection:
jsr GameState01_WaitForServe ; CPU:$CB18 PRG:0B18 ??
lda #$00 ; CPU:$CB1A PRG:0B1A ??
sta ServingPlayer ; CPU:$CB1C PRG:0B1C ??
inc GameStateStep ; CPU:$CB1E PRG:0B1E ??
rts ; CPU:$CB20 PRG:0B20 ??
ModeStep04_ConfirmSelection:
jsr GameState02_PrepareRally ; CPU:$CB22 PRG:0B22 ??
inc GameStateStep ; CPU:$CB24 PRG:0B24 ??
rts ; CPU:$CB26 PRG:0B26 ??
ModeStep05_StartDemoOrMatch:
jsr GameState03_RunRally ; CPU:$CB28 PRG:0B28 ??
lda #$00 ; CPU:$CB2A PRG:0B2A ??
sta ModeAnimFrameA ; CPU:$CB2C PRG:0B2C ??
sta ModeAnimTimerA ; CPU:$CB2E PRG:0B2E ??
sta ModeAnimFrameB ; CPU:$CB30 PRG:0B30 ??
sta ModeAnimTimerB ; CPU:$CB32 PRG:0B32 ??
inc GameStateStep ; CPU:$CB34 PRG:0B34 ??
rts ; CPU:$CB36 PRG:0B36 ??
ModeStep06_CompleteSetup:
lda ModeAnimTimerA ; CPU:$CB38 PRG:0B38 ??
beq Flow_CB14 ; CPU:$CB3A PRG:0B3A ??
dec ModeAnimTimerA ; CPU:$CB3C PRG:0B3C ??
lda $0310 ; CPU:$CB3E PRG:0B3E ??
and #$0F ; CPU:$CB40 PRG:0B40 ??
sta Zp1B ; CPU:$CB42 PRG:0B42 ??
jmp Flow_CB28 ; CPU:$CB44 PRG:0B44 ??
Flow_CB14:
ldy ModeAnimFrameA ; CPU:$CB46 PRG:0B46 ??
lda $CB59,y ; CPU:$CB48 PRG:0B48 ??
cmp #$AA ; CPU:$CB4A PRG:0B4A ??
beq Flow_CB52 ; CPU:$CB4C PRG:0B4C ??
sta Zp1B ; CPU:$CB4E PRG:0B4E ??
iny ; CPU:$CB50 PRG:0B50 ??
lda $CB59,y ; CPU:$CB52 PRG:0B52 ??
sta ModeAnimTimerA ; CPU:$CB54 PRG:0B54 ??
iny ; CPU:$CB56 PRG:0B56 ??
sty ModeAnimFrameA ; CPU:$CB58 PRG:0B58 ??
Flow_CB28:
lda ModeAnimTimerB ; CPU:$CB5A PRG:0B5A ??
beq Flow_CB38 ; CPU:$CB5C PRG:0B5C ??
dec ModeAnimTimerB ; CPU:$CB5E PRG:0B5E ??
lda $0330 ; CPU:$CB60 PRG:0B60 ??
and #$0F ; CPU:$CB62 PRG:0B62 ??
sta Zp1D ; CPU:$CB64 PRG:0B64 ??
jmp Flow_CB48 ; CPU:$CB66 PRG:0B66 ??
Flow_CB38:
ldy ModeAnimFrameB ; CPU:$CB68 PRG:0B68 ??
lda $CB8E,y ; CPU:$CB6A PRG:0B6A ??
sta Zp1D ; CPU:$CB6C PRG:0B6C ??
iny ; CPU:$CB6E PRG:0B6E ??
lda $CB8E,y ; CPU:$CB70 PRG:0B70 ??
sta ModeAnimTimerB ; CPU:$CB72 PRG:0B72 ??
iny ; CPU:$CB74 PRG:0B74 ??
sty ModeAnimFrameB ; CPU:$CB76 PRG:0B76 ??
Flow_CB48:
jsr GameState04_PointEnded ; CPU:$CB78 PRG:0B78 ??
lda GameStateStep ; CPU:$CB7A PRG:0B7A ??
cmp #$07 ; CPU:$CB7C PRG:0B7C ??
beq Flow_CB54 ; CPU:$CB7E PRG:0B7E ??
rts ; PRG $0B51 / CPU $CB51 ; CPU:$CB80 PRG:0B80 ??
Flow_CB52:
inc GameStateStep ; CPU:$CB82 PRG:0B82 ??
Flow_CB54:
lda #$08 ; CPU:$CB84 PRG:0B84 ??
sta StateTimer ; CPU:$CB86 PRG:0B86 ??
rts ; CPU:$CB88 PRG:0B88 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0B59-$0BCA.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
ModeSetupAnimationSequenceData:
.byte $01, $08, $00, $A4, $80, $B4, $02, $2C, $00, $2C, $80, $20, $08, $40, $80, $20 ; PRG $0B59 / CPU $CB59 ; CPU:$CB8A PRG:0B8A 01 08 00 A4 80 B4 02 2C 00 2C 80 20 08 40 80 20
.byte $80, $20, $80, $20, $80, $20, $01, $08, $00, $10, $80, $20, $01, $08, $00, $10 ; PRG $0B69 / CPU $CB69 ; CPU:$CB9A PRG:0B9A 80 20 80 20 80 20 01 08 00 10 80 20 01 08 00 10
.byte $80, $20, $80, $20, $04, $18, $80, $28, $80, $28, $04, $18, $80, $20, $80, $20 ; PRG $0B79 / CPU $CB79 ; CPU:$CBAA PRG:0BAA 80 20 80 20 04 18 80 28 80 28 04 18 80 20 80 20
.byte $80, $FF, $80, $FF, $AA, $00, $A8, $08, $20, $02, $04, $00, $BC, $80, $20, $04 ; PRG $0B89 / CPU $CB89 ; CPU:$CBBA PRG:0BBA 80 FF 80 FF AA 00 A8 08 20 02 04 00 BC 80 20 04
.byte $10, $00, $38, $80, $24, $05, $24, $00, $24, $80, $48, $80, $38, $80, $38, $02 ; PRG $0B99 / CPU $CB99 ; CPU:$CBCA PRG:0BCA 10 00 38 80 24 05 24 00 24 80 48 80 38 80 38 02
.byte $20, $80, $30, $80, $30, $80, $20, $08, $40, $80, $20, $80, $20, $80, $20, $80 ; PRG $0BA9 / CPU $CBA9 ; CPU:$CBDA PRG:0BDA 20 80 30 80 30 80 20 08 40 80 20 80 20 80 20 80
.byte $20, $80, $20, $80, $FF, $80, $FF, $AA, $A5, $25, $D0, $05, $20, $CB, $CB, $85 ; PRG $0BB9 / CPU $CBB9 ; CPU:$CBEA PRG:0BEA 20 80 20 80 FF 80 FF AA A5 25 D0 05 20 CB CB 85
.byte $3E, $60 ; PRG $0BC9 / CPU $CBC9 ; CPU:$CBFA PRG:0BFA 3E 60
; =============================================================================
; MatchRoutine_CBCB
; CPU address: $CBCB PRG offset: $0BCB
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_CBCB:
lda #$00 ; CPU:$CBFC PRG:0BFC ??
ldx #$02 ; CPU:$CBFE PRG:0BFE ??
Flow_CBCF:
sta AudioRequestFlags1,x ; CPU:$CC00 PRG:0C00 ??
dex ; CPU:$CC02 PRG:0C02 ??
bpl Flow_CBCF ; CPU:$CC04 PRG:0C04 ??
rts ; PRG $0BD4 / CPU $CBD4 ; CPU:$CC06 PRG:0C06 ??
; =============================================================================
; MatchRoutine_CBD5
; CPU address: $CBD5 PRG offset: $0BD5
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
MatchRoutine_CBD5:
lda GameMode ; CPU:$CC08 PRG:0C08 ??
bne Flow_CC05 ; CPU:$CC0A PRG:0C0A ??
ldy #$03 ; CPU:$CC0C PRG:0C0C ??
lda $03A8 ; CPU:$CC0E PRG:0C0E ??
cmp $0308 ; CPU:$CC10 PRG:0C10 ??
bcs Flow_CBEC ; CPU:$CC12 PRG:0C12 ??
ldy #$06 ; CPU:$CC14 PRG:0C14 ??
cmp $0348 ; CPU:$CC16 PRG:0C16 ??
bcc Flow_CBEC ; CPU:$CC18 PRG:0C18 ??
ldy #$00 ; CPU:$CC1A PRG:0C1A ??
Flow_CBEC:
lda $CC7E,y ; CPU:$CC1C PRG:0C1C ??
sta $030A ; CPU:$CC1E PRG:0C1E ??
lda $CC7F,y ; CPU:$CC20 PRG:0C20 ??
sta $034A ; CPU:$CC22 PRG:0C22 ??
lda $CC80,y ; CPU:$CC24 PRG:0C24 ??
sta $038A ; CPU:$CC26 PRG:0C26 ??
clc ; CPU:$CC28 PRG:0C28 ??
adc #$04 ; CPU:$CC2A PRG:0C2A ??
sta $03AA ; CPU:$CC2C PRG:0C2C ??
rts ; CPU:$CC2E PRG:0C2E ??
Flow_CC05:
ldy #$00 ; CPU:$CC30 PRG:0C30 ??
ldx #$00 ; CPU:$CC32 PRG:0C32 ??
lda $03A8 ; CPU:$CC34 PRG:0C34 ??
cmp #$70 ; CPU:$CC36 PRG:0C36 ??
bcs Flow_CC14 ; CPU:$CC38 PRG:0C38 ??
ldy #$06 ; CPU:$CC3A PRG:0C3A ??
ldx #$40 ; CPU:$CC3C PRG:0C3C ??
Flow_CC14:
cmp $0308,x ; CPU:$CC3E PRG:0C3E ??
bcs Flow_CC1C ; CPU:$CC40 PRG:0C40 ??
iny ; CPU:$CC42 PRG:0C42 ??
iny ; CPU:$CC44 PRG:0C44 ??
iny ; CPU:$CC46 PRG:0C46 ??
Flow_CC1C:
cmp $0328,x ; CPU:$CC48 PRG:0C48 ??
bcs Flow_CC24 ; CPU:$CC4A PRG:0C4A ??
iny ; CPU:$CC4C PRG:0C4C ??
iny ; CPU:$CC4E PRG:0C4E ??
iny ; CPU:$CC50 PRG:0C50 ??
Flow_CC24:
lda $CC87,y ; CPU:$CC52 PRG:0C52 ??
sta $038A ; CPU:$CC54 PRG:0C54 ??
clc ; CPU:$CC56 PRG:0C56 ??
adc #$04 ; CPU:$CC58 PRG:0C58 ??
sta $03AA ; CPU:$CC5A PRG:0C5A ??
cpy #$08 ; CPU:$CC5C PRG:0C5C ??
bcs Flow_CC59 ; CPU:$CC5E PRG:0C5E ??
lda $CC88,y ; CPU:$CC60 PRG:0C60 ??
tax ; CPU:$CC62 PRG:0C62 ??
lda $CC89,y ; CPU:$CC64 PRG:0C64 ??
tay ; CPU:$CC66 PRG:0C66 ??
jsr PhysicsRoutine_CC68 ; CPU:$CC68 PRG:0C68 ??
ldx #$58 ; CPU:$CC6A PRG:0C6A ??
ldy #$74 ; CPU:$CC6C PRG:0C6C ??
; =============================================================================
; PhysicsRoutine_CC43
; CPU address: $CC43 PRG offset: $0C43
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CC43:
lda $0348 ; CPU:$CC6E PRG:0C6E ??
cmp $0368 ; CPU:$CC70 PRG:0C70 ??
bcc Flow_CC52 ; CPU:$CC72 PRG:0C72 ??
stx $034A ; CPU:$CC74 PRG:0C74 ??
sty $036A ; CPU:$CC76 PRG:0C76 ??
rts ; CPU:$CC78 PRG:0C78 ??
Flow_CC52:
stx $036A ; CPU:$CC7A PRG:0C7A ??
sty $034A ; CPU:$CC7C PRG:0C7C ??
rts ; PRG $0C58 / CPU $CC58 ; CPU:$CC7E PRG:0C7E ??
Flow_CC59:
lda $CC88,y ; CPU:$CC80 PRG:0C80 ??
tax ; CPU:$CC82 PRG:0C82 ??
lda $CC89,y ; CPU:$CC84 PRG:0C84 ??
tay ; CPU:$CC86 PRG:0C86 ??
jsr PhysicsRoutine_CC43 ; CPU:$CC88 PRG:0C88 ??
ldx #$00 ; CPU:$CC8A PRG:0C8A ??
ldy #$28 ; CPU:$CC8C PRG:0C8C ??
; =============================================================================
; PhysicsRoutine_CC68
; CPU address: $CC68 PRG offset: $0C68
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CC68:
lda $0308 ; CPU:$CC8E PRG:0C8E ??
cmp $0328 ; CPU:$CC90 PRG:0C90 ??
bcc Flow_CC77 ; CPU:$CC92 PRG:0C92 ??
stx $030A ; CPU:$CC94 PRG:0C94 ??
sty $032A ; CPU:$CC96 PRG:0C96 ??
rts ; CPU:$CC98 PRG:0C98 ??
Flow_CC77:
stx $032A ; CPU:$CC9A PRG:0C9A ??
sty $030A ; CPU:$CC9C PRG:0C9C ??
rts ; CPU:$CC9E PRG:0C9E ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0C7E-$0C95.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
CourtObjectSpawnParameterTable:
.byte $00, $30, $28, $08, $30, $00, $00, $28, $44, $00, $08, $30, $28, $00, $30, $50 ; PRG $0C7E / CPU $CC7E ; CPU:$CCA0 PRG:0CA0 00 30 28 08 30 00 00 28 44 00 08 30 28 00 30 50
.byte $00, $28, $6C, $50, $74, $88, $50, $6C ; PRG $0C8E / CPU $CC8E ; CPU:$CCB0 PRG:0CB0 00 28 6C 50 74 88 50 6C
; =============================================================================
; PhysicsRoutine_CC96
; CPU address: $CC96 PRG offset: $0C96
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CC96:
lda MatchResultType ; CPU:$CCB8 PRG:0CB8 ??
beq Flow_CCD7 ; CPU:$CCBA PRG:0CBA ??
ldy $0308 ; CPU:$CCBC PRG:0CBC ??
ldx $0309 ; CPU:$CCBE PRG:0CBE ??
jsr PhysicsRoutine_CCBA ; CPU:$CCC0 PRG:0CC0 ??
bne Flow_CCA8 ; CPU:$CCC2 PRG:0CC2 ??
jsr PhysicsRoutine_CCD8 ; CPU:$CCC4 PRG:0CC4 ??
Flow_CCA8:
lda GameMode ; CPU:$CCC6 PRG:0CC6 ??
beq Flow_CCD7 ; CPU:$CCC8 PRG:0CC8 ??
ldy $0328 ; CPU:$CCCA PRG:0CCA ??
ldx $0329 ; CPU:$CCCC PRG:0CCC ??
jsr PhysicsRoutine_CCBA ; CPU:$CCCE PRG:0CCE ??
bne Flow_CCD7 ; CPU:$CCD0 PRG:0CD0 ??
jmp PhysicsRoutine_CCF5 ; CPU:$CCD2 PRG:0CD2 ??
; =============================================================================
; PhysicsRoutine_CCBA
; CPU address: $CCBA PRG offset: $0CBA
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CCBA:
lda #$FF ; CPU:$CCD4 PRG:0CD4 ??
cpy #$C0 ; CPU:$CCD6 PRG:0CD6 ??
bcs Flow_CCCA ; CPU:$CCD8 PRG:0CD8 ??
cpx #$4C ; CPU:$CCDA PRG:0CDA ??
bcc Flow_CCCA ; CPU:$CCDC PRG:0CDC ??
cpx #$B4 ; CPU:$CCDE PRG:0CDE ??
bcs Flow_CCCA ; CPU:$CCE0 PRG:0CE0 ??
lda #$00 ; CPU:$CCE2 PRG:0CE2 ??
Flow_CCCA:
cmp #$00 ; CPU:$CCE4 PRG:0CE4 ??
rts ; PRG $0CCC / CPU $CCCC ; CPU:$CCE6 PRG:0CE6 ??
; =============================================================================
; PhysicsRoutine_CCCD
; CPU address: $CCCD PRG offset: $0CCD
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CCCD:
jsr PhysicsRoutine_CCD8 ; CPU:$CCE8 PRG:0CE8 ??
ldy GameMode ; CPU:$CCEA PRG:0CEA ??
beq Flow_CCD7 ; CPU:$CCEC PRG:0CEC ??
jsr PhysicsRoutine_CCF5 ; CPU:$CCEE PRG:0CEE ??
Flow_CCD7:
rts ; CPU:$CCF0 PRG:0CF0 ??
; =============================================================================
; PhysicsRoutine_CCD8
; CPU address: $CCD8 PRG offset: $0CD8
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CCD8:
lda #$01 ; CPU:$CCF2 PRG:0CF2 ??
sta AnimationFrame ; CPU:$CCF4 PRG:0CF4 ??
lda #$00 ; CPU:$CCF6 PRG:0CF6 ??
sta PlayerPoseId ; CPU:$CCF8 PRG:0CF8 ??
lda $0307 ; CPU:$CCFA PRG:0CFA ??
sta PlayerPoseFlags ; CPU:$CCFC PRG:0CFC ??
lda $030A ; CPU:$CCFE PRG:0CFE ??
ldx #$48 ; CPU:$CD00 PRG:0D00 ??
ldy #$A0 ; CPU:$CD02 PRG:0D02 ??
sta RacketContactFlags ; CPU:$CD04 PRG:0D04 ??
sty RacketTargetX ; CPU:$CD06 PRG:0D06 ??
stx RacketTargetY ; CPU:$CD08 PRG:0D08 ??
jmp EngineRoutine_C21C ; CPU:$CD0A PRG:0D0A ??
; =============================================================================
; PhysicsRoutine_CCF5
; CPU address: $CCF5 PRG offset: $0CF5
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CCF5:
lda #$01 ; CPU:$CD0C PRG:0D0C ??
sta AnimationFrame ; CPU:$CD0E PRG:0D0E ??
lda #$05 ; CPU:$CD10 PRG:0D10 ??
sta PlayerPoseId ; CPU:$CD12 PRG:0D12 ??
lda $0327 ; CPU:$CD14 PRG:0D14 ??
sta PlayerPoseFlags ; CPU:$CD16 PRG:0D16 ??
lda $032A ; CPU:$CD18 PRG:0D18 ??
ldx #$B8 ; CPU:$CD1A PRG:0D1A ??
ldy #$A0 ; CPU:$CD1C PRG:0D1C ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0D09-$0D0A.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_CD09:
.byte $D0, $E1 ; PRG $0D09 / CPU $CD09 ; CPU:$CD1E PRG:0D1E D0 E1
; =============================================================================
; PhysicsRoutine_CD0B
; CPU address: $CD0B PRG offset: $0D0B
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CD0B:
lda #$00 ; CPU:$CD20 PRG:0D20 ??
sta ObjectDataPointerLo ; CPU:$CD22 PRG:0D22 ??
lda #$03 ; CPU:$CD24 PRG:0D24 ??
sta ObjectDataPointerHi ; CPU:$CD26 PRG:0D26 ??
lda #$00 ; CPU:$CD28 PRG:0D28 ??
sta ObjectDataOffset ; CPU:$CD2A PRG:0D2A ??
lda #$01 ; CPU:$CD2C PRG:0D2C ??
sta ActiveObjectIndex ; CPU:$CD2E PRG:0D2E ??
ldx Zp1B ; CPU:$CD30 PRG:0D30 ??
ldy Zp1D ; CPU:$CD32 PRG:0D32 ??
lda PlayerCourtOrder ; CPU:$CD34 PRG:0D34 ??
beq Flow_CD27 ; CPU:$CD36 PRG:0D36 ??
ldx Zp1D ; CPU:$CD38 PRG:0D38 ??
ldy Zp1B ; CPU:$CD3A PRG:0D3A ??
Flow_CD27:
stx $0310 ; CPU:$CD3C PRG:0D3C ??
sty $0330 ; CPU:$CD3E PRG:0D3E ??
Flow_CD2D:
jsr EngineRoutine_C1F3 ; CPU:$CD40 PRG:0D40 ??
lda AnimationFrame ; CPU:$CD42 PRG:0D42 ??
beq Flow_CD50 ; CPU:$CD44 PRG:0D44 ??
lda BallTrajectoryFlags ; CPU:$CD46 PRG:0D46 ??
bpl Flow_CD3E ; CPU:$CD48 PRG:0D48 ??
jsr PhysicsRoutine_D580 ; CPU:$CD4A PRG:0D4A ??
jmp Flow_CD44 ; CPU:$CD4C PRG:0D4C ??
Flow_CD3E:
jsr PhysicsRoutine_CD58 ; CPU:$CD4E PRG:0D4E ??
jsr PhysicsRoutine_D0D9 ; CPU:$CD50 PRG:0D50 ??
Flow_CD44:
jsr PhysicsRoutine_D20E ; CPU:$CD52 PRG:0D52 ??
jsr PhysicsRoutine_D132 ; CPU:$CD54 PRG:0D54 ??
jsr EngineRoutine_C21C ; CPU:$CD56 PRG:0D56 ??
jsr EngineRoutine_C20E ; CPU:$CD58 PRG:0D58 ??
Flow_CD50:
jsr EngineRoutine_C206 ; CPU:$CD5A PRG:0D5A ??
dec ActiveObjectIndex ; CPU:$CD5C PRG:0D5C ??
bpl Flow_CD2D ; CPU:$CD5E PRG:0D5E ??
rts ; CPU:$CD60 PRG:0D60 ??
; =============================================================================
; PhysicsRoutine_CD58
; CPU address: $CD58 PRG offset: $0D58
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CD58:
lda PlayerFacingDirection ; CPU:$CD62 PRG:0D62 ??
cmp #$FF ; CPU:$CD64 PRG:0D64 ??
beq Flow_CD61 ; CPU:$CD66 PRG:0D66 ??
jmp Flow_CD92 ; CPU:$CD68 PRG:0D68 ??
Flow_CD61:
lda PlayerAnimationId ; CPU:$CD6A PRG:0D6A ??
bne Flow_CD83 ; CPU:$CD6C PRG:0D6C ??
lda RallyFlags ; CPU:$CD6E PRG:0D6E ??
and #$C0 ; CPU:$CD70 PRG:0D70 ??
beq Flow_CD7A ; CPU:$CD72 PRG:0D72 ??
sta AnimationTimer ; CPU:$CD74 PRG:0D74 ??
lda ObjectAnimationFrame ; CPU:$CD76 PRG:0D76 ??
sta PlayerAnimationId ; CPU:$CD78 PRG:0D78 ??
jsr PhysicsRoutine_D08B ; CPU:$CD7A PRG:0D7A ??
jsr PhysicsRoutine_CE7E ; CPU:$CD7C PRG:0D7C ??
jmp Flow_CDC1 ; CPU:$CD7E PRG:0D7E ??
Flow_CD7A:
jsr PhysicsRoutine_D497 ; CPU:$CD80 PRG:0D80 ??
jsr PhysicsRoutine_CDC5 ; CPU:$CD82 PRG:0D82 ??
jmp Flow_CDC1 ; CPU:$CD84 PRG:0D84 ??
Flow_CD83:
bit RacketAimOffset ; CPU:$CD86 PRG:0D86 ??
bmi Flow_CDC1 ; CPU:$CD88 PRG:0D88 ??
jsr PhysicsRoutine_CFD2 ; CPU:$CD8A PRG:0D8A ??
bpl Flow_CDC1 ; CPU:$CD8C PRG:0D8C ??
jsr PhysicsRoutine_CECA ; CPU:$CD8E PRG:0D8E ??
jmp Flow_CDC1 ; CPU:$CD90 PRG:0D90 ??
Flow_CD92:
lda PlayerAnimationId ; CPU:$CD92 PRG:0D92 ??
bne Flow_CDBE ; CPU:$CD94 PRG:0D94 ??
lda RallyFlags ; CPU:$CD96 PRG:0D96 ??
and #$C0 ; CPU:$CD98 PRG:0D98 ??
beq Flow_CDBE ; CPU:$CD9A PRG:0D9A ??
ldy ObjectAnimationFrame ; CPU:$CD9C PRG:0D9C ??
sty PlayerAnimationId ; CPU:$CD9E PRG:0D9E ??
and #$80 ; CPU:$CDA0 PRG:0DA0 ??
beq Flow_CDAE ; CPU:$CDA2 PRG:0DA2 ??
ldy #$38 ; CPU:$CDA4 PRG:0DA4 ??
lda CourtSide ; CPU:$CDA6 PRG:0DA6 ??
beq Flow_CDB6 ; CPU:$CDA8 PRG:0DA8 ??
ldy #$49 ; CPU:$CDAA PRG:0DAA ??
bne Flow_CDB6 ; CPU:$CDAC PRG:0DAC ??
Flow_CDAE:
ldy #$95 ; CPU:$CDAE PRG:0DAE ??
lda CourtSide ; CPU:$CDB0 PRG:0DB0 ??
beq Flow_CDB6 ; CPU:$CDB2 PRG:0DB2 ??
ldy #$A6 ; CPU:$CDB4 PRG:0DB4 ??
Flow_CDB6:
sty PoseSequenceOffset ; CPU:$CDB6 PRG:0DB6 ??
lda #$00 ; CPU:$CDB8 PRG:0DB8 ??
sta PoseFrameTimer ; CPU:$CDBA PRG:0DBA ??
beq Flow_CDC1 ; CPU:$CDBC PRG:0DBC ??
Flow_CDBE:
jsr PhysicsRoutine_CDC5 ; CPU:$CDBE PRG:0DBE ??
Flow_CDC1:
jsr PhysicsRoutine_D27D ; CPU:$CDC0 PRG:0DC0 ??
rts ; CPU:$CDC2 PRG:0DC2 ??
; =============================================================================
; PhysicsRoutine_CDC5
; CPU address: $CDC5 PRG offset: $0DC5
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CDC5:
lda PlayerAnimationId ; CPU:$CDC4 PRG:0DC4 ??
bne Flow_CE02 ; CPU:$CDC6 PRG:0DC6 ??
lda PlayerFacingDirection ; CPU:$CDC8 PRG:0DC8 ??
cmp #$FF ; CPU:$CDCA PRG:0DCA ??
bne Flow_CE03 ; CPU:$CDCC PRG:0DCC ??
lda PoseSequenceOffset ; CPU:$CDCE PRG:0DCE ??
cmp #$37 ; CPU:$CDD0 PRG:0DD0 ??
bcs Flow_CE02 ; CPU:$CDD2 PRG:0DD2 ??
cmp #$0D ; CPU:$CDD4 PRG:0DD4 ??
bcc Flow_CDE7 ; CPU:$CDD6 PRG:0DD6 ??
cmp #$29 ; CPU:$CDD8 PRG:0DD8 ??
bcs Flow_CDF1 ; CPU:$CDDA PRG:0DDA ??
ldy #$C8 ; CPU:$CDDC PRG:0DDC ??
lda CourtSide ; CPU:$CDDE PRG:0DDE ??
beq Flow_CDFF ; CPU:$CDE0 PRG:0DE0 ??
ldy #$D3 ; CPU:$CDE2 PRG:0DE2 ??
bne Flow_CDFF ; CPU:$CDE4 PRG:0DE4 ??
Flow_CDE7:
ldy #$D0 ; CPU:$CDE6 PRG:0DE6 ??
lda CourtSide ; CPU:$CDE8 PRG:0DE8 ??
bne Flow_CDFF ; CPU:$CDEA PRG:0DEA ??
ldy #$00 ; CPU:$CDEC PRG:0DEC ??
beq Flow_CDF9 ; CPU:$CDEE PRG:0DEE ??
Flow_CDF1:
ldy #$C5 ; CPU:$CDF0 PRG:0DF0 ??
lda CourtSide ; CPU:$CDF2 PRG:0DF2 ??
beq Flow_CDFF ; CPU:$CDF4 PRG:0DF4 ??
ldy #$2A ; CPU:$CDF6 PRG:0DF6 ??
Flow_CDF9:
lda RallyFlags ; CPU:$CDF8 PRG:0DF8 ??
and #$0F ; CPU:$CDFA PRG:0DFA ??
bne Flow_CE02 ; CPU:$CDFC PRG:0DFC ??
Flow_CDFF:
jmp Flow_CE55 ; CPU:$CDFE PRG:0DFE ??
Flow_CE02:
rts ; CPU:$CE00 PRG:0E00 ??
Flow_CE03:
lda PoseSequenceOffset ; CPU:$CE02 PRG:0E02 ??
cmp #$37 ; CPU:$CE04 PRG:0E04 ??
bcs Flow_CE5B ; CPU:$CE06 PRG:0E06 ??
cmp #$0D ; CPU:$CE08 PRG:0E08 ??
bcc Flow_CE2D ; CPU:$CE0A PRG:0E0A ??
cmp #$29 ; CPU:$CE0C PRG:0E0C ??
bcs Flow_CE41 ; CPU:$CE0E PRG:0E0E ??
lda RallyFlags ; CPU:$CE10 PRG:0E10 ??
and #$0F ; CPU:$CE12 PRG:0E12 ??
beq Flow_CE5C ; CPU:$CE14 PRG:0E14 ??
ldy #$C8 ; CPU:$CE16 PRG:0E16 ??
and #$03 ; CPU:$CE18 PRG:0E18 ??
beq Flow_CE25 ; CPU:$CE1A PRG:0E1A ??
cmp #$01 ; CPU:$CE1C PRG:0E1C ??
beq Flow_CE55 ; CPU:$CE1E PRG:0E1E ??
Flow_CE21:
ldy #$D3 ; CPU:$CE20 PRG:0E20 ??
bne Flow_CE55 ; CPU:$CE22 PRG:0E22 ??
Flow_CE25:
lda RacketTargetY ; CPU:$CE24 PRG:0E24 ??
cmp #$80 ; CPU:$CE26 PRG:0E26 ??
bcc Flow_CE55 ; CPU:$CE28 PRG:0E28 ??
bcs Flow_CE21 ; CPU:$CE2A PRG:0E2A ??
Flow_CE2D:
ldx #$00 ; CPU:$CE2C PRG:0E2C ??
stx CourtSide ; CPU:$CE2E PRG:0E2E ??
ldy #$00 ; CPU:$CE30 PRG:0E30 ??
lda RallyFlags ; CPU:$CE32 PRG:0E32 ??
and #$0F ; CPU:$CE34 PRG:0E34 ??
beq Flow_CE55 ; CPU:$CE36 PRG:0E36 ??
ldy #$D0 ; CPU:$CE38 PRG:0E38 ??
and #$02 ; CPU:$CE3A PRG:0E3A ??
bne Flow_CE55 ; CPU:$CE3C PRG:0E3C ??
beq Flow_CE5B ; CPU:$CE3E PRG:0E3E ??
Flow_CE41:
ldx #$01 ; CPU:$CE40 PRG:0E40 ??
stx CourtSide ; CPU:$CE42 PRG:0E42 ??
ldy #$2A ; CPU:$CE44 PRG:0E44 ??
lda RallyFlags ; CPU:$CE46 PRG:0E46 ??
and #$0F ; CPU:$CE48 PRG:0E48 ??
beq Flow_CE55 ; CPU:$CE4A PRG:0E4A ??
ldy #$C5 ; CPU:$CE4C PRG:0E4C ??
and #$01 ; CPU:$CE4E PRG:0E4E ??
bne Flow_CE55 ; CPU:$CE50 PRG:0E50 ??
beq Flow_CE5B ; CPU:$CE52 PRG:0E52 ??
Flow_CE55:
sty PoseSequenceOffset ; CPU:$CE54 PRG:0E54 ??
lda #$00 ; CPU:$CE56 PRG:0E56 ??
sta PoseFrameTimer ; CPU:$CE58 PRG:0E58 ??
Flow_CE5B:
rts ; CPU:$CE5A PRG:0E5A ??
Flow_CE5C:
ldx #$0E ; CPU:$CE5C PRG:0E5C ??
lda PoseSequenceOffset ; CPU:$CE5E PRG:0E5E ??
cmp #$1B ; CPU:$CE60 PRG:0E60 ??
bcc Flow_CE66 ; CPU:$CE62 PRG:0E62 ??
ldx #$1C ; CPU:$CE64 PRG:0E64 ??
Flow_CE66:
stx MathResultHi ; CPU:$CE66 PRG:0E66 ??
ldy #$0E ; CPU:$CE68 PRG:0E68 ??
ldx #$00 ; CPU:$CE6A PRG:0E6A ??
lda RacketTargetY ; CPU:$CE6C PRG:0E6C ??
cmp #$80 ; CPU:$CE6E PRG:0E6E ??
bcc Flow_CE76 ; CPU:$CE70 PRG:0E70 ??
ldy #$1C ; CPU:$CE72 PRG:0E72 ??
ldx #$01 ; CPU:$CE74 PRG:0E74 ??
Flow_CE76:
stx CourtSide ; CPU:$CE76 PRG:0E76 ??
cpy MathResultHi ; CPU:$CE78 PRG:0E78 ??
beq Flow_CE5B ; CPU:$CE7A PRG:0E7A ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0E7C-$0E7D.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_CE7C:
.byte $D0, $D7 ; PRG $0E7C / CPU $CE7C ; CPU:$CE7C PRG:0E7C D0 D7
; =============================================================================
; PhysicsRoutine_CE7E
; CPU address: $CE7E PRG offset: $0E7E
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CE7E:
ldx #$00 ; CPU:$CE7E PRG:0E7E ??
bit RallyFlags ; CPU:$CE80 PRG:0E80 ??
bmi Flow_CE86 ; CPU:$CE82 PRG:0E82 ??
ldx #$06 ; CPU:$CE84 PRG:0E84 ??
Flow_CE86:
lda RacketTargetX ; CPU:$CE86 PRG:0E86 ??
cmp #$A8 ; CPU:$CE88 PRG:0E88 ??
bcs Flow_CE8F ; CPU:$CE8A PRG:0E8A ??
inx ; CPU:$CE8C PRG:0E8C ??
inx ; CPU:$CE8E PRG:0E8E ??
inx ; CPU:$CE90 PRG:0E90 ??
Flow_CE8F:
lda BallHeight ; CPU:$CE92 PRG:0E92 ??
cmp #$10 ; CPU:$CE94 PRG:0E94 ??
bcc Flow_CE9B ; CPU:$CE96 PRG:0E96 ??
inx ; CPU:$CE98 PRG:0E98 ??
cmp #$80 ; CPU:$CE9A PRG:0E9A ??
bcc Flow_CE9B ; CPU:$CE9C PRG:0E9C ??
inx ; CPU:$CE9E PRG:0E9E ??
Flow_CE9B:
stx ObjectAnimationState ; CPU:$CEA0 PRG:0EA0 ??
lda CourtSide ; CPU:$CEA2 PRG:0EA2 ??
bne Flow_CEA7 ; CPU:$CEA4 PRG:0EA4 ??
lda $CEB1,x ; CPU:$CEA6 PRG:0EA6 ??
jmp Flow_CEAA ; CPU:$CEA8 PRG:0EA8 ??
Flow_CEA7:
lda $CEBD,x ; CPU:$CEAA PRG:0EAA ??
Flow_CEAA:
sta PoseSequenceOffset ; CPU:$CEAC PRG:0EAC ??
lda #$01 ; CPU:$CEAE PRG:0EAE ??
sta PoseFrameTimer ; CPU:$CEB0 PRG:0EB0 ??
rts ; CPU:$CEB2 PRG:0EB2 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0EB1-$0EC9.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
BallStateTransitionParameterTable:
.byte $38, $38, $5A, $79, $79, $5A, $95, $95, $38, $95, $95, $38, $49, $49, $6B, $87 ; PRG $0EB1 / CPU $CEB1 ; CPU:$CEB4 PRG:0EB4 38 38 5A 79 79 5A 95 95 38 95 95 38 49 49 6B 87
.byte $87, $6B, $A6, $A6, $49, $A6, $A6, $49 ; PRG $0EC1 / CPU $CEC1 ; CPU:$CEC4 PRG:0EC4 87 6B A6 A6 49 A6 A6 49
FlowEntry_CEC9:
.byte $60 ; PRG $0EC9 / CPU $CEC9 ; CPU:$CECC PRG:0ECC 60
; =============================================================================
; PhysicsRoutine_CECA
; CPU address: $CECA PRG offset: $0ECA
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CECA:
lda ObjectAnimationState ; CPU:$CECD PRG:0ECD ??
cmp #$02 ; CPU:$CECF PRG:0ECF ??
beq Flow_CED4 ; CPU:$CED1 PRG:0ED1 ??
cmp #$05 ; CPU:$CED3 PRG:0ED3 ??
bne Flow_CEDE ; CPU:$CED5 PRG:0ED5 ??
Flow_CED4:
ldx #$06 ; CPU:$CED7 PRG:0ED7 ??
ldy CourtSide ; CPU:$CED9 PRG:0ED9 ??
beq Flow_CEE6 ; CPU:$CEDB PRG:0EDB ??
ldx #$FA ; CPU:$CEDD PRG:0EDD ??
bne Flow_CEE6 ; CPU:$CEDF PRG:0EDF ??
Flow_CEDE:
ldx #$0C ; CPU:$CEE1 PRG:0EE1 ??
ldy CourtSide ; CPU:$CEE3 PRG:0EE3 ??
beq Flow_CEE6 ; CPU:$CEE5 PRG:0EE5 ??
ldx #$F3 ; CPU:$CEE7 PRG:0EE7 ??
Flow_CEE6:
stx Zp11 ; CPU:$CEE9 PRG:0EE9 ??
lda RacketTargetY ; CPU:$CEEB PRG:0EEB ??
clc ; CPU:$CEED PRG:0EED ??
adc Zp11 ; CPU:$CEEF PRG:0EEF ??
sec ; CPU:$CEF1 PRG:0EF1 ??
sbc BallHeightReference ; CPU:$CEF3 PRG:0EF3 ??
bcc Flow_CEF8 ; CPU:$CEF5 PRG:0EF5 ??
cmp #$0A ; CPU:$CEF7 PRG:0EF7 ??
bcs FlowEntry_CEC9 ; CPU:$CEF9 PRG:0EF9 ??
bcc Flow_CEFC ; CPU:$CEFB PRG:0EFB ??
Flow_CEF8:
cmp #$F6 ; CPU:$CEFD PRG:0EFD ??
bcc FlowEntry_CEC9 ; CPU:$CEFF PRG:0EFF ??
Flow_CEFC:
lda BallHeight ; CPU:$CF01 PRG:0F01 ??
cmp #$05 ; CPU:$CF03 PRG:0F03 ??
bcc FlowEntry_CEC9 ; CPU:$CF05 PRG:0F05 ??
cmp #$B0 ; CPU:$CF07 PRG:0F07 ??
bcs FlowEntry_CEC9 ; CPU:$CF09 PRG:0F09 ??
lda ActiveObjectIndex ; CPU:$CF0B PRG:0F0B ??
bne Flow_CF14 ; CPU:$CF0D PRG:0F0D ??
bit BallTrajectoryFlags ; CPU:$CF0F PRG:0F0F ??
bvc Flow_CF14 ; CPU:$CF11 PRG:0F11 ??
lda #$02 ; CPU:$CF13 PRG:0F13 ??
sta PlayerActionState ; CPU:$CF15 PRG:0F15 ??
bne FlowEntry_CEC9 ; CPU:$CF17 PRG:0F17 ??
Flow_CF14:
lda ObjectAnimationState ; CPU:$CF19 PRG:0F19 ??
cmp #$08 ; CPU:$CF1B PRG:0F1B ??
beq FlowEntry_CEC9 ; CPU:$CF1D PRG:0F1D ??
cmp #$0B ; CPU:$CF1F PRG:0F1F ??
beq FlowEntry_CEC9 ; CPU:$CF21 PRG:0F21 ??
asl a ; CPU:$CF23 PRG:0F23 ??
asl a ; CPU:$CF25 PRG:0F25 ??
tay ; CPU:$CF27 PRG:0F27 ??
lda $CFA2,y ; CPU:$CF29 PRG:0F29 ??
sta PlayerActionType ; CPU:$CF2B PRG:0F2B ??
iny ; CPU:$CF2D PRG:0F2D ??
lda $CFA2,y ; CPU:$CF2F PRG:0F2F ??
sta PlayerActionParameter ; CPU:$CF31 PRG:0F31 ??
iny ; CPU:$CF33 PRG:0F33 ??
lda $CFA2,y ; CPU:$CF35 PRG:0F35 ??
clc ; CPU:$CF37 PRG:0F37 ??
adc Player2YSubpixel ; CPU:$CF39 PRG:0F39 ??
sta PlayerTargetYLo ; CPU:$CF3B PRG:0F3B ??
iny ; CPU:$CF3D PRG:0F3D ??
lda $CFA2,y ; CPU:$CF3F PRG:0F3F ??
adc Player2YPosition ; CPU:$CF41 PRG:0F41 ??
sta PlayerTargetYHi ; CPU:$CF43 PRG:0F43 ??
lda Player1YSubpixel ; CPU:$CF45 PRG:0F45 ??
sta MathResultLo ; CPU:$CF47 PRG:0F47 ??
lda Player1YPosition ; CPU:$CF49 PRG:0F49 ??
sta MathResultHi ; CPU:$CF4B PRG:0F4B ??
lda PlayerAnimationId ; CPU:$CF4D PRG:0F4D ??
sec ; CPU:$CF4F PRG:0F4F ??
sbc #$13 ; CPU:$CF51 PRG:0F51 ??
ldy ObjectAnimationFrame ; CPU:$CF53 PRG:0F53 ??
cpy #$18 ; CPU:$CF55 PRG:0F55 ??
beq Flow_CF53 ; CPU:$CF57 PRG:0F57 ??
sec ; CPU:$CF59 PRG:0F59 ??
sbc #$05 ; CPU:$CF5B PRG:0F5B ??
Flow_CF53:
ldy CourtSide ; CPU:$CF5D PRG:0F5D ??
beq Flow_CF5C ; CPU:$CF5F PRG:0F5F ??
eor #$FF ; CPU:$CF61 PRG:0F61 ??
clc ; CPU:$CF63 PRG:0F63 ??
adc #$02 ; CPU:$CF65 PRG:0F65 ??
Flow_CF5C:
sta SignedAimDelta ; CPU:$CF67 PRG:0F67 ??
bit SignedAimDelta ; CPU:$CF69 PRG:0F69 ??
bpl Flow_CF67 ; CPU:$CF6B PRG:0F6B ??
eor #$FF ; CPU:$CF6D PRG:0F6D ??
clc ; CPU:$CF6F PRG:0F6F ??
adc #$01 ; CPU:$CF71 PRG:0F71 ??
Flow_CF67:
lsr a ; CPU:$CF73 PRG:0F73 ??
tax ; CPU:$CF75 PRG:0F75 ??
beq Flow_CF8D ; CPU:$CF77 PRG:0F77 ??
lda #$00 ; CPU:$CF79 PRG:0F79 ??
sta MathOperandHi ; CPU:$CF7B PRG:0F7B ??
ldy #$C0 ; CPU:$CF7D PRG:0F7D ??
lda ObjectAnimationFrame ; CPU:$CF7F PRG:0F7F ??
cmp #$18 ; CPU:$CF81 PRG:0F81 ??
bne Flow_CF7B ; CPU:$CF83 PRG:0F83 ??
ldy #$20 ; CPU:$CF85 PRG:0F85 ??
inc MathOperandHi ; CPU:$CF87 PRG:0F87 ??
Flow_CF7B:
sty MathOperandLo ; CPU:$CF89 PRG:0F89 ??
lda SignedAimDelta ; CPU:$CF8B PRG:0F8B ??
bpl Flow_CF87 ; CPU:$CF8D PRG:0F8D ??
jsr Subtract16BitZp12FromZp14 ; CPU:$CF8F PRG:0F8F ??
jmp Flow_CF8A ; CPU:$CF91 PRG:0F91 ??
Flow_CF87:
jsr Add16BitZp12ToZp14 ; CPU:$CF93 PRG:0F93 ??
Flow_CF8A:
dex ; CPU:$CF95 PRG:0F95 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0F8B-$0F8C.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_CF8B:
.byte $D0, $F0 ; PRG $0F8B / CPU $CF8B ; CPU:$CF97 PRG:0F97 D0 F0
Flow_CF8D:
lda MathResultHi ; CPU:$CF99 PRG:0F99 ??
sta PlayerTargetXHi ; CPU:$CF9B PRG:0F9B ??
lda MathResultLo ; CPU:$CF9D PRG:0F9D ??
sta PlayerTargetXLo ; CPU:$CF9F PRG:0F9F ??
lda #$01 ; CPU:$CFA1 PRG:0FA1 ??
sta PlayerActionState ; CPU:$CFA3 PRG:0FA3 ??
lda ActiveObjectIndex ; CPU:$CFA5 PRG:0FA5 ??
sta Zp40 ; CPU:$CFA7 PRG:0FA7 ??
lda #$0A ; CPU:$CFA9 PRG:0FA9 ??
sta PlayerActionDuration ; CPU:$CFAB PRG:0FAB ??
rts ; CPU:$CFAD PRG:0FAD ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $0FA2-$0FD1.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PlayerActionAndTargetOffsetTable:
.byte $00, $01, $80, $0D, $00, $00, $00, $0E, $02, $01, $00, $0B, $01, $01, $00, $09 ; PRG $0FA2 / CPU $CFA2 ; CPU:$CFAF PRG:0FAF 00 01 80 0D 00 00 00 0E 02 01 00 0B 01 01 00 09
.byte $01, $00, $00, $09, $02, $00, $00, $07, $04, $01, $80, $0E, $04, $00, $80, $0E ; PRG $0FB2 / CPU $CFB2 ; CPU:$CFBF PRG:0FBF 01 00 00 09 02 00 00 07 04 01 80 0E 04 00 80 0E
.byte $00, $00, $00, $00, $04, $02, $A0, $0B, $04, $02, $60, $0B, $00, $00, $00, $00 ; PRG $0FC2 / CPU $CFC2 ; CPU:$CFCF PRG:0FCF 00 00 00 00 04 02 A0 0B 04 02 60 0B 00 00 00 00
; =============================================================================
; PhysicsRoutine_CFD2
; CPU address: $CFD2 PRG offset: $0FD2
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_CFD2:
lda PlayerAnimationId ; CPU:$CFDF PRG:0FDF ??
cmp #$09 ; CPU:$CFE1 PRG:0FE1 ??
bcc Flow_D056 ; CPU:$CFE3 PRG:0FE3 ??
jsr PhysicsRoutine_D0A2 ; CPU:$CFE5 PRG:0FE5 ??
bmi Flow_D00F ; CPU:$CFE7 PRG:0FE7 ??
lda PlayerPoseId ; CPU:$CFE9 PRG:0FE9 ??
cmp #$02 ; CPU:$CFEB PRG:0FEB ??
beq Flow_CFEB ; CPU:$CFED PRG:0FED ??
cmp #$07 ; CPU:$CFEF PRG:0FEF ??
beq Flow_CFEB ; CPU:$CFF1 PRG:0FF1 ??
cmp #$18 ; CPU:$CFF3 PRG:0FF3 ??
bne Flow_D00C ; CPU:$CFF5 PRG:0FF5 ??
Flow_CFEB:
ldy PoseFrameTimer ; CPU:$CFF7 PRG:0FF7 ??
dey ; CPU:$CFF9 PRG:0FF9 ??
bne Flow_D00C ; CPU:$CFFB PRG:0FFB ??
lda RacketAimOffset ; CPU:$CFFD PRG:0FFD ??
cmp #$0E ; CPU:$CFFF PRG:0FFF ??
bcs Flow_D00C ; CPU:$D001 PRG:1001 ??
lda PlayerPoseId ; CPU:$D003 PRG:1003 ??
cmp #$18 ; CPU:$D005 PRG:1005 ??
bne Flow_D003 ; CPU:$D007 PRG:1007 ??
lda PlayerAnimationId ; CPU:$D009 PRG:1009 ??
clc ; CPU:$D00B PRG:100B ??
adc #$05 ; CPU:$D00D PRG:100D ??
sta PlayerAnimationId ; CPU:$D00F PRG:100F ??
Flow_D003:
inc PoseFrameTimer ; CPU:$D011 PRG:1011 ??
inc PoseFrameTimer ; CPU:$D013 PRG:1013 ??
lda #$80 ; CPU:$D015 PRG:1015 ??
sta RacketAimOffset ; CPU:$D017 PRG:1017 ??
rts ; CPU:$D019 PRG:1019 ??
Flow_D00C:
lda #$7F ; CPU:$D01B PRG:101B ??
rts ; PRG $100E / CPU $D00E ; CPU:$D01D PRG:101D ??
Flow_D00F:
lda ObjectAnimationState ; CPU:$D01F PRG:101F ??
cmp #$06 ; CPU:$D021 PRG:1021 ??
bcs Flow_D027 ; CPU:$D023 PRG:1023 ??
cmp #$02 ; CPU:$D025 PRG:1025 ??
bcc Flow_D027 ; CPU:$D027 PRG:1027 ??
cmp #$03 ; CPU:$D029 PRG:1029 ??
beq Flow_D021 ; CPU:$D02B PRG:102B ??
cmp #$05 ; CPU:$D02D PRG:102D ??
bne Flow_D05D ; CPU:$D02F PRG:102F ??
Flow_D021:
lda CourtSide ; CPU:$D031 PRG:1031 ??
beq Flow_D066 ; CPU:$D033 PRG:1033 ??
bne Flow_D074 ; CPU:$D035 PRG:1035 ??
Flow_D027:
lda PlayerPoseId ; CPU:$D037 PRG:1037 ??
cmp #$01 ; CPU:$D039 PRG:1039 ??
beq Flow_D043 ; CPU:$D03B PRG:103B ??
cmp #$06 ; CPU:$D03D PRG:103D ??
beq Flow_D043 ; CPU:$D03F PRG:103F ??
cmp #$02 ; CPU:$D041 PRG:1041 ??
beq Flow_D049 ; CPU:$D043 PRG:1043 ??
cmp #$07 ; CPU:$D045 PRG:1045 ??
beq Flow_D049 ; CPU:$D047 PRG:1047 ??
cmp #$03 ; CPU:$D049 PRG:1049 ??
beq Flow_D053 ; CPU:$D04B PRG:104B ??
cmp #$08 ; CPU:$D04D PRG:104D ??
beq Flow_D053 ; CPU:$D04F PRG:104F ??
bne Flow_D056 ; CPU:$D051 PRG:1051 ??
Flow_D043:
lda #$02 ; CPU:$D053 PRG:1053 ??
sta PoseFrameTimer ; CPU:$D055 PRG:1055 ??
bne Flow_D053 ; CPU:$D057 PRG:1057 ??
Flow_D049:
lda PoseFrameTimer ; CPU:$D059 PRG:1059 ??
cmp #$03 ; CPU:$D05B PRG:105B ??
bcs Flow_D053 ; CPU:$D05D PRG:105D ??
lda #$03 ; CPU:$D05F PRG:105F ??
sta PoseFrameTimer ; CPU:$D061 PRG:1061 ??
Flow_D053:
lda #$80 ; CPU:$D063 PRG:1063 ??
rts
; PRG $1055 / CPU $D055
Flow_D056:
lda #$80 ; CPU:$D065 PRG:1065 ??
sta RacketAimOffset ; CPU:$D067 PRG:1067 ??
lda #$7F ; CPU:$D069 PRG:1069 ??
rts ; CPU:$D06B PRG:106B ??
Flow_D05D:
inc PlayerAnimationId ; CPU:$D06D PRG:106D ??
inc PlayerAnimationId ; CPU:$D06F PRG:106F ??
inc PlayerAnimationId ; CPU:$D071 PRG:1071 ??
jmp Flow_D027 ; CPU:$D073 PRG:1073 ??
Flow_D066:
dec PlayerAnimationId ; CPU:$D075 PRG:1075 ??
lda PlayerPoseId ; CPU:$D077 PRG:1077 ??
cmp #$13 ; CPU:$D079 PRG:1079 ??
beq Flow_D049 ; CPU:$D07B PRG:107B ??
cmp #$14 ; CPU:$D07D PRG:107D ??
beq Flow_D049 ; CPU:$D07F PRG:107F ??
bne Flow_D056 ; CPU:$D081 PRG:1081 ??
Flow_D074:
lda PlayerAnimationId ; CPU:$D083 PRG:1083 ??
clc ; CPU:$D085 PRG:1085 ??
adc #$05 ; CPU:$D087 PRG:1087 ??
sta PlayerAnimationId ; CPU:$D089 PRG:1089 ??
lda PlayerPoseId ; CPU:$D08B PRG:108B ??
cmp #$17 ; CPU:$D08D PRG:108D ??
beq Flow_D043 ; CPU:$D08F PRG:108F ??
cmp #$18 ; CPU:$D091 PRG:1091 ??
beq Flow_D049 ; CPU:$D093 PRG:1093 ??
cmp #$19 ; CPU:$D095 PRG:1095 ??
beq Flow_D053 ; CPU:$D097 PRG:1097 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1089-$108A.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_D089:
.byte $D0, $CB ; PRG $1089 / CPU $D089 ; CPU:$D099 PRG:1099 D0 CB
; =============================================================================
; PhysicsRoutine_D08B
; CPU address: $D08B PRG offset: $108B
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D08B:
lda RacketTargetX ; CPU:$D09B PRG:109B ??
clc ; CPU:$D09D PRG:109D ??
adc #$06 ; CPU:$D09F PRG:109F ??
sec ; CPU:$D0A1 PRG:10A1 ??
sbc BallTargetOffset ; CPU:$D0A3 PRG:10A3 ??
Flow_D093:
bcc Flow_D09B ; CPU:$D0A5 PRG:10A5 ??
bpl Flow_D09F ; CPU:$D0A7 PRG:10A7 ??
lda #$7F ; CPU:$D0A9 PRG:10A9 ??
bpl Flow_D09F ; CPU:$D0AB PRG:10AB ??
Flow_D09B:
bmi Flow_D09F ; CPU:$D0AD PRG:10AD ??
lda #$80 ; CPU:$D0AF PRG:10AF ??
Flow_D09F:
sta RacketAimOffset ; CPU:$D0B1 PRG:10B1 ??
rts ; CPU:$D0B3 PRG:10B3 ??
; =============================================================================
; PhysicsRoutine_D0A2
; CPU address: $D0A2 PRG offset: $10A2
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D0A2:
ldy PlayerPoseId ; CPU:$D0B5 PRG:10B5 ??
lda $D0B1,y ; CPU:$D0B7 PRG:10B7 ??
clc ; CPU:$D0B9 PRG:10B9 ??
adc RacketTargetX ; CPU:$D0BB PRG:10BB ??
sec ; CPU:$D0BD PRG:10BD ??
sbc $0388 ; CPU:$D0BF PRG:10BF ??
jmp Flow_D093 ; CPU:$D0C1 PRG:10C1 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $10B1-$10D8.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PlayerPoseRacketXOffsetTable:
.byte $03, $F8, $F4, $E6, $00, $03, $F8, $F4, $E6, $00, $00, $00, $00, $00, $00, $00 ; PRG $10B1 / CPU $D0B1 ; CPU:$D0C3 PRG:10C3 03 F8 F4 E6 00 03 F8 F4 E6 00 00 00 00 00 00 00
.byte $00, $00, $00, $E4, $D4, $00, $00, $F8, $E4, $D4, $00, $00, $00, $00, $00, $00 ; PRG $10C1 / CPU $D0C1 ; CPU:$D0D3 PRG:10D3 00 00 00 E4 D4 00 00 F8 E4 D4 00 00 00 00 00 00
.byte $00, $00, $00, $00, $00, $00, $00, $00 ; PRG $10D1 / CPU $D0D1 ; CPU:$D0E3 PRG:10E3 00 00 00 00 00 00 00 00
; =============================================================================
; PhysicsRoutine_D0D9
; CPU address: $D0D9 PRG offset: $10D9
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D0D9:
jsr PhysicsRoutine_D0FA ; CPU:$D0EB PRG:10EB ??
lda PlayerActionDuration ; CPU:$D0ED PRG:10ED ??
beq Flow_D0E2 ; CPU:$D0EF PRG:10EF ??
dec PlayerActionDuration ; CPU:$D0F1 PRG:10F1 ??
Flow_D0E2:
beq Flow_D0EF ; CPU:$D0F3 PRG:10F3 ??
lda PlayerActionState ; CPU:$D0F5 PRG:10F5 ??
cmp #$02 ; CPU:$D0F7 PRG:10F7 ??
bne Flow_D0EE ; CPU:$D0F9 PRG:10F9 ??
dec PlayerActionState ; CPU:$D0FB PRG:10FB ??
dec PlayerActionState ; CPU:$D0FD PRG:10FD ??
Flow_D0EE:
rts ; CPU:$D0FF PRG:10FF ??
Flow_D0EF:
lda PlayerActionState ; CPU:$D101 PRG:1101 ??
cmp #$02 ; CPU:$D103 PRG:1103 ??
bne FlowEntry_D0F9 ; CPU:$D105 PRG:1105 ??
lda #$0A ; CPU:$D107 PRG:1107 ??
sta PlayerActionDuration ; CPU:$D109 PRG:1109 ??
FlowEntry_D0F9:
rts ; PRG $10F9 / CPU $D0F9 ; CPU:$D10B PRG:110B ??
; =============================================================================
; PhysicsRoutine_D0FA
; CPU address: $D0FA PRG offset: $10FA
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D0FA:
lda PreviousPlayerState ; CPU:$D10D PRG:110D ??
sta Zp11 ; CPU:$D10F PRG:110F ??
lda RacketTargetX ; CPU:$D111 PRG:1111 ??
sec ; CPU:$D113 PRG:1113 ??
sbc BallTargetOffset ; CPU:$D115 PRG:1115 ??
bcc Flow_D10C ; CPU:$D117 PRG:1117 ??
bpl Flow_D110 ; CPU:$D119 PRG:1119 ??
lda #$7F ; CPU:$D11B PRG:111B ??
jmp Flow_D110 ; CPU:$D11D PRG:111D ??
Flow_D10C:
bmi Flow_D110 ; CPU:$D11F PRG:111F ??
lda #$80 ; CPU:$D121 PRG:1121 ??
Flow_D110:
sta PreviousPlayerState ; CPU:$D123 PRG:1123 ??
eor Zp11 ; CPU:$D125 PRG:1125 ??
bpl FlowEntry_D131 ; CPU:$D127 PRG:1127 ??
lda RacketTargetY ; CPU:$D129 PRG:1129 ??
sec ; CPU:$D12B PRG:112B ??
sbc BallHeightReference ; CPU:$D12D PRG:112D ??
bpl Flow_D123 ; CPU:$D12F PRG:112F ??
cmp #$FC ; CPU:$D131 PRG:1131 ??
bcs Flow_D127 ; CPU:$D133 PRG:1133 ??
bcc FlowEntry_D131 ; CPU:$D135 PRG:1135 ??
Flow_D123:
cmp #$04 ; CPU:$D137 PRG:1137 ??
bcs FlowEntry_D131 ; CPU:$D139 PRG:1139 ??
Flow_D127:
lda BallHeight ; CPU:$D13B PRG:113B ??
cmp #$58 ; CPU:$D13D PRG:113D ??
bcs FlowEntry_D131 ; CPU:$D13F PRG:113F ??
lda #$02 ; CPU:$D141 PRG:1141 ??
sta PlayerActionState ; CPU:$D143 PRG:1143 ??
FlowEntry_D131:
rts ; PRG $1131 / CPU $D131 ; CPU:$D145 PRG:1145 ??
; =============================================================================
; PhysicsRoutine_D132
; CPU address: $D132 PRG offset: $1132
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D132:
lda GameMode ; CPU:$D147 PRG:1147 ??
beq FlowEntry_D131 ; CPU:$D149 PRG:1149 ??
lda ActiveObjectIndex ; CPU:$D14B PRG:114B ??
beq FlowEntry_D131 ; CPU:$D14D PRG:114D ??
lda PlayerMovementSpeed ; CPU:$D14F PRG:114F ??
sta MathResultHi ; CPU:$D151 PRG:1151 ??
and #$0F ; CPU:$D153 PRG:1153 ??
sta MathResultLo ; CPU:$D155 PRG:1155 ??
ldy #$3D ; CPU:$D157 PRG:1157 ??
lda (ObjectDataPointerLo),y ; CPU:$D159 PRG:1159 ??
and #$0F ; CPU:$D15B PRG:115B ??
sta MathOperandLo ; CPU:$D15D PRG:115D ??
lda #$00 ; CPU:$D15F PRG:115F ??
sta WorkPtrLo ; CPU:$D161 PRG:1161 ??
sta PlayerMovementSpeed ; CPU:$D163 PRG:1163 ??
sta WorkPtrHi ; CPU:$D165 PRG:1165 ??
jsr PhysicsRoutine_D1D3 ; CPU:$D167 PRG:1167 ??
jsr PhysicsRoutine_D1EE ; CPU:$D169 PRG:1169 ??
lda WorkPtrHi ; CPU:$D16B PRG:116B ??
cmp #$30 ; CPU:$D16D PRG:116D ??
beq Flow_D166 ; CPU:$D16F PRG:116F ??
lda #$00 ; CPU:$D171 PRG:1171 ??
sta Zp03 ; CPU:$D173 PRG:1173 ??
sta Zp04 ; CPU:$D175 PRG:1175 ??
beq Flow_D1C4 ; CPU:$D177 PRG:1177 ??
Flow_D166:
lda MathResultHi ; CPU:$D179 PRG:1179 ??
and #$30 ; CPU:$D17B PRG:117B ??
beq Flow_D17E ; CPU:$D17D PRG:117D ??
cmp #$10 ; CPU:$D17F PRG:117F ??
beq PhysicsRoutine_D19A ; CPU:$D181 PRG:1181 ??
cmp #$20 ; CPU:$D183 PRG:1183 ??
beq PhysicsRoutine_D1B0 ; CPU:$D185 PRG:1185 ??
lda MathResultLo ; CPU:$D187 PRG:1187 ??
sta Zp03 ; CPU:$D189 PRG:1189 ??
lda MathOperandLo ; CPU:$D18B PRG:118B ??
sta Zp04 ; CPU:$D18D PRG:118D ??
bpl Flow_D1C4 ; CPU:$D18F PRG:118F ??
Flow_D17E:
jsr PhysicsRoutine_D19A ; CPU:$D191 PRG:1191 ??
lda Zp03 ; CPU:$D193 PRG:1193 ??
sta Zp05 ; CPU:$D195 PRG:1195 ??
lda Zp04 ; CPU:$D197 PRG:1197 ??
sta Zp06 ; CPU:$D199 PRG:1199 ??
jsr PhysicsRoutine_D1B0 ; CPU:$D19B PRG:119B ??
lda Zp03 ; CPU:$D19D PRG:119D ??
ora Zp05 ; CPU:$D19F PRG:119F ??
sta Zp03 ; CPU:$D1A1 PRG:11A1 ??
lda Zp04 ; CPU:$D1A3 PRG:11A3 ??
ora Zp06 ; CPU:$D1A5 PRG:11A5 ??
sta Zp04 ; CPU:$D1A7 PRG:11A7 ??
bpl Flow_D1C4 ; CPU:$D1A9 PRG:11A9 ??
; =============================================================================
; PhysicsRoutine_D19A
; CPU address: $D19A PRG offset: $119A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D19A:
bit WorkPtrLo ; CPU:$D1AB PRG:11AB ??
bpl Flow_D1A7 ; CPU:$D1AD PRG:11AD ??
lda #$04 ; CPU:$D1AF PRG:11AF ??
sta Zp03 ; CPU:$D1B1 PRG:11B1 ??
asl a ; CPU:$D1B3 PRG:11B3 ??
sta Zp04 ; CPU:$D1B5 PRG:11B5 ??
bpl Flow_D1C4 ; CPU:$D1B7 PRG:11B7 ??
Flow_D1A7:
lda #$04 ; CPU:$D1B9 PRG:11B9 ??
sta Zp04 ; CPU:$D1BB PRG:11BB ??
asl a ; CPU:$D1BD PRG:11BD ??
sta Zp03 ; CPU:$D1BF PRG:11BF ??
bpl Flow_D1C4 ; CPU:$D1C1 PRG:11C1 ??
; =============================================================================
; PhysicsRoutine_D1B0
; CPU address: $D1B0 PRG offset: $11B0
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D1B0:
bit WorkPtrLo ; CPU:$D1C3 PRG:11C3 ??
bvc Flow_D1BD ; CPU:$D1C5 PRG:11C5 ??
lda #$01 ; CPU:$D1C7 PRG:11C7 ??
sta Zp03 ; CPU:$D1C9 PRG:11C9 ??
asl a ; CPU:$D1CB PRG:11CB ??
sta Zp04 ; CPU:$D1CD PRG:11CD ??
bpl Flow_D1C4 ; CPU:$D1CF PRG:11CF ??
Flow_D1BD:
lda #$01 ; CPU:$D1D1 PRG:11D1 ??
sta Zp04 ; CPU:$D1D3 PRG:11D3 ??
asl a ; CPU:$D1D5 PRG:11D5 ??
sta Zp03 ; CPU:$D1D7 PRG:11D7 ??
Flow_D1C4:
lda WorkPtrHi ; CPU:$D1D9 PRG:11D9 ??
ora Zp03 ; CPU:$D1DB PRG:11DB ??
sta PlayerMovementSpeed ; CPU:$D1DD PRG:11DD ??
and #$F0 ; CPU:$D1DF PRG:11DF ??
ora Zp04 ; CPU:$D1E1 PRG:11E1 ??
ldy #$3D ; CPU:$D1E3 PRG:11E3 ??
sta (ObjectDataPointerLo),y ; CPU:$D1E5 PRG:11E5 ??
rts ; CPU:$D1E7 PRG:11E7 ??
; =============================================================================
; PhysicsRoutine_D1D3
; CPU address: $D1D3 PRG offset: $11D3
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D1D3:
lda RacketTargetX ; CPU:$D1E9 PRG:11E9 ??
ldy #$28 ; CPU:$D1EB PRG:11EB ??
sec ; CPU:$D1ED PRG:11ED ??
sbc (ObjectDataPointerLo),y ; CPU:$D1EF PRG:11EF ??
bpl Flow_D1E5 ; CPU:$D1F1 PRG:11F1 ??
eor #$FF ; CPU:$D1F3 PRG:11F3 ??
clc ; CPU:$D1F5 PRG:11F5 ??
adc #$01 ; CPU:$D1F7 PRG:11F7 ??
ldx #$80 ; CPU:$D1F9 PRG:11F9 ??
stx WorkPtrLo ; CPU:$D1FB PRG:11FB ??
Flow_D1E5:
cmp #$0C ; CPU:$D1FD PRG:11FD ??
bcs Flow_D1ED ; CPU:$D1FF PRG:11FF ??
ldx #$20 ; CPU:$D201 PRG:1201 ??
stx WorkPtrHi ; CPU:$D203 PRG:1203 ??
Flow_D1ED:
rts ; CPU:$D205 PRG:1205 ??
; =============================================================================
; PhysicsRoutine_D1EE
; CPU address: $D1EE PRG offset: $11EE
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D1EE:
lda RacketTargetY ; CPU:$D207 PRG:1207 ??
iny ; CPU:$D209 PRG:1209 ??
sec ; CPU:$D20B PRG:120B ??
sbc (ObjectDataPointerLo),y ; CPU:$D20D PRG:120D ??
bpl Flow_D203 ; CPU:$D20F PRG:120F ??
eor #$FF ; CPU:$D211 PRG:1211 ??
clc ; CPU:$D213 PRG:1213 ??
adc #$01 ; CPU:$D215 PRG:1215 ??
tax ; CPU:$D217 PRG:1217 ??
lda #$40 ; CPU:$D219 PRG:1219 ??
ora WorkPtrLo ; CPU:$D21B PRG:121B ??
sta WorkPtrLo ; CPU:$D21D PRG:121D ??
txa ; CPU:$D21F PRG:121F ??
Flow_D203:
cmp #$10 ; CPU:$D221 PRG:1221 ??
bcs FlowEntry_D20D ; CPU:$D223 PRG:1223 ??
lda #$10 ; CPU:$D225 PRG:1225 ??
ora WorkPtrHi ; CPU:$D227 PRG:1227 ??
sta WorkPtrHi ; CPU:$D229 PRG:1229 ??
FlowEntry_D20D:
rts ; PRG $120D / CPU $D20D ; CPU:$D22B PRG:122B ??
; =============================================================================
; PhysicsRoutine_D20E
; CPU address: $D20E PRG offset: $120E
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D20E:
lda RallyPhase ; CPU:$D22D PRG:122D ??
sta MathResultHi ; CPU:$D22F PRG:122F ??
lsr MathResultHi ; CPU:$D231 PRG:1231 ??
bcc Flow_D21E ; CPU:$D233 PRG:1233 ??
lda FrameCounter ; CPU:$D235 PRG:1235 ??
and #$04 ; CPU:$D237 PRG:1237 ??
bne Flow_D21E ; CPU:$D239 PRG:1239 ??
inc MathResultHi ; CPU:$D23B PRG:123B ??
Flow_D21E:
lsr MathResultHi ; CPU:$D23D PRG:123D ??
bcc Flow_D22A ; CPU:$D23F PRG:123F ??
lda FrameCounter ; CPU:$D241 PRG:1241 ??
and #$02 ; CPU:$D243 PRG:1243 ??
bne Flow_D22A ; CPU:$D245 PRG:1245 ??
inc MathResultHi ; CPU:$D247 PRG:1247 ??
Flow_D22A:
lsr MathResultHi ; CPU:$D249 PRG:1249 ??
bcc Flow_D236 ; CPU:$D24B PRG:124B ??
lda FrameCounter ; CPU:$D24D PRG:124D ??
and #$01 ; CPU:$D24F PRG:124F ??
bne Flow_D236 ; CPU:$D251 PRG:1251 ??
inc MathResultHi ; CPU:$D253 PRG:1253 ??
Flow_D236:
lda PlayerMovementSpeed ; CPU:$D255 PRG:1255 ??
eor #$0F ; CPU:$D257 PRG:1257 ??
and RallyFlags ; CPU:$D259 PRG:1259 ??
and #$0F ; CPU:$D25B PRG:125B ??
beq Flow_D27C ; CPU:$D25D PRG:125D ??
tax ; CPU:$D25F PRG:125F ??
and #$04 ; CPU:$D261 PRG:1261 ??
beq Flow_D24F ; CPU:$D263 PRG:1263 ??
lda RacketTargetX ; CPU:$D265 PRG:1265 ??
cmp UmpireAnimationTimer ; CPU:$D267 PRG:1267 ??
bcs Flow_D24F ; CPU:$D269 PRG:1269 ??
adc MathResultHi ; CPU:$D26B PRG:126B ??
sta RacketTargetX ; CPU:$D26D PRG:126D ??
Flow_D24F:
txa ; CPU:$D26F PRG:126F ??
and #$08 ; CPU:$D271 PRG:1271 ??
beq Flow_D25E ; CPU:$D273 PRG:1273 ??
lda RacketTargetX ; CPU:$D275 PRG:1275 ??
cmp BallAnimationTimer ; CPU:$D277 PRG:1277 ??
bcc Flow_D25E ; CPU:$D279 PRG:1279 ??
sbc MathResultHi ; CPU:$D27B PRG:127B ??
sta RacketTargetX ; CPU:$D27D PRG:127D ??
Flow_D25E:
txa ; CPU:$D27F PRG:127F ??
and #$01 ; CPU:$D281 PRG:1281 ??
beq Flow_D26D ; CPU:$D283 PRG:1283 ??
lda RacketTargetY ; CPU:$D285 PRG:1285 ??
cmp PlayerActionDelay ; CPU:$D287 PRG:1287 ??
bcs Flow_D26D ; CPU:$D289 PRG:1289 ??
adc MathResultHi ; CPU:$D28B PRG:128B ??
sta RacketTargetY ; CPU:$D28D PRG:128D ??
Flow_D26D:
txa ; CPU:$D28F PRG:128F ??
and #$02 ; CPU:$D291 PRG:1291 ??
beq Flow_D27C ; CPU:$D293 PRG:1293 ??
lda RacketTargetY ; CPU:$D295 PRG:1295 ??
cmp NetAnimationTimer ; CPU:$D297 PRG:1297 ??
bcc Flow_D27C ; CPU:$D299 PRG:1299 ??
sbc MathResultHi ; CPU:$D29B PRG:129B ??
sta RacketTargetY ; CPU:$D29D PRG:129D ??
Flow_D27C:
rts ; CPU:$D29F PRG:129F ??
; =============================================================================
; PhysicsRoutine_D27D
; CPU address: $D27D PRG offset: $127D
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D27D:
jsr PhysicsRoutine_D2D0 ; CPU:$D2A1 PRG:12A1 ??
jsr PhysicsRoutine_D2C9 ; CPU:$D2A3 PRG:12A3 ??
bne Flow_D2A4 ; CPU:$D2A5 PRG:12A5 ??
lda BallTrajectoryFlags ; CPU:$D2A7 PRG:12A7 ??
and #$42 ; CPU:$D2A9 PRG:12A9 ??
cmp #$40 ; CPU:$D2AB PRG:12AB ??
bne Flow_D2A1 ; CPU:$D2AD PRG:12AD ??
lda PlayerPoseId ; CPU:$D2AF PRG:12AF ??
cmp #$14 ; CPU:$D2B1 PRG:12B1 ??
beq Flow_D29B ; CPU:$D2B3 PRG:12B3 ??
cmp #$13 ; CPU:$D2B5 PRG:12B5 ??
bne Flow_D2A1 ; CPU:$D2B7 PRG:12B7 ??
dec RacketTargetX ; CPU:$D2B9 PRG:12B9 ??
dec RacketTargetX ; CPU:$D2BB PRG:12BB ??
Flow_D29B:
dec RacketTargetX ; CPU:$D2BD PRG:12BD ??
dec RacketTargetX ; CPU:$D2BF PRG:12BF ??
dec RacketTargetX ; CPU:$D2C1 PRG:12C1 ??
Flow_D2A1:
jsr AdvancePlayerPoseSetA ; CPU:$D2C3 PRG:12C3 ??
Flow_D2A4:
rts ; CPU:$D2C5 PRG:12C5 ??
; =============================================================================
; PhysicsRoutine_D2A5
; CPU address: $D2A5 PRG offset: $12A5
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D2A5:
jsr PhysicsRoutine_D2D0 ; CPU:$D2C7 PRG:12C7 ??
jsr PhysicsRoutine_D2C9 ; CPU:$D2C9 PRG:12C9 ??
bne Flow_D2A4 ; CPU:$D2CB PRG:12CB ??
lda BallTrajectoryFlags ; CPU:$D2CD PRG:12CD ??
and #$42 ; CPU:$D2CF PRG:12CF ??
cmp #$42 ; CPU:$D2D1 PRG:12D1 ??
bne Flow_D2C5 ; CPU:$D2D3 PRG:12D3 ??
lda PlayerPoseId ; CPU:$D2D5 PRG:12D5 ??
cmp #$2D ; CPU:$D2D7 PRG:12D7 ??
beq Flow_D2C1 ; CPU:$D2D9 PRG:12D9 ??
cmp #$2C ; CPU:$D2DB PRG:12DB ??
bne Flow_D2C5 ; CPU:$D2DD PRG:12DD ??
inc RacketTargetX ; CPU:$D2DF PRG:12DF ??
Flow_D2C1:
inc RacketTargetX ; CPU:$D2E1 PRG:12E1 ??
inc RacketTargetX ; CPU:$D2E3 PRG:12E3 ??
Flow_D2C5:
jsr AdvancePlayerPoseSetB ; CPU:$D2E5 PRG:12E5 ??
rts ; CPU:$D2E7 PRG:12E7 ??
; =============================================================================
; PhysicsRoutine_D2C9
; CPU address: $D2C9 PRG offset: $12C9
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D2C9:
lda PoseFrameTimer ; CPU:$D2E9 PRG:12E9 ??
beq FlowEntry_D2CF ; CPU:$D2EB PRG:12EB ??
dec PoseFrameTimer ; CPU:$D2ED PRG:12ED ??
FlowEntry_D2CF:
rts ; PRG $12CF / CPU $D2CF ; CPU:$D2EF PRG:12EF ??
; =============================================================================
; PhysicsRoutine_D2D0
; CPU address: $D2D0 PRG offset: $12D0
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D2D0:
lda PlayerAnimationId ; CPU:$D2F1 PRG:12F1 ??
beq Flow_D2D6 ; CPU:$D2F3 PRG:12F3 ??
dec PlayerAnimationId ; CPU:$D2F5 PRG:12F5 ??
Flow_D2D6:
rts ; CPU:$D2F7 PRG:12F7 ??
Flow_D2D7:
iny ; CPU:$D2F9 PRG:12F9 ??
lda $D31C,y ; CPU:$D2FB PRG:12FB ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $12DB-$12DC.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_D2DB:
.byte $85, $B5 ; PRG $12DB / CPU $D2DB ; CPU:$D2FD PRG:12FD 85 B5
; =============================================================================
; AdvancePlayerPoseSetA
; CPU address: $D2DD PRG offset: $12DD
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AdvancePlayerPoseSetA:
ldy PoseSequenceOffset ; CPU:$D2FF PRG:12FF ??
lda $D31C,y ; CPU:$D301 PRG:1301 ??
cmp #$FF ; CPU:$D303 PRG:1303 ??
beq Flow_D2D7 ; CPU:$D305 PRG:1305 ??
sta PlayerPoseId ; CPU:$D307 PRG:1307 ??
iny ; CPU:$D309 PRG:1309 ??
lda ObjectAnimationFrame ; CPU:$D30B PRG:130B ??
cmp #$18 ; CPU:$D30D PRG:130D ??
bne Flow_D2F9 ; CPU:$D30F PRG:130F ??
lda $D31C,y ; CPU:$D311 PRG:1311 ??
iny ; CPU:$D313 PRG:1313 ??
iny ; CPU:$D315 PRG:1315 ??
Flow_D2F4:
sta PoseFrameTimer ; CPU:$D317 PRG:1317 ??
sty PoseSequenceOffset ; CPU:$D319 PRG:1319 ??
rts ; CPU:$D31B PRG:131B ??
Flow_D2F9:
iny ; CPU:$D31D PRG:131D ??
lda $D31C,y ; CPU:$D31F PRG:131F ??
iny ; CPU:$D321 PRG:1321 ??
jmp Flow_D2F4 ; CPU:$D323 PRG:1323 ??
Flow_D301:
iny ; CPU:$D325 PRG:1325 ??
lda $D3F7,y ; CPU:$D327 PRG:1327 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1305-$1306.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_D305:
.byte $85, $B5 ; PRG $1305 / CPU $D305 ; CPU:$D329 PRG:1329 85 B5
; =============================================================================
; AdvancePlayerPoseSetB
; CPU address: $D307 PRG offset: $1307
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AdvancePlayerPoseSetB:
ldy PoseSequenceOffset ; CPU:$D32B PRG:132B ??
lda $D3F7,y ; CPU:$D32D PRG:132D ??
cmp #$FF ; CPU:$D32F PRG:132F ??
beq Flow_D301 ; CPU:$D331 PRG:1331 ??
sta PlayerPoseId ; CPU:$D333 PRG:1333 ??
iny ; CPU:$D335 PRG:1335 ??
lda $D3F7,y ; CPU:$D337 PRG:1337 ??
sta PoseFrameTimer ; CPU:$D339 PRG:1339 ??
iny ; CPU:$D33B PRG:133B ??
sty PoseSequenceOffset ; CPU:$D33D PRG:133D ??
rts ; CPU:$D33F PRG:133F ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $131C-$146E.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PlayerPoseAnimationSetA:
.byte $00, $03, $03, $0D, $03, $03, $0E, $03, $03, $0D, $03, $03, $FF, $00, $0A, $20 ; PRG $131C / CPU $D31C ; CPU:$D341 PRG:1341 00 03 03 0D 03 03 0E 03 03 0D 03 03 FF 00 0A 20
.byte $22, $0B, $26, $28, $0A, $34, $36, $0B, $2A, $2C, $FF, $0E, $3A, $36, $38, $3B ; PRG $132C / CPU $D32C ; CPU:$D351 PRG:1351 22 0B 26 28 0A 34 36 0B 2A 2C FF 0E 3A 36 38 3B
.byte $2A, $2C, $3A, $1E, $20, $3B, $24, $26, $FF, $1C, $05, $03, $03, $0F, $03, $03 ; PRG $133C / CPU $D33C ; CPU:$D361 PRG:1361 2A 2C 3A 1E 20 3B 24 26 FF 1C 05 03 03 0F 03 03
.byte $10, $03, $03, $0F, $03, $03, $FF, $2A, $00, $01, $01, $01, $05, $07, $02, $05 ; PRG $134C / CPU $D34C ; CPU:$D371 PRG:1371 10 03 03 0F 03 03 FF 2A 00 01 01 01 05 07 02 05
.byte $08, $03, $05, $07, $04, $0A, $13, $FF, $0E, $05, $01, $01, $06, $05, $07, $07 ; PRG $135C / CPU $D35C ; CPU:$D381 PRG:1381 08 03 05 07 04 0A 13 FF 0E 05 01 01 06 05 07 07
.byte $05, $08, $08, $05, $07, $09, $0A, $13, $FF, $0E, $00, $01, $01, $13, $06, $08 ; PRG $136C / CPU $D36C ; CPU:$D391 PRG:1391 05 08 08 05 07 09 0A 13 FF 0E 00 01 01 13 06 08
.byte $14, $06, $08, $15, $04, $06, $16, $0A, $13, $FF, $0E, $05, $01, $01, $17, $06 ; PRG $137C / CPU $D37C ; CPU:$D3A1 PRG:13A1 14 06 08 15 04 06 16 0A 13 FF 0E 05 01 01 17 06
.byte $08, $18, $07, $0A, $19, $0C, $15, $FF, $0E, $00, $01, $01, $01, $05, $07, $02 ; PRG $138C / CPU $D38C ; CPU:$D3B1 PRG:13B1 08 18 07 0A 19 0C 15 FF 0E 00 01 01 01 05 07 02
.byte $07, $0A, $03, $0E, $17, $FF, $0E, $05, $01, $01, $06, $05, $07, $07, $07, $0A ; PRG $139C / CPU $D39C ; CPU:$D3C1 PRG:13C1 07 0A 03 0E 17 FF 0E 05 01 01 06 05 07 07 07 0A
.byte $08, $0E, $17, $FF, $0E, $00, $01, $01, $01, $05, $07, $02, $05, $08, $03, $05 ; PRG $13AC / CPU $D3AC ; CPU:$D3D1 PRG:13D1 08 0E 17 FF 0E 00 01 01 01 05 07 02 05 08 03 05
.byte $07, $0C, $0A, $13, $FF, $0E, $05, $01, $01, $06, $05, $07, $07, $05, $08, $08 ; PRG $13BC / CPU $D3BC ; CPU:$D3E1 PRG:13E1 07 0C 0A 13 FF 0E 05 01 01 06 05 07 07 05 08 08
.byte $05, $07, $24, $0A, $13, $FF, $0E, $13, $05, $08, $14, $05, $08, $15, $05, $08 ; PRG $13CC / CPU $D3CC ; CPU:$D3F1 PRG:13F1 05 07 24 0A 13 FF 0E 13 05 08 14 05 08 15 05 08
.byte $16, $0A, $14, $FF, $0E, $07, $04, $06, $02, $04, $06, $01, $04, $06, $FF, $00 ; PRG $13DC / CPU $D3DC ; CPU:$D401 PRG:1401 16 0A 14 FF 0E 07 04 06 02 04 06 01 04 06 FF 00
.byte $03, $04, $06, $07, $04, $06, $06, $04, $06, $FF, $2A, $1A, $03, $25, $03, $26 ; PRG $13EC / CPU $D3EC ; CPU:$D411 PRG:1411 03 04 06 07 04 06 06 04 06 FF 2A 1A 03 25 03 26
.byte $03, $25, $03, $FF, $00, $22, $22, $23, $20, $22, $30, $23, $28, $FF, $0A, $3C ; PRG $13FC / CPU $D3FC ; CPU:$D421 PRG:1421 03 25 03 FF 00 22 22 23 20 22 30 23 28 FF 0A 3C
.byte $20, $3D, $2E, $3C, $24, $3D, $26, $FF, $14, $1E, $03, $27, $03, $28, $03, $27 ; PRG $140C / CPU $D40C ; CPU:$D431 PRG:1431 20 3D 2E 3C 24 3D 26 FF 14 1E 03 27 03 28 03 27
.byte $03, $FF, $1E, $1A, $03, $1B, $06, $1C, $06, $1D, $0A, $FF, $0A, $1E, $03, $1F ; PRG $141C / CPU $D41C ; CPU:$D441 PRG:1441 03 FF 1E 1A 03 1B 06 1C 06 1D 0A FF 0A 1E 03 1F
.byte $06, $20, $06, $21, $0A, $FF, $0A, $1A, $03, $2B, $06, $2C, $06, $2D, $0A, $FF ; PRG $142C / CPU $D42C ; CPU:$D451 PRG:1451 06 20 06 21 0A FF 0A 1A 03 2B 06 2C 06 2D 0A FF
.byte $0A, $1E, $03, $1F, $06, $2E, $06, $21, $0A, $FF, $0A, $1A, $04, $2B, $08, $2C ; PRG $143C / CPU $D43C ; CPU:$D461 PRG:1461 0A 1E 03 1F 06 2E 06 21 0A FF 0A 1A 04 2B 08 2C
.byte $0C, $FF, $0A, $1E, $04, $1F, $08, $2E, $0C, $FF, $0A, $2B, $06, $2C, $06, $2D ; PRG $144C / CPU $D44C ; CPU:$D471 PRG:1471 0C FF 0A 1E 04 1F 08 2E 0C FF 0A 2B 06 2C 06 2D
.byte $0A, $FF, $0A, $20, $04, $1C, $04, $1B, $04, $FF, $00, $1C, $04, $20, $04, $1F ; PRG $145C / CPU $D45C ; CPU:$D481 PRG:1481 0A FF 0A 20 04 1C 04 1B 04 FF 00 1C 04 20 04 1F
.byte $04, $FF, $1E ; PRG $146C / CPU $D46C ; CPU:$D491 PRG:1491 04 FF 1E
; =============================================================================
; PhysicsRoutine_D46F
; CPU address: $D46F PRG offset: $146F
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D46F:
lda #$05 ; CPU:$D494 PRG:1494 ??
ldy CourtSide ; CPU:$D496 PRG:1496 ??
sty Zp0C ; CPU:$D498 PRG:1498 ??
beq Flow_D479 ; CPU:$D49A PRG:149A ??
lda #$F9 ; CPU:$D49C PRG:149C ??
Flow_D479:
clc ; CPU:$D49E PRG:149E ??
adc RacketTargetY ; CPU:$D4A0 PRG:14A0 ??
sta Zp0E ; CPU:$D4A2 PRG:14A2 ??
jsr PhysicsRoutine_D49B ; CPU:$D4A4 PRG:14A4 ??
ldy Zp0C ; CPU:$D4A6 PRG:14A6 ??
sty CourtSide ; CPU:$D4A8 PRG:14A8 ??
rts ; PRG $1485 / CPU $D485 ; CPU:$D4AA PRG:14AA ??
; =============================================================================
; PhysicsRoutine_D486
; CPU address: $D486 PRG offset: $1486
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D486:
jsr PhysicsRoutine_D497 ; CPU:$D4AC PRG:14AC ??
lda #$FB ; CPU:$D4AE PRG:14AE ??
ldy CourtSide ; CPU:$D4B0 PRG:14B0 ??
beq Flow_D491 ; CPU:$D4B2 PRG:14B2 ??
lda #$07 ; CPU:$D4B4 PRG:14B4 ??
Flow_D491:
clc ; CPU:$D4B6 PRG:14B6 ??
adc SignedMovementDelta ; CPU:$D4B8 PRG:14B8 ??
sta SignedMovementDelta ; CPU:$D4BA PRG:14BA ??
rts ; CPU:$D4BC PRG:14BC ??
; =============================================================================
; PhysicsRoutine_D497
; CPU address: $D497 PRG offset: $1497
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D497:
lda RacketTargetY ; CPU:$D4BE PRG:14BE ??
sta Zp0E ; CPU:$D4C0 PRG:14C0 ??
; =============================================================================
; PhysicsRoutine_D49B
; CPU address: $D49B PRG offset: $149B
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D49B:
lda PlayerYPosition ; CPU:$D4C2 PRG:14C2 ??
sec ; CPU:$D4C4 PRG:14C4 ??
sbc RacketTargetX ; CPU:$D4C6 PRG:14C6 ??
tay ; CPU:$D4C8 PRG:14C8 ??
lda #$00 ; CPU:$D4CA PRG:14CA ??
sbc #$00 ; CPU:$D4CC PRG:14CC ??
bpl Flow_D4AA ; CPU:$D4CE PRG:14CE ??
jsr NegateAY16 ; CPU:$D4D0 PRG:14D0 ??
Flow_D4AA:
sta MathVectorXHi ; CPU:$D4D2 PRG:14D2 ??
sty MathVectorXLo ; CPU:$D4D4 PRG:14D4 ??
lda PlayerPreviousX ; CPU:$D4D6 PRG:14D6 ??
sec ; CPU:$D4D8 PRG:14D8 ??
sbc PlayerXPosition ; CPU:$D4DA PRG:14DA ??
sta MathVectorYLo ; CPU:$D4DC PRG:14DC ??
lda #$00 ; CPU:$D4DE PRG:14DE ??
sbc #$00 ; CPU:$D4E0 PRG:14E0 ??
sta MathVectorYHi ; CPU:$D4E2 PRG:14E2 ??
jsr EngineRoutine_C6ED ; CPU:$D4E4 PRG:14E4 ??
jsr EngineRoutine_C62B ; CPU:$D4E6 PRG:14E6 ??
lda PlayerPreviousY ; CPU:$D4E8 PRG:14E8 ??
sec ; CPU:$D4EA PRG:14EA ??
sbc PlayerYPosition ; CPU:$D4EC PRG:14EC ??
tay ; CPU:$D4EE PRG:14EE ??
lda #$00 ; CPU:$D4F0 PRG:14F0 ??
sbc #$00 ; CPU:$D4F2 PRG:14F2 ??
bpl Flow_D4D0 ; CPU:$D4F4 PRG:14F4 ??
jsr NegateAY16 ; CPU:$D4F6 PRG:14F6 ??
Flow_D4D0:
sta MathVectorXHi ; CPU:$D4F8 PRG:14F8 ??
sty MathVectorXLo ; CPU:$D4FA PRG:14FA ??
jsr EngineRoutine_C684 ; CPU:$D4FC PRG:14FC ??
jsr MatchRoutine_C705 ; CPU:$D4FE PRG:14FE ??
lda PlayerXPosition ; CPU:$D500 PRG:1500 ??
clc ; CPU:$D502 PRG:1502 ??
adc MathVectorYLo ; CPU:$D504 PRG:1504 ??
tay ; CPU:$D506 PRG:1506 ??
lda #$00 ; CPU:$D508 PRG:1508 ??
adc MathVectorYHi ; CPU:$D50A PRG:150A ??
tax ; CPU:$D50C PRG:150C ??
tya ; CPU:$D50E PRG:150E ??
sec ; CPU:$D510 PRG:1510 ??
sbc Zp0E ; CPU:$D512 PRG:1512 ??
sta SignedMovementDelta ; CPU:$D514 PRG:1514 ??
txa ; CPU:$D516 PRG:1516 ??
sbc #$00 ; CPU:$D518 PRG:1518 ??
bmi Flow_D4FA ; CPU:$D51A PRG:151A ??
ldy #$00 ; CPU:$D51C PRG:151C ??
bit SignedMovementDelta ; CPU:$D51E PRG:151E ??
bpl Flow_D504 ; CPU:$D520 PRG:1520 ??
ldx #$7F ; CPU:$D522 PRG:1522 ??
bpl Flow_D502 ; CPU:$D524 PRG:1524 ??
Flow_D4FA:
ldy #$01 ; CPU:$D526 PRG:1526 ??
bit SignedMovementDelta ; CPU:$D528 PRG:1528 ??
bmi Flow_D504 ; CPU:$D52A PRG:152A ??
ldx #$80 ; CPU:$D52C PRG:152C ??
Flow_D502:
stx SignedMovementDelta ; CPU:$D52E PRG:152E ??
Flow_D504:
sty CourtSide ; CPU:$D530 PRG:1530 ??
rts ; CPU:$D532 PRG:1532 ??
; =============================================================================
; NegateAY16
; CPU address: $D507 PRG offset: $1507
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
NegateAY16:
tax ; CPU:$D534 PRG:1534 ??
tya ; CPU:$D536 PRG:1536 ??
eor #$FF ; CPU:$D538 PRG:1538 ??
sec ; CPU:$D53A PRG:153A ??
adc #$00 ; CPU:$D53C PRG:153C ??
tay ; CPU:$D53E PRG:153E ??
txa ; CPU:$D540 PRG:1540 ??
eor #$FF ; CPU:$D542 PRG:1542 ??
adc #$00 ; CPU:$D544 PRG:1544 ??
rts ; PRG $1514 / CPU $D514 ; CPU:$D546 PRG:1546 ??
; =============================================================================
; PhysicsRoutine_D515
; CPU address: $D515 PRG offset: $1515
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D515:
lda #$FA ; CPU:$D548 PRG:1548 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1517-$1518.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_D517:
.byte $D0, $02 ; PRG $1517 / CPU $D517 ; CPU:$D54A PRG:154A D0 02
; =============================================================================
; PhysicsRoutine_D519
; CPU address: $D519 PRG offset: $1519
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D519:
lda #$0A ; CPU:$D54C PRG:154C ??
clc ; CPU:$D54E PRG:154E ??
adc RacketTargetY ; CPU:$D550 PRG:1550 ??
sta Zp0E ; CPU:$D552 PRG:1552 ??
lda RacketTargetX ; CPU:$D554 PRG:1554 ??
sta MathOperandLo ; CPU:$D556 PRG:1556 ??
lda #$00 ; CPU:$D558 PRG:1558 ??
sta MathOperandHi ; CPU:$D55A PRG:155A ??
lda #$00 ; CPU:$D55C PRG:155C ??
sta MathResultHi ; CPU:$D55E PRG:155E ??
lda #$93 ; CPU:$D560 PRG:1560 ??
sta MathResultLo ; CPU:$D562 PRG:1562 ??
jsr Add16BitZp12ToZp14 ; CPU:$D564 PRG:1564 ??
lda Zp0E ; CPU:$D566 PRG:1566 ??
eor #$80 ; CPU:$D568 PRG:1568 ??
sta SignedAimDelta ; CPU:$D56A PRG:156A ??
bpl Flow_D540 ; CPU:$D56C PRG:156C ??
eor #$FF ; CPU:$D56E PRG:156E ??
sec ; CPU:$D570 PRG:1570 ??
adc #$00 ; CPU:$D572 PRG:1572 ??
Flow_D540:
sta MathVectorXLo ; CPU:$D574 PRG:1574 ??
lda #$00 ; CPU:$D576 PRG:1576 ??
sta MathVectorXHi ; CPU:$D578 PRG:1578 ??
lda #$B3 ; CPU:$D57A PRG:157A ??
sta MathVectorYLo ; CPU:$D57C PRG:157C ??
lda #$0F ; CPU:$D57E PRG:157E ??
sta MathVectorYHi ; CPU:$D580 PRG:1580 ??
jsr EngineRoutine_C62B ; CPU:$D582 PRG:1582 ??
lda MathResultHi ; CPU:$D584 PRG:1584 ??
sta MathVectorXHi ; CPU:$D586 PRG:1586 ??
lda MathResultLo ; CPU:$D588 PRG:1588 ??
sta MathVectorXLo ; CPU:$D58A PRG:158A ??
jsr EngineRoutine_C684 ; CPU:$D58C PRG:158C ??
lda SignedAimDelta ; CPU:$D58E PRG:158E ??
bpl Flow_D563 ; CPU:$D590 PRG:1590 ??
jsr EngineRoutine_C6F3 ; CPU:$D592 PRG:1592 ??
Flow_D563:
lda MathVectorYHi ; CPU:$D594 PRG:1594 ??
clc ; CPU:$D596 PRG:1596 ??
adc #$10 ; CPU:$D598 PRG:1598 ??
sta ContactPointY ; CPU:$D59A PRG:159A ??
lda MathVectorYLo ; CPU:$D59C PRG:159C ??
sta ContactPointX ; CPU:$D59E PRG:159E ??
rts ; CPU:$D5A0 PRG:15A0 ??
; =============================================================================
; Subtract16BitZp12FromZp14
; CPU address: $D56F PRG offset: $156F
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
Subtract16BitZp12FromZp14:
lda MathResultLo ; CPU:$D5A2 PRG:15A2 ??
sec ; CPU:$D5A4 PRG:15A4 ??
sbc MathOperandLo ; CPU:$D5A6 PRG:15A6 ??
sta MathResultLo ; CPU:$D5A8 PRG:15A8 ??
lda MathResultHi ; CPU:$D5AA PRG:15AA ??
sbc MathOperandHi ; CPU:$D5AC PRG:15AC ??
sta MathResultHi ; CPU:$D5AE PRG:15AE ??
rts ; PRG $157C / CPU $D57C ; CPU:$D5B0 PRG:15B0 ??
Flow_D57D:
jmp Flow_CD92 ; CPU:$D5B2 PRG:15B2 ??
; =============================================================================
; PhysicsRoutine_D580
; CPU address: $D580 PRG offset: $1580
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D580:
lda ActiveObjectIndex ; CPU:$D5B4 PRG:15B4 ??
beq Flow_D57D ; CPU:$D5B6 PRG:15B6 ??
lda BallTrajectoryFlags ; CPU:$D5B8 PRG:15B8 ??
and #$02 ; CPU:$D5BA PRG:15BA ??
bne Flow_D57D ; CPU:$D5BC PRG:15BC ??
lda RallyFlags ; CPU:$D5BE PRG:15BE ??
and #$F3 ; CPU:$D5C0 PRG:15C0 ??
sta RallyFlags ; CPU:$D5C2 PRG:15C2 ??
lda Zp26 ; CPU:$D5C4 PRG:15C4 ??
cmp #$01 ; CPU:$D5C6 PRG:15C6 ??
beq Flow_D5A4 ; CPU:$D5C8 PRG:15C8 ??
lda PlayerMovementFlags ; CPU:$D5CA PRG:15CA ??
beq Flow_D609 ; CPU:$D5CC PRG:15CC ??
cmp #$01 ; CPU:$D5CE PRG:15CE ??
beq Flow_D5C9 ; CPU:$D5D0 PRG:15D0 ??
cmp #$02 ; CPU:$D5D2 PRG:15D2 ??
beq Flow_D5F0 ; CPU:$D5D4 PRG:15D4 ??
bne Flow_D57D ; CPU:$D5D6 PRG:15D6 ??
Flow_D5A4:
lda #$15 ; CPU:$D5D8 PRG:15D8 ??
sta Zp26 ; CPU:$D5DA PRG:15DA ??
lda #$01 ; CPU:$D5DC PRG:15DC ??
sta PlayerMovementFlags ; CPU:$D5DE PRG:15DE ??
lda #$13 ; CPU:$D5E0 PRG:15E0 ??
sta BallXPosition ; CPU:$D5E2 PRG:15E2 ??
lda #$12 ; CPU:$D5E4 PRG:15E4 ??
sta PlayerPoseId ; CPU:$D5E6 PRG:15E6 ??
jsr PhysicsRoutine_D519 ; CPU:$D5E8 PRG:15E8 ??
ldx #$00 ; CPU:$D5EA PRG:15EA ??
lda RacketTargetY ; CPU:$D5EC PRG:15EC ??
eor #$7F ; CPU:$D5EE PRG:15EE ??
bpl Flow_D5C0 ; CPU:$D5F0 PRG:15F0 ??
dex ; CPU:$D5F2 PRG:15F2 ??
Flow_D5C0:
adc ContactPointX ; CPU:$D5F4 PRG:15F4 ??
sta Player1YSubpixel ; CPU:$D5F6 PRG:15F6 ??
txa ; CPU:$D5F8 PRG:15F8 ??
adc ContactPointY ; CPU:$D5FA PRG:15FA ??
sta Player1YPosition ; CPU:$D5FC PRG:15FC ??
Flow_D5C9:
lda RallyFlags ; CPU:$D5FE PRG:15FE ??
and #$F0 ; CPU:$D600 PRG:1600 ??
sta RallyFlags ; CPU:$D602 PRG:1602 ??
lda BallXPosition ; CPU:$D604 PRG:1604 ??
bpl Flow_D5D9 ; CPU:$D606 PRG:1606 ??
lda BallHeight ; CPU:$D608 PRG:1608 ??
cmp #$64 ; CPU:$D60A PRG:160A ??
bcc Flow_D601 ; CPU:$D60C PRG:160C ??
Flow_D5D9:
lda RallyFlags ; CPU:$D60E PRG:160E ??
and #$80 ; CPU:$D610 PRG:1610 ??
beq Flow_D620 ; CPU:$D612 PRG:1612 ??
lda #$17 ; CPU:$D614 PRG:1614 ??
sta PlayerAnimationId ; CPU:$D616 PRG:1616 ??
inc PlayerMovementFlags ; CPU:$D618 PRG:1618 ??
lda #$B7 ; CPU:$D61A PRG:161A ??
sta PoseSequenceOffset ; CPU:$D61C PRG:161C ??
lda #$01 ; CPU:$D61E PRG:161E ??
sta PoseFrameTimer ; CPU:$D620 PRG:1620 ??
jmp Flow_D5FD ; CPU:$D622 PRG:1622 ??
Flow_D5F0:
lda PlayerAnimationId ; CPU:$D624 PRG:1624 ??
beq Flow_D57D ; CPU:$D626 PRG:1626 ??
cmp #$10 ; CPU:$D628 PRG:1628 ??
bne Flow_D5FD ; CPU:$D62A PRG:162A ??
inc PlayerMovementFlags ; CPU:$D62C PRG:162C ??
jsr PhysicsRoutine_D6C6 ; CPU:$D62E PRG:162E ??
Flow_D5FD:
jsr PhysicsRoutine_D27D ; CPU:$D630 PRG:1630 ??
rts ; CPU:$D632 PRG:1632 ??
Flow_D601:
lda #$00 ; CPU:$D634 PRG:1634 ??
sta PlayerMovementFlags ; CPU:$D636 PRG:1636 ??
lda #$11 ; CPU:$D638 PRG:1638 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1607-$1608.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_D607:
.byte $85, $B6 ; PRG $1607 / CPU $D607 ; CPU:$D63A PRG:163A 85 B6
Flow_D609:
jsr PhysicsRoutine_D519 ; CPU:$D63C PRG:163C ??
lda ContactPointX ; CPU:$D63E PRG:163E ??
sta Player1YSubpixel ; CPU:$D640 PRG:1640 ??
lda ContactPointY ; CPU:$D642 PRG:1642 ??
sta Player1YPosition ; CPU:$D644 PRG:1644 ??
lda #$78 ; CPU:$D646 PRG:1646 ??
sta BallYSubpixel ; CPU:$D648 PRG:1648 ??
lda #$01 ; CPU:$D64A PRG:164A ??
sta BallYPosition ; CPU:$D64C PRG:164C ??
lda #$00 ; CPU:$D64E PRG:164E ??
sta BallXPosition ; CPU:$D650 PRG:1650 ??
Flow_D620:
rts ; CPU:$D652 PRG:1652 ??
; =============================================================================
; PhysicsRoutine_D621
; CPU address: $D621 PRG offset: $1621
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D621:
lda ActiveObjectIndex ; CPU:$D654 PRG:1654 ??
beq Flow_D62B ; CPU:$D656 PRG:1656 ??
lda BallTrajectoryFlags ; CPU:$D658 PRG:1658 ??
and #$02 ; CPU:$D65A PRG:165A ??
bne Flow_D63A ; CPU:$D65C PRG:165C ??
Flow_D62B:
lda #$00 ; CPU:$D65E PRG:165E ??
sta RacketContactState ; CPU:$D660 PRG:1660 ??
lda #$01 ; CPU:$D662 PRG:1662 ??
sta BallContactTimer ; CPU:$D664 PRG:1664 ??
jsr PhysicsRoutine_DC11 ; CPU:$D666 PRG:1666 ??
jsr PhysicsRoutine_D2A5 ; CPU:$D668 PRG:1668 ??
rts ; CPU:$D66A PRG:166A ??
Flow_D63A:
lda Zp26 ; CPU:$D66C PRG:166C ??
cmp #$01 ; CPU:$D66E PRG:166E ??
bne Flow_D665 ; CPU:$D670 PRG:1670 ??
lda #$40 ; CPU:$D672 PRG:1672 ??
sta Zp26 ; CPU:$D674 PRG:1674 ??
lda #$13 ; CPU:$D676 PRG:1676 ??
sta BallXPosition ; CPU:$D678 PRG:1678 ??
lda #$01 ; CPU:$D67A PRG:167A ??
sta PlayerMovementFlags ; CPU:$D67C PRG:167C ??
lda #$2A ; CPU:$D67E PRG:167E ??
sta PlayerPoseId ; CPU:$D680 PRG:1680 ??
jsr PhysicsRoutine_D515 ; CPU:$D682 PRG:1682 ??
ldx #$00 ; CPU:$D684 PRG:1684 ??
lda RacketTargetY ; CPU:$D686 PRG:1686 ??
eor #$7F ; CPU:$D688 PRG:1688 ??
bpl Flow_D65C ; CPU:$D68A PRG:168A ??
dex ; CPU:$D68C PRG:168C ??
Flow_D65C:
adc ContactPointX ; CPU:$D68E PRG:168E ??
sta Player1YSubpixel ; CPU:$D690 PRG:1690 ??
txa ; CPU:$D692 PRG:1692 ??
adc ContactPointY ; CPU:$D694 PRG:1694 ??
sta Player1YPosition ; CPU:$D696 PRG:1696 ??
Flow_D665:
lda PlayerMovementFlags ; CPU:$D698 PRG:1698 ??
beq Flow_D69C ; CPU:$D69A PRG:169A ??
lda #$00 ; CPU:$D69C PRG:169C ??
sta RallyFlags ; CPU:$D69E PRG:169E ??
lda PlayerAnimationId ; CPU:$D6A0 PRG:16A0 ??
bne Flow_D694 ; CPU:$D6A2 PRG:16A2 ??
lda Zp26 ; CPU:$D6A4 PRG:16A4 ??
cmp #$39 ; CPU:$D6A6 PRG:16A6 ??
beq Flow_D682 ; CPU:$D6A8 PRG:16A8 ??
cmp #$3A ; CPU:$D6AA PRG:16AA ??
bne FlowEntry_D69B ; CPU:$D6AC PRG:16AC ??
lda $0501 ; CPU:$D6AE PRG:16AE ??
and #$03 ; CPU:$D6B0 PRG:16B0 ??
bne FlowEntry_D69B ; CPU:$D6B2 PRG:16B2 ??
Flow_D682:
inc PlayerMovementFlags ; CPU:$D6B4 PRG:16B4 ??
lda #$17 ; CPU:$D6B6 PRG:16B6 ??
sta PlayerAnimationId ; CPU:$D6B8 PRG:16B8 ??
lda #$60 ; CPU:$D6BA PRG:16BA ??
sta PoseSequenceOffset ; CPU:$D6BC PRG:16BC ??
lda #$01 ; CPU:$D6BE PRG:16BE ??
sta PoseFrameTimer ; CPU:$D6C0 PRG:16C0 ??
Flow_D690:
jsr PhysicsRoutine_D2A5 ; CPU:$D6C2 PRG:16C2 ??
rts ; CPU:$D6C4 PRG:16C4 ??
Flow_D694:
cmp #$10 ; CPU:$D6C6 PRG:16C6 ??
bne Flow_D690 ; CPU:$D6C8 PRG:16C8 ??
jsr PhysicsRoutine_D708 ; CPU:$D6CA PRG:16CA ??
FlowEntry_D69B:
rts ; PRG $169B / CPU $D69B ; CPU:$D6CC PRG:16CC ??
Flow_D69C:
lda Zp20 ; CPU:$D6CE PRG:16CE ??
beq Flow_D6A7 ; CPU:$D6D0 PRG:16D0 ??
lda $0502 ; CPU:$D6D2 PRG:16D2 ??
and #$70 ; CPU:$D6D4 PRG:16D4 ??
bne Flow_D6AE ; CPU:$D6D6 PRG:16D6 ??
Flow_D6A7:
lda $0503 ; CPU:$D6D8 PRG:16D8 ??
and #$03 ; CPU:$D6DA PRG:16DA ??
sta RallyFlags ; CPU:$D6DC PRG:16DC ??
Flow_D6AE:
jsr PhysicsRoutine_D515 ; CPU:$D6DE PRG:16DE ??
lda ContactPointX ; CPU:$D6E0 PRG:16E0 ??
sta Player1YSubpixel ; CPU:$D6E2 PRG:16E2 ??
lda ContactPointY ; CPU:$D6E4 PRG:16E4 ??
sta Player1YPosition ; CPU:$D6E6 PRG:16E6 ??
lda #$40 ; CPU:$D6E8 PRG:16E8 ??
sta BallYSubpixel ; CPU:$D6EA PRG:16EA ??
lda #$01 ; CPU:$D6EC PRG:16EC ??
sta BallYPosition ; CPU:$D6EE PRG:16EE ??
lda #$00 ; CPU:$D6F0 PRG:16F0 ??
sta BallXPosition ; CPU:$D6F2 PRG:16F2 ??
rts ; PRG $16C5 / CPU $D6C5 ; CPU:$D6F4 PRG:16F4 ??
; =============================================================================
; PhysicsRoutine_D6C6
; CPU address: $D6C6 PRG offset: $16C6
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D6C6:
ldy #$00 ; CPU:$D6F6 PRG:16F6 ??
ldx #$01 ; CPU:$D6F8 PRG:16F8 ??
lda BallHeight ; CPU:$D6FA PRG:16FA ??
cmp #$68 ; CPU:$D6FC PRG:16FC ??
bcc Flow_D703 ; CPU:$D6FE PRG:16FE ??
cmp #$B8 ; CPU:$D700 PRG:1700 ??
bcs Flow_D703 ; CPU:$D702 PRG:1702 ??
cmp #$78 ; CPU:$D704 PRG:1704 ??
bcc Flow_D6E4 ; CPU:$D706 PRG:1706 ??
iny ; CPU:$D708 PRG:1708 ??
cmp #$90 ; CPU:$D70A PRG:170A ??
bcc Flow_D6E4 ; CPU:$D70C PRG:170C ??
iny ; CPU:$D70E PRG:170E ??
dex ; CPU:$D710 PRG:1710 ??
cmp #$A8 ; CPU:$D712 PRG:1712 ??
bcc Flow_D6E4 ; CPU:$D714 PRG:1714 ??
iny ; CPU:$D716 PRG:1716 ??
Flow_D6E4:
jsr PhysicsRoutine_D73A ; CPU:$D718 PRG:1718 ??
lda BallHeight ; CPU:$D71A PRG:171A ??
cmp #$AC ; CPU:$D71C PRG:171C ??
bcs Flow_D702 ; CPU:$D71E PRG:171E ??
lda #$A5 ; CPU:$D720 PRG:1720 ??
ldy BallXPosition ; CPU:$D722 PRG:1722 ??
bpl Flow_D6F5 ; CPU:$D724 PRG:1724 ??
lda #$A0 ; CPU:$D726 PRG:1726 ??
Flow_D6F5:
cmp BallHeight ; CPU:$D728 PRG:1728 ??
bcs Flow_D702 ; CPU:$D72A PRG:172A ??
lda #$01 ; CPU:$D72C PRG:172C ??
sta $035E ; CPU:$D72E PRG:172E ??
lda #$02 ; CPU:$D730 PRG:1730 ??
sta PlayerActionParameter ; CPU:$D732 PRG:1732 ??
Flow_D702:
rts ; CPU:$D734 PRG:1734 ??
Flow_D703:
lda #$50 ; CPU:$D736 PRG:1736 ??
sta Zp26 ; CPU:$D738 PRG:1738 ??
rts ; CPU:$D73A PRG:173A ??
; =============================================================================
; PhysicsRoutine_D708
; CPU address: $D708 PRG offset: $1708
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D708:
ldy #$04 ; CPU:$D73C PRG:173C ??
ldx #$00 ; CPU:$D73E PRG:173E ??
jsr RollRng ; CPU:$D740 PRG:1740 ??
cmp #$10 ; CPU:$D742 PRG:1742 ??
bcc Flow_D71F ; CPU:$D744 PRG:1744 ??
iny ; CPU:$D746 PRG:1746 ??
cmp #$80 ; CPU:$D748 PRG:1748 ??
bcc Flow_D71F ; CPU:$D74A PRG:174A ??
iny ; CPU:$D74C PRG:174C ??
cmp #$F4 ; CPU:$D74E PRG:174E ??
bcc Flow_D71F ; CPU:$D750 PRG:1750 ??
iny ; CPU:$D752 PRG:1752 ??
inx ; CPU:$D754 PRG:1754 ??
Flow_D71F:
jsr PhysicsRoutine_D73A ; CPU:$D756 PRG:1756 ??
lda $0501 ; CPU:$D758 PRG:1758 ??
ldy ServingPlayer ; CPU:$D75A PRG:175A ??
cmp $D735,y ; CPU:$D75C PRG:175C ??
bcs Flow_D734 ; CPU:$D75E PRG:175E ??
lda #$02 ; CPU:$D760 PRG:1760 ??
sta PlayerActionParameter ; CPU:$D762 PRG:1762 ??
lda #$0E ; CPU:$D764 PRG:1764 ??
sta PlayerTargetYHi ; CPU:$D766 PRG:1766 ??
Flow_D734:
rts ; CPU:$D768 PRG:1768 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1735-$1739.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
NetCollisionThresholdTable:
.byte $18, $28, $38, $50, $60 ; PRG $1735 / CPU $D735 ; CPU:$D76A PRG:176A 18 28 38 50 60
; =============================================================================
; PhysicsRoutine_D73A
; CPU address: $D73A PRG offset: $173A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D73A:
tya ; CPU:$D76F PRG:176F ??
asl a ; CPU:$D771 PRG:1771 ??
tay ; CPU:$D773 PRG:1773 ??
lda $D780,y ; CPU:$D775 PRG:1775 ??
sta PlayerTargetYLo ; CPU:$D777 PRG:1777 ??
lda $D781,y ; CPU:$D779 PRG:1779 ??
sta PlayerTargetYHi ; CPU:$D77B PRG:177B ??
stx PlayerActionParameter ; CPU:$D77D PRG:177D ??
lda #$03 ; CPU:$D77F PRG:177F ??
sta PlayerActionType ; CPU:$D781 PRG:1781 ??
ldx #$00 ; CPU:$D783 PRG:1783 ??
stx MathResultHi ; CPU:$D785 PRG:1785 ??
jsr RollRng ; CPU:$D787 PRG:1787 ??
sta MathResultLo ; CPU:$D789 PRG:1789 ??
jsr RollRng ; CPU:$D78B PRG:178B ??
adc MathResultLo ; CPU:$D78D PRG:178D ??
rol MathResultHi ; CPU:$D78F PRG:178F ??
sta MathResultLo ; CPU:$D791 PRG:1791 ??
ldx #$50 ; CPU:$D793 PRG:1793 ??
ldy #$0D ; CPU:$D795 PRG:1795 ??
lda BallTrajectoryFlags ; CPU:$D797 PRG:1797 ??
and #$01 ; CPU:$D799 PRG:1799 ??
bne Flow_D76D ; CPU:$D79B PRG:179B ??
ldx #$D0 ; CPU:$D79D PRG:179D ??
ldy #$10 ; CPU:$D79F PRG:179F ??
Flow_D76D:
txa ; CPU:$D7A1 PRG:17A1 ??
adc MathResultLo ; CPU:$D7A3 PRG:17A3 ??
sta PlayerTargetXLo ; CPU:$D7A5 PRG:17A5 ??
tya ; CPU:$D7A7 PRG:17A7 ??
adc MathResultHi ; CPU:$D7A9 PRG:17A9 ??
sta PlayerTargetXHi ; CPU:$D7AB PRG:17AB ??
lda #$01 ; CPU:$D7AD PRG:17AD ??
sta PlayerActionState ; CPU:$D7AF PRG:17AF ??
lda ActiveObjectIndex ; CPU:$D7B1 PRG:17B1 ??
sta Zp40 ; CPU:$D7B3 PRG:17B3 ??
rts ; CPU:$D7B5 PRG:17B5 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1780-$178F.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
BallLandingBoundaryTable:
.byte $00, $13, $D0, $14, $00, $16, $00, $18, $80, $0C, $00, $0E, $C0, $0E, $00, $10 ; PRG $1780 / CPU $D780 ; CPU:$D7B7 PRG:17B7 00 13 D0 14 00 16 00 18 80 0C 00 0E C0 0E 00 10
; =============================================================================
; PhysicsRoutine_D790
; CPU address: $D790 PRG offset: $1790
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D790:
bit BallTrajectoryFlags ; CPU:$D7C7 PRG:17C7 ??
bpl FlowEntry_D7E0 ; CPU:$D7C9 PRG:17C9 ??
ldx #$06 ; CPU:$D7CB PRG:17CB ??
ldy $0309 ; CPU:$D7CD PRG:17CD ??
lda BallTrajectoryFlags ; CPU:$D7CF PRG:17CF ??
and #$02 ; CPU:$D7D1 PRG:17D1 ??
beq Flow_D7A4 ; CPU:$D7D3 PRG:17D3 ??
ldx #$F6 ; CPU:$D7D5 PRG:17D5 ??
ldy $0349 ; CPU:$D7D7 PRG:17D7 ??
Flow_D7A4:
stx MathResultHi ; CPU:$D7D9 PRG:17D9 ??
tya ; CPU:$D7DB PRG:17DB ??
clc ; CPU:$D7DD PRG:17DD ??
adc MathResultHi ; CPU:$D7DF PRG:17DF ??
ldx $038A ; CPU:$D7E1 PRG:17E1 ??
ldy PlayerMovementFlags ; CPU:$D7E3 PRG:17E3 ??
beq Flow_D7B7 ; CPU:$D7E5 PRG:17E5 ??
cpy #$01 ; CPU:$D7E7 PRG:17E7 ??
beq Flow_D7BA ; CPU:$D7E9 PRG:17E9 ??
bne Flow_D7BD ; CPU:$D7EB PRG:17EB ??
Flow_D7B7:
sta $0203,x ; CPU:$D7ED PRG:17ED ??
Flow_D7BA:
sta $0207,x ; CPU:$D7EF PRG:17EF ??
Flow_D7BD:
ldx PlayerActionState ; CPU:$D7F1 PRG:17F1 ??
beq FlowEntry_D7E0 ; CPU:$D7F3 PRG:17F3 ??
lda BallTrajectoryFlags ; CPU:$D7F5 PRG:17F5 ??
and #$7F ; CPU:$D7F7 PRG:17F7 ??
sta BallTrajectoryFlags ; CPU:$D7F9 PRG:17F9 ??
lda #$F0 ; CPU:$D7FB PRG:17FB ??
sta $0314 ; CPU:$D7FD PRG:17FD ??
lda #$10 ; CPU:$D7FF PRG:17FF ??
sta $0315 ; CPU:$D801 PRG:1801 ??
lda #$D0 ; CPU:$D803 PRG:1803 ??
sta $0354 ; CPU:$D805 PRG:1805 ??
lda #$30 ; CPU:$D807 PRG:1807 ??
sta $0355 ; CPU:$D809 PRG:1809 ??
lda #$00 ; CPU:$D80B PRG:180B ??
sta $037B ; CPU:$D80D PRG:180D ??
FlowEntry_D7E0:
rts ; PRG $17E0 / CPU $D7E0 ; CPU:$D80F PRG:180F ??
; =============================================================================
; PhysicsRoutine_D7E1
; CPU address: $D7E1 PRG offset: $17E1
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D7E1:
lda #$0A ; CPU:$D811 PRG:1811 ??
sta Zp26 ; CPU:$D813 PRG:1813 ??
lda BallTrajectoryFlags ; CPU:$D815 PRG:1815 ??
ora #$C0 ; CPU:$D817 PRG:1817 ??
sta BallTrajectoryFlags ; CPU:$D819 PRG:1819 ??
lda #$10 ; CPU:$D81B PRG:181B ??
sta Player1YPosition ; CPU:$D81D PRG:181D ??
lda #$01 ; CPU:$D81F PRG:181F ??
sta BallYPosition ; CPU:$D821 PRG:1821 ??
ldx #$0A ; CPU:$D823 PRG:1823 ??
ldy #$00 ; CPU:$D825 PRG:1825 ??
lda BallTrajectoryFlags ; CPU:$D827 PRG:1827 ??
and #$02 ; CPU:$D829 PRG:1829 ??
beq Flow_D801 ; CPU:$D82B PRG:182B ??
ldx #$1A ; CPU:$D82D PRG:182D ??
ldy #$C0 ; CPU:$D82F PRG:182F ??
Flow_D801:
stx Player2YPosition ; CPU:$D831 PRG:1831 ??
sty Player2YSubpixel ; CPU:$D833 PRG:1833 ??
lda BallTrajectoryFlags ; CPU:$D835 PRG:1835 ??
and #$03 ; CPU:$D837 PRG:1837 ??
asl a ; CPU:$D839 PRG:1839 ??
asl a ; CPU:$D83B PRG:183B ??
asl a ; CPU:$D83D PRG:183D ??
tay ; CPU:$D83F PRG:183F ??
lda $D889,y ; CPU:$D841 PRG:1841 ??
sta $0309 ; CPU:$D843 PRG:1843 ??
lda $D88A,y ; CPU:$D845 PRG:1845 ??
sta $0329 ; CPU:$D847 PRG:1847 ??
lda $D88B,y ; CPU:$D849 PRG:1849 ??
sta $0349 ; CPU:$D84B PRG:184B ??
lda $D88C,y ; CPU:$D84D PRG:184D ??
sta $0369 ; CPU:$D84F PRG:184F ??
lda BallTrajectoryFlags ; CPU:$D851 PRG:1851 ??
and #$02 ; CPU:$D853 PRG:1853 ??
bne Flow_D83A ; CPU:$D855 PRG:1855 ??
lda $D88D,y ; CPU:$D857 PRG:1857 ??
sta $0314 ; CPU:$D859 PRG:1859 ??
lda $D88E,y ; CPU:$D85B PRG:185B ??
sta $0315 ; CPU:$D85D PRG:185D ??
jmp Flow_D84C ; CPU:$D85F PRG:185F ??
Flow_D83A:
lda $D88D,y ; CPU:$D861 PRG:1861 ??
sta $0354 ; CPU:$D863 PRG:1863 ??
lda $D88E,y ; CPU:$D865 PRG:1865 ??
sta $0355 ; CPU:$D867 PRG:1867 ??
lda $D88F,y ; CPU:$D869 PRG:1869 ??
sta $0308 ; CPU:$D86B PRG:186B ??
Flow_D84C:
ldy #$01 ; CPU:$D86D PRG:186D ??
lda BallTrajectoryFlags ; CPU:$D86F PRG:186F ??
and #$02 ; CPU:$D871 PRG:1871 ??
beq Flow_D860 ; CPU:$D873 PRG:1873 ??
ldy #$02 ; CPU:$D875 PRG:1875 ??
lda #$10 ; CPU:$D877 PRG:1877 ??
sta $0315 ; CPU:$D879 PRG:1879 ??
lda #$F0 ; CPU:$D87B PRG:187B ??
sta $0314 ; CPU:$D87D PRG:187D ??
Flow_D860:
sty BallVerticalVelocityHi ; CPU:$D87F PRG:187F ??
lda #$E8 ; CPU:$D881 PRG:1881 ??
sta BallMotionControl ; CPU:$D883 PRG:1883 ??
lda #$80 ; CPU:$D885 PRG:1885 ??
sta BallTargetOffset ; CPU:$D887 PRG:1887 ??
lda #$00 ; CPU:$D889 PRG:1889 ??
sta Player1XSubpixel ; CPU:$D88B PRG:188B ??
sta Player1XPosition ; CPU:$D88D PRG:188D ??
sta Player2XSubpixel ; CPU:$D88F PRG:188F ??
sta Player2XPosition ; CPU:$D891 PRG:1891 ??
sta BallXSubpixel ; CPU:$D893 PRG:1893 ??
sta BallXPosition ; CPU:$D895 PRG:1895 ??
sta PlayerMovementFlags ; CPU:$D897 PRG:1897 ??
sta PlayerActionState ; CPU:$D899 PRG:1899 ??
sta UmpireMessageId ; CPU:$D89B PRG:189B ??
sta BallVerticalVelocityLo ; CPU:$D89D PRG:189D ??
sta BallCollisionFlags ; CPU:$D89F PRG:189F ??
sta BallContactState ; CPU:$D8A1 PRG:18A1 ??
sta Zp24 ; CPU:$D8A3 PRG:18A3 ??
sta BallBounceState ; CPU:$D8A5 PRG:18A5 ??
rts ; CPU:$D8A7 PRG:18A7 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1889-$18A8.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
RacketHitTrajectoryTable:
.byte $58, $A8, $98, $64, $78, $40, $00, $00, $A8, $58, $68, $98, $C0, $88, $00, $00 ; PRG $1889 / CPU $D889 ; CPU:$D8A9 PRG:18A9 58 A8 98 64 78 40 00 00 A8 58 68 98 C0 88 00 00
.byte $A8, $58, $68, $98, $7C, $58, $C8, $00, $58, $A8, $98, $68, $A8, $84, $C8, $00 ; PRG $1899 / CPU $D899 ; CPU:$D8B9 PRG:18B9 A8 58 68 98 7C 58 C8 00 58 A8 98 68 A8 84 C8 00
; =============================================================================
; PhysicsRoutine_D8A9
; CPU address: $D8A9 PRG offset: $18A9
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D8A9:
lda #$40 ; CPU:$D8C9 PRG:18C9 ??
sta ObjectDataPointerLo ; CPU:$D8CB PRG:18CB ??
lda #$03 ; CPU:$D8CD PRG:18CD ??
sta ObjectDataPointerHi ; CPU:$D8CF PRG:18CF ??
lda #$00 ; CPU:$D8D1 PRG:18D1 ??
sta ObjectDataOffset ; CPU:$D8D3 PRG:18D3 ??
lda #$01 ; CPU:$D8D5 PRG:18D5 ??
sta ActiveObjectIndex ; CPU:$D8D7 PRG:18D7 ??
Flow_D8B9:
jsr EngineRoutine_C1F3 ; CPU:$D8D9 PRG:18D9 ??
lda AnimationFrame ; CPU:$D8DB PRG:18DB ??
beq Flow_D8DF ; CPU:$D8DD PRG:18DD ??
lda BallTrajectoryFlags ; CPU:$D8DF PRG:18DF ??
bmi Flow_D8CA ; CPU:$D8E1 PRG:18E1 ??
jsr PhysicsRoutine_D8E7 ; CPU:$D8E3 PRG:18E3 ??
jmp Flow_D8CD ; CPU:$D8E5 PRG:18E5 ??
Flow_D8CA:
jsr PhysicsRoutine_D621 ; CPU:$D8E7 PRG:18E7 ??
Flow_D8CD:
jsr PhysicsRoutine_DA48 ; CPU:$D8E9 PRG:18E9 ??
jsr PhysicsRoutine_D132 ; CPU:$D8EB PRG:18EB ??
jsr PhysicsRoutine_D20E ; CPU:$D8ED PRG:18ED ??
jsr PhysicsRoutine_DC8D ; CPU:$D8EF PRG:18EF ??
jsr EngineRoutine_C21C ; CPU:$D8F1 PRG:18F1 ??
jsr EngineRoutine_C20E ; CPU:$D8F3 PRG:18F3 ??
Flow_D8DF:
jsr EngineRoutine_C206 ; CPU:$D8F5 PRG:18F5 ??
dec ActiveObjectIndex ; CPU:$D8F7 PRG:18F7 ??
bpl Flow_D8B9 ; CPU:$D8F9 PRG:18F9 ??
rts ; CPU:$D8FB PRG:18FB ??
; =============================================================================
; PhysicsRoutine_D8E7
; CPU address: $D8E7 PRG offset: $18E7
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_D8E7:
lda PlayerFacingDirection ; CPU:$D8FD PRG:18FD ??
cmp #$01 ; CPU:$D8FF PRG:18FF ??
beq Flow_D8F0 ; CPU:$D901 PRG:1901 ??
jmp Flow_D9EA ; CPU:$D903 PRG:1903 ??
Flow_D8F0:
lda BallContactTimer ; CPU:$D905 PRG:1905 ??
beq Flow_D918 ; CPU:$D907 PRG:1907 ??
dec BallContactTimer ; CPU:$D909 PRG:1909 ??
jsr RenderRoutine_DF8F ; CPU:$D90B PRG:190B ??
lda ActiveObjectIndex ; CPU:$D90D PRG:190D ??
bne Flow_D900 ; CPU:$D90F PRG:190F ??
jsr RenderRoutine_DFF5 ; CPU:$D911 PRG:1911 ??
Flow_D900:
jsr PhysicsRoutine_D486 ; CPU:$D913 PRG:1913 ??
lda #$00 ; CPU:$D915 PRG:1915 ??
ldy ObjectAnimationFrame ; CPU:$D917 PRG:1917 ??
bne Flow_D90B ; CPU:$D919 PRG:1919 ??
lda #$05 ; CPU:$D91B PRG:191B ??
Flow_D90B:
jsr RenderRoutine_E021 ; CPU:$D91D PRG:191D ??
ldx #$10 ; CPU:$D91F PRG:191F ??
stx RallyFlags ; CPU:$D921 PRG:1921 ??
jsr PhysicsRoutine_DA07 ; CPU:$D923 PRG:1923 ??
jmp Flow_DA00 ; CPU:$D925 PRG:1925 ??
Flow_D918:
lda GameMode ; CPU:$D927 PRG:1927 ??
beq Flow_D952 ; CPU:$D929 PRG:1929 ??
lda ObjectAnimationFrame ; CPU:$D92B PRG:192B ??
bne Flow_D952 ; CPU:$D92D PRG:192D ??
lda ActiveObjectIndex ; CPU:$D92F PRG:192F ??
bne Flow_D92E ; CPU:$D931 PRG:1931 ??
bit BallTrajectoryFlags ; CPU:$D933 PRG:1933 ??
bvs Flow_D945 ; CPU:$D935 PRG:1935 ??
lda $0348 ; CPU:$D937 PRG:1937 ??
jmp Flow_D931 ; CPU:$D939 PRG:1939 ??
Flow_D92E:
lda $0368 ; CPU:$D93B PRG:193B ??
Flow_D931:
sbc #$04 ; CPU:$D93D PRG:193D ??
cmp BallTargetOffset ; CPU:$D93F PRG:193F ??
bcc Flow_D945 ; CPU:$D941 PRG:1941 ??
ldy #$00 ; CPU:$D943 PRG:1943 ??
sty $0359 ; CPU:$D945 PRG:1945 ??
sty $0379 ; CPU:$D947 PRG:1947 ??
lda #$01 ; CPU:$D949 PRG:1949 ??
sta ObjectAnimationFrame ; CPU:$D94B PRG:194B ??
bne Flow_D94E ; CPU:$D94D PRG:194D ??
Flow_D945:
jsr PhysicsRoutine_DAC7 ; CPU:$D94F PRG:194F ??
jsr PhysicsRoutine_D46F ; CPU:$D951 PRG:1951 ??
jmp Flow_DA00 ; CPU:$D953 PRG:1953 ??
Flow_D94E:
lda #$10 ; CPU:$D955 PRG:1955 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1950-$1951.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_D950:
.byte $85, $C0 ; PRG $1950 / CPU $D950 ; CPU:$D957 PRG:1957 85 C0
Flow_D952:
lda PlayerAnimationId ; CPU:$D959 PRG:1959 ??
beq Flow_D959 ; CPU:$D95B PRG:195B ??
jmp Flow_D9CE ; CPU:$D95D PRG:195D ??
Flow_D959:
lda SignedMovementDelta ; CPU:$D95F PRG:195F ??
sta Zp10 ; CPU:$D961 PRG:1961 ??
jsr PhysicsRoutine_D46F ; CPU:$D963 PRG:1963 ??
bit RacketAimOffset ; CPU:$D965 PRG:1965 ??
bpl Flow_D979 ; CPU:$D967 PRG:1967 ??
jsr PhysicsRoutine_DA07 ; CPU:$D969 PRG:1969 ??
bmi Flow_D979 ; CPU:$D96B PRG:196B ??
lda SignedMovementDelta ; CPU:$D96D PRG:196D ??
bmi Flow_D973 ; CPU:$D96F PRG:196F ??
cmp #$04 ; CPU:$D971 PRG:1971 ??
bcs Flow_D979 ; CPU:$D973 PRG:1973 ??
bcc Flow_D9B8 ; CPU:$D975 PRG:1975 ??
Flow_D973:
cmp #$FC ; CPU:$D977 PRG:1977 ??
bcc Flow_D979 ; CPU:$D979 PRG:1979 ??
bcs Flow_D9B8 ; CPU:$D97B PRG:197B ??
Flow_D979:
lda RallyFlags ; CPU:$D97D PRG:197D ??
beq Flow_D994 ; CPU:$D97F PRG:197F ??
lda SignedMovementDelta ; CPU:$D981 PRG:1981 ??
beq Flow_D987 ; CPU:$D983 PRG:1983 ??
eor Zp10 ; CPU:$D985 PRG:1985 ??
and #$80 ; CPU:$D987 PRG:1987 ??
beq Flow_D98C ; CPU:$D989 PRG:1989 ??
Flow_D987:
lda #$00 ; CPU:$D98B PRG:198B ??
jmp Flow_D994 ; CPU:$D98D PRG:198D ??
Flow_D98C:
lda #$01 ; CPU:$D98F PRG:198F ??
ldy SignedMovementDelta ; CPU:$D991 PRG:1991 ??
bpl Flow_D994 ; CPU:$D993 PRG:1993 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1992-$1993.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_D992:
.byte $A9, $02 ; PRG $1992 / CPU $D992 ; CPU:$D995 PRG:1995 A9 02
Flow_D994:
ldy GameMode ; CPU:$D997 PRG:1997 ??
bne Flow_D9B3 ; CPU:$D999 PRG:1999 ??
ldy PlayerActionType ; CPU:$D99B PRG:199B ??
cpy #$04 ; CPU:$D99D PRG:199D ??
bne Flow_D9B3 ; CPU:$D99F PRG:199F ??
ldy RacketTargetX ; CPU:$D9A1 PRG:19A1 ??
cpy #$34 ; CPU:$D9A3 PRG:19A3 ??
bcc Flow_D9B3 ; CPU:$D9A5 PRG:19A5 ??
ora #$08 ; CPU:$D9A7 PRG:19A7 ??
sta RallyFlags ; CPU:$D9A9 PRG:19A9 ??
ldy #$01 ; CPU:$D9AB PRG:19AB ??
sty ObjectAnimationFrame ; CPU:$D9AD PRG:19AD ??
lda #$14 ; CPU:$D9AF PRG:19AF ??
jsr RenderRoutine_E021 ; CPU:$D9B1 PRG:19B1 ??
lda RallyFlags ; CPU:$D9B3 PRG:19B3 ??
Flow_D9B3:
sta RallyFlags ; CPU:$D9B5 PRG:19B5 ??
jmp Flow_DA00 ; CPU:$D9B7 PRG:19B7 ??
Flow_D9B8:
lda #$00 ; CPU:$D9B9 PRG:19B9 ??
sta RallyFlags ; CPU:$D9BB PRG:19BB ??
jsr PhysicsRoutine_DAE7 ; CPU:$D9BD PRG:19BD ??
beq Flow_D9CB ; CPU:$D9BF PRG:19BF ??
lda #$17 ; CPU:$D9C1 PRG:19C1 ??
sta PlayerAnimationId ; CPU:$D9C3 PRG:19C3 ??
jsr PhysicsRoutine_DA33 ; CPU:$D9C5 PRG:19C5 ??
jsr PhysicsRoutine_DA68 ; CPU:$D9C7 PRG:19C7 ??
Flow_D9CB:
jmp Flow_DA03 ; CPU:$D9C9 PRG:19C9 ??
Flow_D9CE:
bit RacketAimOffset ; CPU:$D9CB PRG:19CB ??
bpl Flow_DA00 ; CPU:$D9CD PRG:19CD ??
jsr PhysicsRoutine_DA33 ; CPU:$D9CF PRG:19CF ??
bmi Flow_DA00 ; CPU:$D9D1 PRG:19D1 ??
lda ObjectAnimationFrame ; CPU:$D9D3 PRG:19D3 ??
beq Flow_DA00 ; CPU:$D9D5 PRG:19D5 ??
jsr PhysicsRoutine_DC2D ; CPU:$D9D7 PRG:19D7 ??
jsr PhysicsRoutine_DCAB ; CPU:$D9D9 PRG:19D9 ??
jsr PhysicsRoutine_DD31 ; CPU:$D9DB PRG:19DB ??
jsr PhysicsRoutine_DD54 ; CPU:$D9DD PRG:19DD ??
jmp Flow_DA00 ; CPU:$D9DF PRG:19DF ??
Flow_D9EA:
lda BallContactTimer ; CPU:$D9E1 PRG:19E1 ??
bne Flow_D9F6 ; CPU:$D9E3 PRG:19E3 ??
inc BallContactTimer ; CPU:$D9E5 PRG:19E5 ??
jsr PhysicsRoutine_DB1E ; CPU:$D9E7 PRG:19E7 ??
jmp Flow_DA00 ; CPU:$D9E9 PRG:19E9 ??
Flow_D9F6:
lda PlayerAnimationId ; CPU:$D9EB PRG:19EB ??
bne Flow_DA00 ; CPU:$D9ED PRG:19ED ??
jsr PhysicsRoutine_DAA8 ; CPU:$D9EF PRG:19EF ??
jmp Flow_DA00 ; CPU:$D9F1 PRG:19F1 ??
Flow_DA00:
jsr PhysicsRoutine_DB82 ; CPU:$D9F3 PRG:19F3 ??
Flow_DA03:
jsr PhysicsRoutine_D2A5 ; CPU:$D9F5 PRG:19F5 ??
rts ; PRG $1A06 / CPU $DA06 ; CPU:$D9F7 PRG:19F7 ??
; =============================================================================
; PhysicsRoutine_DA07
; CPU address: $DA07 PRG offset: $1A07
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DA07:
ldx #$01 ; CPU:$D9F9 PRG:19F9 ??
lda RacketTargetX ; CPU:$D9FB PRG:19FB ??
cmp #$50 ; CPU:$D9FD PRG:19FD ??
bcc Flow_DA12 ; CPU:$D9FF PRG:19FF ??
inx ; CPU:$DA01 PRG:1A01 ??
bne Flow_DA19 ; CPU:$DA03 PRG:1A03 ??
Flow_DA12:
ldy PlayerActionType ; CPU:$DA05 PRG:1A05 ??
cpy #$04 ; CPU:$DA07 PRG:1A07 ??
bne Flow_DA19 ; CPU:$DA09 PRG:1A09 ??
dex ; CPU:$DA0B PRG:1A0B ??
Flow_DA19:
clc ; CPU:$DA0D PRG:1A0D ??
adc $DA30,x ; CPU:$DA0F PRG:1A0F ??
sec ; CPU:$DA11 PRG:1A11 ??
sbc BallTargetOffset ; CPU:$DA13 PRG:1A13 ??
bcc Flow_DA29 ; CPU:$DA15 PRG:1A15 ??
bpl Flow_DA2D ; CPU:$DA17 PRG:1A17 ??
lda #$7F ; CPU:$DA19 PRG:1A19 ??
jmp Flow_DA2D ; CPU:$DA1B PRG:1A1B ??
Flow_DA29:
bmi Flow_DA2D ; CPU:$DA1D PRG:1A1D ??
lda #$80 ; CPU:$DA1F PRG:1A1F ??
Flow_DA2D:
sta RacketAimOffset ; CPU:$DA21 PRG:1A21 ??
rts ; CPU:$DA23 PRG:1A23 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1A30-$1A32.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
RacketAimAdjustmentTable:
.byte $05, $06, $0B ; PRG $1A30 / CPU $DA30 ; CPU:$DA25 PRG:1A25 05 06 0B
; =============================================================================
; PhysicsRoutine_DA33
; CPU address: $DA33 PRG offset: $1A33
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DA33:
lda RacketTargetX ; CPU:$DA28 PRG:1A28 ??
sec ; CPU:$DA2A PRG:1A2A ??
sbc BallTargetOffset ; CPU:$DA2C PRG:1A2C ??
bcc Flow_DA41 ; CPU:$DA2E PRG:1A2E ??
bpl Flow_DA45 ; CPU:$DA30 PRG:1A30 ??
lda #$7F ; CPU:$DA32 PRG:1A32 ??
jmp Flow_DA45 ; CPU:$DA34 PRG:1A34 ??
Flow_DA41:
bmi Flow_DA45 ; CPU:$DA36 PRG:1A36 ??
lda #$80 ; CPU:$DA38 PRG:1A38 ??
Flow_DA45:
sta RacketAimOffset ; CPU:$DA3A PRG:1A3A ??
rts ; PRG $1A47 / CPU $DA47 ; CPU:$DA3C PRG:1A3C ??
; =============================================================================
; PhysicsRoutine_DA48
; CPU address: $DA48 PRG offset: $1A48
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DA48:
lda PlayerActionState ; CPU:$DA3E PRG:1A3E ??
sta MathResultHi ; CPU:$DA40 PRG:1A40 ??
jsr PhysicsRoutine_D0FA ; CPU:$DA42 PRG:1A42 ??
lda MathResultHi ; CPU:$DA44 PRG:1A44 ??
cmp #$01 ; CPU:$DA46 PRG:1A46 ??
beq Flow_DA65 ; CPU:$DA48 PRG:1A48 ??
lda PlayerActionState ; CPU:$DA4A PRG:1A4A ??
cmp #$02 ; CPU:$DA4C PRG:1A4C ??
bne Flow_DA67 ; CPU:$DA4E PRG:1A4E ??
ldy ObjectAnimationFrame ; CPU:$DA50 PRG:1A50 ??
beq Flow_DA67 ; CPU:$DA52 PRG:1A52 ??
ldy UmpireMessageId ; CPU:$DA54 PRG:1A54 ??
bne Flow_DA67 ; CPU:$DA56 PRG:1A56 ??
lda MathResultHi ; CPU:$DA58 PRG:1A58 ??
Flow_DA65:
sta PlayerActionState ; CPU:$DA5A PRG:1A5A ??
Flow_DA67:
rts ; CPU:$DA5C PRG:1A5C ??
; =============================================================================
; PhysicsRoutine_DA68
; CPU address: $DA68 PRG offset: $1A68
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DA68:
ldy #$00 ; CPU:$DA5E PRG:1A5E ??
lda RacketTargetX ; CPU:$DA60 PRG:1A60 ??
cmp #$50 ; CPU:$DA62 PRG:1A62 ??
bcs Flow_DA81 ; CPU:$DA64 PRG:1A64 ??
ldx #$32 ; CPU:$DA66 PRG:1A66 ??
lda CourtSide ; CPU:$DA68 PRG:1A68 ??
beq Flow_DA78 ; CPU:$DA6A PRG:1A6A ??
ldx #$28 ; CPU:$DA6C PRG:1A6C ??
Flow_DA78:
stx PoseSequenceOffset ; CPU:$DA6E PRG:1A6E ??
lda #$01 ; CPU:$DA70 PRG:1A70 ??
sta PoseFrameTimer ; CPU:$DA72 PRG:1A72 ??
sty ObjectAnimationState ; CPU:$DA74 PRG:1A74 ??
rts ; CPU:$DA76 PRG:1A76 ??
Flow_DA81:
iny ; CPU:$DA78 PRG:1A78 ??
lda BallHeight ; CPU:$DA7A PRG:1A7A ??
cmp #$50 ; CPU:$DA7C PRG:1A7C ??
bcc Flow_DA8E ; CPU:$DA7E PRG:1A7E ??
iny ; CPU:$DA80 PRG:1A80 ??
cmp #$88 ; CPU:$DA82 PRG:1A82 ??
bcc Flow_DA8E ; CPU:$DA84 PRG:1A84 ??
iny ; CPU:$DA86 PRG:1A86 ??
Flow_DA8E:
tya ; CPU:$DA88 PRG:1A88 ??
tax ; CPU:$DA8A PRG:1A8A ??
dex ; CPU:$DA8C PRG:1A8C ??
lda CourtSide ; CPU:$DA8E PRG:1A8E ??
beq Flow_DA9B ; CPU:$DA90 PRG:1A90 ??
lda $DAA2,x ; CPU:$DA92 PRG:1A92 ??
jmp Flow_DA9E ; CPU:$DA94 PRG:1A94 ??
Flow_DA9B:
lda $DAA5,x ; CPU:$DA96 PRG:1A96 ??
Flow_DA9E:
tax ; CPU:$DA98 PRG:1A98 ??
jmp Flow_DA78 ; CPU:$DA9A PRG:1A9A ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1AA2-$1AA7.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
Player2CourtPositionTable:
.byte $28, $50, $3C, $32, $58, $46 ; PRG $1AA2 / CPU $DAA2 ; CPU:$DA9C PRG:1A9C 28 50 3C 32 58 46
; =============================================================================
; PhysicsRoutine_DAA8
; CPU address: $DAA8 PRG offset: $1AA8
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DAA8:
lda RacketContactState ; CPU:$DAA2 PRG:1AA2 ??
beq Flow_DAC6 ; CPU:$DAA4 PRG:1AA4 ??
cmp #$01 ; CPU:$DAA6 PRG:1AA6 ??
beq Flow_DAB4 ; CPU:$DAA8 PRG:1AA8 ??
lda #$04 ; CPU:$DAAA PRG:1AAA ??
bne Flow_DAB6 ; CPU:$DAAC PRG:1AAC ??
Flow_DAB4:
lda #$00 ; CPU:$DAAE PRG:1AAE ??
Flow_DAB6:
ldy RacketTargetY ; CPU:$DAB0 PRG:1AB0 ??
cpy #$80 ; CPU:$DAB2 PRG:1AB2 ??
bcs Flow_DABF ; CPU:$DAB4 PRG:1AB4 ??
clc ; CPU:$DAB6 PRG:1AB6 ??
adc #$03 ; CPU:$DAB8 PRG:1AB8 ??
Flow_DABF:
jsr PhysicsRoutine_DE0B ; CPU:$DABA PRG:1ABA ??
bne Flow_DAC6 ; CPU:$DABC PRG:1ABC ??
sta RacketContactState ; CPU:$DABE PRG:1ABE ??
Flow_DAC6:
rts ; CPU:$DAC0 PRG:1AC0 ??
; =============================================================================
; PhysicsRoutine_DAC7
; CPU address: $DAC7 PRG offset: $1AC7
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DAC7:
lda ActiveObjectIndex ; CPU:$DAC2 PRG:1AC2 ??
beq Flow_DAD2 ; CPU:$DAC4 PRG:1AC4 ??
ldx $037C ; CPU:$DAC6 PRG:1AC6 ??
beq Flow_DAE6 ; CPU:$DAC8 PRG:1AC8 ??
bne Flow_DAD7 ; CPU:$DACA PRG:1ACA ??
Flow_DAD2:
ldx $035C ; CPU:$DACC PRG:1ACC ??
beq Flow_DAE6 ; CPU:$DACE PRG:1ACE ??
Flow_DAD7:
dex ; CPU:$DAD0 PRG:1AD0 ??
txa ; CPU:$DAD2 PRG:1AD2 ??
jsr PhysicsRoutine_DE0B ; CPU:$DAD4 PRG:1AD4 ??
bne Flow_DAE6 ; CPU:$DAD6 PRG:1AD6 ??
sta $035C ; CPU:$DAD8 PRG:1AD8 ??
sta $037C ; CPU:$DADA PRG:1ADA ??
sta BallContactFlags ; CPU:$DADC PRG:1ADC ??
Flow_DAE6:
rts ; CPU:$DADE PRG:1ADE ??
; =============================================================================
; PhysicsRoutine_DAE7
; CPU address: $DAE7 PRG offset: $1AE7
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DAE7:
lda UmpireMessageId ; CPU:$DAE0 PRG:1AE0 ??
bne Flow_DB19 ; CPU:$DAE2 PRG:1AE2 ??
lda PlayerPreviousY ; CPU:$DAE4 PRG:1AE4 ??
cmp #$2C ; CPU:$DAE6 PRG:1AE6 ??
bcc Flow_DB19 ; CPU:$DAE8 PRG:1AE8 ??
lda #$0C ; CPU:$DAEA PRG:1AEA ??
ldx #$20 ; CPU:$DAEC PRG:1AEC ??
ldy GameMode ; CPU:$DAEE PRG:1AEE ??
beq Flow_DAFD ; CPU:$DAF0 PRG:1AF0 ??
lda #$0B ; CPU:$DAF2 PRG:1AF2 ??
ldx #$80 ; CPU:$DAF4 PRG:1AF4 ??
Flow_DAFD:
cpx PlayerTargetXLo ; CPU:$DAF6 PRG:1AF6 ??
sbc PlayerTargetXHi ; CPU:$DAF8 PRG:1AF8 ??
bcs Flow_DB19 ; CPU:$DAFA PRG:1AFA ??
lda #$14 ; CPU:$DAFC PRG:1AFC ??
ldx #$00 ; CPU:$DAFE PRG:1AFE ??
ldy GameMode ; CPU:$DB00 PRG:1B00 ??
beq Flow_DB0F ; CPU:$DB02 PRG:1B02 ??
lda #$14 ; CPU:$DB04 PRG:1B04 ??
ldx #$A0 ; CPU:$DB06 PRG:1B06 ??
Flow_DB0F:
cpx PlayerTargetXLo ; CPU:$DB08 PRG:1B08 ??
sbc PlayerTargetXHi ; CPU:$DB0A PRG:1B0A ??
bcc Flow_DB19 ; CPU:$DB0C PRG:1B0C ??
lda #$01 ; CPU:$DB0E PRG:1B0E ??
bne FlowEntry_DB1D ; CPU:$DB10 PRG:1B10 ??
Flow_DB19:
lda #$00 ; CPU:$DB12 PRG:1B12 ??
sta ObjectAnimationFrame ; CPU:$DB14 PRG:1B14 ??
FlowEntry_DB1D:
rts ; PRG $1B1D / CPU $DB1D ; CPU:$DB16 PRG:1B16 ??
; =============================================================================
; PhysicsRoutine_DB1E
; CPU address: $DB1E PRG offset: $1B1E
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DB1E:
lda RacketContactState ; CPU:$DB18 PRG:1B18 ??
bne FlowEntry_DB81 ; CPU:$DB1A PRG:1B1A ??
lda ActiveObjectIndex ; CPU:$DB1C PRG:1B1C ??
bne Flow_DB36 ; CPU:$DB1E PRG:1B1E ??
ldy $035A ; CPU:$DB20 PRG:1B20 ??
bne Flow_DB31 ; CPU:$DB22 PRG:1B22 ??
bit BallTrajectoryFlags ; CPU:$DB24 PRG:1B24 ??
bvc Flow_DB78 ; CPU:$DB26 PRG:1B26 ??
bvs Flow_DB62 ; CPU:$DB28 PRG:1B28 ??
Flow_DB31:
dey ; CPU:$DB2A PRG:1B2A ??
beq Flow_DB74 ; CPU:$DB2C PRG:1B2C ??
bne Flow_DB62 ; CPU:$DB2E PRG:1B2E ??
Flow_DB36:
lda GameMode ; CPU:$DB30 PRG:1B30 ??
beq Flow_DB49 ; CPU:$DB32 PRG:1B32 ??
jsr RollRng ; CPU:$DB34 PRG:1B34 ??
cmp #$25 ; CPU:$DB36 PRG:1B36 ??
bcs Flow_DB78 ; CPU:$DB38 PRG:1B38 ??
lda RacketTargetX ; CPU:$DB3A PRG:1B3A ??
cmp #$50 ; CPU:$DB3C PRG:1B3C ??
bcc Flow_DB62 ; CPU:$DB3E PRG:1B3E ??
bcs Flow_DB74 ; CPU:$DB40 PRG:1B40 ??
Flow_DB49:
ldx #$64 ; CPU:$DB42 PRG:1B42 ??
lda ServingPlayer ; CPU:$DB44 PRG:1B44 ??
cmp #$03 ; CPU:$DB46 PRG:1B46 ??
bcc Flow_DB53 ; CPU:$DB48 PRG:1B48 ??
ldx #$82 ; CPU:$DB4A PRG:1B4A ??
Flow_DB53:
stx Zp10 ; CPU:$DB4C PRG:1B4C ??
jsr RollRng ; CPU:$DB4E PRG:1B4E ??
cmp Zp10 ; CPU:$DB50 PRG:1B50 ??
bcs Flow_DB6E ; CPU:$DB52 PRG:1B52 ??
lda RacketTargetX ; CPU:$DB54 PRG:1B54 ??
cmp #$50 ; CPU:$DB56 PRG:1B56 ??
bcs FlowEntry_DB81 ; CPU:$DB58 PRG:1B58 ??
Flow_DB62:
inc RacketContactState ; CPU:$DB5A PRG:1B5A ??
lda #$10 ; CPU:$DB5C PRG:1B5C ??
sta RallyFlags ; CPU:$DB5E PRG:1B5E ??
lda #$0A ; CPU:$DB60 PRG:1B60 ??
jsr RenderRoutine_E021 ; CPU:$DB62 PRG:1B62 ??
rts ; CPU:$DB64 PRG:1B64 ??
Flow_DB6E:
lda RacketTargetX ; CPU:$DB66 PRG:1B66 ??
cmp #$50 ; CPU:$DB68 PRG:1B68 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1B72-$1B73.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_DB72:
.byte $90, $0D ; PRG $1B72 / CPU $DB72 ; CPU:$DB6A PRG:1B6A 90 0D
Flow_DB74:
inc RacketContactState ; CPU:$DB6C PRG:1B6C ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1B76-$1B77.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_DB76:
.byte $E6, $CA ; PRG $1B76 / CPU $DB76 ; CPU:$DB6E PRG:1B6E E6 CA
Flow_DB78:
lda #$10 ; CPU:$DB70 PRG:1B70 ??
sta RallyFlags ; CPU:$DB72 PRG:1B72 ??
lda #$0F ; CPU:$DB74 PRG:1B74 ??
jsr RenderRoutine_E021 ; CPU:$DB76 PRG:1B76 ??
FlowEntry_DB81:
rts ; PRG $1B81 / CPU $DB81 ; CPU:$DB78 PRG:1B78 ??
; =============================================================================
; PhysicsRoutine_DB82
; CPU address: $DB82 PRG offset: $1B82
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DB82:
lda PlayerAnimationId ; CPU:$DB7A PRG:1B7A ??
bne Flow_DBBF ; CPU:$DB7C PRG:1B7C ??
lda PlayerFacingDirection ; CPU:$DB7E PRG:1B7E ??
cmp #$01 ; CPU:$DB80 PRG:1B80 ??
bne Flow_DBC0 ; CPU:$DB82 PRG:1B82 ??
lda PoseSequenceOffset ; CPU:$DB84 PRG:1B84 ??
cmp #$27 ; CPU:$DB86 PRG:1B86 ??
bcs Flow_DBBF ; CPU:$DB88 PRG:1B88 ??
cmp #$09 ; CPU:$DB8A PRG:1B8A ??
bcc Flow_DBA4 ; CPU:$DB8C PRG:1B8C ??
cmp #$1D ; CPU:$DB8E PRG:1B8E ??
bcs Flow_DBAE ; CPU:$DB90 PRG:1B90 ??
ldy #$6A ; CPU:$DB92 PRG:1B92 ??
lda CourtSide ; CPU:$DB94 PRG:1B94 ??
bne Flow_DBBC ; CPU:$DB96 PRG:1B96 ??
ldy #$72 ; CPU:$DB98 PRG:1B98 ??
bne Flow_DBBC ; CPU:$DB9A PRG:1B9A ??
Flow_DBA4:
ldy #$70 ; CPU:$DB9C PRG:1B9C ??
lda CourtSide ; CPU:$DB9E PRG:1B9E ??
beq Flow_DBBC ; CPU:$DBA0 PRG:1BA0 ??
ldy #$00 ; CPU:$DBA2 PRG:1BA2 ??
beq Flow_DBB6 ; CPU:$DBA4 PRG:1BA4 ??
Flow_DBAE:
ldy #$68 ; CPU:$DBA6 PRG:1BA6 ??
lda CourtSide ; CPU:$DBA8 PRG:1BA8 ??
bne Flow_DBBC ; CPU:$DBAA PRG:1BAA ??
ldy #$1E ; CPU:$DBAC PRG:1BAC ??
Flow_DBB6:
lda RallyFlags ; CPU:$DBAE PRG:1BAE ??
and #$0F ; CPU:$DBB0 PRG:1BB0 ??
bne Flow_DBBF ; CPU:$DBB2 PRG:1BB2 ??
Flow_DBBC:
jmp Flow_DC0A ; CPU:$DBB4 PRG:1BB4 ??
Flow_DBBF:
rts ; CPU:$DBB6 PRG:1BB6 ??
Flow_DBC0:
lda PoseSequenceOffset ; CPU:$DBB8 PRG:1BB8 ??
cmp #$27 ; CPU:$DBBA PRG:1BBA ??
bcs FlowEntry_DC10 ; CPU:$DBBC PRG:1BBC ??
cmp #$09 ; CPU:$DBBE PRG:1BBE ??
bcc Flow_DBEA ; CPU:$DBC0 PRG:1BC0 ??
cmp #$1D ; CPU:$DBC2 PRG:1BC2 ??
bcs Flow_DBFA ; CPU:$DBC4 PRG:1BC4 ??
lda RallyFlags ; CPU:$DBC6 PRG:1BC6 ??
and #$0F ; CPU:$DBC8 PRG:1BC8 ??
beq PhysicsRoutine_DC11 ; CPU:$DBCA PRG:1BCA ??
ldy #$72 ; CPU:$DBCC PRG:1BCC ??
and #$03 ; CPU:$DBCE PRG:1BCE ??
beq Flow_DBE2 ; CPU:$DBD0 PRG:1BD0 ??
cmp #$01 ; CPU:$DBD2 PRG:1BD2 ??
beq Flow_DC0A ; CPU:$DBD4 PRG:1BD4 ??
Flow_DBDE:
ldy #$6A ; CPU:$DBD6 PRG:1BD6 ??
bne Flow_DC0A ; CPU:$DBD8 PRG:1BD8 ??
Flow_DBE2:
lda RacketTargetY ; CPU:$DBDA PRG:1BDA ??
cmp #$80 ; CPU:$DBDC PRG:1BDC ??
bcc Flow_DC0A ; CPU:$DBDE PRG:1BDE ??
bcs Flow_DBDE ; CPU:$DBE0 PRG:1BE0 ??
Flow_DBEA:
ldy #$00 ; CPU:$DBE2 PRG:1BE2 ??
lda RallyFlags ; CPU:$DBE4 PRG:1BE4 ??
and #$0F ; CPU:$DBE6 PRG:1BE6 ??
beq Flow_DC0A ; CPU:$DBE8 PRG:1BE8 ??
ldy #$70 ; CPU:$DBEA PRG:1BEA ??
and #$01 ; CPU:$DBEC PRG:1BEC ??
bne Flow_DC0A ; CPU:$DBEE PRG:1BEE ??
beq FlowEntry_DC10 ; CPU:$DBF0 PRG:1BF0 ??
Flow_DBFA:
ldy #$1E ; CPU:$DBF2 PRG:1BF2 ??
lda RallyFlags ; CPU:$DBF4 PRG:1BF4 ??
and #$0F ; CPU:$DBF6 PRG:1BF6 ??
beq Flow_DC0A ; CPU:$DBF8 PRG:1BF8 ??
ldy #$68 ; CPU:$DBFA PRG:1BFA ??
and #$02 ; CPU:$DBFC PRG:1BFC ??
bne Flow_DC0A ; CPU:$DBFE PRG:1BFE ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1C08-$1C09.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_DC08:
.byte $F0, $06 ; PRG $1C08 / CPU $DC08 ; CPU:$DC00 PRG:1C00 F0 06
Flow_DC0A:
sty PoseSequenceOffset ; CPU:$DC02 PRG:1C02 ??
lda #$00 ; CPU:$DC04 PRG:1C04 ??
sta PoseFrameTimer ; CPU:$DC06 PRG:1C06 ??
FlowEntry_DC10:
rts ; PRG $1C10 / CPU $DC10 ; CPU:$DC08 PRG:1C08 ??
; =============================================================================
; PhysicsRoutine_DC11
; CPU address: $DC11 PRG offset: $1C11
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DC11:
ldx #$0A ; CPU:$DC0A PRG:1C0A ??
lda PoseSequenceOffset ; CPU:$DC0C PRG:1C0C ??
cmp #$13 ; CPU:$DC0E PRG:1C0E ??
bcc Flow_DC1B ; CPU:$DC10 PRG:1C10 ??
ldx #$14 ; CPU:$DC12 PRG:1C12 ??
Flow_DC1B:
stx MathResultHi ; CPU:$DC14 PRG:1C14 ??
ldy #$0A ; CPU:$DC16 PRG:1C16 ??
lda RacketTargetY ; CPU:$DC18 PRG:1C18 ??
cmp #$80 ; CPU:$DC1A PRG:1C1A ??
bcs Flow_DC27 ; CPU:$DC1C PRG:1C1C ??
ldy #$14 ; CPU:$DC1E PRG:1C1E ??
Flow_DC27:
cpy MathResultHi ; CPU:$DC20 PRG:1C20 ??
beq FlowEntry_DC10 ; CPU:$DC22 PRG:1C22 ??
bne Flow_DC0A ; CPU:$DC24 PRG:1C24 ??
; =============================================================================
; PhysicsRoutine_DC2D
; CPU address: $DC2D PRG offset: $1C2D
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DC2D:
lda #$51 ; CPU:$DC26 PRG:1C26 ??
sta MathResultLo ; CPU:$DC28 PRG:1C28 ??
lda #$DE ; CPU:$DC2A PRG:1C2A ??
sta MathResultHi ; CPU:$DC2C PRG:1C2C ??
lda #$40 ; CPU:$DC2E PRG:1C2E ??
sta MathOperandLo ; CPU:$DC30 PRG:1C30 ??
lda #$00 ; CPU:$DC32 PRG:1C32 ??
sta MathOperandHi ; CPU:$DC34 PRG:1C34 ??
ldy ServingPlayer ; CPU:$DC36 PRG:1C36 ??
beq Flow_DC48 ; CPU:$DC38 PRG:1C38 ??
lda BallTrajectoryFlags ; CPU:$DC3A PRG:1C3A ??
and #$02 ; CPU:$DC3C PRG:1C3C ??
bne Flow_DC48 ; CPU:$DC3E PRG:1C3E ??
dey ; CPU:$DC40 PRG:1C40 ??
Flow_DC48:
ldy ServingPlayer ; CPU:$DC42 PRG:1C42 ??
beq Flow_DC52 ; CPU:$DC44 PRG:1C44 ??
Flow_DC4C:
jsr Add16BitZp12ToZp14 ; CPU:$DC46 PRG:1C46 ??
dey ; CPU:$DC48 PRG:1C48 ??
bne Flow_DC4C ; CPU:$DC4A PRG:1C4A ??
Flow_DC52:
lda #$08 ; CPU:$DC4C PRG:1C4C ??
sta MathOperandLo ; CPU:$DC4E PRG:1C4E ??
jsr PhysicsRoutine_DC63 ; CPU:$DC50 PRG:1C50 ??
dex ; CPU:$DC52 PRG:1C52 ??
beq Flow_DC62 ; CPU:$DC54 PRG:1C54 ??
Flow_DC5C:
jsr Add16BitZp12ToZp14 ; CPU:$DC56 PRG:1C56 ??
dex ; CPU:$DC58 PRG:1C58 ??
bne Flow_DC5C ; CPU:$DC5A PRG:1C5A ??
Flow_DC62:
rts ; CPU:$DC5C PRG:1C5C ??
; =============================================================================
; PhysicsRoutine_DC63
; CPU address: $DC63 PRG offset: $1C63
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DC63:
ldy #$00 ; CPU:$DC5E PRG:1C5E ??
lda GameMode ; CPU:$DC60 PRG:1C60 ??
beq Flow_DC6F ; CPU:$DC62 PRG:1C62 ??
lda Zp40 ; CPU:$DC64 PRG:1C64 ??
beq Flow_DC6F ; CPU:$DC66 PRG:1C66 ??
ldy #$20 ; CPU:$DC68 PRG:1C68 ??
Flow_DC6F:
lda $0308,y ; CPU:$DC6A PRG:1C6A ??
ldx #$01 ; CPU:$DC6C PRG:1C6C ??
cmp #$A0 ; CPU:$DC6E PRG:1C6E ??
bcc Flow_DC7A ; CPU:$DC70 PRG:1C70 ??
ldx #$05 ; CPU:$DC72 PRG:1C72 ??
Flow_DC7A:
lda $0309,y ; CPU:$DC74 PRG:1C74 ??
cmp #$60 ; CPU:$DC76 PRG:1C76 ??
bcc FlowEntry_DC8C ; CPU:$DC78 PRG:1C78 ??
inx ; CPU:$DC7A PRG:1C7A ??
cmp #$80 ; CPU:$DC7C PRG:1C7C ??
bcc FlowEntry_DC8C ; CPU:$DC7E PRG:1C7E ??
inx ; CPU:$DC80 PRG:1C80 ??
cmp #$A0 ; CPU:$DC82 PRG:1C82 ??
bcc FlowEntry_DC8C ; CPU:$DC84 PRG:1C84 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1C8B-$1C8C.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_DC8B:
.byte $E8 ; PRG $1C8B / CPU $DC8B ; CPU:$DC86 PRG:1C86 E8
FlowEntry_DC8C:
rts ; PRG $1C8C / CPU $DC8C ; CPU:$DC87 PRG:1C87 ??
; =============================================================================
; PhysicsRoutine_DC8D
; CPU address: $DC8D PRG offset: $1C8D
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DC8D:
lda RacketTargetX ; CPU:$DC89 PRG:1C89 ??
ldx #$01 ; CPU:$DC8B PRG:1C8B ??
cmp #$44 ; CPU:$DC8D PRG:1C8D ??
bcc Flow_DC97 ; CPU:$DC8F PRG:1C8F ??
ldx #$05 ; CPU:$DC91 PRG:1C91 ??
Flow_DC97:
lda RacketTargetY ; CPU:$DC93 PRG:1C93 ??
cmp #$68 ; CPU:$DC95 PRG:1C95 ??
bcc Flow_DCA8 ; CPU:$DC97 PRG:1C97 ??
inx ; CPU:$DC99 PRG:1C99 ??
cmp #$80 ; CPU:$DC9B PRG:1C9B ??
bcc Flow_DCA8 ; CPU:$DC9D PRG:1C9D ??
inx ; CPU:$DC9F PRG:1C9F ??
cmp #$98 ; CPU:$DCA1 PRG:1CA1 ??
bcc Flow_DCA8 ; CPU:$DCA3 PRG:1CA3 ??
inx ; CPU:$DCA5 PRG:1CA5 ??
Flow_DCA8:
stx BallContactFlags ; CPU:$DCA7 PRG:1CA7 ??
rts ; CPU:$DCA9 PRG:1CA9 ??
; =============================================================================
; PhysicsRoutine_DCAB
; CPU address: $DCAB PRG offset: $1CAB
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DCAB:
ldy #$00 ; CPU:$DCAB PRG:1CAB ??
jsr RollRng ; CPU:$DCAD PRG:1CAD ??
cmp #$FF ; CPU:$DCAF PRG:1CAF ??
bne Flow_DCB6 ; CPU:$DCB1 PRG:1CB1 ??
sbc #$01 ; CPU:$DCB3 PRG:1CB3 ??
Flow_DCB6:
cmp (MathResultLo),y ; CPU:$DCB5 PRG:1CB5 ??
iny ; CPU:$DCB7 PRG:1CB7 ??
bcs Flow_DCB6 ; CPU:$DCB9 PRG:1CB9 ??
dey ; CPU:$DCBB PRG:1CBB ??
tya ; CPU:$DCBD PRG:1CBD ??
asl a ; CPU:$DCBF PRG:1CBF ??
asl a ; CPU:$DCC1 PRG:1CC1 ??
tay ; CPU:$DCC3 PRG:1CC3 ??
lda $DD11,y ; CPU:$DCC5 PRG:1CC5 ??
sty Zp10 ; CPU:$DCC7 PRG:1CC7 ??
cmp #$40 ; CPU:$DCC9 PRG:1CC9 ??
beq Flow_DCF1 ; CPU:$DCCB PRG:1CCB ??
ldx #$A0 ; CPU:$DCCD PRG:1CCD ??
cpy #$00 ; CPU:$DCCF PRG:1CCF ??
beq Flow_DCD5 ; CPU:$DCD1 PRG:1CD1 ??
cpy #$10 ; CPU:$DCD3 PRG:1CD3 ??
beq Flow_DCD5 ; CPU:$DCD5 PRG:1CD5 ??
ldx #$60 ; CPU:$DCD7 PRG:1CD7 ??
Flow_DCD5:
ldy GameMode ; CPU:$DCD9 PRG:1CD9 ??
bne Flow_DCDE ; CPU:$DCDB PRG:1CDB ??
stx MathOperandLo ; CPU:$DCDD PRG:1CDD ??
clc ; CPU:$DCDF PRG:1CDF ??
adc MathOperandLo ; CPU:$DCE1 PRG:1CE1 ??
Flow_DCDE:
ldy ServingPlayer ; CPU:$DCE3 PRG:1CE3 ??
cpy #$03 ; CPU:$DCE5 PRG:1CE5 ??
bcc Flow_DCF1 ; CPU:$DCE7 PRG:1CE7 ??
ldy #$20 ; CPU:$DCE9 PRG:1CE9 ??
cpx #$A0 ; CPU:$DCEB PRG:1CEB ??
beq Flow_DCEC ; CPU:$DCED PRG:1CED ??
ldy #$E0 ; CPU:$DCEF PRG:1CEF ??
Flow_DCEC:
sty MathOperandLo ; CPU:$DCF1 PRG:1CF1 ??
clc ; CPU:$DCF3 PRG:1CF3 ??
adc MathOperandLo ; CPU:$DCF5 PRG:1CF5 ??
Flow_DCF1:
sta MathOperandLo ; CPU:$DCF7 PRG:1CF7 ??
ldy Zp10 ; CPU:$DCF9 PRG:1CF9 ??
lda $DD12,y ; CPU:$DCFB PRG:1CFB ??
sta MathOperandHi ; CPU:$DCFD PRG:1CFD ??
lda $DD13,y ; CPU:$DCFF PRG:1CFF ??
cpy #$10 ; CPU:$DD01 PRG:1D01 ??
bcc Flow_DD09 ; CPU:$DD03 PRG:1D03 ??
ldx ServingPlayer ; CPU:$DD05 PRG:1D05 ??
cpx #$03 ; CPU:$DD07 PRG:1D07 ??
bcc Flow_DD09 ; CPU:$DD09 PRG:1D09 ??
adc #$37 ; CPU:$DD0B PRG:1D0B ??
Flow_DD09:
sta MathResultLo ; CPU:$DD0D PRG:1D0D ??
lda $DD14,y ; CPU:$DD0F PRG:1D0F ??
sta MathResultHi ; CPU:$DD11 PRG:1D11 ??
rts ; CPU:$DD13 PRG:1D13 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1D11-$1D30.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
ScoreStateTransitionTable:
.byte $3F, $0C, $00, $0C, $40, $0E, $80, $0C, $40, $10, $80, $0C, $C1, $11, $00, $0C ; PRG $1D11 / CPU $DD11 ; CPU:$DD15 PRG:1D15 3F 0C 00 0C 40 0E 80 0C 40 10 80 0C C1 11 00 0C
.byte $10, $0C, $58, $0A, $40, $0E, $58, $0A, $40, $10, $58, $0A, $F0, $11, $58, $0A ; PRG $1D21 / CPU $DD21 ; CPU:$DD25 PRG:1D25 10 0C 58 0A 40 0E 58 0A 40 10 58 0A F0 11 58 0A
; =============================================================================
; PhysicsRoutine_DD31
; CPU address: $DD31 PRG offset: $1D31
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DD31:
jsr RollRng ; CPU:$DD35 PRG:1D35 ??
clc ; CPU:$DD37 PRG:1D37 ??
adc MathOperandLo ; CPU:$DD39 PRG:1D39 ??
sta PlayerTargetXLo ; CPU:$DD3B PRG:1D3B ??
lda $0502 ; CPU:$DD3D PRG:1D3D ??
and #$01 ; CPU:$DD3F PRG:1D3F ??
adc MathOperandHi ; CPU:$DD41 PRG:1D41 ??
sta PlayerTargetXHi ; CPU:$DD43 PRG:1D43 ??
lda $0503 ; CPU:$DD45 PRG:1D45 ??
clc ; CPU:$DD47 PRG:1D47 ??
adc MathResultLo ; CPU:$DD49 PRG:1D49 ??
sta PlayerTargetYLo ; CPU:$DD4B PRG:1D4B ??
lda $0500 ; CPU:$DD4D PRG:1D4D ??
and #$01 ; CPU:$DD4F PRG:1D4F ??
adc MathResultHi ; CPU:$DD51 PRG:1D51 ??
sta PlayerTargetYHi ; CPU:$DD53 PRG:1D53 ??
rts ; CPU:$DD55 PRG:1D55 ??
; =============================================================================
; PhysicsRoutine_DD54
; CPU address: $DD54 PRG offset: $1D54
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DD54:
lda BallHeight ; CPU:$DD57 PRG:1D57 ??
cmp #$B0 ; CPU:$DD59 PRG:1D59 ??
bcc Flow_DD5D ; CPU:$DD5B PRG:1D5B ??
jmp Flow_DDFA ; CPU:$DD5D PRG:1D5D ??
Flow_DD5D:
lda #$00 ; CPU:$DD5F PRG:1D5F ??
sta PlayerActionType ; CPU:$DD61 PRG:1D61 ??
sta PlayerActionParameter ; CPU:$DD63 PRG:1D63 ??
sta MathResultHi ; CPU:$DD65 PRG:1D65 ??
ldx ObjectAnimationState ; CPU:$DD67 PRG:1D67 ??
beq Flow_DD7F ; CPU:$DD69 PRG:1D69 ??
dex ; CPU:$DD6B PRG:1D6B ??
lda $DD7C,x ; CPU:$DD6D PRG:1D6D ??
sta PlayerActionType ; CPU:$DD6F PRG:1D6F ??
cmp #$04 ; CPU:$DD71 PRG:1D71 ??
bne Flow_DD79 ; CPU:$DD73 PRG:1D73 ??
lda #$02 ; CPU:$DD75 PRG:1D75 ??
sta PlayerActionParameter ; CPU:$DD77 PRG:1D77 ??
bne Flow_DDEA ; CPU:$DD79 PRG:1D79 ??
Flow_DD79:
jmp Flow_DDC5 ; CPU:$DD7B PRG:1D7B ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1D7C-$1D7E.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
ServingPlayerLookupTable:
.byte $04, $01, $02 ; PRG $1D7C / CPU $DD7C ; CPU:$DD7D PRG:1D7D 04 01 02
Flow_DD7F:
lda GameMode ; CPU:$DD80 PRG:1D80 ??
beq Flow_DDB3 ; CPU:$DD82 PRG:1D82 ??
lda $0328 ; CPU:$DD84 PRG:1D84 ??
cmp #$A0 ; CPU:$DD86 PRG:1D86 ??
bcs Flow_DD8E ; CPU:$DD88 PRG:1D88 ??
lda #$01 ; CPU:$DD8A PRG:1D8A ??
sta MathResultHi ; CPU:$DD8C PRG:1D8C ??
Flow_DD8E:
ldy #$00 ; CPU:$DD8E PRG:1D8E ??
ldx $0308 ; CPU:$DD90 PRG:1D90 ??
cpx #$A0 ; CPU:$DD92 PRG:1D92 ??
bcs Flow_DD99 ; CPU:$DD94 PRG:1D94 ??
ldy #$01 ; CPU:$DD96 PRG:1D96 ??
Flow_DD99:
jsr RollRng ; CPU:$DD98 PRG:1D98 ??
and #$03 ; CPU:$DD9A PRG:1D9A ??
tax ; CPU:$DD9C PRG:1D9C ??
tya ; CPU:$DD9E PRG:1D9E ??
ora MathResultHi ; CPU:$DDA0 PRG:1DA0 ??
beq Flow_DDD0 ; CPU:$DDA2 PRG:1DA2 ??
tya ; CPU:$DDA4 PRG:1DA4 ??
and MathResultHi ; CPU:$DDA6 PRG:1DA6 ??
beq Flow_DDAE ; CPU:$DDA8 PRG:1DA8 ??
txa ; CPU:$DDAA PRG:1DAA ??
bne Flow_DDC1 ; CPU:$DDAC PRG:1DAC ??
beq Flow_DDD0 ; CPU:$DDAE PRG:1DAE ??
Flow_DDAE:
txa ; CPU:$DDB0 PRG:1DB0 ??
beq Flow_DDC1 ; CPU:$DDB2 PRG:1DB2 ??
bne Flow_DDD0 ; CPU:$DDB4 PRG:1DB4 ??
Flow_DDB3:
lda $0308 ; CPU:$DDB6 PRG:1DB6 ??
cmp #$A0 ; CPU:$DDB8 PRG:1DB8 ??
bcs Flow_DDD0 ; CPU:$DDBA PRG:1DBA ??
lda $0503 ; CPU:$DDBC PRG:1DBC ??
and #$01 ; CPU:$DDBE PRG:1DBE ??
beq Flow_DDD0 ; CPU:$DDC0 PRG:1DC0 ??
Flow_DDC1:
lda #$04 ; CPU:$DDC2 PRG:1DC2 ??
sta PlayerActionType ; CPU:$DDC4 PRG:1DC4 ??
Flow_DDC5:
lda $0502 ; CPU:$DDC6 PRG:1DC6 ??
and #$01 ; CPU:$DDC8 PRG:1DC8 ??
beq Flow_DDD8 ; CPU:$DDCA PRG:1DCA ??
inc PlayerActionParameter ; CPU:$DDCC PRG:1DCC ??
bne Flow_DDD8 ; CPU:$DDCE PRG:1DCE ??
Flow_DDD0:
lda PlayerTargetXHi ; CPU:$DDD0 PRG:1DD0 ??
cmp #$0D ; CPU:$DDD2 PRG:1DD2 ??
bcc Flow_DDD8 ; CPU:$DDD4 PRG:1DD4 ??
inc PlayerActionParameter ; CPU:$DDD6 PRG:1DD6 ??
Flow_DDD8:
lda ComputerActionState ; CPU:$DDD8 PRG:1DD8 ??
beq Flow_DDEA ; CPU:$DDDA PRG:1DDA ??
ldx ServingPlayer ; CPU:$DDDC PRG:1DDC ??
jsr RollRng ; CPU:$DDDE PRG:1DDE ??
cmp $DE06,x ; CPU:$DDE0 PRG:1DE0 ??
bcs Flow_DDFA ; CPU:$DDE2 PRG:1DE2 ??
lda #$00 ; CPU:$DDE4 PRG:1DE4 ??
sta ComputerActionState ; CPU:$DDE6 PRG:1DE6 ??
Flow_DDEA:
jsr RollRng ; CPU:$DDE8 PRG:1DE8 ??
ldy #$00 ; CPU:$DDEA PRG:1DEA ??
ldx ServingPlayer ; CPU:$DDEC PRG:1DEC ??
cmp $DE01,x ; CPU:$DDEE PRG:1DEE ??
bcc Flow_DDF7 ; CPU:$DDF0 PRG:1DF0 ??
iny ; CPU:$DDF2 PRG:1DF2 ??
Flow_DDF7:
sty PlayerActionState ; CPU:$DDF4 PRG:1DF4 ??
rts ; PRG $1DF9 / CPU $DDF9 ; CPU:$DDF6 PRG:1DF6 ??
Flow_DDFA:
lda #$00 ; CPU:$DDF8 PRG:1DF8 ??
sta ObjectAnimationFrame ; CPU:$DDFA PRG:1DFA ??
sta ComputerActionState ; CPU:$DDFC PRG:1DFC ??
rts ; CPU:$DDFE PRG:1DFE ??
ComputerActionProbabilityTable:
.byte $20, $20, $0E, $02, $01, $30, $50, $70, $90, $B0 ; PRG $1E01 / CPU $DE01 ; CPU:$DE00 PRG:1E00 20 20 0E 02 01 30 50 70 90 B0
; =============================================================================
; PhysicsRoutine_DE0B
; CPU address: $DE0B PRG offset: $1E0B
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
PhysicsRoutine_DE0B:
asl a ; CPU:$DE0A PRG:1E0A ??
tay ; CPU:$DE0C PRG:1E0C ??
lda #$41 ; CPU:$DE0E PRG:1E0E ??
sta Zp10 ; CPU:$DE10 PRG:1E10 ??
lda #$DE ; CPU:$DE12 PRG:1E12 ??
sta Zp11 ; CPU:$DE14 PRG:1E14 ??
lda (Zp10),y ; CPU:$DE16 PRG:1E16 ??
cmp RacketTargetX ; CPU:$DE18 PRG:1E18 ??
beq Flow_DE25 ; CPU:$DE1A PRG:1E1A ??
bcs Flow_DE21 ; CPU:$DE1C PRG:1E1C ??
lda #$08 ; CPU:$DE1E PRG:1E1E ??
bne Flow_DE27 ; CPU:$DE20 PRG:1E20 ??
Flow_DE21:
lda #$04 ; CPU:$DE22 PRG:1E22 ??
bne Flow_DE27 ; CPU:$DE24 PRG:1E24 ??
Flow_DE25:
lda #$00 ; CPU:$DE26 PRG:1E26 ??
Flow_DE27:
sta MathResultHi ; CPU:$DE28 PRG:1E28 ??
iny ; CPU:$DE2A PRG:1E2A ??
lda (Zp10),y ; CPU:$DE2C PRG:1E2C ??
cmp RacketTargetY ; CPU:$DE2E PRG:1E2E ??
beq Flow_DE3A ; CPU:$DE30 PRG:1E30 ??
bcs Flow_DE36 ; CPU:$DE32 PRG:1E32 ??
lda #$02 ; CPU:$DE34 PRG:1E34 ??
bne Flow_DE3C ; CPU:$DE36 PRG:1E36 ??
Flow_DE36:
lda #$01 ; CPU:$DE38 PRG:1E38 ??
bne Flow_DE3C ; CPU:$DE3A PRG:1E3A ??
Flow_DE3A:
lda #$00 ; CPU:$DE3C PRG:1E3C ??
Flow_DE3C:
ora MathResultHi ; CPU:$DE3E PRG:1E3E ??
sta RallyFlags ; CPU:$DE40 PRG:1E40 ??
rts ; CPU:$DE42 PRG:1E42 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $1E41-$1F8E.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
PhysicsTable_DE41:
.byte $5C, $8C, $5C, $9C, $5C, $64, $5C, $74, $2C, $8C, $2C, $A0, $2C, $60, $2C, $74 ; PRG $1E41 / CPU $DE41 ; CPU:$DE44 PRG:1E44 5C 8C 5C 9C 5C 64 5C 74 2C 8C 2C A0 2C 60 2C 74
.byte $34, $67, $67, $67, $CD, $FF, $FF, $FF, $00, $34, $67, $67, $67, $CD, $FF, $FF ; PRG $1E51 / CPU $DE51 ; CPU:$DE54 PRG:1E54 34 67 67 67 CD FF FF FF 00 34 67 67 67 CD FF FF
.byte $00, $34, $67, $67, $67, $9A, $FF, $FF, $00, $00, $34, $67, $67, $67, $9A, $FF ; PRG $1E61 / CPU $DE61 ; CPU:$DE64 PRG:1E64 00 34 67 67 67 9A FF FF 00 00 34 67 67 67 9A FF
.byte $1A, $1A, $1A, $1A, $B3, $E6, $FF, $FF, $00, $1A, $1A, $1A, $34, $CD, $FF, $FF ; PRG $1E71 / CPU $DE71 ; CPU:$DE74 PRG:1E74 1A 1A 1A 1A B3 E6 FF FF 00 1A 1A 1A 34 CD FF FF
.byte $00, $00, $1A, $1A, $1A, $4D, $E6, $FF, $00, $00, $00, $1A, $1A, $34, $67, $FF ; PRG $1E81 / CPU $DE81 ; CPU:$DE84 PRG:1E84 00 00 1A 1A 1A 4D E6 FF 00 00 00 1A 1A 34 67 FF
.byte $34, $67, $80, $80, $CD, $FF, $FF, $FF, $00, $34, $67, $80, $80, $CD, $FF, $FF ; PRG $1E91 / CPU $DE91 ; CPU:$DE94 PRG:1E94 34 67 80 80 CD FF FF FF 00 34 67 80 80 CD FF FF
.byte $1A, $4D, $80, $80, $80, $B3, $FF, $FF, $00, $1A, $4D, $80, $80, $80, $B3, $FF ; PRG $1EA1 / CPU $DEA1 ; CPU:$DEA4 PRG:1EA4 1A 4D 80 80 80 B3 FF FF 00 1A 4D 80 80 80 B3 FF
.byte $1A, $34, $34, $34, $B3, $E6, $FF, $FF, $00, $1A, $34, $34, $4D, $CD, $FF, $FF ; PRG $1EB1 / CPU $DEB1 ; CPU:$DEB4 PRG:1EB4 1A 34 34 34 B3 E6 FF FF 00 1A 34 34 4D CD FF FF
.byte $00, $1A, $34, $34, $34, $67, $E6, $FF, $00, $00, $1A, $34, $34, $4D, $80, $FF ; PRG $1EC1 / CPU $DEC1 ; CPU:$DEC4 PRG:1EC4 00 1A 34 34 34 67 E6 FF 00 00 1A 34 34 4D 80 FF
.byte $34, $67, $80, $80, $B3, $E6, $FF, $FF, $00, $34, $67, $80, $9A, $CD, $FF, $FF ; PRG $1ED1 / CPU $DED1 ; CPU:$DED4 PRG:1ED4 34 67 80 80 B3 E6 FF FF 00 34 67 80 9A CD FF FF
.byte $1A, $4D, $80, $80, $80, $B3, $E6, $FF, $00, $1A, $4D, $80, $80, $9A, $CD, $FF ; PRG $1EE1 / CPU $DEE1 ; CPU:$DEE4 PRG:1EE4 1A 4D 80 80 80 B3 E6 FF 00 1A 4D 80 80 9A CD FF
.byte $00, $1A, $34, $34, $9A, $CD, $E6, $FF, $00, $1A, $34, $34, $4D, $B3, $E6, $FF ; PRG $1EF1 / CPU $DEF1 ; CPU:$DEF4 PRG:1EF4 00 1A 34 34 9A CD E6 FF 00 1A 34 34 4D B3 E6 FF
.byte $00, $1A, $34, $34, $4D, $80, $E6, $FF, $00, $1A, $34, $34, $4D, $67, $FF, $34 ; PRG $1F01 / CPU $DF01 ; CPU:$DF04 PRG:1F04 00 1A 34 34 4D 80 E6 FF 00 1A 34 34 4D 67 FF 34
.byte $67, $80, $80, $B3, $E6, $FF, $FF, $00, $34, $67, $80, $9A, $CD, $FF, $FF, $1A ; PRG $1F11 / CPU $DF11 ; CPU:$DF14 PRG:1F14 67 80 80 B3 E6 FF FF 00 34 67 80 9A CD FF FF 1A
.byte $4D, $80, $80, $80, $B3, $FF, $00, $1A, $4D, $80, $80, $9A, $CD, $FF, $1A, $34 ; PRG $1F21 / CPU $DF21 ; CPU:$DF24 PRG:1F24 4D 80 80 80 B3 FF 00 1A 4D 80 80 9A CD FF 1A 34
.byte $4D, $4D, $9A, $CD, $E6, $FF, $1A, $34, $4D, $4D, $67, $B3, $E6, $FF, $00, $1A ; PRG $1F31 / CPU $DF31 ; CPU:$DF34 PRG:1F34 4D 4D 9A CD E6 FF 1A 34 4D 4D 67 B3 E6 FF 00 1A
.byte $34, $4D, $67, $9A, $E6, $FF, $00, $1A, $34, $4D, $67, $80, $B3, $FF, $34, $4D ; PRG $1F41 / CPU $DF41 ; CPU:$DF44 PRG:1F44 34 4D 67 9A E6 FF 00 1A 34 4D 67 80 B3 FF 34 4D
.byte $67, $80, $B3, $CD, $E6, $FF, $1A, $4D, $67, $80, $9A, $CD, $E6, $FF, $1A, $34 ; PRG $1F51 / CPU $DF51 ; CPU:$DF54 PRG:1F54 67 80 B3 CD E6 FF 1A 4D 67 80 9A CD E6 FF 1A 34
.byte $67, $80, $9A, $B3, $E6, $FF, $1A, $34, $4D, $80, $9A, $B3, $CD, $FF, $1A, $34 ; PRG $1F61 / CPU $DF61 ; CPU:$DF64 PRG:1F64 67 80 9A B3 E6 FF 1A 34 4D 80 9A B3 CD FF 1A 34
.byte $4D, $67, $9A, $B3, $CD, $FF, $1A, $34, $4D, $67, $80, $B3, $CD, $FF, $1A, $34 ; PRG $1F71 / CPU $DF71 ; CPU:$DF74 PRG:1F74 4D 67 9A B3 CD FF 1A 34 4D 67 80 B3 CD FF 1A 34
.byte $4D, $67, $9A, $B3, $E6, $FF, $1A, $34, $4D, $67, $9A, $B3, $CD, $FF ; PRG $1F81 / CPU $DF81 ; CPU:$DF84 PRG:1F84 4D 67 9A B3 E6 FF 1A 34 4D 67 9A B3 CD FF
; =============================================================================
; RenderRoutine_DF8F
; CPU address: $DF8F PRG offset: $1F8F
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_DF8F:
lda #$00 ; CPU:$DF92 PRG:1F92 ??
sta ObjectAnimationFrame ; CPU:$DF94 PRG:1F94 ??
lda RacketTargetX ; CPU:$DF96 PRG:1F96 ??
bit BallTrajectoryFlags ; CPU:$DF98 PRG:1F98 ??
bvc Flow_DF9D ; CPU:$DF9A PRG:1F9A ??
cmp #$44 ; CPU:$DF9C PRG:1F9C ??
bcs Flow_DFF4 ; CPU:$DF9E PRG:1F9E ??
Flow_DF9D:
cmp #$50 ; CPU:$DFA0 PRG:1FA0 ??
bcs Flow_DFDF ; CPU:$DFA2 PRG:1FA2 ??
lda RacketTargetY ; CPU:$DFA4 PRG:1FA4 ??
sec ; CPU:$DFA6 PRG:1FA6 ??
sbc PlayerPreviousX ; CPU:$DFA8 PRG:1FA8 ??
bcs Flow_DFAC ; CPU:$DFAA PRG:1FAA ??
eor #$FF ; CPU:$DFAC PRG:1FAC ??
adc #$01 ; CPU:$DFAE PRG:1FAE ??
Flow_DFAC:
sta MathResultHi ; CPU:$DFB0 PRG:1FB0 ??
ldx ServingPlayer ; CPU:$DFB2 PRG:1FB2 ??
lda BallTrajectoryFlags ; CPU:$DFB4 PRG:1FB4 ??
and #$02 ; CPU:$DFB6 PRG:1FB6 ??
beq Flow_DFB9 ; CPU:$DFB8 PRG:1FB8 ??
clc ; CPU:$DFBA PRG:1FBA ??
adc #$05 ; CPU:$DFBC PRG:1FBC ??
Flow_DFB9:
txa ; CPU:$DFBE PRG:1FBE ??
tay ; CPU:$DFC0 PRG:1FC0 ??
asl a ; CPU:$DFC2 PRG:1FC2 ??
tax ; CPU:$DFC4 PRG:1FC4 ??
lda $E044,x ; CPU:$DFC6 PRG:1FC6 ??
inx ; CPU:$DFC8 PRG:1FC8 ??
cmp MathResultHi ; CPU:$DFCA PRG:1FCA ??
bcc Flow_DFF4 ; CPU:$DFCC PRG:1FCC ??
lda RacketTargetX ; CPU:$DFCE PRG:1FCE ??
adc $E044,x ; CPU:$DFD0 PRG:1FD0 ??
sbc $E058,y ; CPU:$DFD2 PRG:1FD2 ??
sec ; CPU:$DFD4 PRG:1FD4 ??
sbc PlayerPreviousY ; CPU:$DFD6 PRG:1FD6 ??
bcs Flow_DFD6 ; CPU:$DFD8 PRG:1FD8 ??
eor #$FF ; CPU:$DFDA PRG:1FDA ??
adc #$01 ; CPU:$DFDC PRG:1FDC ??
Flow_DFD6:
sta MathResultHi ; CPU:$DFDE PRG:1FDE ??
lda $E044,x ; CPU:$DFE0 PRG:1FE0 ??
cmp MathResultHi ; CPU:$DFE2 PRG:1FE2 ??
bcc Flow_DFF4 ; CPU:$DFE4 PRG:1FE4 ??
Flow_DFDF:
lda ActiveObjectIndex ; CPU:$DFE6 PRG:1FE6 ??
bne Flow_DFF2 ; CPU:$DFE8 PRG:1FE8 ??
lda $0359 ; CPU:$DFEA PRG:1FEA ??
beq Flow_DFF2 ; CPU:$DFEC PRG:1FEC ??
jsr RollRng ; CPU:$DFEE PRG:1FEE ??
cmp #$A0 ; CPU:$DFF0 PRG:1FF0 ??
bcc Flow_DFF4 ; CPU:$DFF2 PRG:1FF2 ??
dec $0359 ; CPU:$DFF4 PRG:1FF4 ??
Flow_DFF2:
inc ObjectAnimationFrame ; CPU:$DFF6 PRG:1FF6 ??
Flow_DFF4:
rts ; CPU:$DFF8 PRG:1FF8 ??
; =============================================================================
; RenderRoutine_DFF5
; CPU address: $DFF5 PRG offset: $1FF5
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_DFF5:
lda PlayerActionType ; CPU:$DFFA PRG:1FFA ??
bne Flow_E020 ; CPU:$DFFC PRG:1FFC ??
lda ServingPlayer ; CPU:$DFFE PRG:1FFE ??
cmp #$03 ; CPU:$E000 PRG:2000 ??
bcc Flow_E020 ; CPU:$E002 PRG:2002 ??
ldx #$00 ; CPU:$E004 PRG:2004 ??
ldy #$01 ; CPU:$E006 PRG:2006 ??
lda ObjectAnimationFrame ; CPU:$E008 PRG:2008 ??
bne Flow_E014 ; CPU:$E00A PRG:200A ??
lda BallContactFlags ; CPU:$E00C PRG:200C ??
cmp #$05 ; CPU:$E00E PRG:200E ??
bcc Flow_E020 ; CPU:$E010 PRG:2010 ??
sty ObjectAnimationFrame ; CPU:$E012 PRG:2012 ??
stx $0359 ; CPU:$E014 PRG:2014 ??
bcs Flow_E020 ; CPU:$E016 PRG:2016 ??
Flow_E014:
lda $035C ; CPU:$E018 PRG:2018 ??
cmp #$05 ; CPU:$E01A PRG:201A ??
bcc Flow_E020 ; CPU:$E01C PRG:201C ??
sty $0359 ; CPU:$E01E PRG:201E ??
stx ObjectAnimationFrame ; CPU:$E020 PRG:2020 ??
Flow_E020:
rts ; CPU:$E022 PRG:2022 ??
; =============================================================================
; RenderRoutine_E021
; CPU address: $E021 PRG offset: $2021
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E021:
clc ; CPU:$E024 PRG:2024 ??
adc ServingPlayer ; CPU:$E026 PRG:2026 ??
tax ; CPU:$E028 PRG:2028 ??
lda $E02B,x ; CPU:$E02A PRG:202A ??
sta RallyPhase ; CPU:$E02C PRG:202C ??
rts ; CPU:$E02E PRG:202E ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $202B-$2075.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
CourtObjectMetaspriteData:
.byte $04, $06, $08, $0B, $0E, $03, $05, $06, $08, $0B, $06, $07, $08, $09, $0A, $04 ; PRG $202B / CPU $E02B ; CPU:$E030 PRG:2030 04 06 08 0B 0E 03 05 06 08 0B 06 07 08 09 0A 04
.byte $05, $06, $08, $0A, $01, $02, $02, $04, $06, $20, $20, $34, $24, $40, $28, $48 ; PRG $203B / CPU $E03B ; CPU:$E040 PRG:2040 05 06 08 0A 01 02 02 04 06 20 20 34 24 40 28 48
.byte $2C, $50, $32, $30, $24, $40, $28, $50, $2C, $60, $32, $80, $38, $08, $0E, $1C ; PRG $204B / CPU $E04B ; CPU:$E050 PRG:2050 2C 50 32 30 24 40 28 50 2C 60 32 80 38 08 0E 1C
.byte $24, $2C, $0A, $10, $1C, $24, $2C, $A5, $15, $85, $9B, $A5, $14, $85, $9C, $20 ; PRG $205B / CPU $E05B ; CPU:$E060 PRG:2060 24 2C 0A 10 1C 24 2C A5 15 85 9B A5 14 85 9C 20
.byte $F3, $C6, $A5, $9B, $85, $15, $A5, $9C, $85, $14, $60 ; PRG $206B / CPU $E06B ; CPU:$E070 PRG:2070 F3 C6 A5 9B 85 15 A5 9C 85 14 60
; =============================================================================
; RenderRoutine_E076
; CPU address: $E076 PRG offset: $2076
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E076:
lda #$80 ; CPU:$E07B PRG:207B ??
sta ObjectDataPointerLo ; CPU:$E07D PRG:207D ??
lda #$03 ; CPU:$E07F PRG:207F ??
sta ObjectDataPointerHi ; CPU:$E081 PRG:2081 ??
lda #$00 ; CPU:$E083 PRG:2083 ??
sta ObjectDataOffset ; CPU:$E085 PRG:2085 ??
jsr EngineRoutine_C1F3 ; CPU:$E087 PRG:2087 ??
lda AnimationFrame ; CPU:$E089 PRG:2089 ??
beq Flow_E0BA ; CPU:$E08B PRG:208B ??
jsr RenderRoutine_E146 ; CPU:$E08D PRG:208D ??
jsr EngineRoutine_C21C ; CPU:$E08F PRG:208F ??
jsr EngineRoutine_C20E ; CPU:$E091 PRG:2091 ??
jsr EngineRoutine_C206 ; CPU:$E093 PRG:2093 ??
jsr EngineRoutine_C1F3 ; CPU:$E095 PRG:2095 ??
jsr EngineRoutine_C499 ; CPU:$E097 PRG:2097 ??
lda $0386 ; CPU:$E099 PRG:2099 ??
cmp #$3E ; CPU:$E09B PRG:209B ??
beq Flow_E0AC ; CPU:$E09D PRG:209D ??
cmp #$2F ; CPU:$E09F PRG:209F ??
clc ; CPU:$E0A1 PRG:20A1 ??
bne Flow_E0A8 ; CPU:$E0A3 PRG:20A3 ??
sec ; CPU:$E0A5 PRG:20A5 ??
Flow_E0A8:
adc #$04 ; CPU:$E0A7 PRG:20A7 ??
sta PlayerPoseId ; CPU:$E0A9 PRG:20A9 ??
Flow_E0AC:
lda RacketTargetX ; CPU:$E0AB PRG:20AB ??
sta BallTargetOffset ; CPU:$E0AD PRG:20AD ??
lda RacketTargetY ; CPU:$E0AF PRG:20AF ??
sta BallHeightReference ; CPU:$E0B1 PRG:20B1 ??
jsr EngineRoutine_C21C ; CPU:$E0B3 PRG:20B3 ??
jsr EngineRoutine_C20E ; CPU:$E0B5 PRG:20B5 ??
Flow_E0BA:
rts ; CPU:$E0B7 PRG:20B7 ??
; =============================================================================
; RenderRoutine_E0BB
; CPU address: $E0BB PRG offset: $20BB
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E0BB:
lda PlayerActionState ; CPU:$E0B9 PRG:20B9 ??
cmp #$01 ; CPU:$E0BB PRG:20BB ??
bne Flow_E0D5 ; CPU:$E0BD PRG:20BD ??
lda PlayerPoseId ; CPU:$E0BF PRG:20BF ??
cmp #$3E ; CPU:$E0C1 PRG:20C1 ??
beq Flow_E0D1 ; CPU:$E0C3 PRG:20C3 ??
lda RallyPhase ; CPU:$E0C5 PRG:20C5 ??
cmp #$03 ; CPU:$E0C7 PRG:20C7 ??
bcs Flow_E0D1 ; CPU:$E0C9 PRG:20C9 ??
lda UmpireMessageId ; CPU:$E0CB PRG:20CB ??
beq Flow_E0D5 ; CPU:$E0CD PRG:20CD ??
Flow_E0D1:
ldy #$00 ; CPU:$E0CF PRG:20CF ??
sty PlayerActionState ; CPU:$E0D1 PRG:20D1 ??
Flow_E0D5:
rts ; CPU:$E0D3 PRG:20D3 ??
; =============================================================================
; RenderRoutine_E0D6
; CPU address: $E0D6 PRG offset: $20D6
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E0D6:
lda $03A8 ; CPU:$E0D5 PRG:20D5 ??
sta PlayerYPosition ; CPU:$E0D7 PRG:20D7 ??
lda $03A9 ; CPU:$E0D9 PRG:20D9 ??
sta PlayerXPosition ; CPU:$E0DB PRG:20DB ??
lda Player1YSubpixel ; CPU:$E0DD PRG:20DD ??
pha ; CPU:$E0DF PRG:20DF ??
lda Player1YPosition ; CPU:$E0E1 PRG:20E1 ??
pha ; CPU:$E0E3 PRG:20E3 ??
lda Player2YSubpixel ; CPU:$E0E5 PRG:20E5 ??
pha ; CPU:$E0E7 PRG:20E7 ??
lda Player2YPosition ; CPU:$E0E9 PRG:20E9 ??
pha ; CPU:$E0EB PRG:20EB ??
lda RacketTargetX ; CPU:$E0ED PRG:20ED ??
pha ; CPU:$E0EF PRG:20EF ??
lda RacketTargetY ; CPU:$E0F1 PRG:20F1 ??
pha ; CPU:$E0F3 PRG:20F3 ??
lda Player1XSubpixel ; CPU:$E0F5 PRG:20F5 ??
sta MathVectorYHi ; CPU:$E0F7 PRG:20F7 ??
lda #$00 ; CPU:$E0F9 PRG:20F9 ??
sta MathVectorYLo ; CPU:$E0FB PRG:20FB ??
sta MathVectorXHi ; CPU:$E0FD PRG:20FD ??
sta ProjectedXLo ; CPU:$E0FF PRG:20FF ??
sta ProjectedXHi ; CPU:$E101 PRG:2101 ??
jsr EngineRoutine_C6ED ; CPU:$E103 PRG:2103 ??
lda MathVectorYHi ; CPU:$E105 PRG:2105 ??
sta MathVectorXLo ; CPU:$E107 PRG:2107 ??
lda WorkPtrLo ; CPU:$E109 PRG:2109 ??
sta ProjectedYLo ; CPU:$E10B PRG:210B ??
lda WorkPtrHi ; CPU:$E10D PRG:210D ??
sta ProjectedYHi ; CPU:$E10F PRG:210F ??
jsr EngineRoutine_C62B ; CPU:$E111 PRG:2111 ??
jsr MatchRoutine_C705 ; CPU:$E113 PRG:2113 ??
lda PlayerTargetXLo ; CPU:$E115 PRG:2115 ??
clc ; CPU:$E117 PRG:2117 ??
adc MathVectorYHi ; CPU:$E119 PRG:2119 ??
sta Player1YSubpixel ; CPU:$E11B PRG:211B ??
lda PlayerTargetXHi ; CPU:$E11D PRG:211D ??
sta Player1YPosition ; CPU:$E11F PRG:211F ??
lda PlayerTargetYLo ; CPU:$E121 PRG:2121 ??
sta Player2YSubpixel ; CPU:$E123 PRG:2123 ??
lda PlayerTargetYHi ; CPU:$E125 PRG:2125 ??
sta Player2YPosition ; CPU:$E127 PRG:2127 ??
jsr EngineRoutine_C499 ; CPU:$E129 PRG:2129 ??
lda RacketTargetX ; CPU:$E12B PRG:212B ??
sta PlayerPreviousY ; CPU:$E12D PRG:212D ??
lda RacketTargetY ; CPU:$E12F PRG:212F ??
sta PlayerPreviousX ; CPU:$E131 PRG:2131 ??
pla ; CPU:$E133 PRG:2133 ??
sta RacketTargetY ; CPU:$E135 PRG:2135 ??
pla ; CPU:$E137 PRG:2137 ??
sta RacketTargetX ; CPU:$E139 PRG:2139 ??
pla ; CPU:$E13B PRG:213B ??
sta Player2YPosition ; CPU:$E13D PRG:213D ??
pla ; CPU:$E13F PRG:213F ??
sta Player2YSubpixel ; CPU:$E141 PRG:2141 ??
pla ; CPU:$E143 PRG:2143 ??
sta Player1YPosition ; CPU:$E145 PRG:2145 ??
pla ; CPU:$E147 PRG:2147 ??
sta Player1YSubpixel ; CPU:$E149 PRG:2149 ??
rts ; PRG $2145 / CPU $E145 ; CPU:$E14B PRG:214B ??
; =============================================================================
; RenderRoutine_E146
; CPU address: $E146 PRG offset: $2146
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E146:
jsr RenderRoutine_E0BB ; CPU:$E14D PRG:214D ??
lda NetAnimationTimer ; CPU:$E14F PRG:214F ??
beq Flow_E14F ; CPU:$E151 PRG:2151 ??
dec NetAnimationTimer ; CPU:$E153 PRG:2153 ??
Flow_E14F:
lda PlayerActionState ; CPU:$E155 PRG:2155 ??
bne Flow_E197 ; CPU:$E157 PRG:2157 ??
ldy #$01 ; CPU:$E159 PRG:2159 ??
lda Player2XPosition ; CPU:$E15B PRG:215B ??
bne Flow_E15D ; CPU:$E15D PRG:215D ??
ldy #$00 ; CPU:$E15F PRG:215F ??
beq Flow_E161 ; CPU:$E161 PRG:2161 ??
Flow_E15D:
bpl Flow_E161 ; CPU:$E163 PRG:2163 ??
ldy #$FF ; CPU:$E165 PRG:2165 ??
Flow_E161:
sty PlayerFacingDirection ; CPU:$E167 PRG:2167 ??
sty BallAnimationTimer ; CPU:$E169 PRG:2169 ??
jsr IntegrateObjectMotion ; CPU:$E16B PRG:216B ??
lda RacketTargetY ; CPU:$E16D PRG:216D ??
sta ObjectAnimationFrame ; CPU:$E16F PRG:216F ??
jsr EngineRoutine_C478 ; CPU:$E171 PRG:2171 ??
lda Player1XPosition ; CPU:$E173 PRG:2173 ??
bpl Flow_E18A ; CPU:$E175 PRG:2175 ??
lda RacketTargetY ; CPU:$E177 PRG:2177 ??
bpl Flow_E18A ; CPU:$E179 PRG:2179 ??
lda ObjectAnimationFrame ; CPU:$E17B PRG:217B ??
bmi Flow_E18A ; CPU:$E17D PRG:217D ??
lda #$00 ; CPU:$E17F PRG:217F ??
sta RacketTargetY ; CPU:$E181 PRG:2181 ??
sta Player1XSubpixel ; CPU:$E183 PRG:2183 ??
sta Player1XPosition ; CPU:$E185 PRG:2185 ??
lda #$3E ; CPU:$E187 PRG:2187 ??
sta PlayerPoseId ; CPU:$E189 PRG:2189 ??
sta $03A6 ; CPU:$E18B PRG:218B ??
Flow_E18A:
jsr RenderRoutine_E365 ; CPU:$E18D PRG:218D ??
jsr RenderRoutine_E422 ; CPU:$E18F PRG:218F ??
jsr RenderRoutine_E4D0 ; CPU:$E191 PRG:2191 ??
jsr RenderRoutine_E513 ; CPU:$E193 PRG:2193 ??
rts ; CPU:$E195 PRG:2195 ??
Flow_E197:
ldy #$00 ; CPU:$E197 PRG:2197 ??
sty PlayerActionState ; CPU:$E199 PRG:2199 ??
sty PlayerFacingDirection ; CPU:$E19B PRG:219B ??
cmp #$01 ; CPU:$E19D PRG:219D ??
bne Flow_E1A4 ; CPU:$E19F PRG:219F ??
jmp Flow_E23B ; CPU:$E1A1 PRG:21A1 ??
Flow_E1A4:
lda NetAnimationTimer ; CPU:$E1A3 PRG:21A3 ??
beq Flow_E1A9 ; CPU:$E1A5 PRG:21A5 ??
rts ; CPU:$E1A7 PRG:21A7 ??
Flow_E1A9:
lda #$05 ; CPU:$E1A9 PRG:21A9 ??
sta NetAnimationTimer ; CPU:$E1AB PRG:21AB ??
lda #$02 ; CPU:$E1AD PRG:21AD ??
sta AudioRequestFlags3 ; CPU:$E1AF PRG:21AF ??
lda BallTargetOffset ; CPU:$E1B1 PRG:21B1 ??
cmp #$44 ; CPU:$E1B3 PRG:21B3 ??
bcc Flow_E1D3 ; CPU:$E1B5 PRG:21B5 ??
cmp #$54 ; CPU:$E1B7 PRG:21B7 ??
bcc Flow_E1C3 ; CPU:$E1B9 PRG:21B9 ??
cmp #$88 ; CPU:$E1BB PRG:21BB ??
bcc Flow_E1C9 ; CPU:$E1BD PRG:21BD ??
cmp #$A0 ; CPU:$E1BF PRG:21BF ??
bcs Flow_E1D3 ; CPU:$E1C1 PRG:21C1 ??
Flow_E1C3:
jsr RenderRoutine_E535 ; CPU:$E1C3 PRG:21C3 ??
jmp Flow_E1D6 ; CPU:$E1C5 PRG:21C5 ??
Flow_E1C9:
inc ObjectAnimationState ; CPU:$E1C7 PRG:21C7 ??
lda #$00 ; CPU:$E1C9 PRG:21C9 ??
sta Player2XSubpixel ; CPU:$E1CB PRG:21CB ??
sta Player2XPosition ; CPU:$E1CD PRG:21CD ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $21D1-$21D2.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_E1D1:
.byte $F0, $03 ; PRG $21D1 / CPU $E1D1 ; CPU:$E1CF PRG:21CF F0 03
Flow_E1D3:
jsr RenderRoutine_E527 ; CPU:$E1D1 PRG:21D1 ??
Flow_E1D6:
ldy #$00 ; CPU:$E1D3 PRG:21D3 ??
sec ; CPU:$E1D5 PRG:21D5 ??
sbc Player1XSubpixel ; CPU:$E1D7 PRG:21D7 ??
sta Player1XSubpixel ; CPU:$E1D9 PRG:21D9 ??
tya ; CPU:$E1DB PRG:21DB ??
sbc Player1XPosition ; CPU:$E1DD PRG:21DD ??
sta Player1XPosition ; CPU:$E1DF PRG:21DF ??
jsr RenderRoutine_E56C ; CPU:$E1E1 PRG:21E1 ??
lda RallyPhase ; CPU:$E1E3 PRG:21E3 ??
bne FlowEntry_E23A ; CPU:$E1E5 PRG:21E5 ??
lda #$03 ; CPU:$E1E7 PRG:21E7 ??
sta RallyPhase ; CPU:$E1E9 PRG:21E9 ??
lda BallAnimationTimer ; CPU:$E1EB PRG:21EB ??
bmi Flow_E208 ; CPU:$E1ED PRG:21ED ??
ldy #$00 ; CPU:$E1EF PRG:21EF ??
ldx #$01 ; CPU:$E1F1 PRG:21F1 ??
lda BallTargetOffset ; CPU:$E1F3 PRG:21F3 ??
cmp #$70 ; CPU:$E1F5 PRG:21F5 ??
bcc Flow_E232 ; CPU:$E1F7 PRG:21F7 ??
bit BallTrajectoryFlags ; CPU:$E1F9 PRG:21F9 ??
bvc Flow_E202 ; CPU:$E1FB PRG:21FB ??
jmp Flow_E4A3 ; CPU:$E1FD PRG:21FD ??
Flow_E202:
ldy #$01 ; CPU:$E1FF PRG:21FF ??
ldx #$02 ; CPU:$E201 PRG:2201 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2206-$2207.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_E206:
.byte $D0, $2A ; PRG $2206 / CPU $E206 ; CPU:$E203 PRG:2203 D0 2A
Flow_E208:
bit BallTrajectoryFlags ; CPU:$E205 PRG:2205 ??
bvc Flow_E21D ; CPU:$E207 PRG:2207 ??
sec ; CPU:$E209 PRG:2209 ??
lda Player2YSubpixel ; CPU:$E20B PRG:220B ??
sbc #$80 ; CPU:$E20D PRG:220D ??
sta Player2YSubpixel ; CPU:$E20F PRG:220F ??
bcs Flow_E217 ; CPU:$E211 PRG:2211 ??
dec Player2YPosition ; CPU:$E213 PRG:2213 ??
Flow_E217:
ldy #$00 ; CPU:$E215 PRG:2215 ??
ldx #$02 ; CPU:$E217 PRG:2217 ??
bpl Flow_E232 ; CPU:$E219 PRG:2219 ??
Flow_E21D:
ldy #$00 ; CPU:$E21B PRG:221B ??
ldx #$02 ; CPU:$E21D PRG:221D ??
lda BallTargetOffset ; CPU:$E21F PRG:221F ??
cmp #$70 ; CPU:$E221 PRG:2221 ??
bcs Flow_E232 ; CPU:$E223 PRG:2223 ??
bit BallTrajectoryFlags ; CPU:$E225 PRG:2225 ??
bvc Flow_E22E ; CPU:$E227 PRG:2227 ??
jmp Flow_E4A3 ; CPU:$E229 PRG:2229 ??
Flow_E22E:
ldy #$01 ; CPU:$E22B PRG:222B ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2230-$2231.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_E230:
.byte $A2, $01 ; PRG $2230 / CPU $E230 ; CPU:$E22D PRG:222D A2 01
Flow_E232:
sty UmpireMessageId ; CPU:$E22F PRG:222F ??
stx CourtMessageId ; CPU:$E231 PRG:2231 ??
lda #$00 ; CPU:$E233 PRG:2233 ??
sta BallStateFlags ; CPU:$E235 PRG:2235 ??
FlowEntry_E23A:
rts ; PRG $223A / CPU $E23A ; CPU:$E237 PRG:2237 ??
Flow_E23B:
ldy PlayerActionDelay ; CPU:$E239 PRG:2239 ??
beq Flow_E262 ; CPU:$E23B PRG:223B ??
dec PlayerActionDelay ; CPU:$E23D PRG:223D ??
bne Flow_E262 ; CPU:$E23F PRG:223F ??
lda BallTrajectoryFlags ; CPU:$E241 PRG:2241 ??
and #$0F ; CPU:$E243 PRG:2243 ??
sta BallTrajectoryFlags ; CPU:$E245 PRG:2245 ??
ldx #$02 ; CPU:$E247 PRG:2247 ??
ldy RallyPhase ; CPU:$E249 PRG:2249 ??
bne Flow_E262 ; CPU:$E24B PRG:224B ??
ror a ; CPU:$E24D PRG:224D ??
ror a ; CPU:$E24F PRG:224F ??
bcs Flow_E255 ; CPU:$E251 PRG:2251 ??
ldx #$01 ; CPU:$E253 PRG:2253 ??
Flow_E255:
stx CourtMessageId ; CPU:$E255 PRG:2255 ??
ldy #$02 ; CPU:$E257 PRG:2257 ??
sty RallyPhase ; CPU:$E259 PRG:2259 ??
lda #$00 ; CPU:$E25B PRG:225B ??
sta BallStateFlags ; CPU:$E25D PRG:225D ??
jmp Flow_E1A4 ; CPU:$E25F PRG:225F ??
Flow_E262:
jsr MatchRoutine_C94D ; CPU:$E261 PRG:2261 ??
lda #$00 ; CPU:$E263 PRG:2263 ??
sta RallyPhase ; CPU:$E265 PRG:2265 ??
lda PlayerActionType ; CPU:$E267 PRG:2267 ??
asl a ; CPU:$E269 PRG:2269 ??
cmp #$08 ; CPU:$E26B PRG:226B ??
bcc Flow_E272 ; CPU:$E26D PRG:226D ??
adc #$00 ; CPU:$E26F PRG:226F ??
Flow_E272:
adc PlayerActionParameter ; CPU:$E271 PRG:2271 ??
sta Zp16 ; CPU:$E273 PRG:2273 ??
asl a ; CPU:$E275 PRG:2275 ??
asl a ; CPU:$E277 PRG:2277 ??
adc Zp16 ; CPU:$E279 PRG:2279 ??
adc ServingPlayer ; CPU:$E27B PRG:227B ??
asl a ; CPU:$E27D PRG:227D ??
sta MathOperandLo ; CPU:$E27F PRG:227F ??
lda #$00 ; CPU:$E281 PRG:2281 ??
sta MathOperandHi ; CPU:$E283 PRG:2283 ??
lda #$E3 ; CPU:$E285 PRG:2285 ??
sta MathResultHi ; CPU:$E287 PRG:2287 ??
lda #$AA ; CPU:$E289 PRG:2289 ??
sta MathResultLo ; CPU:$E28B PRG:228B ??
jsr Add16BitZp12ToZp14 ; CPU:$E28D PRG:228D ??
ldy #$00 ; CPU:$E28F PRG:228F ??
lda (MathResultLo),y ; CPU:$E291 PRG:2291 ??
sta BallMotionControl ; CPU:$E293 PRG:2293 ??
iny ; CPU:$E295 PRG:2295 ??
lda (MathResultLo),y ; CPU:$E297 PRG:2297 ??
sta Player2XPosition ; CPU:$E299 PRG:2299 ??
sec ; CPU:$E29B PRG:229B ??
lda PlayerTargetYLo ; CPU:$E29D PRG:229D ??
sbc Player2YSubpixel ; CPU:$E29F PRG:229F ??
sta MathVectorYLo ; CPU:$E2A1 PRG:22A1 ??
lda PlayerTargetYHi ; CPU:$E2A3 PRG:22A3 ??
sbc Player2YPosition ; CPU:$E2A5 PRG:22A5 ??
sta MathVectorYHi ; CPU:$E2A7 PRG:22A7 ??
jsr EngineRoutine_C6ED ; CPU:$E2A9 PRG:22A9 ??
lda MathVectorYHi ; CPU:$E2AB PRG:22AB ??
sta ProjectedXHi ; CPU:$E2AD PRG:22AD ??
lda MathVectorYLo ; CPU:$E2AF PRG:22AF ??
sta ProjectedYLo ; CPU:$E2B1 PRG:22B1 ??
lda #$00 ; CPU:$E2B3 PRG:22B3 ??
sta ProjectedXLo ; CPU:$E2B5 PRG:22B5 ??
sta ProjectedYHi ; CPU:$E2B7 PRG:22B7 ??
lda Player2XPosition ; CPU:$E2B9 PRG:22B9 ??
sta MathVectorYHi ; CPU:$E2BB PRG:22BB ??
lda Player2XSubpixel ; CPU:$E2BD PRG:22BD ??
sta MathVectorYLo ; CPU:$E2BF PRG:22BF ??
lda SignedAimDelta ; CPU:$E2C1 PRG:22C1 ??
bpl Flow_E2D1 ; CPU:$E2C3 PRG:22C3 ??
jsr EngineRoutine_C6F3 ; CPU:$E2C5 PRG:22C5 ??
lda MathVectorYHi ; CPU:$E2C7 PRG:22C7 ??
sta Player2XPosition ; CPU:$E2C9 PRG:22C9 ??
lda MathVectorYLo ; CPU:$E2CB PRG:22CB ??
sta Player2XSubpixel ; CPU:$E2CD PRG:22CD ??
jsr EngineRoutine_C6ED ; CPU:$E2CF PRG:22CF ??
Flow_E2D1:
lda MathVectorYHi ; CPU:$E2D1 PRG:22D1 ??
sta MathVectorXHi ; CPU:$E2D3 PRG:22D3 ??
lda MathVectorYLo ; CPU:$E2D5 PRG:22D5 ??
sta MathVectorXLo ; CPU:$E2D7 PRG:22D7 ??
jsr EngineRoutine_C684 ; CPU:$E2D9 PRG:22D9 ??
lda MathVectorYLo ; CPU:$E2DB PRG:22DB ??
sta WorkPtrHi ; CPU:$E2DD PRG:22DD ??
lda MathVectorYHi ; CPU:$E2DF PRG:22DF ??
sta WorkPtrLo ; CPU:$E2E1 PRG:22E1 ??
lda BallMotionControl ; CPU:$E2E3 PRG:22E3 ??
asl a ; CPU:$E2E5 PRG:22E5 ??
sta MathVectorXLo ; CPU:$E2E7 PRG:22E7 ??
lda #$00 ; CPU:$E2E9 PRG:22E9 ??
rol a ; CPU:$E2EB PRG:22EB ??
sta MathVectorXHi ; CPU:$E2ED PRG:22ED ??
jsr EngineRoutine_C62B ; CPU:$E2EF PRG:22EF ??
lda ProjectedYLo ; CPU:$E2F1 PRG:22F1 ??
sta BallXPosition ; CPU:$E2F3 PRG:22F3 ??
lda ProjectedYHi ; CPU:$E2F5 PRG:22F5 ??
sta BallXSubpixel ; CPU:$E2F7 PRG:22F7 ??
lda BallYPosition ; CPU:$E2F9 PRG:22F9 ??
sta ProjectedXHi ; CPU:$E2FB PRG:22FB ??
lda BallYSubpixel ; CPU:$E2FD PRG:22FD ??
sta ProjectedYLo ; CPU:$E2FF PRG:22FF ??
lda #$00 ; CPU:$E301 PRG:2301 ??
sta ProjectedXLo ; CPU:$E303 PRG:2303 ??
sta ProjectedYHi ; CPU:$E305 PRG:2305 ??
lda WorkPtrLo ; CPU:$E307 PRG:2307 ??
sta MathVectorXHi ; CPU:$E309 PRG:2309 ??
lda WorkPtrHi ; CPU:$E30B PRG:230B ??
sta MathVectorXLo ; CPU:$E30D PRG:230D ??
jsr EngineRoutine_C684 ; CPU:$E30F PRG:230F ??
sec ; CPU:$E311 PRG:2311 ??
lda BallXSubpixel ; CPU:$E313 PRG:2313 ??
sbc MathVectorYLo ; CPU:$E315 PRG:2315 ??
sta BallXSubpixel ; CPU:$E317 PRG:2317 ??
lda BallXPosition ; CPU:$E319 PRG:2319 ??
sbc MathVectorYHi ; CPU:$E31B PRG:231B ??
sta BallXPosition ; CPU:$E31D PRG:231D ??
sec ; CPU:$E31F PRG:231F ??
lda PlayerTargetXLo ; CPU:$E321 PRG:2321 ??
sbc Player1YSubpixel ; CPU:$E323 PRG:2323 ??
sta MathVectorYLo ; CPU:$E325 PRG:2325 ??
lda PlayerTargetXHi ; CPU:$E327 PRG:2327 ??
sbc Player1YPosition ; CPU:$E329 PRG:2329 ??
sta MathVectorYHi ; CPU:$E32B PRG:232B ??
jsr EngineRoutine_C6ED ; CPU:$E32D PRG:232D ??
lda MathVectorYHi ; CPU:$E32F PRG:232F ??
sta ProjectedXHi ; CPU:$E331 PRG:2331 ??
lda MathVectorYLo ; CPU:$E333 PRG:2333 ??
sta ProjectedYLo ; CPU:$E335 PRG:2335 ??
lda #$00 ; CPU:$E337 PRG:2337 ??
sta ProjectedXLo ; CPU:$E339 PRG:2339 ??
sta ProjectedYHi ; CPU:$E33B PRG:233B ??
lda WorkPtrLo ; CPU:$E33D PRG:233D ??
sta MathVectorXHi ; CPU:$E33F PRG:233F ??
lda WorkPtrHi ; CPU:$E341 PRG:2341 ??
sta MathVectorXLo ; CPU:$E343 PRG:2343 ??
jsr EngineRoutine_C684 ; CPU:$E345 PRG:2345 ??
jsr MatchRoutine_C705 ; CPU:$E347 PRG:2347 ??
lda MathVectorYHi ; CPU:$E349 PRG:2349 ??
sta Player1XPosition ; CPU:$E34B PRG:234B ??
lda MathVectorYLo ; CPU:$E34D PRG:234D ??
bpl Flow_E355 ; CPU:$E34F PRG:234F ??
inc Player1XPosition ; CPU:$E351 PRG:2351 ??
Flow_E355:
lda #$00 ; CPU:$E353 PRG:2353 ??
sta Player1XSubpixel ; CPU:$E355 PRG:2355 ??
lda BallMotionControl ; CPU:$E357 PRG:2357 ??
eor #$FF ; CPU:$E359 PRG:2359 ??
sta BallMotionControl ; CPU:$E35B PRG:235B ??
inc BallMotionControl ; CPU:$E35D PRG:235D ??
jsr RenderRoutine_E0D6 ; CPU:$E35F PRG:235F ??
rts ; PRG $2364 / CPU $E364 ; CPU:$E361 PRG:2361 ??
; =============================================================================
; RenderRoutine_E365
; CPU address: $E365 PRG offset: $2365
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E365:
lda PlayerPoseId ; CPU:$E363 PRG:2363 ??
cmp #$3E ; CPU:$E365 PRG:2365 ??
beq Flow_E3A9 ; CPU:$E367 PRG:2367 ??
lda Player2YPosition ; CPU:$E369 PRG:2369 ??
sec ; CPU:$E36B PRG:236B ??
sbc #$04 ; CPU:$E36D PRG:236D ??
asl a ; CPU:$E36F PRG:236F ??
asl a ; CPU:$E371 PRG:2371 ??
sta MathResultHi ; CPU:$E373 PRG:2373 ??
lda BallHeight ; CPU:$E375 PRG:2375 ??
clc ; CPU:$E377 PRG:2377 ??
adc #$20 ; CPU:$E379 PRG:2379 ??
php ; CPU:$E37B PRG:237B ??
sec ; CPU:$E37D PRG:237D ??
sbc MathResultHi ; CPU:$E37F PRG:237F ??
bcs Flow_E386 ; CPU:$E381 PRG:2381 ??
plp ; CPU:$E383 PRG:2383 ??
bcs Flow_E387 ; CPU:$E385 PRG:2385 ??
lda #$00 ; CPU:$E387 PRG:2387 ??
beq Flow_E387 ; CPU:$E389 PRG:2389 ??
Flow_E386:
plp ; CPU:$E38B PRG:238B ??
Flow_E387:
ldy #$33 ; CPU:$E38D PRG:238D ??
cmp #$A8 ; CPU:$E38F PRG:238F ??
bcs Flow_E3A7 ; CPU:$E391 PRG:2391 ??
dey ; CPU:$E393 PRG:2393 ??
cmp #$78 ; CPU:$E395 PRG:2395 ??
bcs Flow_E3A7 ; CPU:$E397 PRG:2397 ??
dey ; CPU:$E399 PRG:2399 ??
cmp #$2C ; CPU:$E39B PRG:239B ??
bcs Flow_E3A7 ; CPU:$E39D PRG:239D ??
dey ; CPU:$E39F PRG:239F ??
cmp #$01 ; CPU:$E3A1 PRG:23A1 ??
bcs Flow_E3A7 ; CPU:$E3A3 PRG:23A3 ??
lda BallTargetOffset ; CPU:$E3A5 PRG:23A5 ??
cmp #$70 ; CPU:$E3A7 PRG:23A7 ??
bcc Flow_E3A6 ; CPU:$E3A9 PRG:23A9 ??
lda ObjectAnimationState ; CPU:$E3AB PRG:23AB ??
bne Flow_E3A7 ; CPU:$E3AD PRG:23AD ??
Flow_E3A6:
dey ; CPU:$E3AF PRG:23AF ??
Flow_E3A7:
sty PlayerPoseId ; CPU:$E3B1 PRG:23B1 ??
Flow_E3A9:
rts ; CPU:$E3B3 PRG:23B3 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $23AA-$2421.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_E3AA:
.byte $15, $20, $21, $28, $2F, $30, $30, $38, $54, $40, $18, $20, $26, $28, $36, $30 ; PRG $23AA / CPU $E3AA ; CPU:$E3B5 PRG:23B5 15 20 21 28 2F 30 30 38 54 40 18 20 26 28 36 30
.byte $4A, $38, $60, $40, $15, $20, $21, $28, $28, $2C, $2F, $30, $40, $38, $1C, $20 ; PRG $23BA / CPU $E3BA ; CPU:$E3C5 PRG:23C5 4A 38 60 40 15 20 21 28 28 2C 2F 30 40 38 1C 20
.byte $2B, $28, $35, $2C, $3F, $30, $56, $38, $18, $30, $18, $38, $18, $44, $20, $5C ; PRG $23CA / CPU $E3CA ; CPU:$E3D5 PRG:23D5 2B 28 35 2C 3F 30 56 38 18 30 18 38 18 44 20 5C
.byte $20, $68, $18, $30, $18, $38, $20, $44, $20, $5C, $20, $68, $12, $22, $19, $28 ; PRG $23DA / CPU $E3DA ; CPU:$E3E5 PRG:23E5 20 68 18 30 18 38 20 44 20 5C 20 68 12 22 19 28
.byte $24, $30, $31, $38, $40, $40, $18, $22, $21, $28, $30, $30, $41, $38, $55, $40 ; PRG $23EA / CPU $E3EA ; CPU:$E3F5 PRG:23F5 24 30 31 38 40 40 18 22 21 28 30 30 41 38 55 40
.byte $14, $30, $1B, $38, $24, $40, $3D, $48, $37, $50, $09, $10, $0E, $14, $14, $18 ; PRG $23FA / CPU $E3FA ; CPU:$E405 PRG:2405 14 30 1B 38 24 40 3D 48 37 50 09 10 0E 14 14 18
.byte $24, $20, $38, $28, $0A, $10, $0F, $14, $16, $18, $28, $20, $3E, $28, $0C, $10 ; PRG $240A / CPU $E40A ; CPU:$E415 PRG:2415 24 20 38 28 0A 10 0F 14 16 18 28 20 3E 28 0C 10
.byte $14, $14, $1D, $18, $34, $20, $51, $28 ; PRG $241A / CPU $E41A ; CPU:$E425 PRG:2425 14 14 1D 18 34 20 51 28
; =============================================================================
; RenderRoutine_E422
; CPU address: $E422 PRG offset: $2422
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E422:
ldy #$40 ; CPU:$E42D PRG:242D ??
jsr TestCourtBoundary ; CPU:$E42F PRG:242F ??
sta PlayerAnimationFlags ; CPU:$E431 PRG:2431 ??
bne Flow_E48E ; CPU:$E433 PRG:2433 ??
ldy RallyPhase ; CPU:$E435 PRG:2435 ??
beq FlowEntry_E48D ; CPU:$E437 PRG:2437 ??
dey ; CPU:$E439 PRG:2439 ??
bne Flow_E46C ; CPU:$E43B PRG:243B ??
lda #$02 ; CPU:$E43D PRG:243D ??
sta RallyPhase ; CPU:$E43F PRG:243F ??
lda BallTrajectoryFlags ; CPU:$E441 PRG:2441 ??
bit BallTrajectoryFlags ; CPU:$E443 PRG:2443 ??
bpl Flow_E440 ; CPU:$E445 PRG:2445 ??
inc ObjectAnimationState ; CPU:$E447 PRG:2447 ??
bpl Flow_E4A3 ; CPU:$E449 PRG:2449 ??
Flow_E440:
bvs Flow_E45C ; CPU:$E44B PRG:244B ??
ldy #$20 ; CPU:$E44D PRG:244D ??
lda PlayerFacingDirection ; CPU:$E44F PRG:244F ??
bpl Flow_E44A ; CPU:$E451 PRG:2451 ??
ldy #$28 ; CPU:$E453 PRG:2453 ??
Flow_E44A:
lda GameMode ; CPU:$E455 PRG:2455 ??
beq Flow_E453 ; CPU:$E457 PRG:2457 ??
tya ; CPU:$E459 PRG:2459 ??
clc ; CPU:$E45B PRG:245B ??
adc #$10 ; CPU:$E45D PRG:245D ??
tay ; CPU:$E45F PRG:245F ??
Flow_E453:
jsr TestCourtBoundary ; CPU:$E461 PRG:2461 ??
sta UmpireMessageId ; CPU:$E463 PRG:2463 ??
beq Flow_E4C5 ; CPU:$E465 PRG:2465 ??
bne Flow_E498 ; CPU:$E467 PRG:2467 ??
Flow_E45C:
and #$03 ; CPU:$E469 PRG:2469 ??
asl a ; CPU:$E46B PRG:246B ??
asl a ; CPU:$E46D PRG:246D ??
asl a ; CPU:$E46F PRG:246F ??
tay ; CPU:$E471 PRG:2471 ??
jsr TestCourtBoundary ; CPU:$E473 PRG:2473 ??
bne Flow_E4A3 ; CPU:$E475 PRG:2475 ??
sta UmpireMessageId ; CPU:$E477 PRG:2477 ??
jmp Flow_E4C5 ; CPU:$E479 PRG:2479 ??
Flow_E46C:
cpy #$02 ; CPU:$E47B PRG:247B ??
bne Flow_E485 ; CPU:$E47D PRG:247D ??
lda #$01 ; CPU:$E47F PRG:247F ??
sta BallVerticalVelocityLo ; CPU:$E481 PRG:2481 ??
ldx BallTargetOffset ; CPU:$E483 PRG:2483 ??
cpx #$70 ; CPU:$E485 PRG:2485 ??
bcc Flow_E47C ; CPU:$E487 PRG:2487 ??
lda #$02 ; CPU:$E489 PRG:2489 ??
Flow_E47C:
jsr RenderRoutine_E621 ; CPU:$E48B PRG:248B ??
inc RallyPhase ; CPU:$E48D PRG:248D ??
jsr RenderRoutine_E646 ; CPU:$E48F PRG:248F ??
rts ; CPU:$E491 PRG:2491 ??
Flow_E485:
cpy #$07 ; CPU:$E493 PRG:2493 ??
bcc FlowEntry_E48D ; CPU:$E495 PRG:2495 ??
ldy #$01 ; CPU:$E497 PRG:2497 ??
sty PlayerAnimationFlags ; CPU:$E499 PRG:2499 ??
FlowEntry_E48D:
rts
Flow_E48E:
ldy RallyPhase ; CPU:$E49B PRG:249B ??
bne FlowEntry_E48D ; CPU:$E49D PRG:249D ??
lda #$01 ; CPU:$E49F PRG:249F ??
sta UmpireMessageId ; CPU:$E4A1 PRG:24A1 ??
bne Flow_E498 ; CPU:$E4A3 PRG:24A3 ??
Flow_E498:
ldx #$02 ; CPU:$E4A5 PRG:24A5 ??
lda PlayerFacingDirection ; CPU:$E4A7 PRG:24A7 ??
bpl Flow_E4A0 ; CPU:$E4A9 PRG:24A9 ??
ldx #$01 ; CPU:$E4AB PRG:24AB ??
Flow_E4A0:
jmp Flow_E4BE ; CPU:$E4AD PRG:24AD ??
Flow_E4A3:
lda #$03 ; CPU:$E4AF PRG:24AF ??
sta UmpireMessageId ; CPU:$E4B1 PRG:24B1 ??
lda BallStateFlags ; CPU:$E4B3 PRG:24B3 ??
bne Flow_E4B2 ; CPU:$E4B5 PRG:24B5 ??
inc BallStateFlags ; CPU:$E4B7 PRG:24B7 ??
lda #$00 ; CPU:$E4B9 PRG:24B9 ??
sta CourtMessageId ; CPU:$E4BB PRG:24BB ??
rts ; CPU:$E4BD PRG:24BD ??
Flow_E4B2:
inc UmpireMessageId ; CPU:$E4BF PRG:24BF ??
ldx #$01 ; CPU:$E4C1 PRG:24C1 ??
lda BallTrajectoryFlags ; CPU:$E4C3 PRG:24C3 ??
ror a ; CPU:$E4C5 PRG:24C5 ??
ror a ; CPU:$E4C7 PRG:24C7 ??
bcs Flow_E4BE ; CPU:$E4C9 PRG:24C9 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $24BC-$24BD.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_E4BC:
.byte $A2, $02 ; PRG $24BC / CPU $E4BC ; CPU:$E4CB PRG:24CB A2 02
Flow_E4BE:
stx CourtMessageId ; CPU:$E4CD PRG:24CD ??
lda #$00 ; CPU:$E4CF PRG:24CF ??
sta BallStateFlags ; CPU:$E4D1 PRG:24D1 ??
rts ; PRG $24C4 / CPU $E4C4 ; CPU:$E4D3 PRG:24D3 ??
Flow_E4C5:
ldx #$01 ; CPU:$E4D5 PRG:24D5 ??
lda PlayerFacingDirection ; CPU:$E4D7 PRG:24D7 ??
bpl Flow_E4CD ; CPU:$E4D9 PRG:24D9 ??
ldx #$02 ; CPU:$E4DB PRG:24DB ??
Flow_E4CD:
jmp Flow_E4BE ; CPU:$E4DD PRG:24DD ??
; =============================================================================
; RenderRoutine_E4D0
; CPU address: $E4D0 PRG offset: $24D0
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E4D0:
lda CourtSide ; CPU:$E4DF PRG:24DF ??
bne FlowEntry_E512 ; CPU:$E4E1 PRG:24E1 ??
sec ; CPU:$E4E3 PRG:24E3 ??
lda Player2YSubpixel ; CPU:$E4E5 PRG:24E5 ??
sbc #$B0 ; CPU:$E4E7 PRG:24E7 ??
lda Player2YPosition ; CPU:$E4E9 PRG:24E9 ??
sbc #$11 ; CPU:$E4EB PRG:24EB ??
tax ; CPU:$E4ED PRG:24ED ??
eor RallyFlags ; CPU:$E4EF PRG:24EF ??
bpl Flow_E510 ; CPU:$E4F1 PRG:24F1 ??
lda BallHeight ; CPU:$E4F3 PRG:24F3 ??
cmp #$40 ; CPU:$E4F5 PRG:24F5 ??
bcs Flow_E510 ; CPU:$E4F7 PRG:24F7 ??
lda BallHeightReference ; CPU:$E4F9 PRG:24F9 ??
cmp #$30 ; CPU:$E4FB PRG:24FB ??
bcc Flow_E510 ; CPU:$E4FD PRG:24FD ??
cmp #$D1 ; CPU:$E4FF PRG:24FF ??
bcs Flow_E510 ; CPU:$E501 PRG:2501 ??
lda #$01 ; CPU:$E503 PRG:2503 ??
sta CourtSide ; CPU:$E505 PRG:2505 ??
jsr RenderRoutine_E527 ; CPU:$E507 PRG:2507 ??
lda #$02 ; CPU:$E509 PRG:2509 ??
sta AudioRequestFlags3 ; CPU:$E50B PRG:250B ??
lda RallyPhase ; CPU:$E50D PRG:250D ??
bne Flow_E510 ; CPU:$E50F PRG:250F ??
lda #$02 ; CPU:$E511 PRG:2511 ??
sta RallyPhase ; CPU:$E513 PRG:2513 ??
bit BallTrajectoryFlags ; CPU:$E515 PRG:2515 ??
bvs Flow_E4A3 ; CPU:$E517 PRG:2517 ??
lda #$02 ; CPU:$E519 PRG:2519 ??
sta UmpireMessageId ; CPU:$E51B PRG:251B ??
jmp Flow_E498 ; CPU:$E51D PRG:251D ??
Flow_E510:
stx RallyFlags ; CPU:$E51F PRG:251F ??
FlowEntry_E512:
rts ; PRG $2512 / CPU $E512 ; CPU:$E521 PRG:2521 ??
; =============================================================================
; RenderRoutine_E513
; CPU address: $E513 PRG offset: $2513
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E513:
lda UmpireAnimationTimer ; CPU:$E523 PRG:2523 ??
bne Flow_E526 ; CPU:$E525 PRG:2525 ??
lda BallTargetOffset ; CPU:$E527 PRG:2527 ??
cmp #$20 ; CPU:$E529 PRG:2529 ??
bcs Flow_E526 ; CPU:$E52B PRG:252B ??
jsr RenderRoutine_E527 ; CPU:$E52D PRG:252D ??
lda #$02 ; CPU:$E52F PRG:252F ??
sta AudioRequestFlags3 ; CPU:$E531 PRG:2531 ??
inc UmpireAnimationTimer ; CPU:$E533 PRG:2533 ??
Flow_E526:
rts ; CPU:$E535 PRG:2535 ??
; =============================================================================
; RenderRoutine_E527
; CPU address: $E527 PRG offset: $2527
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E527:
lda Player1XPosition ; CPU:$E537 PRG:2537 ??
cmp #$80 ; CPU:$E539 PRG:2539 ??
ror a ; CPU:$E53B PRG:253B ??
ror Player1XSubpixel ; CPU:$E53D PRG:253D ??
cmp #$80 ; CPU:$E53F PRG:253F ??
ror a ; CPU:$E541 PRG:2541 ??
sta Player1XPosition ; CPU:$E543 PRG:2543 ??
ror Player1XSubpixel ; CPU:$E545 PRG:2545 ??
; =============================================================================
; RenderRoutine_E535
; CPU address: $E535 PRG offset: $2535
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E535:
jsr RenderRoutine_E56C ; CPU:$E547 PRG:2547 ??
ldy #$00 ; CPU:$E549 PRG:2549 ??
tya ; CPU:$E54B PRG:254B ??
sec ; CPU:$E54D PRG:254D ??
sbc Player2XSubpixel ; CPU:$E54F PRG:254F ??
sta Player2XSubpixel ; CPU:$E551 PRG:2551 ??
tya ; CPU:$E553 PRG:2553 ??
sbc Player2XPosition ; CPU:$E555 PRG:2555 ??
cmp #$80 ; CPU:$E557 PRG:2557 ??
ror a ; CPU:$E559 PRG:2559 ??
ror Player2XSubpixel ; CPU:$E55B PRG:255B ??
cmp #$80 ; CPU:$E55D PRG:255D ??
ror a ; CPU:$E55F PRG:255F ??
sta Player2XPosition ; CPU:$E561 PRG:2561 ??
ror Player2XSubpixel ; CPU:$E563 PRG:2563 ??
lda Player2XPosition ; CPU:$E565 PRG:2565 ??
bpl Flow_E55B ; CPU:$E567 PRG:2567 ??
cmp #$F4 ; CPU:$E569 PRG:2569 ??
bcs Flow_E563 ; CPU:$E56B PRG:256B ??
lda #$F4 ; CPU:$E56D PRG:256D ??
bne Flow_E561 ; CPU:$E56F PRG:256F ??
Flow_E55B:
cmp #$0B ; CPU:$E571 PRG:2571 ??
bcc Flow_E563 ; CPU:$E573 PRG:2573 ??
lda #$0B ; CPU:$E575 PRG:2575 ??
Flow_E561:
sta Player2XPosition ; CPU:$E577 PRG:2577 ??
Flow_E563:
lda BallTargetOffset ; CPU:$E579 PRG:2579 ??
cmp #$70 ; CPU:$E57B PRG:257B ??
bcc Flow_E569 ; CPU:$E57D PRG:257D ??
Flow_E569:
inc ObjectAnimationState ; CPU:$E57F PRG:257F ??
rts ; CPU:$E581 PRG:2581 ??
; =============================================================================
; RenderRoutine_E56C
; CPU address: $E56C PRG offset: $256C
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E56C:
lda Player1XPosition ; CPU:$E583 PRG:2583 ??
bpl Flow_E578 ; CPU:$E585 PRG:2585 ??
cmp #$F4 ; CPU:$E587 PRG:2587 ??
bcs FlowEntry_E580 ; CPU:$E589 PRG:2589 ??
lda #$F4 ; CPU:$E58B PRG:258B ??
bne Flow_E57E ; CPU:$E58D PRG:258D ??
Flow_E578:
cmp #$0B ; CPU:$E58F PRG:258F ??
bcc FlowEntry_E580 ; CPU:$E591 PRG:2591 ??
lda #$0B ; CPU:$E593 PRG:2593 ??
Flow_E57E:
sta Player1XPosition ; CPU:$E595 PRG:2595 ??
FlowEntry_E580:
rts ; PRG $2580 / CPU $E580 ; CPU:$E597 PRG:2597 ??
; =============================================================================
; TestCourtBoundary
; CPU address: $E581 PRG offset: $2581
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
TestCourtBoundary:
lda #$0A ; CPU:$E599 PRG:2599 ??
Flow_E583:
sec ; CPU:$E59B PRG:259B ??
sbc #$05 ; CPU:$E59D PRG:259D ??
tax ; CPU:$E59F PRG:259F ??
sec ; CPU:$E5A1 PRG:25A1 ??
lda Player1YSubpixel,x ; CPU:$E5A3 PRG:25A3 ??
sbc $E5AD,y ; CPU:$E5A5 PRG:25A5 ??
iny ; CPU:$E5A7 PRG:25A7 ??
lda Player1YPosition,x ; CPU:$E5A9 PRG:25A9 ??
sbc $E5AD,y ; CPU:$E5AB PRG:25AB ??
iny ; CPU:$E5AD PRG:25AD ??
bcc Flow_E5AA ; CPU:$E5AF PRG:25AF ??
lda Player1YSubpixel,x ; CPU:$E5B1 PRG:25B1 ??
sbc $E5AD,y ; CPU:$E5B3 PRG:25B3 ??
iny ; CPU:$E5B5 PRG:25B5 ??
lda Player1YPosition,x ; CPU:$E5B7 PRG:25B7 ??
sbc $E5AD,y ; CPU:$E5B9 PRG:25B9 ??
iny ; CPU:$E5BB PRG:25BB ??
bcs Flow_E5AA ; CPU:$E5BD PRG:25BD ??
txa ; CPU:$E5BF PRG:25BF ??
bne Flow_E583 ; CPU:$E5C1 PRG:25C1 ??
lda #$00 ; CPU:$E5C3 PRG:25C3 ??
rts ; CPU:$E5C5 PRG:25C5 ??
Flow_E5AA:
lda #$01 ; CPU:$E5C7 PRG:25C7 ??
rts ; CPU:$E5C9 PRG:25C9 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $25AD-$25F4.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
CourtBoundaryTable:
.byte $B0, $11, $50, $16, $10, $10, $50, $13, $B0, $11, $50, $16, $D0, $0C, $10, $10 ; PRG $25AD / CPU $E5AD ; CPU:$E5CB PRG:25CB B0 11 50 16 10 10 50 13 B0 11 50 16 D0 0C 10 10
.byte $90, $0D, $B0, $11, $10, $10, $50, $13, $90, $0D, $B0, $11, $D0, $0C, $10, $10 ; PRG $25BD / CPU $E5BD ; CPU:$E5DB PRG:25DB 90 0D B0 11 10 10 50 13 90 0D B0 11 D0 0C 10 10
.byte $B0, $11, $40, $1A, $C0, $0C, $50, $13, $60, $0A, $B0, $11, $D0, $0C, $50, $13 ; PRG $25CD / CPU $E5CD ; CPU:$E5EB PRG:25EB B0 11 40 1A C0 0C 50 13 60 0A B0 11 D0 0C 50 13
.byte $B0, $11, $40, $1A, $20, $0C, $F0, $13, $60, $0A, $B0, $11, $30, $0C, $F0, $13 ; PRG $25DD / CPU $E5DD ; CPU:$E5FB PRG:25FB B0 11 40 1A 20 0C F0 13 60 0A B0 11 30 0C F0 13
.byte $00, $04, $00, $20, $00, $04, $00, $19 ; PRG $25ED / CPU $E5ED ; CPU:$E60B PRG:260B 00 04 00 20 00 04 00 19
; =============================================================================
; RenderRoutine_E5F5
; CPU address: $E5F5 PRG offset: $25F5
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E5F5:
ldy UmpireMessageId ; CPU:$E613 PRG:2613 ??
cpy #$03 ; CPU:$E615 PRG:2615 ??
bcc Flow_E607 ; CPU:$E617 PRG:2617 ??
lda BallTrajectoryFlags ; CPU:$E619 PRG:2619 ??
ror a ; CPU:$E61B PRG:261B ??
ror a ; CPU:$E61D PRG:261D ??
lda #$01 ; CPU:$E61F PRG:261F ??
bcs RenderRoutine_E621 ; CPU:$E621 PRG:2621 ??
lda #$02 ; CPU:$E623 PRG:2623 ??
bne RenderRoutine_E621 ; CPU:$E625 PRG:2625 ??
Flow_E607:
lda BallVerticalVelocityLo ; CPU:$E627 PRG:2627 ??
bne Flow_E629 ; CPU:$E629 PRG:2629 ??
lda #$01 ; CPU:$E62B PRG:262B ??
ldx BallTargetOffset ; CPU:$E62D PRG:262D ??
cpx #$60 ; CPU:$E62F PRG:262F ??
bcc Flow_E61B ; CPU:$E631 PRG:2631 ??
lda #$00 ; CPU:$E633 PRG:2633 ??
cpx #$80 ; CPU:$E635 PRG:2635 ??
bcc Flow_E61B ; CPU:$E637 PRG:2637 ??
lda #$02 ; CPU:$E639 PRG:2639 ??
Flow_E61B:
cmp BallVerticalVelocityHi ; CPU:$E63B PRG:263B ??
beq Flow_E629 ; CPU:$E63D PRG:263D ??
sta BallVerticalVelocityHi ; CPU:$E63F PRG:263F ??
; =============================================================================
; RenderRoutine_E621
; CPU address: $E621 PRG offset: $2621
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E621:
clc ; CPU:$E641 PRG:2641 ??
adc #$06 ; CPU:$E643 PRG:2643 ??
asl a ; CPU:$E645 PRG:2645 ??
tay ; CPU:$E647 PRG:2647 ??
jsr RenderRoutine_E65D ; CPU:$E649 PRG:2649 ??
Flow_E629:
rts ; CPU:$E64B PRG:264B ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $262A-$2645.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
ScoreTextPpuAddressTable:
.byte $05, $21, $3B, $02, $7D, $AF, $05, $21, $3B, $02, $7E, $7F, $05, $21, $3B, $02 ; PRG $262A / CPU $E62A ; CPU:$E64D PRG:264D 05 21 3B 02 7D AF 05 21 3B 02 7E 7F 05 21 3B 02
.byte $80, $81, $02, $02, $02, $01, $02, $04, $02, $08, $02, $08 ; PRG $263A / CPU $E63A ; CPU:$E65D PRG:265D 80 81 02 02 02 01 02 04 02 08 02 08
; =============================================================================
; RenderRoutine_E646
; CPU address: $E646 PRG offset: $2646
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E646:
lda BallCollisionFlags ; CPU:$E669 PRG:2669 ??
bne Flow_E659 ; CPU:$E66B PRG:266B ??
inc BallCollisionFlags ; CPU:$E66D PRG:266D ??
lda UmpireMessageId ; CPU:$E66F PRG:266F ??
asl a ; CPU:$E671 PRG:2671 ??
tay ; CPU:$E673 PRG:2673 ??
lda $E63C,y ; CPU:$E675 PRG:2675 ??
tax ; CPU:$E677 PRG:2677 ??
lda $E63D,y ; CPU:$E679 PRG:2679 ??
sta AudioEventPriority,x ; CPU:$E67B PRG:267B ??
Flow_E659:
lda UmpireMessageId ; CPU:$E67D PRG:267D ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $265B-$265C.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_E65B:
.byte $0A, $A8 ; PRG $265B / CPU $E65B ; CPU:$E67F PRG:267F 0A A8
; =============================================================================
; RenderRoutine_E65D
; CPU address: $E65D PRG offset: $265D
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E65D:
lda $E693,y ; CPU:$E681 PRG:2681 ??
sta MathResultLo ; CPU:$E683 PRG:2683 ??
lda $E694,y ; CPU:$E685 PRG:2685 ??
sta MathResultHi ; CPU:$E687 PRG:2687 ??
ldy #$00 ; CPU:$E689 PRG:2689 ??
lda (MathResultLo),y ; CPU:$E68B PRG:268B ??
tax ; CPU:$E68D PRG:268D ??
ldy $0590 ; CPU:$E68F PRG:268F ??
inc MathResultLo ; CPU:$E691 PRG:2691 ??
bne Flow_E675 ; CPU:$E693 PRG:2693 ??
inc MathResultHi ; CPU:$E695 PRG:2695 ??
Flow_E675:
jsr RenderRoutine_ED2A ; CPU:$E697 PRG:2697 ??
lda #$00 ; CPU:$E699 PRG:2699 ??
sta $0591,y ; CPU:$E69B PRG:269B ??
sty $0590 ; CPU:$E69D PRG:269D ??
lda #$01 ; CPU:$E69F PRG:269F ??
sta PpuBufferReady ; CPU:$E6A1 PRG:26A1 ??
Flow_E684:
rts ; CPU:$E6A3 PRG:26A3 ??
; =============================================================================
; ShowDeuceMessage
; CPU address: $E685 PRG offset: $2685
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
ShowDeuceMessage:
lda UmpireMessageId ; CPU:$E6A5 PRG:26A5 ??
cmp #$03 ; CPU:$E6A7 PRG:26A7 ??
beq Flow_E684 ; CPU:$E6A9 PRG:26A9 ??
lda #$10 ; CPU:$E6AB PRG:26AB ??
sta AudioRequestFlags2 ; CPU:$E6AD PRG:26AD ??
ldy #$0A ; CPU:$E6AF PRG:26AF ??
bne RenderRoutine_E65D ; CPU:$E6B1 PRG:26B1 ??
lda PendingAudioCue ; CPU:$E6B3 PRG:26B3 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2695-$277E.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_E695:
.byte $C2, $E6, $E2, $E6, $02, $E7, $25, $E7, $52, $E7, $2A, $E6, $30, $E6, $36, $E6 ; PRG $2695 / CPU $E695 ; CPU:$E6B5 PRG:26B5 C2 E6 E2 E6 02 E7 25 E7 52 E7 2A E6 30 E6 36 E6
.byte $1C, $20, $B8, $05, $B4, $B5, $B6, $B7, $B8, $20, $D8, $05, $B9, $BA, $BB, $BC ; PRG $26A5 / CPU $E6A5 ; CPU:$E6C5 PRG:26C5 1C 20 B8 05 B4 B5 B6 B7 B8 20 D8 05 B9 BA BB BC
.byte $D7, $20, $F8, $05, $BE, $BF, $B6, $C0, $C1, $21, $1B, $01, $C2, $1F, $20, $B7 ; PRG $26B5 / CPU $E6B5 ; CPU:$E6D5 PRG:26D5 D7 20 F8 05 BE BF B6 C0 C1 21 1B 01 C2 1F 20 B7
.byte $06, $B4, $B5, $B6, $B6, $B7, $B8, $20, $D7, $06, $B9, $C3, $C4, $C5, $BC, $D7 ; PRG $26C5 / CPU $E6C5 ; CPU:$E6E5 PRG:26E5 06 B4 B5 B6 B6 B7 B8 20 D7 06 B9 C3 C4 C5 BC D7
.byte $20, $F7, $06, $BE, $BF, $B6, $B6, $C0, $C1, $21, $1B, $01, $C2, $1F, $20, $B7 ; PRG $26D5 / CPU $E6D5 ; CPU:$E6F5 PRG:26F5 20 F7 06 BE BF B6 B6 C0 C1 21 1B 01 C2 1F 20 B7
.byte $06, $B4, $B5, $B6, $B6, $B7, $B8, $20, $D7, $06, $B9, $BB, $C6, $C5, $BC, $D7 ; PRG $26E5 / CPU $E6E5 ; CPU:$E705 PRG:2705 06 B4 B5 B6 B6 B7 B8 20 D7 06 B9 BB C6 C5 BC D7
.byte $20, $F7, $06, $BE, $BF, $B6, $B6, $C0, $C1, $21, $1B, $01, $C2, $22, $20, $B7 ; PRG $26F5 / CPU $E6F5 ; CPU:$E715 PRG:2715 20 F7 06 BE BF B6 B6 C0 C1 21 1B 01 C2 22 20 B7
.byte $07, $B4, $B5, $B6, $B6, $B6, $B7, $B8, $20, $D7, $07, $B9, $C7, $C8, $C9, $CA ; PRG $2705 / CPU $E705 ; CPU:$E725 PRG:2725 07 B4 B5 B6 B6 B6 B7 B8 20 D7 07 B9 C7 C8 C9 CA
.byte $BC, $BD, $20, $F7, $07, $BE, $BF, $B6, $B6, $B6, $C0, $D6, $21, $1B, $01, $CB ; PRG $2715 / CPU $E715 ; CPU:$E735 PRG:2735 BC BD 20 F7 07 BE BF B6 B6 B6 C0 D6 21 1B 01 CB
.byte $2C, $20, $97, $07, $B4, $B5, $B6, $B6, $B6, $B7, $B8, $20, $B7, $07, $B9, $CC ; PRG $2725 / CPU $E725 ; CPU:$E745 PRG:2745 2C 20 97 07 B4 B5 B6 B6 B6 B7 B8 20 B7 07 B9 CC
.byte $CD, $CE, $CF, $D0, $BD, $20, $D7, $07, $B9, $C7, $C8, $C9, $CA, $BC, $BD, $20 ; PRG $2735 / CPU $E735 ; CPU:$E755 PRG:2755 CD CE CF D0 BD 20 D7 07 B9 C7 C8 C9 CA BC BD 20
.byte $F7, $07, $BE, $BF, $B6, $B6, $B6, $C0, $D6, $21, $1B, $01, $CB, $2C, $20, $97 ; PRG $2745 / CPU $E745 ; CPU:$E765 PRG:2765 F7 07 BE BF B6 B6 B6 C0 D6 21 1B 01 CB 2C 20 97
.byte $07, $24, $24, $24, $7C, $4D, $4D, $4D, $20, $B7, $07, $B4, $B5, $B6, $B6, $B6 ; PRG $2755 / CPU $E755 ; CPU:$E775 PRG:2775 07 24 24 24 7C 4D 4D 4D 20 B7 07 B4 B5 B6 B6 B6
.byte $B7, $B8, $20, $D7, $07, $B9, $D5, $D1, $D2, $D3, $D4, $BD, $20, $F7, $07, $BE ; PRG $2765 / CPU $E765 ; CPU:$E785 PRG:2785 B7 B8 20 D7 07 B9 D5 D1 D2 D3 D4 BD 20 F7 07 BE
.byte $BF, $B6, $B6, $B6, $C0, $D6, $21, $1B, $01, $CB ; PRG $2775 / CPU $E775 ; CPU:$E795 PRG:2795 BF B6 B6 B6 C0 D6 21 1B 01 CB
; =============================================================================
; RenderRoutine_E77F
; CPU address: $E77F PRG offset: $277F
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E77F:
lda #$00 ; CPU:$E79F PRG:279F ??
sta MatchResultType ; CPU:$E7A1 PRG:27A1 ??
sta ScoreDisplayState ; CPU:$E7A3 PRG:27A3 ??
lda #$02 ; CPU:$E7A5 PRG:27A5 ??
sta PendingGameState ; CPU:$E7A7 PRG:27A7 ??
lda #$10 ; CPU:$E7A9 PRG:27A9 ??
sta StateTimer ; CPU:$E7AB PRG:27AB ??
lda CourtMessageId ; CPU:$E7AD PRG:27AD ??
bne Flow_E792 ; CPU:$E7AF PRG:27AF ??
rts ; CPU:$E7B1 PRG:27B1 ??
Flow_E792:
tax ; CPU:$E7B3 PRG:27B3 ??
dex ; CPU:$E7B5 PRG:27B5 ??
txa ; CPU:$E7B7 PRG:27B7 ??
eor #$01 ; CPU:$E7B9 PRG:27B9 ??
tay ; CPU:$E7BB PRG:27BB ??
inc ScoreLo,x ; CPU:$E7BD PRG:27BD ??
lda ScoreUpdatePhase ; CPU:$E7BF PRG:27BF ??
beq Flow_E7B8 ; CPU:$E7C1 PRG:27C1 ??
cmp #$02 ; CPU:$E7C3 PRG:27C3 ??
beq Flow_E7DA ; CPU:$E7C5 PRG:27C5 ??
lda a:ScoreLo,y ; CPU:$E7C7 PRG:27C7 ??
beq Flow_E7AB ; CPU:$E7C9 PRG:27C9 ??
dec ScoreLo ; CPU:$E7CB PRG:27CB ??
dec ScoreHi ; CPU:$E7CD PRG:27CD ??
Flow_E7AB:
lda ScoreLo,x ; CPU:$E7CF PRG:27CF ??
cmp #$02 ; CPU:$E7D1 PRG:27D1 ??
bne Flow_E7D1 ; CPU:$E7D3 PRG:27D3 ??
Flow_E7B1:
dec ScoreLo,x ; CPU:$E7D5 PRG:27D5 ??
lda CourtMessageId ; CPU:$E7D7 PRG:27D7 ??
sta MatchResultType ; CPU:$E7D9 PRG:27D9 ??
rts ; CPU:$E7DB PRG:27DB ??
Flow_E7B8:
lda ScoreLo,x ; CPU:$E7DD PRG:27DD ??
cmp #$04 ; CPU:$E7DF PRG:27DF ??
beq Flow_E7B1 ; CPU:$E7E1 PRG:27E1 ??
cmp #$03 ; CPU:$E7E3 PRG:27E3 ??
bne Flow_E7D1 ; CPU:$E7E5 PRG:27E5 ??
lda a:ScoreLo,y ; CPU:$E7E7 PRG:27E7 ??
cmp #$03 ; CPU:$E7E9 PRG:27E9 ??
bne Flow_E7D1 ; CPU:$E7EB PRG:27EB ??
inc ScoreUpdatePhase ; CPU:$E7ED PRG:27ED ??
lda #$00 ; CPU:$E7EF PRG:27EF ??
sta ScoreLo ; CPU:$E7F1 PRG:27F1 ??
sta ScoreHi ; CPU:$E7F3 PRG:27F3 ??
Flow_E7D1:
lda BallTrajectoryFlags ; CPU:$E7F5 PRG:27F5 ??
eor #$01 ; CPU:$E7F7 PRG:27F7 ??
Flow_E7D5:
ora #$C0 ; CPU:$E7F9 PRG:27F9 ??
sta BallTrajectoryFlags ; CPU:$E7FB PRG:27FB ??
rts ; CPU:$E7FD PRG:27FD ??
Flow_E7DA:
lda ScoreLo,x ; CPU:$E7FF PRG:27FF ??
cmp #$33 ; CPU:$E801 PRG:2801 ??
bne Flow_E7E4 ; CPU:$E803 PRG:2803 ??
dec ScoreLo ; CPU:$E805 PRG:2805 ??
dec ScoreHi ; CPU:$E807 PRG:2807 ??
Flow_E7E4:
lda ScoreLo,x ; CPU:$E809 PRG:2809 ??
cmp #$07 ; CPU:$E80B PRG:280B ??
bcc Flow_E7F3 ; CPU:$E80D PRG:280D ??
sbc a:ScoreLo,y ; CPU:$E80F PRG:280F ??
bmi Flow_E7F3 ; CPU:$E811 PRG:2811 ??
cmp #$02 ; CPU:$E813 PRG:2813 ??
bcs Flow_E7B1 ; CPU:$E815 PRG:2815 ??
Flow_E7F3:
lda BallTrajectoryFlags ; CPU:$E817 PRG:2817 ??
and #$07 ; CPU:$E819 PRG:2819 ??
tax ; CPU:$E81B PRG:281B ??
lda $E804,x ; CPU:$E81D PRG:281D ??
ldy GameMode ; CPU:$E81F PRG:281F ??
bne Flow_E7D5 ; CPU:$E821 PRG:2821 ??
and #$03 ; CPU:$E823 PRG:2823 ??
jmp Flow_E7D5 ; CPU:$E825 PRG:2825 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2804-$280B.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
ScoreIncrementLookupTable:
.byte $01, $03, $04, $02, $05, $07, $00, $06 ; PRG $2804 / CPU $E804 ; CPU:$E827 PRG:2827 01 03 04 02 05 07 00 06
; =============================================================================
; RenderRoutine_E80C
; CPU address: $E80C PRG offset: $280C
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E80C:
ldx PointWinner ; CPU:$E82F PRG:282F ??
ldy PointWinner ; CPU:$E831 PRG:2831 ??
lda MatchResultType ; CPU:$E833 PRG:2833 ??
bne Flow_E819 ; CPU:$E835 PRG:2835 ??
lda #$08 ; CPU:$E837 PRG:2837 ??
sta StateTimer ; CPU:$E839 PRG:2839 ??
rts ; CPU:$E83B PRG:283B ??
Flow_E819:
lda #$12 ; CPU:$E83D PRG:283D ??
sta StateTimer ; CPU:$E83F PRG:283F ??
lda MatchResultType ; CPU:$E841 PRG:2841 ??
cmp #$01 ; CPU:$E843 PRG:2843 ??
beq Flow_E829 ; CPU:$E845 PRG:2845 ??
inx ; CPU:$E847 PRG:2847 ??
inx ; CPU:$E849 PRG:2849 ??
inx ; CPU:$E84B PRG:284B ??
jmp Flow_E82C ; CPU:$E84D PRG:284D ??
Flow_E829:
iny ; CPU:$E84F PRG:284F ??
iny ; CPU:$E851 PRG:2851 ??
iny ; CPU:$E853 PRG:2853 ??
Flow_E82C:
lda #$00 ; CPU:$E855 PRG:2855 ??
sta ScoreLo ; CPU:$E857 PRG:2857 ??
sta ScoreHi ; CPU:$E859 PRG:2859 ??
sta ScoreUpdatePhase ; CPU:$E85B PRG:285B ??
inc PlayerPointScore,x ; CPU:$E85D PRG:285D ??
lda PlayerPointScore,x ; CPU:$E85F PRG:285F ??
cmp #$07 ; CPU:$E861 PRG:2861 ??
beq Flow_E876 ; CPU:$E863 PRG:2863 ??
cmp #$06 ; CPU:$E865 PRG:2865 ??
bne Flow_E84B ; CPU:$E867 PRG:2867 ??
lda a:PlayerPointScore,y ; CPU:$E869 PRG:2869 ??
cmp #$06 ; CPU:$E86B PRG:286B ??
beq Flow_E86F ; CPU:$E86D PRG:286D ??
cmp #$05 ; CPU:$E86F PRG:286F ??
bne Flow_E876 ; CPU:$E871 PRG:2871 ??
Flow_E84B:
stx MessagePlayerIndex ; CPU:$E873 PRG:2873 ??
lda #$10 ; CPU:$E875 PRG:2875 ??
sta MessageTimer ; CPU:$E877 PRG:2877 ??
inc ScoreAnimationStep ; CPU:$E879 PRG:2879 ??
lda ScoreAnimationStep ; CPU:$E87B PRG:287B ??
and #$03 ; CPU:$E87D PRG:287D ??
asl a ; CPU:$E87F PRG:287F ??
ora #$C0 ; CPU:$E881 PRG:2881 ??
sta BallTrajectoryFlags ; CPU:$E883 PRG:2883 ??
lda ScoreAnimationStep ; CPU:$E885 PRG:2885 ??
and #$01 ; CPU:$E887 PRG:2887 ??
bne Flow_E864 ; CPU:$E889 PRG:2889 ??
inc BallTrajectoryFlags ; CPU:$E88B PRG:288B ??
Flow_E864:
lda GameMode ; CPU:$E88D PRG:288D ??
bne Flow_E86E ; CPU:$E88F PRG:288F ??
lda BallTrajectoryFlags ; CPU:$E891 PRG:2891 ??
and #$FB ; CPU:$E893 PRG:2893 ??
sta BallTrajectoryFlags ; CPU:$E895 PRG:2895 ??
Flow_E86E:
rts ; CPU:$E897 PRG:2897 ??
Flow_E86F:
lda #$02 ; CPU:$E899 PRG:2899 ??
sta ScoreUpdatePhase ; CPU:$E89B PRG:289B ??
jmp Flow_E84B ; CPU:$E89D PRG:289D ??
Flow_E876:
lda #$01 ; CPU:$E89F PRG:289F ??
sta ScoreDisplayState ; CPU:$E8A1 PRG:28A1 ??
lda PlayerPointScore,x ; CPU:$E8A3 PRG:28A3 ??
ora #$80 ; CPU:$E8A5 PRG:28A5 ??
sta PlayerPointScore,x ; CPU:$E8A7 PRG:28A7 ??
jmp Flow_E84B ; CPU:$E8A9 PRG:28A9 ??
; =============================================================================
; RenderRoutine_E883
; CPU address: $E883 PRG offset: $2883
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E883:
lda ScoreDisplayState ; CPU:$E8AB PRG:28AB ??
bne Flow_E888 ; CPU:$E8AD PRG:28AD ??
Flow_E887:
rts ; CPU:$E8AF PRG:28AF ??
Flow_E888:
lda #$18 ; CPU:$E8B1 PRG:28B1 ??
sta StateTimer ; CPU:$E8B3 PRG:28B3 ??
inc PointWinner ; CPU:$E8B5 PRG:28B5 ??
lda PointWinner ; CPU:$E8B7 PRG:28B7 ??
cmp #$03 ; CPU:$E8B9 PRG:28B9 ??
beq Flow_E8A6 ; CPU:$E8BB PRG:28BB ??
cmp #$02 ; CPU:$E8BD PRG:28BD ??
bne Flow_E887 ; CPU:$E8BF PRG:28BF ??
bit PlayerPointScore ; CPU:$E8C1 PRG:28C1 ??
bmi Flow_E8A2 ; CPU:$E8C3 PRG:28C3 ??
bit Player2PointScore ; CPU:$E8C5 PRG:28C5 ??
bpl Flow_E8A6 ; CPU:$E8C7 PRG:28C7 ??
bmi Flow_E887 ; CPU:$E8C9 PRG:28C9 ??
Flow_E8A2:
bit Player2PointScore ; CPU:$E8CB PRG:28CB ??
bpl Flow_E887 ; CPU:$E8CD PRG:28CD ??
Flow_E8A6:
lda #$0B ; CPU:$E8CF PRG:28CF ??
sta PendingGameState ; CPU:$E8D1 PRG:28D1 ??
lda #$20 ; CPU:$E8D3 PRG:28D3 ??
sta StateTimer ; CPU:$E8D5 PRG:28D5 ??
rts ; PRG $28AE / CPU $E8AE ; CPU:$E8D7 PRG:28D7 ??
; =============================================================================
; RenderRoutine_E8AF
; CPU address: $E8AF PRG offset: $28AF
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E8AF:
lda MatchResultType ; CPU:$E8D9 PRG:28D9 ??
cmp #$02 ; CPU:$E8DB PRG:28DB ??
beq FlowEntry_E8C9 ; CPU:$E8DD PRG:28DD ??
ldy ServingPlayer ; CPU:$E8DF PRG:28DF ??
cpy #$04 ; CPU:$E8E1 PRG:28E1 ??
beq Flow_E8BD ; CPU:$E8E3 PRG:28E3 ??
inc ServingPlayer ; CPU:$E8E5 PRG:28E5 ??
Flow_E8BD:
inc ModeAnimSubframe ; CPU:$E8E7 PRG:28E7 ??
ldy ModeAnimSubframe ; CPU:$E8E9 PRG:28E9 ??
cpy #$02 ; CPU:$E8EB PRG:28EB ??
bne FlowEntry_E8C9 ; CPU:$E8ED PRG:28ED ??
lda #$00 ; CPU:$E8EF PRG:28EF ??
sta MatchResultType ; CPU:$E8F1 PRG:28F1 ??
FlowEntry_E8C9:
rts ; PRG $28C9 / CPU $E8C9 ; CPU:$E8F3 PRG:28F3 ??
; =============================================================================
; RenderRoutine_E8CA
; CPU address: $E8CA PRG offset: $28CA
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E8CA:
ldy $0590 ; CPU:$E8F5 PRG:28F5 ??
ldx #$05 ; CPU:$E8F7 PRG:28F7 ??
lda #$EA ; CPU:$E8F9 PRG:28F9 ??
sta MathResultHi ; CPU:$E8FB PRG:28FB ??
lda #$8B ; CPU:$E8FD PRG:28FD ??
sta MathResultLo ; CPU:$E8FF PRG:28FF ??
jsr RenderRoutine_ED2A ; CPU:$E901 PRG:2901 ??
jsr RenderRoutine_E910 ; CPU:$E903 PRG:2903 ??
ldx #$0C ; CPU:$E905 PRG:2905 ??
lda #$EA ; CPU:$E907 PRG:2907 ??
sta MathResultHi ; CPU:$E909 PRG:2909 ??
lda #$90 ; CPU:$E90B PRG:290B ??
sta MathResultLo ; CPU:$E90D PRG:290D ??
jsr RenderRoutine_ED2A ; CPU:$E90F PRG:290F ??
inx ; CPU:$E911 PRG:2911 ??
jsr RenderRoutine_E910 ; CPU:$E913 PRG:2913 ??
lda ScoreUpdatePhase ; CPU:$E915 PRG:2915 ??
cmp #$01 ; CPU:$E917 PRG:2917 ??
bne Flow_E907 ; CPU:$E919 PRG:2919 ??
lda ScoreLo ; CPU:$E91B PRG:291B ??
ora ScoreHi ; CPU:$E91D PRG:291D ??
bne Flow_E907 ; CPU:$E91F PRG:291F ??
ldx #$0A ; CPU:$E921 PRG:2921 ??
lda #$EA ; CPU:$E923 PRG:2923 ??
sta MathResultHi ; CPU:$E925 PRG:2925 ??
lda #$D0 ; CPU:$E927 PRG:2927 ??
sta MathResultLo ; CPU:$E929 PRG:2929 ??
jsr RenderRoutine_ED2A ; CPU:$E92B PRG:292B ??
Flow_E907:
lda #$00 ; CPU:$E92D PRG:292D ??
sta $0591,y ; CPU:$E92F PRG:292F ??
sty $0590 ; CPU:$E931 PRG:2931 ??
rts ; CPU:$E933 PRG:2933 ??
; =============================================================================
; RenderRoutine_E910
; CPU address: $E910 PRG offset: $2910
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E910:
lda ScoreUpdatePhase ; CPU:$E935 PRG:2935 ??
beq Flow_E92E ; CPU:$E937 PRG:2937 ??
cmp #$02 ; CPU:$E939 PRG:2939 ??
beq Flow_E934 ; CPU:$E93B PRG:293B ??
lda ScoreLo,x ; CPU:$E93D PRG:293D ??
asl a ; CPU:$E93F PRG:293F ??
clc ; CPU:$E941 PRG:2941 ??
adc #$08 ; CPU:$E943 PRG:2943 ??
Flow_E91E:
tax ; CPU:$E945 PRG:2945 ??
lda $EA9C,x ; CPU:$E947 PRG:2947 ??
sta $0591,y ; CPU:$E949 PRG:2949 ??
iny ; CPU:$E94B PRG:294B ??
lda $EA9D,x ; CPU:$E94D PRG:294D ??
sta $0591,y ; CPU:$E94F PRG:294F ??
iny ; CPU:$E951 PRG:2951 ??
rts ; CPU:$E953 PRG:2953 ??
Flow_E92E:
lda ScoreLo,x ; CPU:$E955 PRG:2955 ??
asl a ; CPU:$E957 PRG:2957 ??
jmp Flow_E91E ; CPU:$E959 PRG:2959 ??
Flow_E934:
lda #$00 ; CPU:$E95B PRG:295B ??
sta MathResultHi ; CPU:$E95D PRG:295D ??
lda #$50 ; CPU:$E95F PRG:295F ??
sta MathResultLo ; CPU:$E961 PRG:2961 ??
lda #$04 ; CPU:$E963 PRG:2963 ??
sta Zp11 ; CPU:$E965 PRG:2965 ??
lda ScoreLo,x ; CPU:$E967 PRG:2967 ??
Flow_E942:
cmp MathResultLo ; CPU:$E969 PRG:2969 ??
rol MathResultHi ; CPU:$E96B PRG:296B ??
cmp MathResultLo ; CPU:$E96D PRG:296D ??
bcc Flow_E94C ; CPU:$E96F PRG:296F ??
sbc MathResultLo ; CPU:$E971 PRG:2971 ??
Flow_E94C:
lsr MathResultLo ; CPU:$E973 PRG:2973 ??
dec Zp11 ; CPU:$E975 PRG:2975 ??
bne Flow_E942 ; CPU:$E977 PRG:2977 ??
sta MathResultLo ; CPU:$E979 PRG:2979 ??
lda MathResultHi ; CPU:$E97B PRG:297B ??
bne Flow_E95A ; CPU:$E97D PRG:297D ??
lda #$76 ; CPU:$E97F PRG:297F ??
Flow_E95A:
sta $0591,y ; CPU:$E981 PRG:2981 ??
iny ; CPU:$E983 PRG:2983 ??
lda MathResultLo ; CPU:$E985 PRG:2985 ??
sta $0591,y ; CPU:$E987 PRG:2987 ??
iny ; CPU:$E989 PRG:2989 ??
rts ; CPU:$E98B PRG:298B ??
; =============================================================================
; RenderRoutine_E965
; CPU address: $E965 PRG offset: $2965
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E965:
lda MatchResultType ; CPU:$E98D PRG:298D ??
beq Flow_E9A2 ; CPU:$E98F PRG:298F ??
ldy #$20 ; CPU:$E991 PRG:2991 ??
lda BallTrajectoryFlags ; CPU:$E993 PRG:2993 ??
and #$02 ; CPU:$E995 PRG:2995 ??
beq Flow_E973 ; CPU:$E997 PRG:2997 ??
ldy #$40 ; CPU:$E999 PRG:2999 ??
Flow_E973:
sty AudioRequestFlags1 ; CPU:$E99B PRG:299B ??
ldy $0590 ; CPU:$E99D PRG:299D ??
ldx #$14 ; CPU:$E99F PRG:299F ??
lda #$EA ; CPU:$E9A1 PRG:29A1 ??
sta MathResultHi ; CPU:$E9A3 PRG:29A3 ??
lda #$A8 ; CPU:$E9A5 PRG:29A5 ??
sta MathResultLo ; CPU:$E9A7 PRG:29A7 ??
jsr RenderRoutine_ED2A ; CPU:$E9A9 PRG:29A9 ??
jsr RenderRoutine_E9A3 ; CPU:$E9AB PRG:29AB ??
ldx #$14 ; CPU:$E9AD PRG:29AD ??
lda #$EA ; CPU:$E9AF PRG:29AF ??
sta MathResultHi ; CPU:$E9B1 PRG:29B1 ??
lda #$BC ; CPU:$E9B3 PRG:29B3 ??
sta MathResultLo ; CPU:$E9B5 PRG:29B5 ??
jsr RenderRoutine_ED2A ; CPU:$E9B7 PRG:29B7 ??
ldx #$03 ; CPU:$E9B9 PRG:29B9 ??
jsr RenderRoutine_E9A3 ; CPU:$E9BB PRG:29BB ??
lda #$00 ; CPU:$E9BD PRG:29BD ??
sta $0591,y ; CPU:$E9BF PRG:29BF ??
sty $0590 ; CPU:$E9C1 PRG:29C1 ??
Flow_E9A2:
rts ; CPU:$E9C3 PRG:29C3 ??
; =============================================================================
; RenderRoutine_E9A3
; CPU address: $E9A3 PRG offset: $29A3
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E9A3:
lda PlayerPointScore,x ; CPU:$E9C5 PRG:29C5 ??
and #$0F ; CPU:$E9C7 PRG:29C7 ??
sta $0591,y ; CPU:$E9C9 PRG:29C9 ??
iny ; CPU:$E9CB PRG:29CB ??
jsr RenderRoutine_E9D4 ; CPU:$E9CD PRG:29CD ??
lda PointWinner ; CPU:$E9CF PRG:29CF ??
beq Flow_E9CE ; CPU:$E9D1 PRG:29D1 ??
lda Player2PointScore,x ; CPU:$E9D3 PRG:29D3 ??
and #$0F ; CPU:$E9D5 PRG:29D5 ??
sta $0591,y ; CPU:$E9D7 PRG:29D7 ??
iny ; CPU:$E9D9 PRG:29D9 ??
jsr RenderRoutine_E9D4 ; CPU:$E9DB PRG:29DB ??
lda PointWinner ; CPU:$E9DD PRG:29DD ??
cmp #$01 ; CPU:$E9DF PRG:29DF ??
beq RenderRoutine_E9D1 ; CPU:$E9E1 PRG:29E1 ??
lda PlayerGameScore,x ; CPU:$E9E3 PRG:29E3 ??
and #$0F ; CPU:$E9E5 PRG:29E5 ??
sta $0591,y ; CPU:$E9E7 PRG:29E7 ??
iny ; CPU:$E9E9 PRG:29E9 ??
jmp RenderRoutine_E9D4 ; CPU:$E9EB PRG:29EB ??
Flow_E9CE:
jsr RenderRoutine_E9D1 ; CPU:$E9ED PRG:29ED ??
; =============================================================================
; RenderRoutine_E9D1
; CPU address: $E9D1 PRG offset: $29D1
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E9D1:
jsr RenderRoutine_E9D4 ; CPU:$E9EF PRG:29EF ??
; =============================================================================
; RenderRoutine_E9D4
; CPU address: $E9D4 PRG offset: $29D4
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E9D4:
lda #$76 ; CPU:$E9F1 PRG:29F1 ??
sta $0591,y ; CPU:$E9F3 PRG:29F3 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $29D9-$29DA.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_E9D9:
.byte $C8, $60 ; PRG $29D9 / CPU $E9D9 ; CPU:$E9F5 PRG:29F5 C8 60
; =============================================================================
; RenderRoutine_E9DB
; CPU address: $E9DB PRG offset: $29DB
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_E9DB:
lda MatchResultType ; CPU:$E9F7 PRG:29F7 ??
beq Flow_E9EE ; CPU:$E9F9 PRG:29F9 ??
ldx MessagePlayerIndex ; CPU:$E9FB PRG:29FB ??
ldy $0590 ; CPU:$E9FD PRG:29FD ??
dec MessageTimer ; CPU:$E9FF PRG:29FF ??
beq Flow_E9EF ; CPU:$EA01 PRG:2A01 ??
lda MessageTimer ; CPU:$EA03 PRG:2A03 ??
cmp #$18 ; CPU:$EA05 PRG:2A05 ??
beq Flow_E9FE ; CPU:$EA07 PRG:2A07 ??
Flow_E9EE:
rts ; CPU:$EA09 PRG:2A09 ??
Flow_E9EF:
lda #$28 ; CPU:$EA0B PRG:2A0B ??
sta MessageTimer ; CPU:$EA0D PRG:2A0D ??
lda ScoreDisplayState ; CPU:$EA0F PRG:2A0F ??
bne Flow_EA2A ; CPU:$EA11 PRG:2A11 ??
jsr RenderRoutine_EA16 ; CPU:$EA13 PRG:2A13 ??
lda #$76 ; CPU:$EA15 PRG:2A15 ??
bne Flow_EA09 ; CPU:$EA17 PRG:2A17 ??
Flow_E9FE:
lda ScoreDisplayState ; CPU:$EA19 PRG:2A19 ??
bne Flow_EA49 ; CPU:$EA1B PRG:2A1B ??
jsr RenderRoutine_EA16 ; CPU:$EA1D PRG:2A1D ??
lda PlayerPointScore,x ; CPU:$EA1F PRG:2A1F ??
and #$0F ; CPU:$EA21 PRG:2A21 ??
Flow_EA09:
sta $0591,y ; CPU:$EA23 PRG:2A23 ??
iny ; CPU:$EA25 PRG:2A25 ??
lda #$00 ; CPU:$EA27 PRG:2A27 ??
sta $0591,y ; CPU:$EA29 PRG:2A29 ??
sty $0590 ; CPU:$EA2B PRG:2A2B ??
rts ; CPU:$EA2D PRG:2A2D ??
; =============================================================================
; RenderRoutine_EA16
; CPU address: $EA16 PRG offset: $2A16
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_EA16:
lda #$22 ; CPU:$EA2F PRG:2A2F ??
sta $0591,y ; CPU:$EA31 PRG:2A31 ??
iny ; CPU:$EA33 PRG:2A33 ??
lda $EA82,x ; CPU:$EA35 PRG:2A35 ??
sta $0591,y ; CPU:$EA37 PRG:2A37 ??
iny ; CPU:$EA39 PRG:2A39 ??
lda #$01 ; CPU:$EA3B PRG:2A3B ??
sta $0591,y ; CPU:$EA3D PRG:2A3D ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2A28-$2A29.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_EA28:
.byte $C8, $60 ; PRG $2A28 / CPU $EA28 ; CPU:$EA3F PRG:2A3F C8 60
Flow_EA2A:
ldx PointWinner ; CPU:$EA41 PRG:2A41 ??
jsr RenderRoutine_EA6E ; CPU:$EA43 PRG:2A43 ??
lda #$76 ; CPU:$EA45 PRG:2A45 ??
sta $0591,y ; CPU:$EA47 PRG:2A47 ??
iny ; CPU:$EA49 PRG:2A49 ??
jsr RenderRoutine_EA16 ; CPU:$EA4B PRG:2A4B ??
lda #$76 ; CPU:$EA4D PRG:2A4D ??
sta $0591,y ; CPU:$EA4F PRG:2A4F ??
iny ; CPU:$EA51 PRG:2A51 ??
inx ; CPU:$EA53 PRG:2A53 ??
inx ; CPU:$EA55 PRG:2A55 ??
inx ; CPU:$EA57 PRG:2A57 ??
jsr RenderRoutine_EA16 ; CPU:$EA59 PRG:2A59 ??
lda #$76 ; CPU:$EA5B PRG:2A5B ??
jmp Flow_EA09 ; CPU:$EA5D PRG:2A5D ??
Flow_EA49:
ldx PointWinner ; CPU:$EA5F PRG:2A5F ??
jsr RenderRoutine_EA6E ; CPU:$EA61 PRG:2A61 ??
txa ; CPU:$EA63 PRG:2A63 ??
clc ; CPU:$EA65 PRG:2A65 ??
adc #$29 ; CPU:$EA67 PRG:2A67 ??
sta $0591,y ; CPU:$EA69 PRG:2A69 ??
iny ; CPU:$EA6B PRG:2A6B ??
jsr RenderRoutine_EA16 ; CPU:$EA6D PRG:2A6D ??
lda PlayerPointScore,x ; CPU:$EA6F PRG:2A6F ??
and #$0F ; CPU:$EA71 PRG:2A71 ??
sta $0591,y ; CPU:$EA73 PRG:2A73 ??
iny ; CPU:$EA75 PRG:2A75 ??
inx ; CPU:$EA77 PRG:2A77 ??
inx ; CPU:$EA79 PRG:2A79 ??
inx ; CPU:$EA7B PRG:2A7B ??
jsr RenderRoutine_EA16 ; CPU:$EA7D PRG:2A7D ??
lda PlayerPointScore,x ; CPU:$EA7F PRG:2A7F ??
and #$0F ; CPU:$EA81 PRG:2A81 ??
jmp Flow_EA09 ; CPU:$EA83 PRG:2A83 ??
; =============================================================================
; RenderRoutine_EA6E
; CPU address: $EA6E PRG offset: $2A6E
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_EA6E:
lda #$21 ; CPU:$EA85 PRG:2A85 ??
sta $0591,y ; CPU:$EA87 PRG:2A87 ??
iny ; CPU:$EA89 PRG:2A89 ??
lda $EA88,x ; CPU:$EA8B PRG:2A8B ??
sta $0591,y ; CPU:$EA8D PRG:2A8D ??
iny ; CPU:$EA8F PRG:2A8F ??
lda #$01 ; CPU:$EA91 PRG:2A91 ??
sta $0591,y ; CPU:$EA93 PRG:2A93 ??
iny ; CPU:$EA95 PRG:2A95 ??
rts ; CPU:$EA97 PRG:2A97 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2A82-$2AD9.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
UmpireMessageTileData:
.byte $4F, $51, $53, $0F, $11, $13, $EF, $F1, $F3, $21, $24, $04, $0F, $11, $21, $04 ; PRG $2A82 / CPU $EA82 ; CPU:$EA99 PRG:2A99 4F 51 53 0F 11 13 EF F1 F3 21 24 04 0F 11 21 04
.byte $04, $76, $76, $76, $76, $20, $E4, $04, $14, $FF, $76, $00, $01, $05, $03, $00 ; PRG $2A92 / CPU $EA92 ; CPU:$EAA9 PRG:2AA9 04 76 76 76 76 20 E4 04 14 FF 76 00 01 05 03 00
.byte $04, $00, $76, $76, $76, $0A, $21, $EB, $0A, $76, $76, $76, $76, $29, $76, $2A ; PRG $2AA2 / CPU $EAA2 ; CPU:$EAB9 PRG:2AB9 04 00 76 76 76 0A 21 EB 0A 76 76 76 76 29 76 2A
.byte $76, $2B, $76, $22, $4B, $0A, $76, $0F, $11, $76, $22, $2B, $0A, $76, $76, $76 ; PRG $2AB2 / CPU $EAB2 ; CPU:$EAC9 PRG:2AC9 76 2B 76 22 4B 0A 76 0F 11 76 22 2B 0A 76 76 76
.byte $76, $76, $76, $76, $76, $76, $76, $22, $0B, $0A, $76, $14, $FF, $76, $20, $E6 ; PRG $2AC2 / CPU $EAC2 ; CPU:$EAD9 PRG:2AD9 76 76 76 76 76 76 76 22 0B 0A 76 14 FF 76 20 E6
.byte $02, $04, $00, $21, $26, $02, $04, $00 ; PRG $2AD2 / CPU $EAD2 ; CPU:$EAE9 PRG:2AE9 02 04 00 21 26 02 04 00
; =============================================================================
; RenderRoutine_EADA
; CPU address: $EADA PRG offset: $2ADA
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_EADA:
ldy $0590 ; CPU:$EAF1 PRG:2AF1 ??
lda #$EA ; CPU:$EAF3 PRG:2AF3 ??
sta MathResultHi ; CPU:$EAF5 PRG:2AF5 ??
lda #$EB ; CPU:$EAF7 PRG:2AF7 ??
sta MathResultLo ; CPU:$EAF9 PRG:2AF9 ??
ldx #$1A ; CPU:$EAFB PRG:2AFB ??
jsr RenderRoutine_ED1A ; CPU:$EAFD PRG:2AFD ??
rts ; CPU:$EAFF PRG:2AFF ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2AEB-$2B04.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
GraphicsTable_EAEB:
.byte $22, $0B, $0A, $76, $76, $76, $17, $0E, $21, $1D, $76, $76, $76, $22, $4B, $0A ; PRG $2AEB / CPU $EAEB ; CPU:$EB01 PRG:2B01 22 0B 0A 76 76 76 17 0E 21 1D 76 76 76 22 4B 0A
.byte $76, $76, $19, $15, $0A, $22, $0E, $1B, $76, $76 ; PRG $2AFB / CPU $EAFB ; CPU:$EB11 PRG:2B11 76 76 19 15 0A 22 0E 1B 76 76
; =============================================================================
; RenderRoutine_EB05
; CPU address: $EB05 PRG offset: $2B05
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_EB05:
ldy $0590 ; CPU:$EB1B PRG:2B1B ??
lda #$EB ; CPU:$EB1D PRG:2B1D ??
sta MathResultHi ; CPU:$EB1F PRG:2B1F ??
lda #$92 ; CPU:$EB21 PRG:2B21 ??
sta MathResultLo ; CPU:$EB23 PRG:2B23 ??
ldx #$36 ; CPU:$EB25 PRG:2B25 ??
jsr RenderRoutine_ED1A ; CPU:$EB27 PRG:2B27 ??
lda #$01 ; CPU:$EB29 PRG:2B29 ??
sta NmiUpdatesEnabled ; CPU:$EB2B PRG:2B2B ??
jsr EngineRoutine_C422 ; CPU:$EB2D PRG:2B2D ??
jsr RenderRoutine_ED7D ; CPU:$EB2F PRG:2B2F ??
lda #$01 ; CPU:$EB31 PRG:2B31 ??
sta NmiUpdatesEnabled ; CPU:$EB33 PRG:2B33 ??
jsr EngineRoutine_C422 ; CPU:$EB35 PRG:2B35 ??
lda MatchResultType ; CPU:$EB37 PRG:2B37 ??
beq Flow_EB57 ; CPU:$EB39 PRG:2B39 ??
ldy $0590 ; CPU:$EB3B PRG:2B3B ??
ldx #$34 ; CPU:$EB3D PRG:2B3D ??
lda #$EB ; CPU:$EB3F PRG:2B3F ??
sta MathResultHi ; CPU:$EB41 PRG:2B41 ??
lda #$C8 ; CPU:$EB43 PRG:2B43 ??
sta MathResultLo ; CPU:$EB45 PRG:2B45 ??
jsr RenderRoutine_ED2A ; CPU:$EB47 PRG:2B47 ??
lda MatchResultType ; CPU:$EB49 PRG:2B49 ??
cmp #$01 ; CPU:$EB4B PRG:2B4B ??
beq Flow_EB49 ; CPU:$EB4D PRG:2B4D ??
lda #$EC ; CPU:$EB4F PRG:2B4F ??
sta MathResultHi ; CPU:$EB51 PRG:2B51 ??
lda #$09 ; CPU:$EB53 PRG:2B53 ??
jmp Flow_EB4F ; CPU:$EB55 PRG:2B55 ??
Flow_EB49:
lda #$EB ; CPU:$EB57 PRG:2B57 ??
sta MathResultHi ; CPU:$EB59 PRG:2B59 ??
lda #$FC ; CPU:$EB5B PRG:2B5B ??
Flow_EB4F:
sta MathResultLo ; CPU:$EB5D PRG:2B5D ??
ldx #$0D ; CPU:$EB5F PRG:2B5F ??
jsr RenderRoutine_ED1A ; CPU:$EB61 PRG:2B61 ??
rts ; PRG $2B56 / CPU $EB56 ; CPU:$EB63 PRG:2B63 ??
Flow_EB57:
ldy $0590 ; CPU:$EB65 PRG:2B65 ??
ldx #$5A ; CPU:$EB67 PRG:2B67 ??
lda #$EC ; CPU:$EB69 PRG:2B69 ??
sta MathResultHi ; CPU:$EB6B PRG:2B6B ??
lda #$16 ; CPU:$EB6D PRG:2B6D ??
sta MathResultLo ; CPU:$EB6F PRG:2B6F ??
jsr RenderRoutine_ED1A ; CPU:$EB71 PRG:2B71 ??
lda #$01 ; CPU:$EB73 PRG:2B73 ??
sta NmiUpdatesEnabled ; CPU:$EB75 PRG:2B75 ??
jsr EngineRoutine_C422 ; CPU:$EB77 PRG:2B77 ??
ldy $0590 ; CPU:$EB79 PRG:2B79 ??
lda Zp3A ; CPU:$EB7B PRG:2B7B ??
asl a ; CPU:$EB7D PRG:2B7D ??
tax ; CPU:$EB7F PRG:2B7F ??
lda $ECA2,x ; CPU:$EB81 PRG:2B81 ??
sta MathResultLo ; CPU:$EB83 PRG:2B83 ??
lda $ECA3,x ; CPU:$EB85 PRG:2B85 ??
sta MathResultHi ; CPU:$EB87 PRG:2B87 ??
ldx #$16 ; CPU:$EB89 PRG:2B89 ??
jsr RenderRoutine_ED2A ; CPU:$EB8B PRG:2B8B ??
ldx #$32 ; CPU:$EB8D PRG:2B8D ??
lda #$EC ; CPU:$EB8F PRG:2B8F ??
sta MathResultHi ; CPU:$EB91 PRG:2B91 ??
lda #$70 ; CPU:$EB93 PRG:2B93 ??
sta MathResultLo ; CPU:$EB95 PRG:2B95 ??
jsr RenderRoutine_ED1A ; CPU:$EB97 PRG:2B97 ??
rts ; CPU:$EB99 PRG:2B99 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2B92-$2D19.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
MatchScreenTextData:
.byte $20, $C3, $06, $7B, $24, $24, $24, $24, $24, $20, $E3, $06, $24, $24, $24, $24 ; PRG $2B92 / CPU $EB92 ; CPU:$EB9B PRG:2B9B 20 C3 06 7B 24 24 24 24 24 20 E3 06 24 24 24 24
.byte $24, $24, $21, $03, $06, $24, $24, $24, $24, $24, $24, $21, $23, $06, $24, $24 ; PRG $2BA2 / CPU $EBA2 ; CPU:$EBAB PRG:2BAB 24 24 21 03 06 24 24 24 24 24 24 21 23 06 24 24
.byte $24, $24, $24, $24, $21, $43, $06, $24, $24, $24, $24, $24, $45, $23, $C8, $01 ; PRG $2BB2 / CPU $EBB2 ; CPU:$EBBB PRG:2BBB 24 24 24 24 21 43 06 24 24 24 24 24 45 23 C8 01
.byte $AA, $23, $CE, $02, $08, $AA, $21, $EB, $0A, $76, $76, $76, $76, $76, $76, $76 ; PRG $2BC2 / CPU $EBC2 ; CPU:$EBCB PRG:2BCB AA 23 CE 02 08 AA 21 EB 0A 76 76 76 76 76 76 76
.byte $76, $76, $76, $22, $0B, $0A, $76, $10, $0A, $16, $0E, $76, $1C, $0E, $1D, $76 ; PRG $2BD2 / CPU $EBD2 ; CPU:$EBDB PRG:2BDB 76 76 76 22 0B 0A 76 10 0A 16 0E 76 1C 0E 1D 76
.byte $22, $2B, $0A, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $22, $6B, $0A ; PRG $2BE2 / CPU $EBE2 ; CPU:$EBEB PRG:2BEB 22 2B 0A 76 76 76 76 76 76 76 76 76 76 22 6B 0A
.byte $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $22, $4B, $0A, $76, $22, $18 ; PRG $2BF2 / CPU $EBF2 ; CPU:$EBFB PRG:2BFB 76 76 76 76 76 76 76 76 76 76 22 4B 0A 76 22 18
.byte $1E, $76, $20, $18, $17, $27, $76, $22, $4B, $0A, $76, $22, $18, $1E, $76, $15 ; PRG $2C02 / CPU $EC02 ; CPU:$EC0B PRG:2C0B 1E 76 20 18 17 27 76 22 4B 0A 76 22 18 1E 76 15
.byte $18, $1C, $1D, $27, $21, $EA, $0C, $76, $76, $76, $76, $76, $76, $76, $76, $76 ; PRG $2C12 / CPU $EC12 ; CPU:$EC1B PRG:2C1B 18 1C 1D 27 21 EA 0C 76 76 76 76 76 76 76 76 76
.byte $76, $76, $76, $22, $0A, $0C, $76, $76, $76, $20, $12, $17, $17, $0E, $1B, $76 ; PRG $2C22 / CPU $EC22 ; CPU:$EC2B PRG:2C2B 76 76 76 22 0A 0C 76 76 76 20 12 17 17 0E 1B 76
.byte $76, $76, $22, $2A, $0C, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76 ; PRG $2C32 / CPU $EC32 ; CPU:$EC3B PRG:2C3B 76 76 22 2A 0C 76 76 76 76 76 76 76 76 76 76 76
.byte $76, $22, $4A, $0C, $76, $0C, $18, $17, $10, $1B, $0A, $1D, $1E, $76, $76, $76 ; PRG $2C42 / CPU $EC42 ; CPU:$EC4B PRG:2C4B 76 22 4A 0C 76 0C 18 17 10 1B 0A 1D 1E 76 76 76
.byte $22, $6A, $0C, $76, $76, $76, $15, $0A, $1D, $12, $18, $17, $1C, $27, $76, $22 ; PRG $2C52 / CPU $EC52 ; CPU:$EC5B PRG:2C5B 22 6A 0C 76 76 76 15 0A 1D 12 18 17 1C 27 76 22
.byte $CA, $0C, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $23, $0A ; PRG $2C62 / CPU $EC62 ; CPU:$EC6B PRG:2C6B CA 0C 76 76 76 76 76 76 76 76 76 76 76 76 23 0A
.byte $0C, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $76, $22, $8A, $0C ; PRG $2C72 / CPU $EC72 ; CPU:$EC7B PRG:2C7B 0C 76 76 76 76 76 76 76 76 76 76 76 76 22 8A 0C
.byte $76, $76, $76, $76, $76, $82, $83, $76, $76, $76, $76, $76, $22, $AA, $0C, $76 ; PRG $2C82 / CPU $EC82 ; CPU:$EC8B PRG:2C8B 76 76 76 76 76 82 83 76 76 76 76 76 22 AA 0C 76
.byte $76, $76, $76, $76, $84, $85, $76, $76, $76, $76, $76, $23, $EB, $02, $0C, $03 ; PRG $2C92 / CPU $EC92 ; CPU:$EC9B PRG:2C9B 76 76 76 76 84 85 76 76 76 76 76 23 EB 02 0C 03
.byte $AC, $EC, $C2, $EC, $D8, $EC, $EE, $EC, $04, $ED, $22, $EA, $0C, $76, $76, $2C ; PRG $2CA2 / CPU $ECA2 ; CPU:$ECAB PRG:2CAB AC EC C2 EC D8 EC EE EC 04 ED 22 EA 0C 76 76 2C
.byte $76, $76, $01, $00, $00, $00, $00, $76, $76, $3F, $0C, $04, $17, $0F, $30, $10 ; PRG $2CB2 / CPU $ECB2 ; CPU:$ECBB PRG:2CBB 76 76 01 00 00 00 00 76 76 3F 0C 04 17 0F 30 10
.byte $22, $EA, $0C, $76, $76, $2C, $76, $76, $02, $00, $00, $00, $00, $76, $76, $3F ; PRG $2CC2 / CPU $ECC2 ; CPU:$ECCB PRG:2CCB 22 EA 0C 76 76 2C 76 76 02 00 00 00 00 76 76 3F
.byte $0C, $04, $17, $0F, $25, $30, $22, $EA, $0C, $76, $76, $2C, $76, $76, $03, $00 ; PRG $2CD2 / CPU $ECD2 ; CPU:$ECDB PRG:2CDB 0C 04 17 0F 25 30 22 EA 0C 76 76 2C 76 76 03 00
.byte $00, $00, $00, $76, $76, $3F, $0C, $04, $17, $0F, $21, $30, $22, $EA, $0C, $76 ; PRG $2CE2 / CPU $ECE2 ; CPU:$ECEB PRG:2CEB 00 00 00 76 76 3F 0C 04 17 0F 21 30 22 EA 0C 76
.byte $76, $2C, $76, $76, $05, $00, $00, $00, $00, $76, $76, $3F, $0C, $04, $17, $0F ; PRG $2CF2 / CPU $ECF2 ; CPU:$ECFB PRG:2CFB 76 2C 76 76 05 00 00 00 00 76 76 3F 0C 04 17 0F
.byte $10, $30, $22, $EA, $0C, $76, $76, $2C, $76, $01, $00, $00, $00, $00, $00, $76 ; PRG $2D02 / CPU $ED02 ; CPU:$ED0B PRG:2D0B 10 30 22 EA 0C 76 76 2C 76 01 00 00 00 00 00 76
.byte $76, $3F, $0C, $04, $17, $0F, $27, $30 ; PRG $2D12 / CPU $ED12 ; CPU:$ED1B PRG:2D1B 76 3F 0C 04 17 0F 27 30
; =============================================================================
; RenderRoutine_ED1A
; CPU address: $ED1A PRG offset: $2D1A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_ED1A:
jsr RenderRoutine_ED2A ; CPU:$ED23 PRG:2D23 ??
lda #$00 ; CPU:$ED25 PRG:2D25 ??
sta $0591,y ; CPU:$ED27 PRG:2D27 ??
sty $0590 ; CPU:$ED29 PRG:2D29 ??
lda #$01 ; CPU:$ED2B PRG:2D2B ??
sta PpuBufferReady ; CPU:$ED2D PRG:2D2D ??
rts ; CPU:$ED2F PRG:2D2F ??
; =============================================================================
; RenderRoutine_ED2A
; CPU address: $ED2A PRG offset: $2D2A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_ED2A:
sty Zp11 ; CPU:$ED31 PRG:2D31 ??
lda MathResultLo ; CPU:$ED33 PRG:2D33 ??
sec ; CPU:$ED35 PRG:2D35 ??
sbc Zp11 ; CPU:$ED37 PRG:2D37 ??
sta MathResultLo ; CPU:$ED39 PRG:2D39 ??
bcs Flow_ED37 ; CPU:$ED3B PRG:2D3B ??
dec MathResultHi ; CPU:$ED3D PRG:2D3D ??
Flow_ED37:
lda (MathResultLo),y ; CPU:$ED3F PRG:2D3F ??
sta $0591,y ; CPU:$ED41 PRG:2D41 ??
iny ; CPU:$ED43 PRG:2D43 ??
dex ; CPU:$ED45 PRG:2D45 ??
bne Flow_ED37 ; CPU:$ED47 PRG:2D47 ??
rts ; PRG $2D40 / CPU $ED40 ; CPU:$ED49 PRG:2D49 ??
; =============================================================================
; RenderRoutine_ED41
; CPU address: $ED41 PRG offset: $2D41
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_ED41:
ldx #$09 ; CPU:$ED4B PRG:2D4B ??
ldy #$F0 ; CPU:$ED4D PRG:2D4D ??
jsr DrawScreenData ; CPU:$ED4F PRG:2D4F ??
lda #$01 ; CPU:$ED51 PRG:2D51 ??
sta PaletteUpdateMode ; CPU:$ED53 PRG:2D53 ??
rts ; CPU:$ED55 PRG:2D55 ??
; =============================================================================
; RenderRoutine_ED4D
; CPU address: $ED4D PRG offset: $2D4D
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_ED4D:
ldx #$8F ; CPU:$ED57 PRG:2D57 ??
ldy #$EE ; CPU:$ED59 PRG:2D59 ??
jsr DrawScreenData ; CPU:$ED5B PRG:2D5B ??
lda #$03 ; CPU:$ED5D PRG:2D5D ??
sta PaletteUpdateMode ; CPU:$ED5F PRG:2D5F ??
rts ; PRG $2D58 / CPU $ED58 ; CPU:$ED61 PRG:2D61 ??
; =============================================================================
; RenderRoutine_ED59
; CPU address: $ED59 PRG offset: $2D59
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_ED59:
lda ServingPlayer ; CPU:$ED63 PRG:2D63 ??
asl a ; CPU:$ED65 PRG:2D65 ??
tay ; CPU:$ED67 PRG:2D67 ??
lda $EE62,y ; CPU:$ED69 PRG:2D69 ??
sta MathResultLo ; CPU:$ED6B PRG:2D6B ??
lda $EE63,y ; CPU:$ED6D PRG:2D6D ??
sta MathResultHi ; CPU:$ED6F PRG:2D6F ??
ldx #$07 ; CPU:$ED71 PRG:2D71 ??
ldy $0590 ; CPU:$ED73 PRG:2D73 ??
jsr RenderRoutine_ED1A ; CPU:$ED75 PRG:2D75 ??
rts ; CPU:$ED77 PRG:2D77 ??
; =============================================================================
; RenderRoutine_ED70
; CPU address: $ED70 PRG offset: $2D70
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_ED70:
jsr RenderRoutine_ED7D ; CPU:$ED79 PRG:2D79 ??
lda #$01 ; CPU:$ED7B PRG:2D7B ??
sta NmiUpdatesEnabled ; CPU:$ED7D PRG:2D7D ??
jsr EngineRoutine_C422 ; CPU:$ED7F PRG:2D7F ??
jmp Flow_ED8E ; CPU:$ED81 PRG:2D81 ??
; =============================================================================
; RenderRoutine_ED7D
; CPU address: $ED7D PRG offset: $2D7D
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RenderRoutine_ED7D:
ldy $0590 ; CPU:$ED83 PRG:2D83 ??
lda #$9F ; CPU:$ED85 PRG:2D85 ??
sta MathResultLo ; CPU:$ED87 PRG:2D87 ??
lda #$ED ; CPU:$ED89 PRG:2D89 ??
sta MathResultHi ; CPU:$ED8B PRG:2D8B ??
ldx #$31 ; CPU:$ED8D PRG:2D8D ??
jsr RenderRoutine_ED1A ; CPU:$ED8F PRG:2D8F ??
rts ; CPU:$ED91 PRG:2D91 ??
Flow_ED8E:
lda #$D0 ; CPU:$ED93 PRG:2D93 ??
sta MathResultLo ; CPU:$ED95 PRG:2D95 ??
lda #$ED ; CPU:$ED97 PRG:2D97 ??
sta MathResultHi ; CPU:$ED99 PRG:2D99 ??
ldx #$41 ; CPU:$ED9B PRG:2D9B ??
ldy $0590 ; CPU:$ED9D PRG:2D9D ??
jsr RenderRoutine_ED1A ; CPU:$ED9F PRG:2D9F ??
rts ; CPU:$EDA1 PRG:2DA1 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $2D9F-$38DF.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
ScreenAndAnimationAssetData:
.byte $20, $97, $07, $24, $24, $24, $7C, $4D, $4D, $4D, $20, $B7, $07, $24, $24, $24 ; PRG $2D9F / CPU $ED9F ; CPU:$EDA3 PRG:2DA3 20 97 07 24 24 24 7C 4D 4D 4D 20 B7 07 24 24 24
.byte $24, $7C, $4D, $4D, $20, $D7, $07, $24, $24, $24, $24, $24, $7C, $4D, $20, $F7 ; PRG $2DAF / CPU $EDAF ; CPU:$EDB3 PRG:2DB3 24 7C 4D 4D 20 D7 07 24 24 24 24 24 7C 4D 20 F7
.byte $07, $24, $24, $24, $24, $24, $24, $7C, $21, $1B, $01, $24, $21, $3B, $02, $7D ; PRG $2DBF / CPU $EDBF ; CPU:$EDC3 PRG:2DC3 07 24 24 24 24 24 24 7C 21 1B 01 24 21 3B 02 7D
.byte $AF, $21, $EB, $0A, $4D, $4D, $4D, $4D, $6D, $6E, $4D, $4D, $4D, $4D, $22, $0B ; PRG $2DCF / CPU $EDCF ; CPU:$EDD3 PRG:2DD3 AF 21 EB 0A 4D 4D 4D 4D 6D 6E 4D 4D 4D 4D 22 0B
.byte $0A, $4D, $4D, $4D, $4D, $6D, $6E, $4D, $4D, $4D, $4D, $22, $2B, $0A, $4D, $4D ; PRG $2DDF / CPU $EDDF ; CPU:$EDE3 PRG:2DE3 0A 4D 4D 4D 4D 6D 6E 4D 4D 4D 4D 22 2B 0A 4D 4D
.byte $4D, $4D, $6D, $6E, $4D, $4D, $4D, $4D, $22, $4B, $0A, $4D, $4D, $4D, $4D, $6D ; PRG $2DEF / CPU $EDEF ; CPU:$EDF3 PRG:2DF3 4D 4D 6D 6E 4D 4D 4D 4D 22 4B 0A 4D 4D 4D 4D 6D
.byte $6E, $4D, $4D, $4D, $4D, $22, $6B, $0A, $A4, $A4, $A4, $A4, $89, $8A, $A4, $A4 ; PRG $2DFF / CPU $EDFF ; CPU:$EE03 PRG:2E03 6E 4D 4D 4D 4D 22 6B 0A A4 A4 A4 A4 89 8A A4 A4
.byte $A4, $A4, $3F, $00, $1D, $17, $0F, $30, $19, $17, $0F, $30, $27, $17, $21, $30 ; PRG $2E0F / CPU $EE0F ; CPU:$EE13 PRG:2E13 A4 A4 3F 00 1D 17 0F 30 19 17 0F 30 27 17 21 30
.byte $02, $17, $0F, $30, $02, $17, $0F, $27, $21, $17, $07, $27, $20, $17, $39, $0F ; PRG $2E1F / CPU $EE1F ; CPU:$EE23 PRG:2E23 02 17 0F 30 02 17 0F 27 21 17 07 27 20 17 39 0F
.byte $17, $17, $00, $3F, $00, $14, $0F, $30, $0F, $21, $0F, $0F, $27, $0F, $0F, $0F ; PRG $2E2F / CPU $EE2F ; CPU:$EE33 PRG:2E33 17 17 00 3F 00 14 0F 30 0F 21 0F 0F 27 0F 0F 0F
.byte $30, $0F, $0F, $30, $29, $19, $0F, $35, $35, $35, $00, $3F, $00, $14, $17, $0F ; PRG $2E3F / CPU $EE3F ; CPU:$EE43 PRG:2E43 30 0F 0F 30 29 19 0F 35 35 35 00 3F 00 14 17 0F
.byte $30, $19, $17, $0F, $30, $27, $17, $21, $30, $02, $17, $0F, $22, $02, $17, $30 ; PRG $2E4F / CPU $EE4F ; CPU:$EE53 PRG:2E53 30 19 17 0F 30 27 17 21 30 02 17 0F 22 02 17 30
.byte $25, $0F, $00, $6C, $EE, $73, $EE, $7A, $EE, $81, $EE, $88, $EE, $3F, $1C, $04 ; PRG $2E5F / CPU $EE5F ; CPU:$EE63 PRG:2E63 25 0F 00 6C EE 73 EE 7A EE 81 EE 88 EE 3F 1C 04
.byte $17, $07, $36, $2B, $3F, $1C, $04, $17, $07, $27, $25, $3F, $1C, $04, $17, $0F ; PRG $2E6F / CPU $EE6F ; CPU:$EE73 PRG:2E73 17 07 36 2B 3F 1C 04 17 07 27 25 3F 1C 04 17 0F
.byte $27, $31, $3F, $1C, $04, $17, $0F, $27, $04, $3F, $1C, $04, $17, $07, $26, $0F ; PRG $2E7F / CPU $EE7F ; CPU:$EE83 PRG:2E83 27 31 3F 1C 04 17 0F 27 04 3F 1C 04 17 07 26 0F
.byte $21, $EB, $4B, $76, $22, $0B, $0B, $76, $1C, $0E, $15, $0E, $0C, $1D, $76, $76 ; PRG $2E8F / CPU $EE8F ; CPU:$EE93 PRG:2E93 21 EB 4B 76 22 0B 0B 76 1C 0E 15 0E 0C 1D 76 76
.byte $76, $76, $22, $2B, $0B, $76, $76, $76, $76, $76, $15, $0E, $1F, $0E, $15, $76 ; PRG $2E9F / CPU $EE9F ; CPU:$EEA3 PRG:2EA3 76 76 22 2B 0B 76 76 76 76 76 15 0E 1F 0E 15 76
.byte $22, $4B, $4B, $76, $22, $6B, $0B, $76, $01, $76, $02, $76, $03, $76, $04, $76 ; PRG $2EAF / CPU $EEAF ; CPU:$EEB3 PRG:2EB3 22 4B 4B 76 22 6B 0B 76 01 76 02 76 03 76 04 76
.byte $05, $76, $22, $8B, $4B, $76, $22, $AB, $4B, $76, $20, $C4, $45, $24, $21, $43 ; PRG $2EBF / CPU $EEBF ; CPU:$EEC3 PRG:2EC3 05 76 22 8B 4B 76 22 AB 4B 76 20 C4 45 24 21 43
.byte $45, $24, $20, $C3, $84, $7B, $24, $24, $24, $20, $E8, $84, $24, $24, $24, $45 ; PRG $2ECF / CPU $EECF ; CPU:$EED3 PRG:2ED3 45 24 20 C3 84 7B 24 24 24 20 E8 84 24 24 24 45
.byte $23, $E3, $03, $F0, $F0, $30, $00, $20, $83, $1A, $D8, $D9, $D9, $DA, $24, $D8 ; PRG $2EDF / CPU $EEDF ; CPU:$EEE3 PRG:2EE3 23 E3 03 F0 F0 30 00 20 83 1A D8 D9 D9 DA 24 D8
.byte $D9, $D9, $DA, $24, $E7, $E8, $24, $E9, $24, $E7, $E8, $24, $E9, $24, $E9, $24 ; PRG $2EEF / CPU $EEEF ; CPU:$EEF3 PRG:2EF3 D9 D9 DA 24 E7 E8 24 E9 24 E7 E8 24 E9 24 E9 24
.byte $F8, $D9, $D9, $DA, $20, $A3, $1A, $DB, $DC, $DD, $DE, $24, $E3, $E4, $E4, $DE ; PRG $2EFF / CPU $EEFF ; CPU:$EF03 PRG:2F03 F8 D9 D9 DA 20 A3 1A DB DC DD DE 24 E3 E4 E4 DE
.byte $24, $EA, $EB, $EC, $E5, $24, $EA, $EB, $EC, $E5, $24, $E5, $24, $E3, $E4, $E4 ; PRG $2F0F / CPU $EF0F ; CPU:$EF13 PRG:2F13 24 EA EB EC E5 24 EA EB EC E5 24 E5 24 E3 E4 E4
.byte $DE, $20, $C4, $16, $DF, $E0, $24, $24, $E5, $24, $24, $24, $24, $EA, $4D, $ED ; PRG $2F1F / CPU $EF1F ; CPU:$EF23 PRG:2F23 DE 20 C4 16 DF E0 24 24 E5 24 24 24 24 EA 4D ED
.byte $E5, $24, $EA, $4D, $ED, $E5, $24, $E5, $24, $E5, $20, $E4, $19, $DF, $E0, $24 ; PRG $2F2F / CPU $EF2F ; CPU:$EF33 PRG:2F33 E5 24 EA 4D ED E5 24 E5 24 E5 20 E4 19 DF E0 24
.byte $24, $E6, $D9, $D9, $DA, $24, $EE, $EF, $F0, $F1, $24, $EE, $EF, $F0, $F1, $24 ; PRG $2F3F / CPU $EF3F ; CPU:$EF43 PRG:2F43 24 E6 D9 D9 DA 24 EE EF F0 F1 24 EE EF F0 F1 24
.byte $E5, $24, $E6, $D9, $D9, $F9, $21, $04, $19, $DF, $E0, $24, $24, $E3, $E4, $E4 ; PRG $2F4F / CPU $EF4F ; CPU:$EF53 PRG:2F53 E5 24 E6 D9 D9 F9 21 04 19 DF E0 24 24 E3 E4 E4
.byte $DE, $24, $E5, $F2, $4D, $F3, $24, $E5, $F2, $4D, $F3, $24, $E5, $24, $FA, $E4 ; PRG $2F5F / CPU $EF5F ; CPU:$EF63 PRG:2F63 DE 24 E5 F2 4D F3 24 E5 F2 4D F3 24 E5 24 FA E4
.byte $E4, $FD, $21, $24, $19, $DF, $E0, $24, $24, $E5, $24, $24, $24, $24, $E5, $F4 ; PRG $2F6F / CPU $EF6F ; CPU:$EF73 PRG:2F73 E4 FD 21 24 19 DF E0 24 24 E5 24 24 24 24 E5 F4
.byte $F5, $F3, $24, $E5, $F4, $F5, $F3, $24, $E5, $24, $24, $24, $24, $E5, $21, $44 ; PRG $2F7F / CPU $EF7F ; CPU:$EF83 PRG:2F83 F5 F3 24 E5 F4 F5 F3 24 E5 24 24 24 24 E5 21 44
.byte $19, $DF, $E0, $24, $24, $E6, $D9, $D9, $DA, $24, $E5, $24, $F6, $F7, $24, $E5 ; PRG $2F8F / CPU $EF8F ; CPU:$EF93 PRG:2F93 19 DF E0 24 24 E6 D9 D9 DA 24 E5 24 F6 F7 24 E5
.byte $24, $F6, $F7, $24, $E5, $24, $D8, $D9, $D9, $FE, $21, $64, $19, $E1, $E2, $24 ; PRG $2F9F / CPU $EF9F ; CPU:$EFA3 PRG:2FA3 24 F6 F7 24 E5 24 D8 D9 D9 FE 21 64 19 E1 E2 24
.byte $24, $DB, $E4, $E4, $DE, $24, $FC, $24, $24, $FC, $24, $FC, $24, $24, $FC, $24 ; PRG $2FAF / CPU $EFAF ; CPU:$EFB3 PRG:2FB3 24 DB E4 E4 DE 24 FC 24 24 FC 24 FC 24 24 FC 24
.byte $FC, $24, $DB, $E4, $E4, $FB, $22, $2A, $0C, $1C, $12, $17, $10, $15, $0E, $1C ; PRG $2FBF / CPU $EFBF ; CPU:$EFC3 PRG:2FC3 FC 24 DB E4 E4 FB 22 2A 0C 1C 12 17 10 15 0E 1C
.byte $24, $10, $0A, $16, $0E, $22, $8A, $0C, $0D, $18, $1E, $0B, $15, $0E, $1C, $24 ; PRG $2FCF / CPU $EFCF ; CPU:$EFD3 PRG:2FD3 24 10 0A 16 0E 22 8A 0C 0D 18 1E 0B 15 0E 1C 24
.byte $10, $0A, $16, $0E, $23, $05, $16, $25, $01, $09, $08, $03, $24, $17, $12, $17 ; PRG $2FDF / CPU $EFDF ; CPU:$EFE3 PRG:2FE3 10 0A 16 0E 23 05 16 25 01 09 08 03 24 17 12 17
.byte $1D, $0E, $17, $0D, $18, $24, $0C, $18, $28, $15, $1D, $0D, $26, $23, $C0, $60 ; PRG $2FEF / CPU $EFEF ; CPU:$EFF3 PRG:2FF3 1D 0E 17 0D 18 24 0C 18 28 15 1D 0D 26 23 C0 60
.byte $00, $23, $E0, $50, $55, $23, $F0, $50, $AA, $00, $20, $C9, $0E, $30, $31, $32 ; PRG $2FFF / CPU $EFFF ; CPU:$F003 PRG:3003 00 23 E0 50 55 23 F0 50 AA 00 20 C9 0E 30 31 32
.byte $32, $32, $32, $33, $34, $32, $32, $32, $32, $35, $36, $20, $E9, $0E, $37, $38 ; PRG $300F / CPU $F00F ; CPU:$F013 PRG:3013 32 32 32 33 34 32 32 32 32 35 36 20 E9 0E 37 38
.byte $4D, $4D, $4D, $4D, $4D, $4D, $4D, $4D, $4D, $4D, $39, $3A, $21, $09, $0E, $3B ; PRG $301F / CPU $F01F ; CPU:$F023 PRG:3023 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 39 3A 21 09 0E 3B
.byte $3C, $4D, $4D, $4D, $4D, $4D, $4D, $4D, $4D, $4D, $4D, $3D, $3E, $21, $29, $0E ; PRG $302F / CPU $F02F ; CPU:$F033 PRG:3033 3C 4D 4D 4D 4D 4D 4D 4D 4D 4D 4D 3D 3E 21 29 0E
.byte $3F, $40, $32, $32, $32, $32, $41, $42, $32, $32, $32, $32, $43, $44, $21, $48 ; PRG $303F / CPU $F03F ; CPU:$F043 PRG:3043 3F 40 32 32 32 32 41 42 32 32 32 32 43 44 21 48
.byte $10, $45, $46, $47, $4D, $4D, $4D, $4D, $6D, $6E, $4D, $4D, $4D, $4D, $48, $49 ; PRG $304F / CPU $F04F ; CPU:$F053 PRG:3053 10 45 46 47 4D 4D 4D 4D 6D 6E 4D 4D 4D 4D 48 49
.byte $4A, $21, $68, $10, $9B, $90, $91, $4D, $4D, $4D, $4D, $6D, $6E, $4D, $4D, $4D ; PRG $305F / CPU $F05F ; CPU:$F063 PRG:3063 4A 21 68 10 9B 90 91 4D 4D 4D 4D 6D 6E 4D 4D 4D
.byte $4D, $92, $93, $9E, $21, $86, $14, $51, $52, $53, $54, $55, $56, $57, $55, $56 ; PRG $306F / CPU $F06F ; CPU:$F073 PRG:3073 4D 92 93 9E 21 86 14 51 52 53 54 55 56 57 55 56
.byte $58, $4B, $55, $56, $57, $55, $56, $59, $5A, $5B, $5C, $21, $A6, $14, $5D, $5E ; PRG $307F / CPU $F07F ; CPU:$F083 PRG:3083 58 4B 55 56 57 55 56 59 5A 5B 5C 21 A6 14 5D 5E
.byte $5F, $60, $61, $62, $63, $61, $62, $64, $4C, $61, $62, $63, $61, $62, $66, $67 ; PRG $308F / CPU $F08F ; CPU:$F093 PRG:3093 5F 60 61 62 63 61 62 64 4C 61 62 63 61 62 66 67
.byte $68, $69, $21, $C7, $12, $95, $96, $A0, $4D, $4D, $4D, $4D, $4D, $6D, $6E, $4D ; PRG $309F / CPU $F09F ; CPU:$F0A3 PRG:30A3 68 69 21 C7 12 95 96 A0 4D 4D 4D 4D 4D 6D 6E 4D
.byte $4D, $4D, $4D, $4D, $A1, $99, $9A, $21, $E7, $12, $9B, $4D, $8D, $4D, $4D, $4D ; PRG $30AF / CPU $F0AF ; CPU:$F0B3 PRG:30B3 4D 4D 4D 4D A1 99 9A 21 E7 12 9B 4D 8D 4D 4D 4D
.byte $4D, $4D, $6D, $6E, $4D, $4D, $4D, $4D, $4D, $8E, $4D, $9E, $22, $07, $12, $9F ; PRG $30BF / CPU $F0BF ; CPU:$F0C3 PRG:30C3 4D 4D 6D 6E 4D 4D 4D 4D 4D 8E 4D 9E 22 07 12 9F
.byte $90, $91, $4D, $4D, $4D, $4D, $4D, $6D, $6E, $4D, $4D, $4D, $4D, $4D, $92, $93 ; PRG $30CF / CPU $F0CF ; CPU:$F0D3 PRG:30D3 90 91 4D 4D 4D 4D 4D 6D 6E 4D 4D 4D 4D 4D 92 93
.byte $A2, $22, $27, $12, $8F, $97, $4D, $4D, $4D, $4D, $4D, $4D, $6D, $6E, $4D, $4D ; PRG $30DF / CPU $F0DF ; CPU:$F0E3 PRG:30E3 A2 22 27 12 8F 97 4D 4D 4D 4D 4D 4D 6D 6E 4D 4D
.byte $4D, $4D, $4D, $4D, $98, $94, $22, $46, $14, $95, $96, $9C, $4D, $4D, $4D, $4D ; PRG $30EF / CPU $F0EF ; CPU:$F0F3 PRG:30F3 4D 4D 4D 4D 98 94 22 46 14 95 96 9C 4D 4D 4D 4D
.byte $4D, $4D, $6D, $6E, $4D, $4D, $4D, $4D, $4D, $4D, $9D, $99, $9A, $22, $66, $14 ; PRG $30FF / CPU $F0FF ; CPU:$F103 PRG:3103 4D 4D 6D 6E 4D 4D 4D 4D 4D 4D 9D 99 9A 22 66 14
.byte $9B, $4D, $87, $A4, $A4, $A4, $A4, $A4, $A4, $89, $8A, $A4, $A4, $A4, $A4, $A4 ; PRG $310F / CPU $F10F ; CPU:$F113 PRG:3113 9B 4D 87 A4 A4 A4 A4 A4 A4 89 8A A4 A4 A4 A4 A4
.byte $A4, $8B, $4D, $9E, $22, $86, $03, $9F, $4D, $8D, $22, $97, $03, $8E, $4D, $A2 ; PRG $311F / CPU $F11F ; CPU:$F123 PRG:3123 A4 8B 4D 9E 22 86 03 9F 4D 8D 22 97 03 8E 4D A2
.byte $22, $A6, $03, $8F, $90, $91, $22, $B7, $03, $92, $93, $94, $22, $C5, $03, $95 ; PRG $312F / CPU $F12F ; CPU:$F133 PRG:3133 22 A6 03 8F 90 91 22 B7 03 92 93 94 22 C5 03 95
.byte $96, $97, $22, $D8, $03, $98, $99, $9A, $22, $E5, $03, $9B, $4D, $9C, $22, $F8 ; PRG $313F / CPU $F13F ; CPU:$F143 PRG:3143 96 97 22 D8 03 98 99 9A 22 E5 03 9B 4D 9C 22 F8
.byte $03, $9D, $4D, $9E, $23, $05, $03, $9F, $4D, $A0, $23, $18, $03, $A1, $4D, $A2 ; PRG $314F / CPU $F14F ; CPU:$F153 PRG:3153 03 9D 4D 9E 23 05 03 9F 4D A0 23 18 03 A1 4D A2
.byte $23, $25, $16, $A3, $A4, $A5, $A4, $A4, $A4, $A4, $A4, $A4, $A4, $A6, $A7, $A4 ; PRG $315F / CPU $F15F ; CPU:$F163 PRG:3163 23 25 16 A3 A4 A5 A4 A4 A4 A4 A4 A4 A4 A6 A7 A4
.byte $A4, $A4, $A4, $A4, $A4, $A4, $A8, $A4, $A9, $22, $89, $4E, $4D, $22, $A9, $4E ; PRG $316F / CPU $F16F ; CPU:$F173 PRG:3173 A4 A4 A4 A4 A4 A4 A8 A4 A9 22 89 4E 4D 22 A9 4E
.byte $4D, $22, $C8, $50, $4D, $22, $E8, $50, $4D, $23, $08, $50, $4D, $21, $3B, $86 ; PRG $317F / CPU $F17F ; CPU:$F183 PRG:3183 4D 22 C8 50 4D 22 E8 50 4D 23 08 50 4D 21 3B 86
.byte $7D, $AA, $AB, $AC, $AD, $13, $21, $3C, $85, $AF, $B0, $B1, $B2, $B3, $21, $BD ; PRG $318F / CPU $F18F ; CPU:$F193 PRG:3193 7D AA AB AC AD 13 21 3C 85 AF B0 B1 B2 B3 21 BD
.byte $82, $1A, $23, $20, $00, $20, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E ; PRG $319F / CPU $F19F ; CPU:$F1A3 PRG:31A3 82 1A 23 20 00 20 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E
.byte $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E ; PRG $31AF / CPU $F1AF ; CPU:$F1B3 PRG:31B3 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E
.byte $2F, $2E, $2F, $2E, $2F, $2E, $20, $20, $20, $2E, $2F, $2E, $2F, $2E, $2F, $2E ; PRG $31BF / CPU $F1BF ; CPU:$F1C3 PRG:31C3 2F 2E 2F 2E 2F 2E 20 20 20 2E 2F 2E 2F 2E 2F 2E
.byte $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E ; PRG $31CF / CPU $F1CF ; CPU:$F1D3 PRG:31D3 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E 2F 2E
.byte $2F, $2E, $2F, $2E, $2F, $2E, $2F, $2E, $2F, $20, $40, $07, $2F, $2E, $2F, $2E ; PRG $31DF / CPU $F1DF ; CPU:$F1E3 PRG:31E3 2F 2E 2F 2E 2F 2E 2F 2E 2F 20 40 07 2F 2E 2F 2E
.byte $2D, $78, $4F, $20, $47, $53, $4D, $20, $59, $14, $50, $79, $4E, $2F, $2E, $2F ; PRG $31EF / CPU $F1EF ; CPU:$F1F3 PRG:31F3 2D 78 4F 20 47 53 4D 20 59 14 50 79 4E 2F 2E 2F
.byte $2E, $2E, $2F, $2D, $78, $4D, $4D, $4F, $70, $71, $72, $73, $74, $75, $20, $6D ; PRG $31FF / CPU $F1FF ; CPU:$F203 PRG:3203 2E 2E 2F 2D 78 4D 4D 4F 70 71 72 73 74 75 20 6D
.byte $4C, $4D, $20, $79, $0D, $50, $4D, $4D, $79, $4E, $2E, $2F, $2D, $78, $4D, $4D ; PRG $320F / CPU $F20F ; CPU:$F213 PRG:3213 4C 4D 20 79 0D 50 4D 4D 79 4E 2E 2F 2D 78 4D 4D
.byte $4D, $7B, $20, $9A, $0B, $7C, $4D, $4D, $4D, $79, $4E, $4D, $4D, $4D, $4D, $7B ; PRG $321F / CPU $F21F ; CPU:$F223 PRG:3223 4D 7B 20 9A 0B 7C 4D 4D 4D 79 4E 4D 4D 4D 4D 7B
.byte $20, $BB, $09, $7C, $4D, $4D, $4D, $4D, $4D, $4D, $4D, $7B, $20, $DC, $07, $7C ; PRG $322F / CPU $F22F ; CPU:$F233 PRG:3233 20 BB 09 7C 4D 4D 4D 4D 4D 4D 4D 7B 20 DC 07 7C
.byte $4D, $4D, $4D, $4D, $4D, $7B, $20, $FD, $05, $7C, $4D, $4D, $4D, $7B, $21, $1E ; PRG $323F / CPU $F23F ; CPU:$F243 PRG:3243 4D 4D 4D 4D 4D 7B 20 FD 05 7C 4D 4D 4D 7B 21 1E
.byte $03, $7C, $4D, $7B, $21, $3F, $01, $7C, $20, $C3, $85, $65, $6C, $6C, $6C, $86 ; PRG $324F / CPU $F24F ; CPU:$F253 PRG:3253 03 7C 4D 7B 21 3F 01 7C 20 C3 85 65 6C 6C 6C 86
.byte $20, $C8, $85, $6B, $6F, $6F, $6F, $8C, $20, $C4, $44, $6A, $21, $44, $44, $88 ; PRG $325F / CPU $F25F ; CPU:$F263 PRG:3263 20 C8 85 6B 6F 6F 6F 8C 20 C4 44 6A 21 44 44 88
.byte $23, $C0, $48, $AA, $23, $C8, $02, $EA, $02, $23, $CE, $03, $0C, $BB, $02, $23 ; PRG $326F / CPU $F26F ; CPU:$F273 PRG:3273 23 C0 48 AA 23 C8 02 EA 02 23 CE 03 0C BB 02 23
.byte $D6, $02, $44, $19, $00, $F4, $FE, $00, $40, $A0, $FD, $00, $98, $0A, $F3, $18 ; PRG $327F / CPU $F27F ; CPU:$F283 PRG:3283 D6 02 44 19 00 F4 FE 00 40 A0 FD 00 98 0A F3 18
.byte $F3, $26, $F3, $34, $F3, $42, $F3, $50, $F3, $5E, $F3, $6C, $F3, $7A, $F3, $88 ; PRG $328F / CPU $F28F ; CPU:$F293 PRG:3293 F3 26 F3 34 F3 42 F3 50 F3 5E F3 6C F3 7A F3 88
.byte $F3, $96, $F3, $A4, $F3, $B2, $F3, $C0, $F3, $CE, $F3, $DC, $F3, $EA, $F3, $F8 ; PRG $329F / CPU $F29F ; CPU:$F2A3 PRG:32A3 F3 96 F3 A4 F3 B2 F3 C0 F3 CE F3 DC F3 EA F3 F8
.byte $F3, $06, $F4, $14, $F4, $22, $F4, $30, $F4, $3E, $F4, $4C, $F4, $5A, $F4, $68 ; PRG $32AF / CPU $F2AF ; CPU:$F2B3 PRG:32B3 F3 06 F4 14 F4 22 F4 30 F4 3E F4 4C F4 5A F4 68
.byte $F4, $76, $F4, $81, $F4, $8C, $F4, $97, $F4, $A2, $F4, $AD, $F4, $B8, $F4, $C3 ; PRG $32BF / CPU $F2BF ; CPU:$F2C3 PRG:32C3 F4 76 F4 81 F4 8C F4 97 F4 A2 F4 AD F4 B8 F4 C3
.byte $F4, $CE, $F4, $D9, $F4, $E4, $F4, $F2, $F4, $FD, $F4, $08, $F5, $13, $F5, $1E ; PRG $32CF / CPU $F2CF ; CPU:$F2D3 PRG:32D3 F4 CE F4 D9 F4 E4 F4 F2 F4 FD F4 08 F5 13 F5 1E
.byte $F5, $29, $F5, $34, $F5, $3F, $F5, $4A, $F5, $55, $F5, $60, $F5, $65, $F5, $6A ; PRG $32DF / CPU $F2DF ; CPU:$F2E3 PRG:32E3 F5 29 F5 34 F5 3F F5 4A F5 55 F5 60 F5 65 F5 6A
.byte $F5, $6F, $F5, $74, $F5, $79, $F5, $7E, $F5, $83, $F5, $88, $F5, $8D, $F5, $98 ; PRG $32EF / CPU $F2EF ; CPU:$F2F3 PRG:32F3 F5 6F F5 74 F5 79 F5 7E F5 83 F5 88 F5 8D F5 98
.byte $F5, $A3, $F5, $B1, $F5, $BF, $F5, $CA, $F5, $D5, $F5, $DA, $F5, $00, $00, $01 ; PRG $32FF / CPU $F2FF ; CPU:$F303 PRG:3303 F5 A3 F5 B1 F5 BF F5 CA F5 D5 F5 DA F5 00 00 01
.byte $00, $03, $04, $02, $05, $06, $07, $08, $FF, $EF, $F5, $00, $00, $09, $0A, $0B ; PRG $330F / CPU $F30F ; CPU:$F313 PRG:3313 00 03 04 02 05 06 07 08 FF EF F5 00 00 09 0A 0B
.byte $0C, $0D, $06, $0E, $0F, $10, $FF, $04, $F6, $00, $00, $FF, $01, $FF, $11, $12 ; PRG $331F / CPU $F31F ; CPU:$F323 PRG:3323 0C 0D 06 0E 0F 10 FF 04 F6 00 00 FF 01 FF 11 12
.byte $13, $14, $15, $16, $17, $04, $F6, $00, $00, $FF, $18, $19, $1A, $1B, $1C, $1D ; PRG $332F / CPU $F32F ; CPU:$F333 PRG:3333 13 14 15 16 17 04 F6 00 00 FF 18 19 1A 1B 1C 1D
.byte $FF, $1E, $17, $58, $F6, $00, $00, $1F, $20, $FF, $21, $22, $FF, $23, $24, $1E ; PRG $333F / CPU $F33F ; CPU:$F343 PRG:3343 FF 1E 17 58 F6 00 00 1F 20 FF 21 22 FF 23 24 1E
.byte $17, $AC, $F6, $83, $00, $01, $FF, $25, $26, $28, $29, $08, $07, $27, $FF, $EF ; PRG $334F / CPU $F34F ; CPU:$F353 PRG:3353 17 AC F6 83 00 01 FF 25 26 28 29 08 07 27 FF EF
.byte $F5, $81, $80, $09, $2A, $2B, $FF, $2C, $2D, $FF, $10, $0F, $2E, $19, $F6, $41 ; PRG $335F / CPU $F35F ; CPU:$F363 PRG:3363 F5 81 80 09 2A 2B FF 2C 2D FF 10 0F 2E 19 F6 41
.byte $80, $FF, $01, $FF, $2F, $31, $32, $30, $17, $16, $FF, $19, $F6, $4D, $80, $33 ; PRG $336F / CPU $F36F ; CPU:$F373 PRG:3373 80 FF 01 FF 2F 31 32 30 17 16 FF 19 F6 4D 80 33
.byte $18, $34, $35, $1D, $1C, $FF, $17, $1E, $FF, $58, $F6, $93, $C0, $20, $36, $FF ; PRG $337F / CPU $F37F ; CPU:$F383 PRG:3383 18 34 35 1D 1C FF 17 1E FF 58 F6 93 C0 20 36 FF
.byte $22, $37, $FF, $24, $23, $17, $1E, $58, $F6, $00, $00, $38, $39, $FF, $3A, $3B ; PRG $338F / CPU $F38F ; CPU:$F393 PRG:3393 22 37 FF 24 23 17 1E 58 F6 00 00 38 39 FF 3A 3B
.byte $FF, $3C, $3D, $3E, $3F, $04, $F6, $00, $00, $FF, $40, $FF, $41, $42, $43, $44 ; PRG $339F / CPU $F39F ; CPU:$F3A3 PRG:33A3 FF 3C 3D 3E 3F 04 F6 00 00 FF 40 FF 41 42 43 44
.byte $FF, $45, $46, $51, $F7, $20, $00, $FF, $8D, $8A, $8E, $21, $8F, $23, $24, $1E ; PRG $33AF / CPU $F3AF ; CPU:$F3B3 PRG:33B3 FF 45 46 51 F7 20 00 FF 8D 8A 8E 21 8F 23 24 1E
.byte $17, $DA, $F5, $00, $00, $01, $00, $03, $04, $02, $4A, $4B, $47, $48, $FF, $DA ; PRG $33BF / CPU $F3BF ; CPU:$F3C3 PRG:33C3 17 DA F5 00 00 01 00 03 04 02 4A 4B 47 48 FF DA
.byte $F5, $00, $00, $01, $00, $03, $04, $02, $4C, $4D, $49, $8C, $FF, $AC, $F6, $83 ; PRG $33CF / CPU $F3CF ; CPU:$F3D3 PRG:33D3 F5 00 00 01 00 03 04 02 4C 4D 49 8C FF AC F6 83
.byte $00, $01, $FF, $25, $26, $4E, $4F, $48, $47, $27, $FF, $AC, $F6, $83, $00, $01 ; PRG $33DF / CPU $F3DF ; CPU:$F3E3 PRG:33E3 00 01 FF 25 26 4E 4F 48 47 27 FF AC F6 83 00 01
.byte $FF, $25, $26, $50, $51, $8C, $49, $27, $FF, $2E, $F6, $00, $00, $52, $53, $54 ; PRG $33EF / CPU $F3EF ; CPU:$F3F3 PRG:33F3 FF 25 26 50 51 8C 49 27 FF 2E F6 00 00 52 53 54
.byte $55, $56, $57, $58, $59, $FF, $FF, $58, $F6, $00, $00, $5A, $5B, $5C, $5D, $5E ; PRG $33FF / CPU $F3FF ; CPU:$F403 PRG:3403 55 56 57 58 59 FF FF 58 F6 00 00 5A 5B 5C 5D 5E
.byte $5F, $60, $61, $62, $63, $43, $F6, $00, $00, $64, $65, $66, $67, $68, $69, $6A ; PRG $340F / CPU $F40F ; CPU:$F413 PRG:3413 5F 60 61 62 63 43 F6 00 00 64 65 66 67 68 69 6A
.byte $FF, $FF, $FF, $97, $F6, $00, $00, $6B, $6C, $6D, $6E, $6F, $70, $71, $72, $73 ; PRG $341F / CPU $F41F ; CPU:$F423 PRG:3423 FF FF FF 97 F6 00 00 6B 6C 6D 6E 6F 70 71 72 73
.byte $FF, $6D, $F6, $00, $00, $74, $75, $76, $77, $78, $79, $FF, $FF, $FF, $FF, $82 ; PRG $342F / CPU $F42F ; CPU:$F433 PRG:3433 FF 6D F6 00 00 74 75 76 77 78 79 FF FF FF FF 82
.byte $F6, $00, $00, $7A, $7B, $7C, $7D, $7E, $7F, $FF, $FF, $FF, $FF, $04, $F6, $80 ; PRG $343F / CPU $F43F ; CPU:$F443 PRG:3443 F6 00 00 7A 7B 7C 7D 7E 7F FF FF FF FF 04 F6 80
.byte $C0, $01, $FF, $FF, $80, $81, $82, $83, $FF, $10, $0F, $AC, $F6, $83, $00, $01 ; PRG $344F / CPU $F44F ; CPU:$F453 PRG:3453 C0 01 FF FF 80 81 82 83 FF 10 0F AC F6 83 00 01
.byte $84, $85, $86, $87, $88, $17, $16, $FF, $FF, $C1, $F6, $8F, $00, $19, $89, $8A ; PRG $345F / CPU $F45F ; CPU:$F463 PRG:3463 84 85 86 87 88 17 16 FF FF C1 F6 8F 00 19 89 8A
.byte $8B, $1D, $1C, $17, $1E, $FF, $FF, $D6, $F6, $00, $00, $90, $91, $92, $93, $94 ; PRG $346F / CPU $F46F ; CPU:$F473 PRG:3473 8B 1D 1C 17 1E FF FF D6 F6 00 00 90 91 92 93 94
.byte $95, $96, $E5, $F6, $00, $00, $97, $98, $99, $9A, $9B, $9C, $FF, $F4, $F6, $00 ; PRG $347F / CPU $F47F ; CPU:$F483 PRG:3483 95 96 E5 F6 00 00 97 98 99 9A 9B 9C FF F4 F6 00
.byte $00, $9D, $FF, $FF, $9F, $A0, $9E, $A1, $F4, $F6, $00, $00, $FF, $A2, $A3, $FF ; PRG $348F / CPU $F48F ; CPU:$F493 PRG:3493 00 9D FF FF 9F A0 9E A1 F4 F6 00 00 FF A2 A3 FF
.byte $A4, $FF, $A5, $D6, $F6, $06, $00, $FF, $A6, $A7, $A8, $A9, $96, $95, $D6, $F6 ; PRG $349F / CPU $F49F ; CPU:$F4A3 PRG:34A3 A4 FF A5 D6 F6 06 00 FF A6 A7 A8 A9 96 95 D6 F6
.byte $06, $00, $FF, $AA, $AB, $AC, $AD, $9C, $9B, $03, $F7, $02, $00, $FF, $AE, $FF ; PRG $34AF / CPU $F4AF ; CPU:$F4B3 PRG:34B3 06 00 FF AA AB AC AD 9C 9B 03 F7 02 00 FF AE FF
.byte $FF, $AF, $B0, $A1, $03, $F7, $02, $00, $B1, $B3, $FF, $B2, $B4, $FF, $A5, $E5 ; PRG $34BF / CPU $F4BF ; CPU:$F4C3 PRG:34C3 FF AF B0 A1 03 F7 02 00 B1 B3 FF B2 B4 FF A5 E5
.byte $F6, $00, $00, $B5, $FF, $B6, $B7, $B8, $B9, $FF, $E5, $F6, $00, $00, $FF, $FF ; PRG $34CF / CPU $F4CF ; CPU:$F4D3 PRG:34D3 F6 00 00 B5 FF B6 B7 B8 B9 FF E5 F6 00 00 FF FF
.byte $BA, $BB, $BC, $BD, $B5, $51, $F7, $03, $C0, $F9, $FF, $FA, $8A, $FB, $FC, $24 ; PRG $34DF / CPU $F4DF ; CPU:$F4E3 PRG:34E3 BA BB BC BD B5 51 F7 03 C0 F9 FF FA 8A FB FC 24
.byte $23, $17, $1E, $D6, $F6, $00, $00, $90, $91, $92, $C2, $C3, $BE, $BF, $D6, $F6 ; PRG $34EF / CPU $F4EF ; CPU:$F4F3 PRG:34F3 23 17 1E D6 F6 00 00 90 91 92 C2 C3 BE BF D6 F6
.byte $00, $00, $90, $91, $92, $C2, $C4, $C0, $C1, $D6, $F6, $06, $00, $FF, $A6, $A7 ; PRG $34FF / CPU $F4FF ; CPU:$F503 PRG:3503 00 00 90 91 92 C2 C4 C0 C1 D6 F6 06 00 FF A6 A7
.byte $C5, $C6, $BF, $BE, $D6, $F6, $06, $00, $FF, $A6, $A7, $C7, $A9, $C1, $C0, $E5 ; PRG $350F / CPU $F50F ; CPU:$F513 PRG:3513 C5 C6 BF BE D6 F6 06 00 FF A6 A7 C7 A9 C1 C0 E5
.byte $F6, $00, $00, $C8, $FF, $C9, $CA, $CB, $CC, $FF, $12, $F7, $00, $00, $FF, $FF ; PRG $351F / CPU $F51F ; CPU:$F523 PRG:3523 F6 00 00 C8 FF C9 CA CB CC FF 12 F7 00 00 FF FF
.byte $CD, $CE, $CF, $D0, $D1, $12, $F7, $00, $00, $D2, $D3, $D4, $D5, $D6, $FF, $D7 ; PRG $352F / CPU $F52F ; CPU:$F533 PRG:3533 CD CE CF D0 D1 12 F7 00 00 D2 D3 D4 D5 D6 FF D7
.byte $21, $F7, $00, $00, $D8, $D9, $DA, $DB, $DC, $DD, $DE, $30, $F7, $00, $00, $DF ; PRG $353F / CPU $F53F ; CPU:$F543 PRG:3543 21 F7 00 00 D8 D9 DA DB DC DD DE 30 F7 00 00 DF
.byte $E0, $E1, $E2, $E3, $FF, $FF, $03, $F7, $00, $00, $FF, $A2, $A3, $FF, $A4, $FF ; PRG $354F / CPU $F54F ; CPU:$F553 PRG:3553 E0 E1 E2 E3 FF FF 03 F7 00 00 FF A2 A3 FF A4 FF
.byte $E4, $3F, $F7, $00, $00, $F0, $3F, $F7, $00, $00, $F1, $3F, $F7, $00, $00, $F2 ; PRG $355F / CPU $F55F ; CPU:$F563 PRG:3563 E4 3F F7 00 00 F0 3F F7 00 00 F1 3F F7 00 00 F2
.byte $3F, $F7, $00, $00, $F3, $3F, $F7, $00, $00, $F4, $3F, $F7, $00, $00, $F5, $3F ; PRG $356F / CPU $F56F ; CPU:$F573 PRG:3573 3F F7 00 00 F3 3F F7 00 00 F4 3F F7 00 00 F5 3F
.byte $F7, $00, $00, $F6, $3F, $F7, $00, $00, $F7, $3F, $F7, $00, $00, $F8, $D6, $F6 ; PRG $357F / CPU $F57F ; CPU:$F583 PRG:3583 F7 00 00 F6 3F F7 00 00 F7 3F F7 00 00 F8 D6 F6
.byte $04, $00, $FF, $AA, $E5, $E6, $E7, $9C, $E8, $42, $F7, $04, $00, $E9, $EA, $EB ; PRG $358F / CPU $F58F ; CPU:$F593 PRG:3593 04 00 FF AA E5 E6 E7 9C E8 42 F7 04 00 E9 EA EB
.byte $EC, $ED, $A5, $FF, $58, $F6, $FF, $C0, $39, $38, $FF, $3B, $3A, $FF, $3D, $3C ; PRG $359F / CPU $F59F ; CPU:$F5A3 PRG:35A3 EC ED A5 FF 58 F6 FF C0 39 38 FF 3B 3A FF 3D 3C
.byte $3F, $3E, $66, $F7, $FF, $C0, $40, $42, $41, $44, $43, $46, $45, $FF, $FF, $FF ; PRG $35AF / CPU $F5AF ; CPU:$F5B3 PRG:35B3 3F 3E 66 F7 FF C0 40 42 41 44 43 46 45 FF FF FF
.byte $E5, $F6, $FE, $00, $B5, $FF, $B7, $B6, $B9, $B8, $FF, $7B, $F7, $FE, $00, $B5 ; PRG $35BF / CPU $F5BF ; CPU:$F5C3 PRG:35C3 E5 F6 FE 00 B5 FF B7 B6 B9 B8 FF 7B F7 FE 00 B5
.byte $BB, $BA, $BD, $BC, $FF, $FF, $3F, $F7, $00, $00, $FF, $E3, $FD, $E7, $F0, $EB ; PRG $35CF / CPU $F5CF ; CPU:$F5D3 PRG:35D3 BB BA BD BC FF FF 3F F7 00 00 FF E3 FD E7 F0 EB
.byte $F8, $EB, $00, $EF, $F0, $F3, $F8, $F3, $00, $FB, $F8, $FB, $00, $04, $00, $AA ; PRG $35DF / CPU $F5DF ; CPU:$F5E3 PRG:35E3 F8 EB 00 EF F0 F3 F8 F3 00 FB F8 FB 00 04 00 AA
.byte $E3, $FC, $EB, $F8, $EB, $00, $F3, $F0, $F3, $F8, $F3, $00, $FB, $F0, $FB, $F8 ; PRG $35EF / CPU $F5EF ; CPU:$F5F3 PRG:35F3 E3 FC EB F8 EB 00 F3 F0 F3 F8 F3 00 FB F0 FB F8
.byte $FB, $00, $F7, $08, $AA, $E3, $FB, $E3, $FD, $E6, $0A, $EB, $FA, $EB, $02, $F3 ; PRG $35FF / CPU $F5FF ; CPU:$F603 PRG:3603 FB 00 F7 08 AA E3 FB E3 FD E6 0A EB FA EB 02 F3
.byte $F8, $F3, $00, $F7, $08, $FB, $F8, $FB, $00, $AA, $E3, $F0, $E3, $FB, $EB, $F4 ; PRG $360F / CPU $F60F ; CPU:$F613 PRG:3613 F8 F3 00 F7 08 FB F8 FB 00 AA E3 F0 E3 FB EB F4
.byte $EB, $FC, $F3, $F8, $F3, $00, $F5, $F0, $FB, $F8, $FB, $00, $04, $00, $AA, $E3 ; PRG $361F / CPU $F61F ; CPU:$F623 PRG:3623 EB FC F3 F8 F3 00 F5 F0 FB F8 FB 00 04 00 AA E3
.byte $FC, $EB, $F8, $EB, $00, $EB, $08, $F3, $F6, $F3, $FE, $FB, $F6, $FB, $FE, $04 ; PRG $362F / CPU $F62F ; CPU:$F633 PRG:3633 FC EB F8 EB 00 EB 08 F3 F6 F3 FE FB F6 FB FE 04
.byte $F8, $04, $00, $AA, $E3, $F0, $E3, $F8, $E3, $00, $EB, $FF, $F3, $FC, $FB, $F8 ; PRG $363F / CPU $F63F ; CPU:$F643 PRG:3643 F8 04 00 AA E3 F0 E3 F8 E3 00 EB FF F3 FC FB F8
.byte $FB, $00, $04, $F8, $04, $00, $0C, $00, $AA, $E3, $F8, $E3, $00, $EB, $F0, $EB ; PRG $364F / CPU $F64F ; CPU:$F653 PRG:3653 FB 00 04 F8 04 00 0C 00 AA E3 F8 E3 00 EB F0 EB
.byte $F8, $EB, $00, $F3, $F0, $F3, $F8, $F3, $00, $FB, $F8, $FB, $00, $AA, $E3, $00 ; PRG $365F / CPU $F65F ; CPU:$F663 PRG:3663 F8 EB 00 F3 F0 F3 F8 F3 00 FB F8 FB 00 AA E3 00
.byte $EB, $08, $EB, $FE, $EB, $06, $F3, $FE, $FB, $FE, $04, $F8, $04, $00, $0C, $F8 ; PRG $366F / CPU $F66F ; CPU:$F673 PRG:3673 EB 08 EB FE EB 06 F3 FE FB FE 04 F8 04 00 0C F8
.byte $0C, $00, $AA, $E3, $04, $EB, $FC, $EB, $04, $F3, $F8, $F3, $00, $FB, $00, $04 ; PRG $367F / CPU $F67F ; CPU:$F683 PRG:3683 0C 00 AA E3 04 EB FC EB 04 F3 F8 F3 00 FB 00 04
.byte $F8, $04, $00, $0C, $F8, $0C, $00, $AA, $D3, $08, $DB, $08, $E3, $00, $E3, $08 ; PRG $368F / CPU $F68F ; CPU:$F693 PRG:3693 F8 04 00 0C F8 0C 00 AA D3 08 DB 08 E3 00 E3 08
.byte $EB, $F8, $EB, $00, $F3, $F8, $F3, $00, $FB, $00, $FB, $08, $AA, $E3, $FB, $EB ; PRG $369F / CPU $F69F ; CPU:$F6A3 PRG:36A3 EB F8 EB 00 F3 F8 F3 00 FB 00 FB 08 AA E3 FB EB
.byte $F0, $EB, $F8, $EB, $00, $F3, $F8, $F3, $00, $FB, $F8, $FB, $00, $EB, $08, $04 ; PRG $36AF / CPU $F6AF ; CPU:$F6B3 PRG:36B3 F0 EB F8 EB 00 F3 F8 F3 00 FB F8 FB 00 EB 08 04
.byte $00, $AA, $DC, $F0, $E3, $F8, $E3, $00, $EB, $FC, $F3, $F8, $F3, $00, $FB, $F8 ; PRG $36BF / CPU $F6BF ; CPU:$F6C3 PRG:36C3 00 AA DC F0 E3 F8 E3 00 EB FC F3 F8 F3 00 FB F8
.byte $FB, $00, $04, $F8, $04, $00, $AA, $E3, $F8, $EB, $F8, $EB, $00, $F3, $F8, $F3 ; PRG $36CF / CPU $F6CF ; CPU:$F6D3 PRG:36D3 FB 00 04 F8 04 00 AA E3 F8 EB F8 EB 00 F3 F8 F3
.byte $00, $FB, $F8, $FB, $00, $AA, $EB, $FC, $EF, $F4, $F3, $F8, $F3, $00, $FB, $F8 ; PRG $36DF / CPU $F6DF ; CPU:$F6E3 PRG:36E3 00 FB F8 FB 00 AA EB FC EF F4 F3 F8 F3 00 FB F8
.byte $FB, $00, $EB, $FB, $AA, $EB, $FE, $EB, $00, $EB, $08, $F3, $F8, $F3, $00, $F7 ; PRG $36EF / CPU $F6EF ; CPU:$F6F3 PRG:36F3 FB 00 EB FB AA EB FE EB 00 EB 08 F3 F8 F3 00 F7
.byte $F4, $FB, $FE, $AA, $E7, $F2, $EB, $FA, $EB, $02, $EF, $F2, $F3, $FA, $F7, $02 ; PRG $36FF / CPU $F6FF ; CPU:$F703 PRG:3703 F4 FB FE AA E7 F2 EB FA EB 02 EF F2 F3 FA F7 02
.byte $FB, $FA, $AA, $E3, $00, $E3, $08, $EB, $F8, $EB, $00, $F3, $FC, $F3, $04, $FB ; PRG $370F / CPU $F70F ; CPU:$F713 PRG:3713 FB FA AA E3 00 E3 08 EB F8 EB 00 F3 FC F3 04 FB
.byte $FC, $AA, $DB, $FC, $E3, $FC, $EB, $F8, $EB, $00, $F3, $F8, $F3, $00, $FB, $FB ; PRG $371F / CPU $F71F ; CPU:$F723 PRG:3723 FC AA DB FC E3 FC EB F8 EB 00 F3 F8 F3 00 FB FB
.byte $AA, $EB, $FF, $F3, $F8, $F3, $00, $FB, $FB, $FB, $03, $04, $F8, $04, $00, $AA ; PRG $372F / CPU $F72F ; CPU:$F733 PRG:3733 AA EB FF F3 F8 F3 00 FB FB FB 03 04 F8 04 00 AA
.byte $FC, $FC, $AA, $E3, $F0, $EB, $F0, $EB, $F8, $F3, $F8, $F3, $00, $FB, $FA, $FB ; PRG $373F / CPU $F73F ; CPU:$F743 PRG:3743 FC FC AA E3 F0 EB F0 EB F8 F3 F8 F3 00 FB FA FB
.byte $02, $AA, $DB, $F8, $DB, $00, $E3, $F8, $E3, $00, $EB, $F8, $EB, $00, $F3, $F8 ; PRG $374F / CPU $F74F ; CPU:$F753 PRG:3753 02 AA DB F8 DB 00 E3 F8 E3 00 EB F8 EB 00 F3 F8
.byte $F3, $00, $FB, $F8, $FB, $00, $AA, $E3, $FB, $EB, $F6, $EB, $FE, $F3, $F8, $F3 ; PRG $375F / CPU $F75F ; CPU:$F763 PRG:3763 F3 00 FB F8 FB 00 AA E3 FB EB F6 EB FE F3 F8 F3
.byte $00, $FB, $F8, $FB, $00, $04, $F8, $04, $00, $0C, $F8, $AA, $EB, $FD, $F3, $F8 ; PRG $376F / CPU $F76F ; CPU:$F773 PRG:3773 00 FB F8 FB 00 04 F8 04 00 0C F8 AA EB FD F3 F8
.byte $F3, $00, $FB, $F8, $FB, $00, $04, $F8, $04, $00, $AA, $FF, $00, $FF, $00, $FF ; PRG $377F / CPU $F77F ; CPU:$F783 PRG:3783 F3 00 FB F8 FB 00 04 F8 04 00 AA FF 00 FF 00 FF
.byte $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; PRG $378F / CPU $F78F ; CPU:$F793 PRG:3793 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF
.byte $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; PRG $379F / CPU $F79F ; CPU:$F7A3 PRG:37A3 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF
.byte $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; PRG $37AF / CPU $F7AF ; CPU:$F7B3 PRG:37B3 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF
.byte $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; PRG $37BF / CPU $F7BF ; CPU:$F7C3 PRG:37C3 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF
.byte $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; PRG $37CF / CPU $F7CF ; CPU:$F7D3 PRG:37D3 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF
.byte $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; PRG $37DF / CPU $F7DF ; CPU:$F7E3 PRG:37E3 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF
.byte $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF ; PRG $37EF / CPU $F7EF ; CPU:$F7F3 PRG:37F3 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF
.byte $00, $08, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00 ; PRG $37FF / CPU $F7FF ; CPU:$F803 PRG:3803 00 08 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
.byte $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00 ; PRG $380F / CPU $F80F ; CPU:$F813 PRG:3813 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
.byte $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00 ; PRG $381F / CPU $F81F ; CPU:$F823 PRG:3823 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
.byte $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00 ; PRG $382F / CPU $F82F ; CPU:$F833 PRG:3833 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
.byte $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00 ; PRG $383F / CPU $F83F ; CPU:$F843 PRG:3843 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
.byte $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00 ; PRG $384F / CPU $F84F ; CPU:$F853 PRG:3853 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
.byte $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00 ; PRG $385F / CPU $F85F ; CPU:$F863 PRG:3863 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
.byte $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00, $FF, $00 ; PRG $386F / CPU $F86F ; CPU:$F873 PRG:3873 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; PRG $387F / CPU $F87F ; CPU:$F883 PRG:3883 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; PRG $388F / CPU $F88F ; CPU:$F893 PRG:3893 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; PRG $389F / CPU $F89F ; CPU:$F8A3 PRG:38A3 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; PRG $38AF / CPU $F8AF ; CPU:$F8B3 PRG:38B3 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; PRG $38BF / CPU $F8BF ; CPU:$F8C3 PRG:38C3 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.byte $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; PRG $38CF / CPU $F8CF ; CPU:$F8D3 PRG:38D3 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.byte $FF ; PRG $38DF / CPU $F8DF ; CPU:$F8E3 PRG:38E3 FF
AudioEngineUpdate:
lda #$C0 ; CPU:$F8E4 PRG:38E4 ??
sta JOY2 ; CPU:$F8E6 PRG:38E6 ??
lda DmcOutputLevel ; CPU:$F8E8 PRG:38E8 69 FE
clc ; CPU:$F8EA PRG:38EA B0 02
adc #$FE ; CPU:$F8EC PRG:38EC A9 00
bcs Flow_F8EE ; CPU:$F8EE PRG:38EE 85 F0
lda #$00 ; CPU:$F8F0 PRG:38F0 8D 11 40
Flow_F8EE:
sta DmcOutputLevel ; CPU:$F8F3 PRG:38F3 20 39 FA
sta APUDMCDIRECT ; CPU:$F8F6 PRG:38F6 A9 00
jsr AudioRoutine_FA39 ; CPU:$F8F8 PRG:38F8 85 FF
lda #$00 ; CPU:$F8FA PRG:38FA 85 FE
sta AudioRequestFlags3 ; CPU:$F8FC PRG:38FC 85 FD
sta AudioRequestFlags2 ; CPU:$F8FE PRG:38FE 60
sta AudioRequestFlags1 ; CPU:$F8FF PRG:38FF ??
rts ; CPU:$F901 PRG:3901 ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $38FF-$395F.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
ApuPeriodAndDurationTables:
.byte $FF, $07, $F0, $00, $69, $00, $00, $00, $D4, $00, $BD, $00, $B2, $00, $A8, $00 ; PRG $38FF / CPU $F8FF ; CPU:$F903 PRG:3903 FF 07 F0 00 69 00 00 00 D4 00 BD 00 B2 00 A8 00
.byte $9F, $00, $96, $00, $8D, $00, $7E, $00, $70, $01, $AB, $01, $93, $01, $7C, $01 ; PRG $390F / CPU $F90F ; CPU:$F913 PRG:3913 9F 00 96 00 8D 00 7E 00 70 01 AB 01 93 01 7C 01
.byte $67, $01, $52, $01, $3F, $01, $2D, $01, $1C, $01, $0C, $00, $FD, $00, $EE, $00 ; PRG $391F / CPU $F91F ; CPU:$F923 PRG:3923 67 01 52 01 3F 01 2D 01 1C 01 0C 00 FD 00 EE 00
.byte $E1, $03, $57, $02, $F9, $02, $A6, $02, $80, $02, $3A, $01, $FC, $01, $C4, $00 ; PRG $392F / CPU $F92F ; CPU:$F933 PRG:3933 E1 03 57 02 F9 02 A6 02 80 02 3A 01 FC 01 C4 00
.byte $5E, $00, $53, $00, $4F, $00, $4A, $00, $20, $05, $0B, $16, $2C, $58, $21, $06 ; PRG $393F / CPU $F93F ; CPU:$F943 PRG:3943 5E 00 53 00 4F 00 4A 00 20 05 0B 16 2C 58 21 06
.byte $11, $05, $0A, $14, $28, $0D, $21, $06, $07, $06, $0C, $18, $30, $10, $24, $48 ; PRG $394F / CPU $F94F ; CPU:$F953 PRG:3953 11 05 0A 14 28 0D 21 06 07 06 0C 18 30 10 24 48
.byte $08 ; PRG $395F / CPU $F95F ; CPU:$F963 PRG:3963 08
; =============================================================================
; AudioRoutine_F960
; CPU address: $F960 PRG offset: $3960
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F960:
tax ; CPU:$F964 PRG:3964 2A
ror a ; CPU:$F965 PRG:3965 2A
txa ; CPU:$F966 PRG:3966 29 07
rol a ; CPU:$F968 PRG:3968 18
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3964-$3965.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_F964:
.byte $2A, $2A ; PRG $3964 / CPU $F964 ; CPU:$F969 PRG:3969 2A 2A
; =============================================================================
; AudioRoutine_F966
; CPU address: $F966 PRG offset: $3966
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F966:
and #$07 ; CPU:$F96B PRG:396B A8
clc ; CPU:$F96C PRG:396C B9 48 F9
adc PitchAdjustment ; CPU:$F96F PRG:396F 60
tay ; CPU:$F970 PRG:3970 A2 90
lda $F948,y ; CPU:$F972 PRG:3972 D0 09
rts ; PRG $396F / CPU $F96F ; CPU:$F974 PRG:3974 A2 90
; =============================================================================
; AudioRoutine_F970
; CPU address: $F970 PRG offset: $3970
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F970:
ldx #$90 ; CPU:$F976 PRG:3976 D0 0E
bne Flow_F97D ; CPU:$F978 PRG:3978 A0 7F
ldx #$90 ; CPU:$F97A PRG:397A 8C 01 40
bne Flow_F986 ; CPU:$F97D PRG:397D 8E 00 40
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3978-$3979.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_F978:
.byte $A0, $7F ; PRG $3978 / CPU $F978 ; CPU:$F980 PRG:3980 A0 7F
; =============================================================================
; ConfigurePulse1
; CPU address: $F97A PRG offset: $397A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
ConfigurePulse1:
sty APUPULSE1SWEEP ; CPU:$F982 PRG:3982 ??
Flow_F97D:
stx APUPULSE1CTRL ; CPU:$F984 PRG:3984 ??
rts ; CPU:$F986 PRG:3986 8E 04 40
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3981-$3982.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_F981:
.byte $A0, $7F ; PRG $3981 / CPU $F981 ; CPU:$F989 PRG:3989 A0 7F
; =============================================================================
; ConfigurePulse2
; CPU address: $F983 PRG offset: $3983
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
ConfigurePulse2:
sty APUPULSE2SWEEP ; CPU:$F98B PRG:398B ??
Flow_F986:
stx APUPULSE2CTRL ; CPU:$F98D PRG:398D ??
rts ; PRG $3989 / CPU $F989 ; CPU:$F98F PRG:398F ??
; =============================================================================
; AudioRoutine_F98A
; CPU address: $F98A PRG offset: $398A
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F98A:
sty AudioChannelControl ; CPU:$F991 PRG:3991 ??
stx SoundEffectTimer ; CPU:$F993 PRG:3993 A2 00
bne AudioRoutine_F993 ; CPU:$F995 PRG:3995 A8
; =============================================================================
; AudioRoutine_F990
; CPU address: $F990 PRG offset: $3990
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F990:
jsr ConfigurePulse1 ; CPU:$F996 PRG:3996 B9 01 F9
; =============================================================================
; AudioRoutine_F993
; CPU address: $F993 PRG offset: $3993
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F993:
ldx #$00 ; CPU:$F999 PRG:3999 F0 0B
tay ; CPU:$F99B PRG:399B 9D 02 40
lda $F901,y ; CPU:$F99E PRG:399E B9 00 F9
beq Flow_F9A6 ; CPU:$F9A1 PRG:39A1 09 08
sta APUPULSE1TIMERLO,x ; CPU:$F9A3 PRG:39A3 9D 03 40
lda $F900,y ; CPU:$F9A6 PRG:39A6 60
ora #$08 ; CPU:$F9A7 PRG:39A7 ??
sta APUPULSE1TIMERHI,x ; CPU:$F9A9 PRG:39A9 ??
Flow_F9A6:
rts ; CPU:$F9AB PRG:39AB ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $39A7-$39A9.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_F9A7:
.byte $20, $83, $F9 ; PRG $39A7 / CPU $F9A7 ; CPU:$F9AD PRG:39AD 20 83 F9
; =============================================================================
; AudioRoutine_F9AA
; CPU address: $F9AA PRG offset: $39AA
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F9AA:
ldx #$04 ; CPU:$F9B0 PRG:39B0 D0 E3
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $39AC-$39AD.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_F9AC:
.byte $D0, $E7 ; PRG $39AC / CPU $F9AC ; CPU:$F9B2 PRG:39B2 D0 E7
; =============================================================================
; AudioRoutine_F9AE
; CPU address: $F9AE PRG offset: $39AE
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F9AE:
ldx #$08 ; CPU:$F9B4 PRG:39B4 A0 1C
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $39B0-$39B1.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_F9B0:
.byte $D0, $E3 ; PRG $39B0 / CPU $F9B0 ; CPU:$F9B6 PRG:39B6 D0 E3
; =============================================================================
; AudioRoutine_F9B2
; CPU address: $F9B2 PRG offset: $39B2
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_F9B2:
sty AudioChannelControl ; CPU:$F9B8 PRG:39B8 8C 08 40
ldy #$1C ; CPU:$F9BB PRG:39BB 8D 0A 40
; =============================================================================
; ConfigureTriangleChannel
; CPU address: $F9B6 PRG offset: $39B6
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
ConfigureTriangleChannel:
stx SoundEffectTimer ; CPU:$F9BE PRG:39BE A9 08
sty APUTRIANGLECTRL ; CPU:$F9C0 PRG:39C0 8D 0B 40
sta APUTRIANGLETIMERLO ; CPU:$F9C3 PRG:39C3 A5 F0
lda #$08 ; CPU:$F9C5 PRG:39C5 18
sta APUTRIANGLETIMERHI ; CPU:$F9C6 PRG:39C6 69 C2
lda DmcOutputLevel ; CPU:$F9C8 PRG:39C8 B0 02
clc ; CPU:$F9CA PRG:39CA A9 00
adc #$C2 ; CPU:$F9CC PRG:39CC 85 F0
bcs Flow_F9CC ; CPU:$F9CE PRG:39CE 60
lda #$00 ; CPU:$F9CF PRG:39CF A9 10
Flow_F9CC:
sta DmcOutputLevel ; CPU:$F9D1 PRG:39D1 8D F8 07
rts ; PRG $39CE / CPU $F9CE ; CPU:$F9D4 PRG:39D4 A9 06
Flow_F9CF:
lda #$10 ; CPU:$F9D6 PRG:39D6 20 93 F9
sta $07F8 ; CPU:$F9D9 PRG:39D9 A2 96
lda #$06 ; CPU:$F9DB PRG:39DB A0 84
jsr AudioRoutine_F993 ; CPU:$F9DD PRG:39DD AD F8 07
Flow_F9D9:
ldx #$96 ; CPU:$F9E0 PRG:39E0 C9 0D
ldy #$84 ; CPU:$F9E2 PRG:39E2 B0 02
lda $07F8 ; CPU:$F9E4 PRG:39E4 A0 8D
cmp #$0D ; CPU:$F9E6 PRG:39E6 C9 0C
bcs Flow_F9E6 ; CPU:$F9E8 PRG:39E8 B0 04
ldy #$8D ; CPU:$F9EA PRG:39EA 4A
Flow_F9E6:
cmp #$0C ; CPU:$F9EB PRG:39EB 09 90
bcs Flow_F9EE ; CPU:$F9ED PRG:39ED AA
lsr a ; CPU:$F9EE PRG:39EE 20 7A F9
ora #$90 ; CPU:$F9F1 PRG:39F1 CE F8 07
tax ; CPU:$F9F4 PRG:39F4 D0 51
Flow_F9EE:
jsr ConfigurePulse1 ; CPU:$F9F6 PRG:39F6 20 70 F9
dec $07F8 ; CPU:$F9F9 PRG:39F9 D0 4C
bne Flow_FA47 ; CPU:$F9FB PRG:39FB A2 12
jsr AudioRoutine_F970 ; CPU:$F9FD PRG:39FD A9 1C
bne Flow_FA47 ; CPU:$F9FF PRG:39FF 20 8A F9
Flow_F9FB:
ldx #$12 ; CPU:$FA02 PRG:3A02 A9 0A
lda #$1C ; CPU:$FA04 PRG:3A04 85 F4
jsr AudioRoutine_F98A ; CPU:$FA06 PRG:3A06 A2 5A
lda #$0A ; CPU:$FA08 PRG:3A08 A0 8C
sta SoundEffectPhase ; CPU:$FA0A PRG:3A0A A5 F3
Flow_FA06:
ldx #$5A ; CPU:$FA0C PRG:3A0C C9 0F
ldy #$8C ; CPU:$FA0E PRG:3A0E B0 08
lda SoundEffectTimer ; CPU:$FA10 PRG:3A10 A0 8D
cmp #$0F ; CPU:$FA12 PRG:3A12 C9 0A
bcs Flow_FA18 ; CPU:$FA14 PRG:3A14 B0 12
ldy #$8D ; CPU:$FA16 PRG:3A16 D0 0D
cmp #$0A ; CPU:$FA18 PRG:3A18 D0 07
bcs Flow_FA28 ; CPU:$FA1A PRG:3A1A A9 18
bne Flow_FA25 ; CPU:$FA1C PRG:3A1C 20 93 F9
Flow_FA18:
bne Flow_FA21 ; CPU:$FA1F PRG:3A1F D0 07
lda #$18 ; CPU:$FA21 PRG:3A21 C6 F4
jsr AudioRoutine_F993 ; CPU:$FA23 PRG:3A23 A5 F4
bne Flow_FA28 ; CPU:$FA25 PRG:3A25 09 50
Flow_FA21:
dec SoundEffectPhase ; CPU:$FA27 PRG:3A27 AA
lda SoundEffectPhase ; CPU:$FA28 PRG:3A28 20 7A F9
Flow_FA25:
ora #$50 ; CPU:$FA2B PRG:3A2B C6 F3
tax ; CPU:$FA2D PRG:3A2D D0 07
Flow_FA28:
jsr ConfigurePulse1 ; CPU:$FA2F PRG:3A2F 20 70 F9
Flow_FA2B:
dec SoundEffectTimer ; CPU:$FA32 PRG:3A32 A9 00
bne Flow_FA36 ; CPU:$FA34 PRG:3A34 85 F1
Flow_FA2F:
jsr AudioRoutine_F970 ; CPU:$FA36 PRG:3A36 4C 7A FA
lda #$00 ; CPU:$FA39 PRG:3A39 A6 FA
sta AudioChannelControl ; CPU:$FA3B PRG:3A3B D0 3D
Flow_FA36:
jmp Flow_FA7A ; CPU:$FA3D PRG:3A3D AE F8 07
; =============================================================================
; AudioRoutine_FA39
; CPU address: $FA39 PRG offset: $3A39
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
AudioRoutine_FA39:
ldx AudioSequenceOffset ; CPU:$FA40 PRG:3A40 D0 97
bne Flow_FA7A ; CPU:$FA42 PRG:3A42 A5 FF
ldx $07F8 ; CPU:$FA44 PRG:3A44 4A
bne Flow_F9D9 ; CPU:$FA45 PRG:3A45 B0 88
lda AudioRequestFlags3 ; CPU:$FA47 PRG:3A47 A4 FF
lsr a ; CPU:$FA49 PRG:3A49 84 00
bcs Flow_F9CF ; CPU:$FA4B PRG:3A4B A5 F1
Flow_FA47:
ldy AudioRequestFlags3 ; CPU:$FA4D PRG:3A4D 4A
sty Zp00 ; CPU:$FA4E PRG:3A4E 46 FF
lda AudioChannelControl ; CPU:$FA50 PRG:3A50 4A
lsr a ; CPU:$FA51 PRG:3A51 B0 B3
lsr AudioRequestFlags3 ; CPU:$FA53 PRG:3A53 46 FF
lsr a ; CPU:$FA55 PRG:3A55 B0 A4
bcs Flow_FA06 ; CPU:$FA57 PRG:3A57 4A
lsr AudioRequestFlags3 ; CPU:$FA58 PRG:3A58 B0 2D
bcs Flow_F9FB ; CPU:$FA5A PRG:3A5A 46 FF
lsr a ; CPU:$FA5C PRG:3A5C B0 22
bcs Flow_FA87 ; CPU:$FA5E PRG:3A5E 4A
lsr AudioRequestFlags3 ; CPU:$FA5F PRG:3A5F B0 65
bcs Flow_FA80 ; CPU:$FA61 PRG:3A61 46 FF
lsr a ; CPU:$FA63 PRG:3A63 B0 56
bcs Flow_FAC6 ; CPU:$FA65 PRG:3A65 4A
lsr AudioRequestFlags3 ; CPU:$FA66 PRG:3A66 B0 35
bcs Flow_FABB ; CPU:$FA68 PRG:3A68 46 FF
lsr a ; CPU:$FA6A PRG:3A6A B0 2A
bcs Flow_FA9D ; CPU:$FA6C PRG:3A6C 4A
lsr AudioRequestFlags3 ; CPU:$FA6D PRG:3A6D B0 61
bcs Flow_FA96 ; CPU:$FA6F PRG:3A6F 46 FF
lsr a ; CPU:$FA71 PRG:3A71 B0 56
bcs Flow_FAD0 ; CPU:$FA73 PRG:3A73 4A
lsr AudioRequestFlags3 ; CPU:$FA74 PRG:3A74 B0 07
bcs Flow_FAC9 ; CPU:$FA76 PRG:3A76 46 FF
lsr a ; CPU:$FA78 PRG:3A78 B0 6B
bcs Flow_FA7D ; CPU:$FA7A PRG:3A7A 4C C1 FB
lsr AudioRequestFlags3 ; CPU:$FA7D PRG:3A7D 4C F4 FA
bcs Flow_FAE5 ; CPU:$FA80 PRG:3A80 A2 07
Flow_FA7A:
jmp Flow_FBC1 ; CPU:$FA82 PRG:3A82 A9 7F
Flow_FA7D:
jmp Flow_FAF4 ; CPU:$FA84 PRG:3A84 20 B2 F9
Flow_FA80:
ldx #$07 ; CPU:$FA87 PRG:3A87 A5 F0
lda #$7F ; CPU:$FA89 PRG:3A89 18
jsr AudioRoutine_F9B2 ; CPU:$FA8A PRG:3A8A 69 0F
Flow_FA87:
lda DmcOutputLevel ; CPU:$FA8C PRG:3A8C 85 F0
clc ; CPU:$FA8E PRG:3A8E A9 90
adc #$0F ; CPU:$FA90 PRG:3A90 8D 00 40
sta DmcOutputLevel ; CPU:$FA93 PRG:3A93 4C 2B FA
lda #$90 ; CPU:$FA96 PRG:3A96 A2 15
sta APUPULSE1CTRL ; CPU:$FA98 PRG:3A98 A9 47
jmp Flow_FA2B ; CPU:$FA9A PRG:3A9A 20 B2 F9
Flow_FA96:
ldx #$15 ; CPU:$FA9D PRG:3A9D A5 F3
lda #$47 ; CPU:$FA9F PRG:3A9F C9 10
jsr AudioRoutine_F9B2 ; CPU:$FAA1 PRG:3AA1 90 07
Flow_FA9D:
lda SoundEffectTimer ; CPU:$FAA3 PRG:3AA3 D0 E2
cmp #$10 ; CPU:$FAA5 PRG:3AA5 A9 02
bcc Flow_FAAA ; CPU:$FAA7 PRG:3AA7 20 93 F9
bne Flow_FA87 ; CPU:$FAAA PRG:3AAA A0 84
lda #$02 ; CPU:$FAAC PRG:3AAC A2 96
jsr AudioRoutine_F993 ; CPU:$FAAE PRG:3AAE A5 F3
Flow_FAAA:
ldy #$84 ; CPU:$FAB0 PRG:3AB0 C9 0C
Flow_FAAC:
ldx #$96 ; CPU:$FAB2 PRG:3AB2 B0 04
lda SoundEffectTimer ; CPU:$FAB4 PRG:3AB4 4A
cmp #$0C ; CPU:$FAB5 PRG:3AB5 09 90
bcs Flow_FAB8 ; CPU:$FAB7 PRG:3AB7 AA
lsr a ; CPU:$FAB8 PRG:3AB8 4C 28 FA
ora #$90 ; CPU:$FABB PRG:3ABB A2 05
tax ; CPU:$FABD PRG:3ABD A9 6A
Flow_FAB8:
jmp Flow_FA28 ; CPU:$FABF PRG:3ABF 84 F1
Flow_FABB:
ldx #$05 ; CPU:$FAC1 PRG:3AC1 A0 14
lda #$6A ; CPU:$FAC3 PRG:3AC3 20 B6 F9
sty AudioChannelControl ; CPU:$FAC6 PRG:3AC6 4C 2B FA
ldy #$14 ; CPU:$FAC9 PRG:3AC9 A2 22
jsr ConfigureTriangleChannel ; CPU:$FACB PRG:3ACB A9 6A
Flow_FAC6:
jmp Flow_FA2B ; CPU:$FACD PRG:3ACD 20 B2 F9
Flow_FAC9:
ldx #$22 ; CPU:$FAD0 PRG:3AD0 A5 F3
lda #$6A ; CPU:$FAD2 PRG:3AD2 C9 1B
jsr AudioRoutine_F9B2 ; CPU:$FAD4 PRG:3AD4 B0 B1
Flow_FAD0:
lda SoundEffectTimer ; CPU:$FAD6 PRG:3AD6 C9 18
cmp #$1B ; CPU:$FAD8 PRG:3AD8 90 07
bcs Flow_FA87 ; CPU:$FADA PRG:3ADA D0 DC
cmp #$18 ; CPU:$FADC PRG:3ADC A9 02
bcc Flow_FAE1 ; CPU:$FADE PRG:3ADE 20 93 F9
bne Flow_FAB8 ; CPU:$FAE1 PRG:3AE1 A0 85
lda #$02 ; CPU:$FAE3 PRG:3AE3 D0 C7
jsr AudioRoutine_F993 ; CPU:$FAE5 PRG:3AE5 A2 FF
Flow_FAE1:
ldy #$85 ; CPU:$FAE7 PRG:3AE7 A9 6A
bne Flow_FAAC ; CPU:$FAE9 PRG:3AE9 84 F1
Flow_FAE5:
ldx #$FF ; CPU:$FAEB PRG:3AEB A0 14
lda #$6A ; CPU:$FAED PRG:3AED 20 B6 F9
sty AudioChannelControl ; CPU:$FAF0 PRG:3AF0 A9 00
ldy #$14 ; CPU:$FAF2 PRG:3AF2 85 F4
jsr ConfigureTriangleChannel ; CPU:$FAF4 PRG:3AF4 A5 F3
lda #$00 ; CPU:$FAF6 PRG:3AF6 C9 F8
sta SoundEffectPhase ; CPU:$FAF8 PRG:3AF8 90 0D
Flow_FAF4:
lda SoundEffectTimer ; CPU:$FAFA PRG:3AFA D0 3D
cmp #$F8 ; CPU:$FAFC PRG:3AFC A2 B1
bcc Flow_FB07 ; CPU:$FAFE PRG:3AFE A0 9D
bne Flow_FB39 ; CPU:$FB00 PRG:3B00 A9 30
ldx #$B1 ; CPU:$FB02 PRG:3B02 20 90 F9
ldy #$9D ; CPU:$FB05 PRG:3B05 D0 2D
lda #$30 ; CPU:$FB07 PRG:3B07 46 FF
jsr AudioRoutine_F990 ; CPU:$FB09 PRG:3B09 B0 03
bne Flow_FB34 ; CPU:$FB0B PRG:3B0B 4C 2F FA
Flow_FB07:
lsr AudioRequestFlags3 ; CPU:$FB0E PRG:3B0E A5 00
bcs Flow_FB0E ; CPU:$FB10 PRG:3B10 29 80
jmp Flow_FA2F ; CPU:$FB12 PRG:3B12 D0 07
Flow_FB0E:
lda Zp00 ; CPU:$FB14 PRG:3B14 A0 9D
and #$80 ; CPU:$FB16 PRG:3B16 8C 01 40
bne Flow_FB1B ; CPU:$FB19 PRG:3B19 D0 19
ldy #$9D ; CPU:$FB1B PRG:3B1B A4 F4
sty APUPULSE1SWEEP ; CPU:$FB1D PRG:3B1D 85 F4
bne Flow_FB34 ; CPU:$FB1F PRG:3B1F 98
Flow_FB1B:
ldy SoundEffectPhase ; CPU:$FB20 PRG:3B20 45 F4
sta SoundEffectPhase ; CPU:$FB22 PRG:3B22 F0 10
tya ; CPU:$FB24 PRG:3B24 A5 F3
eor SoundEffectPhase ; CPU:$FB26 PRG:3B26 C9 A0
beq Flow_FB34 ; CPU:$FB28 PRG:3B28 B0 05
lda SoundEffectTimer ; CPU:$FB2A PRG:3B2A A9 46
cmp #$A0 ; CPU:$FB2C PRG:3B2C 20 93 F9
bcs Flow_FB2F ; CPU:$FB2F PRG:3B2F A0 A5
lda #$46 ; CPU:$FB31 PRG:3B31 8C 01 40
jsr AudioRoutine_F993 ; CPU:$FB34 PRG:3B34 A2 B1
Flow_FB2F:
ldy #$A5 ; CPU:$FB36 PRG:3B36 8E 00 40
sty APUPULSE1SWEEP ; CPU:$FB39 PRG:3B39 4C 2B FA
Flow_FB34:
ldx #$B1 ; CPU:$FB3C PRG:3B3C 84 F2
stx APUPULSE1CTRL ; CPU:$FB3E PRG:3B3E A9 18
Flow_FB39:
jmp Flow_FA2B ; CPU:$FB40 PRG:3B40 85 F5
Flow_FB3C:
sty ActiveSoundEffect ; CPU:$FB42 PRG:3B42 A2 81
lda #$18 ; CPU:$FB44 PRG:3B44 20 81 F9
sta Pulse2EffectTimer ; CPU:$FB47 PRG:3B47 A9 BD
ldx #$81 ; CPU:$FB49 PRG:3B49 D0 66
jsr $F981 ; CPU:$FB4B PRG:3B4B A5 F5
lda #$BD ; CPU:$FB4D PRG:3B4D C9 16
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3B49-$3B4A.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_FB49:
.byte $D0, $66 ; PRG $3B49 / CPU $FB49 ; CPU:$FB4F PRG:3B4F D0 66
Flow_FB4B:
lda Pulse2EffectTimer ; CPU:$FB51 PRG:3B51 A9 B2
cmp #$16 ; CPU:$FB53 PRG:3B53 D0 5C
bne Flow_FB55 ; CPU:$FB55 PRG:3B55 C9 13
Flow_FB51:
lda #$B2 ; CPU:$FB57 PRG:3B57 D0 07
bne Flow_FBB1 ; CPU:$FB59 PRG:3B59 A2 82
Flow_FB55:
cmp #$13 ; CPU:$FB5B PRG:3B5B 20 81 F9
bne Flow_FB60 ; CPU:$FB5E PRG:3B5E D0 F1
ldx #$82 ; CPU:$FB60 PRG:3B60 C9 0C
jsr $F981 ; CPU:$FB62 PRG:3B62 D0 04
bne Flow_FB51 ; CPU:$FB64 PRG:3B64 A9 E1
Flow_FB60:
cmp #$0C ; CPU:$FB66 PRG:3B66 D0 49
bne Flow_FB68 ; CPU:$FB68 PRG:3B68 C9 0A
lda #$E1 ; CPU:$FB6A PRG:3B6A D0 42
bne Flow_FBB1 ; CPU:$FB6C PRG:3B6C A2 84
Flow_FB68:
cmp #$0A ; CPU:$FB6E PRG:3B6E 20 81 F9
bne Flow_FBAE ; CPU:$FB71 PRG:3B71 A9 FD
ldx #$84 ; CPU:$FB73 PRG:3B73 D0 3C
jsr $F981 ; CPU:$FB75 PRG:3B75 84 F2
lda #$FD ; CPU:$FB77 PRG:3B77 A9 18
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3B73-$3B74.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_FB73:
.byte $D0, $3C ; PRG $3B73 / CPU $FB73 ; CPU:$FB79 PRG:3B79 D0 3C
Flow_FB75:
sty ActiveSoundEffect ; CPU:$FB7B PRG:3B7B A2 82
lda #$18 ; CPU:$FB7D PRG:3B7D 20 81 F9
sta Pulse2EffectTimer ; CPU:$FB80 PRG:3B80 A9 63
ldx #$82 ; CPU:$FB82 PRG:3B82 D0 2D
jsr $F981 ; CPU:$FB84 PRG:3B84 A5 F5
lda #$63 ; CPU:$FB86 PRG:3B86 C9 16
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3B82-$3B83.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_FB82:
.byte $D0, $2D ; PRG $3B82 / CPU $FB82 ; CPU:$FB88 PRG:3B88 D0 2D
Flow_FB84:
lda Pulse2EffectTimer ; CPU:$FB8A PRG:3B8A A9 5E
cmp #$16 ; CPU:$FB8C PRG:3B8C D0 23
bne Flow_FB8E ; CPU:$FB8E PRG:3B8E C9 10
lda #$5E ; CPU:$FB90 PRG:3B90 D0 0B
bne Flow_FBB1 ; CPU:$FB92 PRG:3B92 A2 82
Flow_FB8E:
cmp #$10 ; CPU:$FB94 PRG:3B94 A0 85
bne Flow_FB9D ; CPU:$FB96 PRG:3B96 20 83 F9
ldx #$82 ; CPU:$FB99 PRG:3B99 A9 89
ldy #$85 ; CPU:$FB9B PRG:3B9B D0 14
jsr ConfigurePulse2 ; CPU:$FB9D PRG:3B9D C9 0F
lda #$89 ; CPU:$FB9F PRG:3B9F D0 04
bne Flow_FBB1 ; CPU:$FBA1 PRG:3BA1 A2 84
Flow_FB9D:
cmp #$0F ; CPU:$FBA3 PRG:3BA3 D0 06
bne Flow_FBA5 ; CPU:$FBA5 PRG:3BA5 C9 0C
ldx #$84 ; CPU:$FBA7 PRG:3BA7 D0 05
bne Flow_FBAB ; CPU:$FBA9 PRG:3BA9 A2 82
Flow_FBA5:
cmp #$0C ; CPU:$FBAB PRG:3BAB 20 81 F9
bne Flow_FBAE ; CPU:$FBAE PRG:3BAE 4C DC FC
ldx #$82 ; CPU:$FBB1 PRG:3BB1 A0 08
Flow_FBAB:
jsr $F981 ; CPU:$FBB3 PRG:3BB3 8C 07 40
Flow_FBAE:
jmp Flow_FCDC ; CPU:$FBB6 PRG:3BB6 8D 06 40
Flow_FBB1:
ldy #$08 ; CPU:$FBB9 PRG:3BB9 D0 F3
sty APUPULSE2TIMERHI ; CPU:$FBBB PRG:3BBB 4C 3C FB
sta APUPULSE2TIMERLO ; CPU:$FBBE PRG:3BBE 4C 4B FB
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3BB9-$3BBA.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_FBB9:
.byte $D0, $F3 ; PRG $3BB9 / CPU $FBB9 ; CPU:$FBC1 PRG:3BC1 D0 F3
Flow_FBBB:
jmp Flow_FB3C ; CPU:$FBC3 PRG:3BC3 A5 F2
Flow_FBBE:
jmp Flow_FB4B ; CPU:$FBC5 PRG:3BC5 A6 FB
Flow_FBC1:
ldy AudioRequestFlags2 ; CPU:$FBC7 PRG:3BC7 D0 2D
lda ActiveSoundEffect ; CPU:$FBC9 PRG:3BC9 4A
ldx AudioStreamPosition ; CPU:$FBCA PRG:3BCA B0 F2
bne Flow_FBF6 ; CPU:$FBCC PRG:3BCC 46 FE
lsr a ; CPU:$FBCE PRG:3BCE B0 EB
bcs Flow_FBBE ; CPU:$FBD0 PRG:3BD0 4A
lsr AudioRequestFlags2 ; CPU:$FBD1 PRG:3BD1 B0 B1
bcs Flow_FBBB ; CPU:$FBD3 PRG:3BD3 46 FE
lsr a ; CPU:$FBD5 PRG:3BD5 B0 9E
bcs Flow_FB84 ; CPU:$FBD7 PRG:3BD7 4A
lsr AudioRequestFlags2 ; CPU:$FBD8 PRG:3BD8 B0 31
bcs Flow_FB75 ; CPU:$FBDA PRG:3BDA 46 FE
lsr a ; CPU:$FBDC PRG:3BDC B0 21
bcs Flow_FC0B ; CPU:$FBDE PRG:3BDE 4A
lsr AudioRequestFlags2 ; CPU:$FBDF PRG:3BDF B0 4A
bcs Flow_FBFF ; CPU:$FBE1 PRG:3BE1 46 FE
lsr a ; CPU:$FBE3 PRG:3BE3 B0 3A
bcs Flow_FC2B ; CPU:$FBE5 PRG:3BE5 4A
lsr AudioRequestFlags2 ; CPU:$FBE6 PRG:3BE6 B0 75
bcs Flow_FC1F ; CPU:$FBE8 PRG:3BE8 46 FE
lsr a ; CPU:$FBEA PRG:3BEA B0 65
bcs Flow_FC5D ; CPU:$FBEC PRG:3BEC 4A
lsr AudioRequestFlags2 ; CPU:$FBED PRG:3BED 46 FE
bcs Flow_FC51 ; CPU:$FBEF PRG:3BEF 4A
lsr a ; CPU:$FBF0 PRG:3BF0 B0 0A
lsr AudioRequestFlags2 ; CPU:$FBF2 PRG:3BF2 46 FE
lsr a ; CPU:$FBF4 PRG:3BF4 B0 03
bcs Flow_FBFC ; CPU:$FBF6 PRG:3BF6 4C E4 FC
lsr AudioRequestFlags2 ; CPU:$FBF9 PRG:3BF9 4C 9E FC
bcs Flow_FBF9 ; CPU:$FBFC PRG:3BFC 4C B4 FC
Flow_FBF6:
jmp Flow_FCE4 ; CPU:$FBFF PRG:3BFF 84 F2
Flow_FBF9:
jmp Flow_FC9E ; CPU:$FC01 PRG:3C01 A9 14
Flow_FBFC:
jmp Flow_FCB4 ; CPU:$FC03 PRG:3C03 85 F5
Flow_FBFF:
sty ActiveSoundEffect ; CPU:$FC05 PRG:3C05 A0 10
lda #$14 ; CPU:$FC07 PRG:3C07 A9 54
sta Pulse2EffectTimer ; CPU:$FC09 PRG:3C09 D0 38
ldy #$10 ; CPU:$FC0B PRG:3C0B A5 F5
lda #$54 ; CPU:$FC0D PRG:3C0D C9 13
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3C09-$3C0A.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_FC09:
.byte $D0, $38 ; PRG $3C09 / CPU $FC09 ; CPU:$FC0F PRG:3C0F D0 38
Flow_FC0B:
lda Pulse2EffectTimer ; CPU:$FC11 PRG:3C11 A9 50
cmp #$13 ; CPU:$FC13 PRG:3C13 D0 31
bne Flow_FC15 ; CPU:$FC15 PRG:3C15 C9 06
lda #$50 ; CPU:$FC17 PRG:3C17 D0 35
bne Flow_FC46 ; CPU:$FC19 PRG:3C19 A0 0C
Flow_FC15:
cmp #$06 ; CPU:$FC1B PRG:3C1B A9 6A
bne Flow_FC4E ; CPU:$FC1D PRG:3C1D D0 24
ldy #$0C ; CPU:$FC1F PRG:3C1F 84 F2
lda #$6A ; CPU:$FC21 PRG:3C21 A9 18
bne Flow_FC43 ; CPU:$FC23 PRG:3C23 85 F5
Flow_FC1F:
sty ActiveSoundEffect ; CPU:$FC25 PRG:3C25 A0 14
lda #$18 ; CPU:$FC27 PRG:3C27 A9 4B
sta Pulse2EffectTimer ; CPU:$FC29 PRG:3C29 D0 18
ldy #$14 ; CPU:$FC2B PRG:3C2B A5 F5
Flow_FC27:
lda #$4B ; CPU:$FC2D PRG:3C2D C9 17
bne Flow_FC43 ; CPU:$FC2F PRG:3C2F D0 04
Flow_FC2B:
lda Pulse2EffectTimer ; CPU:$FC31 PRG:3C31 A9 47
cmp #$17 ; CPU:$FC33 PRG:3C33 D0 11
bne Flow_FC35 ; CPU:$FC35 PRG:3C35 A0 08
lda #$47 ; CPU:$FC37 PRG:3C37 C9 10
bne Flow_FC46 ; CPU:$FC39 PRG:3C39 F0 EC
Flow_FC35:
ldy #$08 ; CPU:$FC3B PRG:3C3B A0 10
cmp #$10 ; CPU:$FC3D PRG:3C3D C9 0B
beq Flow_FC27 ; CPU:$FC3F PRG:3C3F F0 E6
ldy #$10 ; CPU:$FC41 PRG:3C41 D0 0B
cmp #$0B ; CPU:$FC43 PRG:3C43 8C 08 40
beq Flow_FC27 ; CPU:$FC46 PRG:3C46 8D 0A 40
bne Flow_FC4E ; CPU:$FC49 PRG:3C49 A2 08
Flow_FC43:
sty APUTRIANGLECTRL ; CPU:$FC4B PRG:3C4B 8E 0B 40
Flow_FC46:
sta APUTRIANGLETIMERLO ; CPU:$FC4E PRG:3C4E 4C DC FC
ldx #$08 ; CPU:$FC51 PRG:3C51 84 F2
stx APUTRIANGLETIMERHI ; CPU:$FC53 PRG:3C53 A9 14
Flow_FC4E:
jmp Flow_FCDC ; CPU:$FC55 PRG:3C55 85 F5
Flow_FC51:
sty ActiveSoundEffect ; CPU:$FC57 PRG:3C57 A0 18
lda #$14 ; CPU:$FC59 PRG:3C59 A9 50
sta Pulse2EffectTimer ; CPU:$FC5B PRG:3C5B D0 E6
ldy #$18 ; CPU:$FC5D PRG:3C5D A5 F5
lda #$50 ; CPU:$FC5F PRG:3C5F C9 13
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3C5B-$3C5C.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioTable_FC5B:
.byte $D0, $E6 ; PRG $3C5B / CPU $FC5B ; CPU:$FC61 PRG:3C61 D0 E6
Flow_FC5D:
lda Pulse2EffectTimer ; CPU:$FC63 PRG:3C63 A9 47
cmp #$13 ; CPU:$FC65 PRG:3C65 D0 DF
bne Flow_FC67 ; CPU:$FC67 PRG:3C67 C9 0D
lda #$47 ; CPU:$FC69 PRG:3C69 D0 06
bne Flow_FC46 ; CPU:$FC6B PRG:3C6B A0 08
Flow_FC67:
cmp #$0D ; CPU:$FC6D PRG:3C6D A9 4B
bne Flow_FC71 ; CPU:$FC6F PRG:3C6F D0 D2
ldy #$08 ; CPU:$FC71 PRG:3C71 C9 06
lda #$4B ; CPU:$FC73 PRG:3C73 D0 06
bne Flow_FC43 ; CPU:$FC75 PRG:3C75 A0 0E
Flow_FC71:
cmp #$06 ; CPU:$FC77 PRG:3C77 A9 59
bne Flow_FC7B ; CPU:$FC79 PRG:3C79 D0 C8
ldy #$0E ; CPU:$FC7B PRG:3C7B C9 04
lda #$59 ; CPU:$FC7D PRG:3C7D D0 04
bne Flow_FC43 ; CPU:$FC7F PRG:3C7F A9 5F
Flow_FC7B:
cmp #$04 ; CPU:$FC81 PRG:3C81 D0 C3
bne Flow_FC83 ; CPU:$FC83 PRG:3C83 C9 01
lda #$5F ; CPU:$FC85 PRG:3C85 D0 06
bne Flow_FC46 ; CPU:$FC87 PRG:3C87 A0 02
Flow_FC83:
cmp #$01 ; CPU:$FC89 PRG:3C89 A9 64
bne Flow_FC8D ; CPU:$FC8B PRG:3C8B D0 B6
ldy #$02 ; CPU:$FC8D PRG:3C8D C9 06
lda #$64 ; CPU:$FC8F PRG:3C8F 90 04
bne Flow_FC43 ; CPU:$FC91 PRG:3C91 C9 0D
Flow_FC8D:
cmp #$06 ; CPU:$FC93 PRG:3C93 B0 B9
bcc Flow_FC95 ; CPU:$FC95 PRG:3C95 A5 F0
cmp #$0D ; CPU:$FC97 PRG:3C97 18
bcs Flow_FC4E ; CPU:$FC98 PRG:3C98 69 10
Flow_FC95:
lda DmcOutputLevel ; CPU:$FC9A PRG:3C9A 85 F0
clc ; CPU:$FC9C PRG:3C9C D0 B0
adc #$10 ; CPU:$FC9E PRG:3C9E 84 F2
sta DmcOutputLevel ; CPU:$FCA0 PRG:3CA0 A9 05
bne Flow_FC4E ; CPU:$FCA2 PRG:3CA2 85 F5
Flow_FC9E:
sty ActiveSoundEffect ; CPU:$FCA4 PRG:3CA4 A2 3F
lda #$05 ; CPU:$FCA6 PRG:3CA6 EE FD 07
sta Pulse2EffectTimer ; CPU:$FCA9 PRG:3CA9 AD FD 07
ldx #$3F ; CPU:$FCAC PRG:3CAC 4A
inc $07FD ; CPU:$FCAD PRG:3CAD 90 02
lda $07FD ; CPU:$FCAF PRG:3CAF A2 50
lsr a ; CPU:$FCB1 PRG:3CB1 8E F6 07
bcc Flow_FCB1 ; CPU:$FCB4 PRG:3CB4 AD F6 07
ldx #$50 ; CPU:$FCB7 PRG:3CB7 4A
Flow_FCB1:
stx $07F6 ; CPU:$FCB8 PRG:3CB8 4A
Flow_FCB4:
lda $07F6 ; CPU:$FCB9 PRG:3CB9 4A
lsr a ; CPU:$FCBA PRG:3CBA 6D F6 07
lsr a ; CPU:$FCBD PRG:3CBD 8D F6 07
lsr a ; CPU:$FCC0 PRG:3CC0 0A
adc $07F6 ; CPU:$FCC1 PRG:3CC1 0A
sta $07F6 ; CPU:$FCC2 PRG:3CC2 8D 06 40
asl a ; CPU:$FCC5 PRG:3CC5 2A
asl a ; CPU:$FCC6 PRG:3CC6 29 03
sta APUPULSE2TIMERLO ; CPU:$FCC8 PRG:3CC8 8D 07 40
rol a ; CPU:$FCCB PRG:3CCB A0 81
and #$03 ; CPU:$FCCD PRG:3CCD A2 50
sta APUPULSE2TIMERHI ; CPU:$FCCF PRG:3CCF A5 F5
ldy #$81 ; CPU:$FCD1 PRG:3CD1 C9 04
ldx #$50 ; CPU:$FCD3 PRG:3CD3 90 04
lda Pulse2EffectTimer ; CPU:$FCD5 PRG:3CD5 18
cmp #$04 ; CPU:$FCD6 PRG:3CD6 69 4D
bcc Flow_FCD9 ; CPU:$FCD8 PRG:3CD8 AA
clc ; CPU:$FCD9 PRG:3CD9 20 83 F9
adc #$4D ; CPU:$FCDC PRG:3CDC C6 F5
tax ; CPU:$FCDE PRG:3CDE D0 04
Flow_FCD9:
jsr ConfigurePulse2 ; CPU:$FCE0 PRG:3CE0 A9 00
Flow_FCDC:
dec Pulse2EffectTimer ; CPU:$FCE2 PRG:3CE2 85 F2
bne Flow_FCE4 ; CPU:$FCE4 PRG:3CE4 A5 FD
lda #$00 ; CPU:$FCE6 PRG:3CE6 D0 05
sta ActiveSoundEffect ; CPU:$FCE8 PRG:3CE8 A5 FB
Flow_FCE4:
lda AudioRequestFlags1 ; CPU:$FCEA PRG:3CEA D0 29
bne Flow_FCED ; CPU:$FCEC PRG:3CEC 60
lda AudioStreamPosition ; CPU:$FCED PRG:3CED A0 07
bne Flow_FD15 ; CPU:$FCEF PRG:3CEF 0A
rts ; CPU:$FCF0 PRG:3CF0 B0 03
Flow_FCED:
ldy #$07 ; CPU:$FCF2 PRG:3CF2 88
Flow_FCEF:
asl a ; CPU:$FCF3 PRG:3CF3 D0 FA
bcs Flow_FCF5 ; CPU:$FCF5 PRG:3CF5 84 FC
dey ; CPU:$FCF7 PRG:3CF7 B9 FA FD
bne Flow_FCEF ; CPU:$FCFA PRG:3CFA A8
Flow_FCF5:
sty AudioEventPriority ; CPU:$FCFB PRG:3CFB A2 00
lda $FDFA,y ; CPU:$FCFD PRG:3CFD 86 FB
tay ; CPU:$FCFF PRG:3CFF B9 FA FD
ldx #$00 ; CPU:$FD02 PRG:3D02 95 F6
stx AudioStreamPosition ; CPU:$FD04 PRG:3D04 C8
Flow_FCFF:
lda $FDFA,y ; CPU:$FD05 PRG:3D05 E8
sta PitchAdjustment,x ; CPU:$FD06 PRG:3D06 E0 05
iny ; CPU:$FD08 PRG:3D08 D0 F5
inx ; CPU:$FD0A PRG:3D0A A9 01
cpx #$05 ; CPU:$FD0C PRG:3D0C 8D F0 07
bne Flow_FCFF ; CPU:$FD0F PRG:3D0F 8D F1 07
lda #$01 ; CPU:$FD12 PRG:3D12 8D F2 07
sta $07F0 ; CPU:$FD15 PRG:3D15 A5 FC
sta $07F1 ; CPU:$FD17 PRG:3D17 D0 19
sta $07F2 ; CPU:$FD19 PRG:3D19 AD FE 07
Flow_FD15:
lda AudioEventPriority ; CPU:$FD1C PRG:3D1C F0 14
bne Flow_FD32 ; CPU:$FD1E PRG:3D1E AD F0 07
lda $07FE ; CPU:$FD21 PRG:3D21 A2 90
beq Flow_FD32 ; CPU:$FD23 PRG:3D23 C9 03
lda $07F0 ; CPU:$FD25 PRG:3D25 90 08
ldx #$90 ; CPU:$FD27 PRG:3D27 A2 9D
cmp #$03 ; CPU:$FD29 PRG:3D29 29 07
bcc Flow_FD2F ; CPU:$FD2B PRG:3D2B D0 02
ldx #$9D ; CPU:$FD2D PRG:3D2D A2 9A
and #$07 ; CPU:$FD2F PRG:3D2F 8E 04 40
bne Flow_FD2F ; CPU:$FD32 PRG:3D32 CE F0 07
ldx #$9A ; CPU:$FD35 PRG:3D35 D0 36
Flow_FD2F:
stx APUPULSE2CTRL ; CPU:$FD37 PRG:3D37 A4 FB
Flow_FD32:
dec $07F0 ; CPU:$FD39 PRG:3D39 E6 FB
bne Flow_FD6D ; CPU:$FD3B PRG:3D3B B1 F7
ldy AudioStreamPosition ; CPU:$FD3D PRG:3D3D D0 05
inc AudioStreamPosition ; CPU:$FD3F PRG:3D3F 85 FB
lda (AudioSequencePtrLo),y ; CPU:$FD41 PRG:3D41 85 FA
bne Flow_FD44 ; CPU:$FD43 PRG:3D43 60
sta AudioStreamPosition ; CPU:$FD44 PRG:3D44 20 60 F9
sta AudioSequenceOffset ; CPU:$FD47 PRG:3D47 8D F0 07
rts ; CPU:$FD4A PRG:3D4A 8A
Flow_FD44:
jsr AudioRoutine_F960 ; CPU:$FD4B PRG:3D4B 29 3E
sta $07F0 ; CPU:$FD4D PRG:3D4D 20 AA F9
txa ; CPU:$FD50 PRG:3D50 8D FE 07
and #$3E ; CPU:$FD53 PRG:3D53 D0 04
jsr AudioRoutine_F9AA ; CPU:$FD55 PRG:3D55 A2 90
sta $07FE ; CPU:$FD57 PRG:3D57 D0 11
bne Flow_FD59 ; CPU:$FD59 PRG:3D59 A2 9D
ldx #$90 ; CPU:$FD5B PRG:3D5B A5 FC
bne Flow_FD6A ; CPU:$FD5D PRG:3D5D F0 0B
Flow_FD59:
ldx #$9D ; CPU:$FD5F PRG:3D5F A2 86
lda AudioEventPriority ; CPU:$FD61 PRG:3D61 AD F0 07
beq Flow_FD6A ; CPU:$FD64 PRG:3D64 C9 08
ldx #$86 ; CPU:$FD66 PRG:3D66 B0 02
lda $07F0 ; CPU:$FD68 PRG:3D68 A2 82
cmp #$08 ; CPU:$FD6A PRG:3D6A 20 81 F9
bcs Flow_FD6A ; CPU:$FD6D PRG:3D6D A4 FA
ldx #$82 ; CPU:$FD6F PRG:3D6F F0 4E
Flow_FD6A:
jsr $F981 ; CPU:$FD71 PRG:3D71 A5 FC
Flow_FD6D:
ldy AudioSequenceOffset ; CPU:$FD73 PRG:3D73 D0 0A
beq Flow_FDBF ; CPU:$FD75 PRG:3D75 AD F1 07
lda AudioEventPriority ; CPU:$FD78 PRG:3D78 C9 03
bne Flow_FD7F ; CPU:$FD7A PRG:3D7A B0 03
lda $07F1 ; CPU:$FD7C PRG:3D7C 20 70 F9
cmp #$03 ; CPU:$FD7F PRG:3D7F CE F1 07
bcs Flow_FD7F ; CPU:$FD82 PRG:3D82 D0 3B
jsr AudioRoutine_F970 ; CPU:$FD84 PRG:3D84 E6 FA
Flow_FD7F:
dec $07F1 ; CPU:$FD86 PRG:3D86 B1 F7
bne Flow_FDBF ; CPU:$FD88 PRG:3D88 10 0C
inc AudioSequenceOffset ; CPU:$FD8A PRG:3D8A 20 66 F9
lda (AudioSequencePtrLo),y ; CPU:$FD8D PRG:3D8D 8D F3 07
bpl Flow_FD96 ; CPU:$FD90 PRG:3D90 A4 FA
jsr AudioRoutine_F966 ; CPU:$FD92 PRG:3D92 E6 FA
sta $07F3 ; CPU:$FD94 PRG:3D94 B1 F7
ldy AudioSequenceOffset ; CPU:$FD96 PRG:3D96 20 93 F9
inc AudioSequenceOffset ; CPU:$FD99 PRG:3D99 D0 04
lda (AudioSequencePtrLo),y ; CPU:$FD9B PRG:3D9B A2 10
Flow_FD96:
jsr AudioRoutine_F993 ; CPU:$FD9D PRG:3D9D D0 17
bne Flow_FD9F ; CPU:$FD9F PRG:3D9F A2 5A
ldx #$10 ; CPU:$FDA1 PRG:3DA1 A5 FC
bne Flow_FDB6 ; CPU:$FDA3 PRG:3DA3 F0 11
Flow_FD9F:
ldx #$5A ; CPU:$FDA5 PRG:3DA5 A2 46
lda AudioEventPriority ; CPU:$FDA7 PRG:3DA7 AD F3 07
beq Flow_FDB6 ; CPU:$FDAA PRG:3DAA C9 08
ldx #$46 ; CPU:$FDAC PRG:3DAC B0 02
lda $07F3 ; CPU:$FDAE PRG:3DAE A2 42
cmp #$08 ; CPU:$FDB0 PRG:3DB0 A5 F9
bcs Flow_FDB0 ; CPU:$FDB2 PRG:3DB2 D0 02
ldx #$42 ; CPU:$FDB4 PRG:3DB4 A2 86
Flow_FDB0:
lda AudioSequenceIndex ; CPU:$FDB6 PRG:3DB6 20 78 F9
bne Flow_FDB6 ; CPU:$FDB9 PRG:3DB9 AD F3 07
ldx #$86 ; CPU:$FDBC PRG:3DBC 8D F1 07
Flow_FDB6:
jsr $F978 ; CPU:$FDBF PRG:3DBF A4 F9
lda $07F3 ; CPU:$FDC1 PRG:3DC1 F0 36
sta $07F1 ; CPU:$FDC3 PRG:3DC3 AD F2 07
Flow_FDBF:
ldy AudioSequenceIndex ; CPU:$FDC6 PRG:3DC6 C9 02
beq Flow_FDF9 ; CPU:$FDC8 PRG:3DC8 D0 05
lda $07F2 ; CPU:$FDCA PRG:3DCA A9 00
cmp #$02 ; CPU:$FDCC PRG:3DCC 8D 08 40
bne Flow_FDCF ; CPU:$FDCF PRG:3DCF CE F2 07
lda #$00 ; CPU:$FDD2 PRG:3DD2 D0 25
sta APUTRIANGLECTRL ; CPU:$FDD4 PRG:3DD4 E6 F9
Flow_FDCF:
dec $07F2 ; CPU:$FDD6 PRG:3DD6 B1 F7
bne Flow_FDF9 ; CPU:$FDD8 PRG:3DD8 20 60 F9
inc AudioSequenceIndex ; CPU:$FDDB PRG:3DDB 8D F2 07
lda (AudioSequencePtrLo),y ; CPU:$FDDE PRG:3DDE A0 38
jsr AudioRoutine_F960 ; CPU:$FDE0 PRG:3DE0 18
sta $07F2 ; CPU:$FDE1 PRG:3DE1 69 FF
ldy #$38 ; CPU:$FDE3 PRG:3DE3 C9 0E
clc ; CPU:$FDE5 PRG:3DE5 B0 03
adc #$FF ; CPU:$FDE7 PRG:3DE7 0A
cmp #$0E ; CPU:$FDE8 PRG:3DE8 0A
bcs Flow_FDEA ; CPU:$FDE9 PRG:3DE9 A8
asl a ; CPU:$FDEA PRG:3DEA A5 FC
asl a ; CPU:$FDEC PRG:3DEC D0 02
tay ; CPU:$FDEE PRG:3DEE A0 88
Flow_FDEA:
lda AudioEventPriority ; CPU:$FDF0 PRG:3DF0 8C 08 40
bne Flow_FDF0 ; CPU:$FDF3 PRG:3DF3 8A
ldy #$88 ; CPU:$FDF4 PRG:3DF4 29 3E
Flow_FDF0:
sty APUTRIANGLECTRL ; CPU:$FDF6 PRG:3DF6 20 AE F9
txa ; CPU:$FDF9 PRG:3DF9 60
and #$3E ; CPU:$FDFA PRG:3DFA ??
jsr AudioRoutine_F9AE ; CPU:$FDFC PRG:3DFC ??
Flow_FDF9:
rts ; CPU:$FDFE PRG:3DFE ??
; -----------------------------------------------------------------------------
; Pass-1 non-code or currently untraced region: PRG $3DFA-$3FF6.
; Preserved verbatim pending data-format refinement in Pass 3.
; -----------------------------------------------------------------------------
AudioEventSequenceData:
.byte $08, $0D, $12, $17, $17, $1C, $21, $26, $10, $25, $FE, $72, $1B, $08, $B4, $FE ; PRG $3DFA / CPU $FDFA ; CPU:$FE00 PRG:3E00 08 0D 12 17 17 1C 21 26 10 25 FE 72 1B 08 B4 FE
.byte $28, $10, $10, $2A, $FF, $28, $0C, $08, $5B, $FF, $6E, $2A, $00, $ED, $FE, $08 ; PRG $3E0A / CPU $FE0A ; CPU:$FE10 PRG:3E10 28 10 10 2A FF 28 0C 08 5B FF 6E 2A 00 ED FE 08
.byte $00, $00, $06, $FF, $11, $00, $08, $E3, $FF, $00, $00, $C6, $67, $6A, $E0, $84 ; PRG $3E1A / CPU $FE1A ; CPU:$FE20 PRG:3E20 00 00 06 FF 11 00 08 E3 FF 00 00 C6 67 6A E0 84
.byte $23, $E7, $AA, $AE, $86, $88, $8D, $84, $CC, $CE, $CC, $44, $48, $46, $48, $C6 ; PRG $3E2A / CPU $FE2A ; CPU:$FE30 PRG:3E30 23 E7 AA AE 86 88 8D 84 CC CE CC 44 48 46 48 C6
.byte $44, $6E, $6A, $6E, $87, $00, $87, $26, $20, $18, $26, $20, $18, $20, $18, $38 ; PRG $3E3A / CPU $FE3A ; CPU:$FE40 PRG:3E40 44 6E 6A 6E 87 00 87 26 20 18 26 20 18 20 18 38
.byte $20, $18, $38, $20, $3C, $38, $20, $3C, $38, $20, $3C, $38, $20, $3C, $38, $22 ; PRG $3E4A / CPU $FE4A ; CPU:$FE50 PRG:3E50 20 18 38 20 3C 38 20 3C 38 20 3C 38 20 3C 38 22
.byte $18, $3A, $22, $18, $3A, $22, $18, $3A, $22, $18, $3A, $2A, $20, $18, $2A, $20 ; PRG $3E5A / CPU $FE5A ; CPU:$FE60 PRG:3E60 18 3A 22 18 3A 22 18 3A 22 18 3A 2A 20 18 2A 20
.byte $18, $2A, $20, $18, $2A, $20, $18, $26, $20, $18, $26, $20, $18, $2A, $22, $1C ; PRG $3E6A / CPU $FE6A ; CPU:$FE70 PRG:3E70 18 2A 20 18 2A 20 18 26 20 18 26 20 18 2A 22 1C
.byte $2A, $22, $1C, $2E, $26, $20, $2E, $26, $20, $2E, $26, $34, $2E, $26, $20, $2A ; PRG $3E7A / CPU $FE7A ; CPU:$FE80 PRG:3E80 2A 22 1C 2E 26 20 2E 26 20 2E 26 34 2E 26 20 2A
.byte $22, $18, $2A, $22, $18, $26, $1C, $3C, $26, $1C, $3C, $86, $26, $98, $B8, $98 ; PRG $3E8A / CPU $FE8A ; CPU:$FE90 PRG:3E90 22 18 2A 22 18 26 1C 3C 26 1C 3C 86 26 98 B8 98
.byte $B8, $A0, $BC, $A0, $BC, $A2, $98, $A2, $98, $AA, $A0, $AA, $A0, $98, $B8, $9C ; PRG $3E9A / CPU $FE9A ; CPU:$FEA0 PRG:3EA0 B8 A0 BC A0 BC A2 98 A2 98 AA A0 AA A0 98 B8 9C
.byte $BA, $A0, $BC, $A0, $BC, $A2, $98, $A6, $9C, $99, $10, $52, $12, $8E, $8C, $4E ; PRG $3EAA / CPU $FEAA ; CPU:$FEB0 PRG:3EB0 BA A0 BC A0 BC A2 98 A6 9C 99 10 52 12 8E 8C 4E
.byte $8C, $4C, $88, $86, $88, $C6, $C4, $C4, $84, $00, $80, $0A, $81, $0C, $80, $0C ; PRG $3EBA / CPU $FEBA ; CPU:$FEC0 PRG:3EC0 8C 4C 88 86 88 C6 C4 C4 84 00 80 0A 81 0C 80 0C
.byte $82, $08, $06, $81, $2A, $82, $06, $81, $2A, $82, $2E, $2A, $26, $83, $20, $04 ; PRG $3ECA / CPU $FECA ; CPU:$FED0 PRG:3ED0 82 08 06 81 2A 82 06 81 2A 82 2E 2A 26 83 20 04
.byte $04, $04, $98, $B8, $98, $B8, $BA, $B8, $BA, $B8, $24, $66, $26, $A2, $A0, $5C ; PRG $3EDA / CPU $FEDA ; CPU:$FEE0 PRG:3EE0 04 04 98 B8 98 B8 BA B8 BA B8 24 66 26 A2 A0 5C
.byte $D8, $58, $C4, $E7, $26, $A2, $A6, $AA, $AE, $07, $00, $84, $62, $58, $7A, $58 ; PRG $3EEA / CPU $FEEA ; CPU:$FEF0 PRG:3EF0 D8 58 C4 E7 26 A2 A6 AA AE 07 00 84 62 58 7A 58
.byte $66, $62, $5C, $66, $46, $AF, $2A, $A7, $22, $A1, $1C, $19, $0C, $8E, $C5, $47 ; PRG $3EFA / CPU $FEFA ; CPU:$FF00 PRG:3F00 66 62 5C 66 46 AF 2A A7 22 A1 1C 19 0C 8E C5 47
.byte $48, $46, $46, $6C, $6C, $6A, $6A, $66, $66, $22, $22, $E2, $00, $62, $58, $58 ; PRG $3F0A / CPU $FF0A ; CPU:$FF10 PRG:3F10 48 46 46 6C 6C 6A 6A 66 66 22 22 E2 00 62 58 58
.byte $58, $62, $58, $58, $58, $60, $58, $78, $58, $66, $60, $58, $60, $22, $22, $E2 ; PRG $3F1A / CPU $FF1A ; CPU:$FF20 PRG:3F20 58 62 58 58 58 60 58 78 58 66 60 58 60 22 22 E2
.byte $C7, $2F, $C7, $0D, $CF, $13, $CF, $8C, $88, $C6, $C4, $00, $87, $2A, $84, $26 ; PRG $3F2A / CPU $FF2A ; CPU:$FF30 PRG:3F30 C7 2F C7 0D CF 13 CF 8C 88 C6 C4 00 87 2A 84 26
.byte $87, $22, $18, $38, $34, $18, $38, $34, $3C, $38, $32, $3C, $38, $32, $84, $18 ; PRG $3F3A / CPU $FF3A ; CPU:$FF40 PRG:3F40 87 22 18 38 34 18 38 34 3C 38 32 3C 38 32 84 18
.byte $87, $38, $38, $3A, $3C, $82, $18, $18, $C5, $84, $98, $B8, $A6, $9C, $D8, $98 ; PRG $3F4A / CPU $FF4A ; CPU:$FF50 PRG:3F50 87 38 38 3A 3C 82 18 18 C5 84 98 B8 A6 9C D8 98
.byte $98, $6B, $E9, $67, $E5, $2B, $E7, $25, $E1, $DD, $85, $DB, $1D, $DF, $A0, $86 ; PRG $3F5A / CPU $FF5A ; CPU:$FF60 PRG:3F60 98 6B E9 67 E5 2B E7 25 E1 DD 85 DB 1D DF A0 86
.byte $AE, $AA, $2F, $E7, $3D, $E1, $DD, $85, $FD, $19, $DD, $60, $44, $A0, $64, $44 ; PRG $3F6A / CPU $FF6A ; CPU:$FF70 PRG:3F70 AE AA 2F E7 3D E1 DD 85 FD 19 DD 60 44 A0 64 44
.byte $A4, $E7, $85, $DD, $1B, $DD, $66, $44, $66, $44, $00, $85, $44, $87, $42, $85 ; PRG $3F7A / CPU $FF7A ; CPU:$FF80 PRG:3F80 A4 E7 85 DD 1B DD 66 44 66 44 00 85 44 87 42 85
.byte $40, $87, $3E, $84, $02, $87, $16, $84, $14, $87, $12, $87, $10, $85, $04, $87 ; PRG $3F8A / CPU $FF8A ; CPU:$FF90 PRG:3F90 40 87 3E 84 02 87 16 84 14 87 12 87 10 85 04 87
.byte $04, $12, $02, $84, $40, $87, $12, $12, $40, $12, $84, $02, $86, $0C, $04, $08 ; PRG $3F9A / CPU $FF9A ; CPU:$FFA0 PRG:3FA0 04 12 02 84 40 87 12 12 40 12 84 02 86 0C 04 08
.byte $16, $84, $3E, $87, $12, $12, $16, $12, $84, $14, $87, $16, $81, $02, $04, $82 ; PRG $3FAA / CPU $FFAA ; CPU:$FFB0 PRG:3FB0 16 84 3E 87 12 12 16 12 84 14 87 16 81 02 04 82
.byte $02, $81, $3E, $04, $82, $02, $87, $16, $85, $04, $81, $2E, $04, $2E, $04, $09 ; PRG $3FBA / CPU $FFBA ; CPU:$FFC0 PRG:3FC0 02 81 3E 04 82 02 87 16 85 04 81 2E 04 2E 04 09
.byte $DD, $9C, $2B, $FB, $BA, $9C, $BA, $DC, $98, $A6, $86, $98, $A6, $9C, $A6, $88 ; PRG $3FCA / CPU $FFCA ; CPU:$FFD0 PRG:3FD0 DD 9C 2B FB BA 9C BA DC 98 A6 86 98 A6 9C A6 88
.byte $07, $D9, $86, $09, $DD, $88, $E6, $A6, $B8, $02, $12, $02, $12, $02, $12, $02 ; PRG $3FDA / CPU $FFDA ; CPU:$FFE0 PRG:3FE0 07 D9 86 09 DD 88 E6 A6 B8 02 12 02 12 02 12 02
.byte $52, $00, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ; PRG $3FEA / CPU $FFEA ; CPU:$FFF0 PRG:3FF0 52 00 FF FF FF FF FF FF FF FF FF FF FF
; =============================================================================
; RunAudioEngine
; CPU address: $FFF7 PRG offset: $3FF7
;
; Global description:
; Pass-1 discovered routine entry. Exact game-level responsibility remains to be established in the semantic naming pass.
;
; Parameters:
; Register and RAM inputs are not yet proven; inspect callers listed in reconstructed.map.
;
; Returns:
; Return convention follows the terminating RTS/RTI or tail jump in this block.
; =============================================================================
RunAudioEngine:
jmp AudioEngineUpdate ; CPU:$FFFD PRG:3FFD ??
; =============================================================================
; Hardware vectors
; =============================================================================
.word NmiHandler ; CPU:$FFFF PRG:3FFF ??
.word Reset ; CPU:$10001 PRG:4001 ??
.word Reset ; CPU:$10003 PRG:4003 ??